Skip to content

task 1274: 교육 통합 미주 간격·overflow 보정#1277

Closed
jangster77 wants to merge 26 commits into
edwardkim:develfrom
jangster77:task_m100_1274
Closed

task 1274: 교육 통합 미주 간격·overflow 보정#1277
jangster77 wants to merge 26 commits into
edwardkim:develfrom
jangster77:task_m100_1274

Conversation

@jangster77

@jangster77 jangster77 commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator

문제집/문항별 개선

쪽 표기는 mydocs/working/task_m100_1274_stage18.md 이후 stage 문서와 scripts/task1274_visual_sweep.py 산출물 기준이다.

대상 위치 기존 rhwp 증상 수정 후 확인된 상태
3-09월_교육_통합_2022.hwp 18쪽 문26 큰 루트/분수 TAC 수식이 아래 텍스트와 겹쳐 문26 풀이 하단이 읽기 어려웠다. 텍스트 없는 TAC 수식 문단도 높이를 예약해 수식과 다음 줄이 분리된다. issue_1274_2022_sep_page18_question26_equation_paragraph_reserves_height로 회귀 방지한다.
3-09월_교육_통합_2024-미주사이20.hwp 10쪽 문8/문12 주변 미주 사이 20mm 문서에서 이전 수식 tail과 다음 풀이가 붙거나 하단으로 밀렸다. compact 미주 tail이 이전 line bottom보다 위로 되감기지 않도록 공통 보정해 문8/문12 흐름을 유지한다.
3-09월_교육_통합_2024-미주사이20.hwp 14쪽 문18~문21 14쪽 왼쪽 단이 과하게 밀려 문19가 오른쪽 단 상단으로 늦게 시작했다. 왼쪽 단에 문18 tail 뒤 문19가 이어지고 문20/문21 흐름이 PDF 기준 페이지 수 24쪽을 유지한다.
3-09월_교육_통합_2024-미주사이20.hwp 18쪽 문23/문24, 19쪽 문24 18쪽 오른쪽 단 하단에 문24 제목과 뒤 문단이 억지로 들어가 overflow가 났다. 문23 시작과 첫 수식까지만 18쪽에 남고, 문24는 PDF처럼 19쪽 왼쪽 단에서 시작한다.
3-09월_교육_통합_2024-미주사이20.hwp 22쪽 문28, 23쪽 문29, 24쪽 문29/문30 텍스트 없는 TAC 그림 문단의 저장 vpos가 반영되지 않아 문28 tail이 23쪽으로 밀리고 뒤 흐름까지 흔들렸다. TAC 그림 vpos rewind를 공통 처리해 문28 tail이 22쪽 오른쪽 단에 남고 23쪽은 문29로 시작한다.
3-10월_교육_통합_2022.hwp 11쪽 문20 수식 tail이 다음 텍스트와 겹쳐 이차식 ... 줄과 식이 같은 위치에 찍혔다. line-order overlap 검출을 sweep에 추가했고, 문20 tail은 pi=586 -> 587 -> 588 순서로 아래로 진행한다. issue_1274_2022_oct_page11_question20_equation_tail_stays_in_frame로 고정했다.
3-10월_교육_통합_2022.hwp 12쪽 문22 문22 제목과 첫 풀이 줄이 왼쪽 단 하단에서 overflow됐다. 문22 제목과 첫 풀이가 오른쪽 단 상단에서 함께 시작한다.
3-10월_교육_통합_2022.hwp 15쪽 문28 문28 제목과 첫 풀이 문단이 단 하단에서 갈라졌다. 문28 제목과 첫 풀이 줄이 오른쪽 단 상단으로 같이 넘어간다.
3-10월_교육_통합_2022.hwp 16쪽 문30 PDF와 같은 배치인데 overflow 후보로 오탐했다. 문30 제목과 첫 본문 줄은 왼쪽 단 하단에 남고, 오른쪽 단은 조건 (가)에서로 시작한다. frame overflow 오탐은 제거했다.
3-11월_실전_통합_2022.hwp 11쪽 오른쪽 단 그림 풀이 텍스트 없는 그림 host가 phantom text line을 만들어 큰 overflow로 기록됐다. non-TAC 그림 host는 phantom text 없이 shape 경로로 처리해 실제 그림 위치만 남긴다.
3-11월_실전_통합_2022.hwp 11쪽 iv) x>1일 때, 12쪽 다음 식 PDF처럼 11쪽 끝에 남아야 하는 partial 문단이 small bleed overflow로 잡혔다. iv) x>1일 때는 11쪽 끝에 남고 다음 식은 12쪽 첫머리에서 시작한다.
3-11월_실전_통합_2022.hwp 12쪽 좌/우단 풀이 분기 pi=571 split이 빨라 PDF보다 좌/우 단 분기가 달랐다. 왼쪽 단에 PDF와 같은 줄들이 더 남고 오른쪽 단은 (ⅲ) 문단부터 시작한다.
samples/hwpx/issue_241.hwpx 1쪽 날짜/서명/도장 텍스트 없는 InFrontOfText 도장 host가 줄 진행량을 예약하지 않아 한컴의 날짜/서명/도장 관계와 달랐다. 도장 위치는 유지하고 host 줄 진행량만 예약해 issue_241 두 테스트가 모두 통과한다.
6종 전체 전체 페이지 각 문서별 미주/수식 보정이 다른 문제집 페이지 수를 깨뜨릴 위험이 있었다. SVG/PDF/render tree 페이지 수가 각각 23/23/23, 20/20/20, 23/23/23, 24/24/24, 18/18/18, 21/21/21로 1:1 유지된다.

