Skip to content

TypesetEngine을 main pagination으로 전환 (Paginator 대체) #313

@planet6897

Description

@planet6897

상위 Epic: #309
선행: #310 (분석 도구), #311 (vpos-reset 가설 부정), #312 (TypesetEngine 발견)

배경

#312 조사 도중 코드베이스에 이미 존재하는 `TypesetEngine` 이 검증 모드로 동작 중이며, 4샘플 모두에서 Paginator 보다 정확한 페이지 수를 산출함을 발견.

샘플 Paginator TypesetEngine PDF 평가
21_언어 19 15 15 ✅ TypesetEngine = PDF 정확 일치
exam_math 20 20 20 ✅ 동일
exam_kor 25 24 ? typeset 1쪽 적음
exam_eng 11 9 ? typeset 2쪽 적음

검증 출처: `dump-pages` stderr `TYPESET_VERIFY` 메시지 (debug 빌드 한정)

코드 현황

  • `src/renderer/typeset.rs` — 단일 패스 조판 엔진. format() → fits() → place/split 흐름
  • `src/document_core/queries/rendering.rs:837~` — Paginator 결과와 병렬 검증 (페이지 수 차이 시 stderr 경고)
  • 실제 렌더링은 Paginator 결과 사용. TypesetEngine 결과는 검증용으로만 폐기

작업 범위

  1. 호환성 검토: TypesetEngine 의 `PaginationResult` 출력이 Paginator API 와 동일 형식인지 확인
  2. 진입점 전환: `DocumentCore::paginate`에서 Paginator → TypesetEngine 으로 변경
  3. 회귀 검증:
    • `cargo test` 992 passed 유지
    • 4샘플 페이지 수: 21_언어=15, exam_math=20, exam_kor=24, exam_eng=9
    • SVG 시각 회귀 (rhwp-studio E2E 또는 export-svg 비교)
  4. 부속물 정리:
  5. 검증 코드 제거: TYPESET_VERIFY 분기 정리

검증 매트릭스 (목표)

모드 21_언어 exam_math exam_kor exam_eng
기본 15쪽 20쪽 24쪽 9쪽
PDF 15쪽 20쪽 ? ?

비범위

  • TypesetEngine 자체 알고리즘 변경
  • 새 페이지네이션 엔진 작성

위험 / 대응

위험 대응
TypesetEngine API 가 Paginator 대체 가능한 형식 미지원 어댑터 레이어로 출력 형식 변환
TypesetEngine이 처리 못하는 케이스 (각주/머리말/꼬리말 등) 잔존 케이스별 추가 구현, fallback to Paginator 옵션
시각 회귀 발생 rhwp-studio E2E + 4샘플 SVG diff 검증

완료 조건

참고

  • `mydocs/report/task_m100_312_report.md`
  • `mydocs/tech/line_seg_vpos_analysis.md`
  • `src/renderer/typeset.rs` (전체)

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