배경
Task #321 v6 (PR 곧 진행) 검증 중 발견.
samples/21_언어_기출_편집가능본.hwp page 1 col 1 의 마지막 문단들이 PDF 와 비교 시 다음 페이지로 잘못 넘어감.
PDF: page 1 col 1 우하단에 "2. '프로세스 마이닝' 에 대해 추론한 것으로 적절하지 않은 것은?" 문단(pi=26) 과 그 보기 ①②③ 까지 포함.
현재 우리 SVG: pi=26 부터 page 2 로 넘어가 있음.
진단 (RHWP_TYPESET_DRIFT 로그 분석)
각 문단 fmt_total 이 HWP vpos_h (문단 영역 높이) 보다 +9.5 px (= trailing_ls) 만큼 더 큼. col 1 의 15 개 문단 누적으로 +142 px 오버 advance.
| pi |
fmt_total |
vpos_h |
diff |
| 11 |
145.3 |
135.7 |
+9.5 |
| 12 |
96.9 |
87.3 |
+9.5 |
| ... |
... |
... |
+9.5 |
| 24 |
24.2 |
14.7 |
+9.5 |
원인: 문단의 마지막 줄 뒤에도 line_spacing 이 cur_h 에 항상 더해짐. HWP 는 마지막 줄 뒤 line_spacing 미적용.
영향 범위 추정
- 모든 문단의 last line 처리에 영향 → 모든 sample 의 페이지 수 변동 가능
- 6 개 golden SVG (form-002, issue-147/157/267, table-text, deterministic) 모두 회귀 가능성
- 문단 내부 line_spacing 처리는 변경하지 않으므로 same-paragraph layout 은 무영향
수정 방향 후보
- paragraph_layout 의 마지막 줄에서
y += line_height + line_spacing → y += line_height 로 조건부 변경. 단, 다음 문단 시작 위치 보정을 위해 inter-paragraph spacing (spacing_after / next.spacing_before) 검토 필요.
- typeset 의 fmt.total_height 계산에서 trailing_ls 제외.
- fits 검사 시 trailing_ls 빼고 비교 (advance 는 그대로 두되 fit 만 너그럽게).
각 후보의 회귀 비용 / 정확도 트레이드오프 측정 필요.
검증 기준
- 21_언어 page 1 col 1: pi=26 + ①②③ 가 PDF 처럼 col 1 에 fit
- 다른 sample 페이지 수 : baseline 유지 (또는 의도된 변화)
- golden SVG 6 개: pass 또는 의도된 업데이트
cargo test --lib: 992 passed 유지
참고
배경
Task #321 v6 (PR 곧 진행) 검증 중 발견.
samples/21_언어_기출_편집가능본.hwppage 1 col 1 의 마지막 문단들이 PDF 와 비교 시 다음 페이지로 잘못 넘어감.PDF: page 1 col 1 우하단에 "2. '프로세스 마이닝' 에 대해 추론한 것으로 적절하지 않은 것은?" 문단(pi=26) 과 그 보기 ①②③ 까지 포함.
현재 우리 SVG: pi=26 부터 page 2 로 넘어가 있음.
진단 (RHWP_TYPESET_DRIFT 로그 분석)
각 문단 fmt_total 이 HWP vpos_h (문단 영역 높이) 보다 +9.5 px (= trailing_ls) 만큼 더 큼. col 1 의 15 개 문단 누적으로 +142 px 오버 advance.
원인: 문단의 마지막 줄 뒤에도 line_spacing 이 cur_h 에 항상 더해짐. HWP 는 마지막 줄 뒤 line_spacing 미적용.
영향 범위 추정
수정 방향 후보
y += line_height + line_spacing→y += line_height로 조건부 변경. 단, 다음 문단 시작 위치 보정을 위해 inter-paragraph spacing (spacing_after / next.spacing_before) 검토 필요.각 후보의 회귀 비용 / 정확도 트레이드오프 측정 필요.
검증 기준
cargo test --lib: 992 passed 유지참고
mydocs/report/task_m100_321_v5_report.mdmydocs/report/task_m100_321_v6_report.mdsrc/renderer/typeset.rs:551-589(RHWP_TYPESET_DRIFTenv-gated)