공통 로직 변경

  • src/renderer/layout.rs: 텍스트 없는 non-TAC 그림/도형 host를 phantom text 없이 별도 Shape 경로로 렌더하고, InFrontOfText + vert_rel_to=Para host는 한컴처럼 line advance만 예약한다. 미주 하단 late tail overflow 판정도 정리했다.
  • src/renderer/layout/paragraph_layout.rs: 빈 spacer line, 미주 가상 빈 문단, 텍스트 없는 TAC 수식 줄의 baseline 정렬과 overflow 수집 기준을 보정했다.
  • src/renderer/typeset.rs: compact 미주 단 하단 fit, 내부 vpos rewind, 큰 미주 사이 예약값, 문항 제목과 첫 풀이 줄 동반 넘김을 공통 조건으로 처리했다.
  • src/renderer/height_cursor.rs: compact 미주 tail이 이전 줄보다 위로 되감기지 않도록 하고, tall inline tail 뒤 텍스트와 equation-only tail의 하단 fit 허용치를 공통 보정했다.
  • src/main.rs: render tree bbox를 JSON으로 뽑는 보조 CLI를 추가해 sweep이 수식/텍스트 겹침을 픽셀 비교뿐 아니라 layout bbox 기준으로도 잡을 수 있게 했다.
  • scripts/task1274_visual_sweep.py: 6종 HWP/PDF를 페이지별 SVG/PNG/PDF PNG/비교 PNG/render tree JSON으로 생성하고, frame overflow, red marker drift, line band drift, equation/text overlap, line order overlap 후보를 수집한다.
  • tests/issue_1139_inline_picture_duplicate.rs: 문20, 문26, 문30, 2024 미주사이20, 2022 11월 실전 흐름을 회귀 테스트로 추가했다.

시각/자동 검증 결과

  • python3 scripts/task1274_visual_sweep.py --target all
    • 6종 전체 SVG/PDF/render tree 페이지 수 1:1 확인.
    • 최종 line_order_overlap_pages=[]로 문20 계열 수식/텍스트 역전 후보가 사라진 것을 확인.
    • 직접 수정 대상인 3-10월_교육_통합_2022.hwpframe=[], order=[]로 확인.
  • output/task1274/pr_1277_closed_body_preview.html은 닫힌 PR 본문 임시 미리보기용 산출물이며 PR에는 포함하지 않는다.
  • 로컬 작업 디렉터리의 ignored pkg/ 산출물은 건드리지 않았다. WASM은 별도 임시 fresh worktree에서 wasm-pack build --target web --release --out-dir pkg로 검증했다.

