Skip to content

typeset/layout drift 통합 — 단일 advance 모델로 정합 (Task #331 재시도 기반) #332

@planet6897

Description

@planet6897

배경

Task #331 (문단 trailing line_spacing 누적 drift) 시도가 layout 의 clamp pile 버그를 노출시켜 글자 겹침 회귀 발생 → revert (commit 078717f).

상세 분석: mydocs/troubleshootings/typeset_layout_drift_analysis.md

근본 문제

typeset 과 layout 이 서로 다른 advance 모델을 사용:

시스템 모델 출처
typeset 페이지 분배 total_height 또는 height_for_fit ComposedParagraph
layout 그리기 per-line lh + ls 누적 ComposedParagraph + vpos correction
vpos correction HWP 원본 vpos (with trail_ls) HWP 파일
body header (표/Shape) 표 매니저 별도 측정 HeightMeasurer

각 단계가 미세하게 다르게 누적해 ~60 px drift → typeset 은 fit 판단, layout 에서는 클램프 piling.

Task #331 의 원래 의도

samples/21_언어_기출_편집가능본.hwp page 1 col 1 의 pi=26 (2. '프로세스 마이닝'에 대해 추론한 것...) + 보기 ①②③ 가 PDF 와 달리 page 2 로 밀림. typeset 의 cur_h 가 매 문단 +9.5 px (trailing_ls) 만큼 over-advance 누적이 원인.

이 의도는 sub-task 5 완료 시 자연 해결.

Sub-task 분해

  1. typeset/layout drift 통합 — 단일 advance 모델로 정합 (Task #331 재시도 기반) #332-1: typeset advance 를 height_for_fit 기반으로 변경 (Task 문단 trailing line_spacing 누적 drift — col 1+ 의 본문이 HWP 보다 일찍 다음 페이지로 넘어감 #331 의 1단계 재적용)
  2. typeset/layout drift 통합 — 단일 advance 모델로 정합 (Task #331 재시도 기반) #332-2: layout per-paragraph advance 를 height_for_fit 와 정합 (Task 문단 trailing line_spacing 누적 drift — col 1+ 의 본문이 HWP 보다 일찍 다음 페이지로 넘어감 #331 의 2단계 재적용)
  3. typeset/layout drift 통합 — 단일 advance 모델로 정합 (Task #331 재시도 기반) #332-3: vpos correction 의 vpos_end 에서 trail_ls 제외 + 양방향 보정 (collapse 회귀 방지 검증 포함)
  4. typeset/layout drift 통합 — 단일 advance 모델로 정합 (Task #331 재시도 기반) #332-4: clamp pile 버그 수정 — overflow 시 piling 대신 typeset 에 signal back 또는 stop drawing
  5. typeset/layout drift 통합 — 단일 advance 모델로 정합 (Task #331 재시도 기반) #332-5: header (표/Shape) 영역의 측정 통합 — 표 매니저와 typeset 동기화

각 sub-task 별 회귀 테스트 (golden SVG, lib, 수동 샘플 검증) 후 적용.

검증 기준 (최종)

  • ✅ 21_언어 page 1 col 1 에 pi=26 + 보기 ①②③ fit (PDF 일치)
  • ✅ pi=10 partial 글자 겹침 없음
  • cargo test --lib 992 passed 유지
  • ✅ Golden SVG 6 개 통과 (또는 의도된 baseline 갱신)
  • ✅ 다른 샘플 (form-002, multi-table, tac-case 등) 회귀 없음

참고

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