Skip to content

aift p4 right-tab 1.05 mm 잔여 마진 — TabDef.position in-run RIGHT 처리에서 본문 우측 끝 클램프 누락 #635

@planet6897

Description

@planet6897

증상

samples/aift.hwp 4페이지 목차의 모든 (페이지 표기) 라인이 PDF (한컴) 정답지 대비 1.05 mm (≈4 px) 좌측에 위치.

항목 PDF (한컴) rhwp SVG 차이
( 시작 (mm, 본문 좌측 기준) 137.47 139.02 +1.55 mm 우측
) 끝 (mm) 169.71 168.83 -0.88 mm 좌측
우측 마진 (mm) 0.11 1.16 +1.05 mm

본 결함은 Task #630 (· 포함 라인 8.67 px 이탈) 정정 후에도 잔존. Task #630 베이스라인부터 동일한 잔여 마진 — 별도 본질 영역.

원인 분석

HWP TabDef.position = 95662 HU. style_resolver.rs:643/ 2.0 처리로 47831 HU = 168.75 mm 로 변환. 본문 우측 끝 = 170 mm. 차이 1.25 mm.

aift p4 의 RIGHT 탭은 compute_char_positions (text_measurement.rs:386~) in-run 분기로 처리. tab_pos = 638 px (95662/2) 까지 right-aligned. 본문 우측 끝 (642.5 px) 까지 클램프 누락 → 4.5 px ≈ 1.18 mm 좌측 위치.

cross-run pending tab handler (paragraph_layout.rs:1402) 는 tab_type == 1 && fill_type != 0 조건에서 effective_pos = effective_margin_left + available_width 로 본문 우측 끝까지 클램프하는 로직 보유. 그러나 in-run RIGHT 탭 (단일 run 안에 \t 포함) 은 이 클램프 미적용.

검증 실험 (RIGHT 탭만 /2 제거): paren_x 변화 없음 (600~601 px 유지) — / 2.0 자체는 본질 아님. in-run RIGHT 탭의 본문 우측 끝 클램프 로직 누락이 본질.

정정 영역 후보

src/renderer/layout/text_measurement.rs::compute_char_positions:

  • has_custom_tabs 분기 (line 378~) RIGHT 탭 처리에 leader (fill_type != 0) 인 경우 본문 우측 끝 클램프 추가
  • 또는 find_next_tab_stop 의 type=1 분기에 leader 클램프 통합

영향 범위:

  • 모든 in-run RIGHT 탭 + leader fill 영역 (목차, 표 우측 정렬 등)
  • issue-147 (aift p3) / issue-267 (KTX TOC) 골든 SVG 갱신 가능성
  • 광범위 sweep 회귀 검증 필수

권위 비교

메트릭 PDF rhwp Stage 5 (Task #630) 정정 후 (Issue #631 후) 목표
aift p4 우측 마진 0.11 mm 1.16 mm ≈ 0.1 mm

메모리 정합

  • feedback_essential_fix_regression_risk.md — in-run RIGHT 탭 클램프 변경은 표 우측 정렬 / 목차 / 다른 right-tab 영역 광범위 영향
  • feedback_pdf_not_authoritative.md — PDF 200dpi 보조 ref. 한컴 2010/2020 다른 환경 비교 필요
  • feedback_rule_not_heuristic.md — "in-run RIGHT 탭 + fill 시 본문 우측 끝 클램프" 단일 룰로 적용

후속 태스크 권고

본 Issue #631 정정은 별도 task 로 진행 (Task #630 후속). 영향 범위 광범위로 5+ 단계 + 광범위 sweep 회귀 검증 + 시각 판정 필수.

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