CI 검증

  • cargo fmt --all -- --check
  • cargo build --verbose
  • cargo check --target wasm32-unknown-unknown --lib
  • cargo test --features native-skia skia --lib --verbose
  • cargo test --verbose
  • cargo clippy -- -D warnings
  • wasm-pack build --target web --release --out-dir pkg fresh worktree 검증
  • cargo test --test issue_1139_inline_picture_duplicate -- --nocapture
  • python3 scripts/task1274_visual_sweep.py --target all

Closes #1274

@jangster77

Copy link
Copy Markdown
Collaborator Author

다시 open 하겠습니다. goal 로 수정한건 수동으로 시각적검증을 안하고 pr 하면 안되네요 ㅠ

@jangster77 jangster77 closed this Jun 3, 2026
jangster77 added 24 commits June 4, 2026 01:00
- 미주 textless TAC 그림/도형 문단의 vpos rewind를 height_cursor/typeset 공통 보정\n- 마지막 partial continuation 앞 미주 tail의 작은 bottom bleed 허용\n- 2024-09-between20 p22~p24 흐름과 p1175 overflow 정리\n\n검증:\n- cargo test --test issue_1139_inline_picture_duplicate -- --nocapture\n- cargo build --bin rhwp\n- python3 scripts/task1265_visual_sweep.py --target 2024-09-between20\n- python3 scripts/task1265_visual_sweep.py
- cargo test --tests의 issue_241 실패를 확인\n- upstream/devel 별도 worktree에서도 같은 단일 테스트 실패를 재현\n- Task 1274 PDF/PNG 비교 완료와 별개인 기준 브랜치 실패로 기록
- GitHub Issue edwardkim#1274 생성 후 계획서/단계문서/스크립트 파일명을 1274 기준으로 변경\n- 문서 본문, sweep 출력 경로, 회귀 테스트 함수명을 1274 기준으로 변경\n- task1274 sweep과 핵심 회귀 테스트로 번호 변경 후 동작 확인
2022-09 17쪽 문29 제목과 다음 본문이 겹치는 page-path 미주 하단 배치를 보정한다.

visual sweep에 문항 제목/다음 본문 bbox overlap 검출 지표를 추가하고 stage22/stage23 검증 기록을 갱신한다.
@edwardkim edwardkim added the enhancement New feature or request label Jun 4, 2026
@edwardkim edwardkim added this to the v1.0.0 milestone Jun 4, 2026
edwardkim added a commit that referenced this pull request Jun 4, 2026
Squash-accept PR #1277.

Validated with focused tests, wasm build, and maintainer visual check.
@edwardkim

Copy link
Copy Markdown
Owner

검토 및 로컬 통합 완료했습니다.

PR #1277 변경은 devel에 squash 방식으로 반영했습니다.

  • 반영 커밋: 37991102
  • cargo fmt --check: pass
  • cargo test --test issue_241 -- --nocapture: pass
  • cargo test --test issue_1139_inline_picture_duplicate -- --nocapture: pass
  • docker compose --env-file .env.docker run --rm wasm: pass
  • rhwp-studio 웹 캔버스 메인테이너 시각 판정: 통과

검토 중 발견된 samples/21_언어_기출_편집가능본.hwp page 1 머리말의 TAC 표 2개 오른쪽 정렬 문제는 PR 적용 전 origin/devel에서도 동일한 SVG가 생성되어 #1277 회귀가 아닌 기존 결함으로 확인했습니다. 이 항목은 별도 이슈 #1285 로 분리했습니다.

기여 감사합니다. 이 PR은 반영 완료 상태로 close 처리하겠습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants