Skip to content

[layout] HWP5 계보 조판 프로파일이 줄 상자를 15px 넘는 두 글자를 받아들이고 자간을 균등 축소한다 — 같은 문서 HWPX 는 44자, HWP5 계보는 46자 (한/글 정본 44, #7416 선행축) #7422

Description

@planet6897

관측된 문제

같은 내용의 HWPX 두 본을 rhwp 가 재조판하면 한 줄에 담는 글자 수가 다릅니다. 내용·글자모양·문단모양·글꼴·칸 속성이 모두 같은데, HWP5 계보 표시가 있는 본은 줄 상자를 15px 넘는 두 글자를 더 받아들이고 자간을 균등 축소해 밀어 넣습니다.

한/글 출력은 두 글자를 받지 않습니다.

재현 — 마커 한 줄

rhwp export-hwpx 는 HWP5 에서 변환한 HWPX 에 META-INF/rhwp-hwp5-origin 마커를 넣습니다. 이 마커가 Document::layout_profile() 의 hwp5_origin_hwpx 를 켭니다.

# 1) 원본 HWP5 를 HWPX 로 변환
rhwp export-hwpx samples/issue6639/rhwp-table-cell-minimal-repro.hwp /tmp/orig.hwpx
# 2) 대상 칸 10문단의 hp:linesegarray 를 제거해 rhwp 가 직접 조판하게 한다
# 3) 그 파일에서 META-INF/rhwp-hwp5-origin 만 빼고 다시 압축한다
rhwp export-svg /tmp/orig_nocache.hwpx  -o /tmp/a   # 마커 있음
rhwp export-svg /tmp/no_marker.hwpx     -o /tmp/b   # 마커 없음
연속 줄 글자 대상 칸 줄 수 글자 전진폭
마커 있음 (HWP5 계보 프로파일) 46 24 11.0748px
마커 없음 (HWPX 프로파일) 44 25 11.40px
한/글 정본 PDF 44 25 —

기준: pdf/issue6639/issue6639-original-160-2020.pdf. 같은 문서의 한/글 저장 HWPX(issue6639-hancom-160.hwpx)에서 같은 문단의 줄 캐시만 지운 본도 44 입니다.

실측 — 받아들인 뒤 균등 축소한다

SVG 의 글자별 x 간격을 직접 재면 줄 전체가 균일합니다.

44자 줄   간격 11.4000  × 43   (자연 전진폭, 맑은 고딕 9pt 장평 95%)
46자 줄   간격 11.0748  × 45
46 × 11.40  = 524.4px   ← 자연 폭
줄 상자                = 509.44px
524.4 → 509.44 압축비   = 0.97147  = 11.0748 / 11.40

즉 폭을 다르게 잰 것이 아니라, 상자를 14.96px 넘는 두 글자를 받아들인 뒤 줄 전체를 0.97147배로 균등 축소한 것입니다. 두 렌더의 glyph scale(0.9747,1) 은 동일하므로 글꼴 축도 아닙니다.

line_break_tolerance_hwp 의 여유는 상자 폭 509.44px(38,208 HWPUNIT)에서 최대 50 HWPUNIT(0.67px)이라 두 글자(1,710 HWPUNIT)를 설명하지 못합니다.

배제한 후보 — 두 입력은 이 마커 말고 같습니다

항목 결과
hh:paraPr 원문 borderFillIDRef id 외 완전 동일(BREAK_WORD / KEEP_WORD / condense=0 / snapToGrid=0 / LEFT)
hh:charPr 원문 id·borderFillIDRef 외 완전 동일(height 900, ratio hangul 95 / latin 92, spacing 0)
글꼴 표 HANGUL·LATIN 모두 id=0 → 맑은 고딕 로 동일
대상 문단 본문 XML hp:p id / charPrIDRef 외 동일
hp:tc (칸 33개) 양쪽 모두 lineWrap 속성 없음
hh:layoutCompatibility rhwp 본을 한/글 본과 같게 치환해도 46 유지 → 배제
hh:linkinfo pageInherit 1 로 맞춰도 46 유지 → 배제
lastSavedWith.product 양쪽 모두 hancom-office-2020
META-INF/rhwp-hwp5-origin 제거하면 46 → 44

왜 지금 찾았나 — #7416 의 선행축입니다

#7416(자기 모순 저장 사다리)에서 「사다리를 버리면 정본에 맞는가」를 A/B 하다 나왔습니다. 대상 문서의 사다리를 버리면 24줄 / 46자 / 상자 15px 초과가 되어 정본(25줄 / 44자)에서 더 멀어집니다. 원인이 사다리 판별자가 아니라 이 프로파일이었습니다.

이 결함을 먼저 고치면 #7416 의 사다리 폐기가 정본과 정확히 일치합니다(44자·25줄·26 글줄, 위 표의 「마커 없음」 행).

조사 및 완료 조건

  • 코드 게이트가 아직 특정되지 않았습니다. native_hwp5_layout 은 HeightMeasurer 로 가고, hwp5_origin_hwpx 의 현재 유일한 소비처 uses_hwp3_origin_flow_spacing_before(document_core/queries/rendering.rs:766)는 HWP3 계보 전용이라 이 문서(HWP5)와 무관합니다. 줄 채움 쪽에 다른 경로가 있습니다.
  • 코퍼스 범위를 측정하지 않았습니다. samples/** 의 형식 분포는 hwp5 596 · hwpx 523 · hwp3 26 이고 native HWP5 는 전부 같은 프로파일을 탑니다. 다만 이 갈래는 저장 줄이 없어 재조판할 때만 드러나므로 실제 발현 빈도는 별도로 재야 합니다.
  • 프로파일이 상자 초과를 허용하는 것이 의도된 호환 동작인지 확인해야 합니다. 의도라면 이 문서에서 왜 한/글과 갈리는지, 아니라면 어느 조건에서 꺼야 하는지를 정합니다.
  • 수정 뒤에는 쪽수 원장·넘침/겹침 래칫·정본 대조로 A/B 합니다. 상자 초과를 막는 변경은 줄 수를 늘리므로 쪽수에 영향이 갈 수 있습니다.

비범위

  • #7407 의 A2a(#7410)·A2b(#7414)는 줄 상자와 글자 폭 축이며 이 이슈와 별개입니다. 두 경로가 같은 상자 509.44px 를 쓰는 것은 위 실측으로 확인했습니다.
  • #7416 의 사다리 유효성 판별은 이 이슈가 해결된 뒤 재판정합니다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghwp5현대 .hwp(HWP5/OLE) 포맷 처리: 파싱, IR 변환, 컨트롤·표·그림 속성 해석, 호환성 개선hwpxHWPX 포맷 처리: 파싱, 직렬화, roundtrip, XML/ZIP 패키지 보존, 호환성 개선layout문서 레이아웃/페이지네이션: 표·그림 배치, float/anchor, 줄·행 높이, 겹침·클리핑tabletable rendering and edit

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions