Skip to content

문단 trailing line_spacing 누적 drift — col 1+ 의 본문이 HWP 보다 일찍 다음 페이지로 넘어감 #331

@planet6897

Description

@planet6897

배경

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 은 무영향

수정 방향 후보

  1. paragraph_layout 의 마지막 줄에서 y += line_height + line_spacingy += line_height 로 조건부 변경. 단, 다음 문단 시작 위치 보정을 위해 inter-paragraph spacing (spacing_after / next.spacing_before) 검토 필요.
  2. typeset 의 fmt.total_height 계산에서 trailing_ls 제외.
  3. 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 유지

참고

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions