증상
samples/exam_kor.hwp 섹션 2 페이지 18 (rhwp Stage 2 기준) 의 col 0 cur_h 가 HWP vpos 보다 약 100 px 앞서서 진행. 결과적으로 pi=11 (작은 paragraph) 이 col 0 에서 split 됨.
페이지 18 단 0: items=17, used=1209.1px (overflow 8px), hwp_used≈1100.0px, diff=+109.1
페이지 18 단 1: items=2, used=158.8px (pi=11 line 1 + pi=12), diff=-1014.7
PDF 비교: 한컴은 같은 콘텐츠를 더 컴팩트하게 배치 (pi=11 이 col 0 에 정상 포함).
정량 진단
RHWP_TYPESET_DRIFT=1 로 측정한 섹션 2 페이지 18 col 0 진행:
pi=1 col=0 cur_h=115.9
pi=3 col=0 cur_h=658.0 (pi=2 는 Square wrap 표 처리 — drift 출력 누락)
pi=4 col=0 cur_h=844.9 (pi=3 의 advance = 186.9 = vpos_h 와 일치)
...
pi=11 col=0 cur_h=1184.6 (avail=1201.3)
HWP 좌표:
- pi=1 first_vpos=10525 HU = 140.3 px
- pi=11 first_vpos=81349 HU = 1084.7 px
- HWP advance pi=1 → pi=11 = 944.4 px
rhwp advance = 1184.6 - 115.9 = 1068.7 px (HWP 대비 +124.3 px 과대)
추정 원인
pi=2 처리 시 cur_h 누적이 한컴 대비 과대.
pi=2 는 9 lines partial paragraph + Square wrap 3×2 표 (pi=2 ci=0 wrap=Square):
PartialParagraph pi=2 lines=0..9 vpos=19715..34419
Table pi=2 ci=0 3x2 23.0x198.8px wrap=Square
Square wrap 표는 텍스트가 옆으로 흐르므로 vertical 진행에는 영향 없음. 그러나 typeset 의 표 처리에서 cur_h 가 표 높이를 추가 누적했을 가능성.
또는 partial paragraph 내 line spacing 누적 차이 (paragraph 내부 vs 외부 ls 처리).
디버깅 데이터
# pi=2 처리 트레이스
RHWP_TYPESET_DRIFT=1 RHWP_TYPESET_DRIFT_LINES=1 rhwp export-svg samples/exam_kor.hwp -o /tmp/x 2>&1 | grep -E "pi=2 col=|TYPESET_DRIFT_LINE: pi=2"
# 페이지 18 dump
rhwp dump-pages samples/exam_kor.hwp -p 17
# pi=2 ParaShape / LineSeg
rhwp dump samples/exam_kor.hwp -s 2 -p 2
원하는 동작
- 섹션 2 페이지 18 col 0 cur_h 가 HWP vpos 와 ±50 px 이내
- pi=11 이 col 0 에서 split 되지 않음 (FullParagraph)
- exam_kor.hwp 22 → 21 페이지 (페이지 18+19 통합)
회귀 우려
- 다른 Square wrap 표 + multi-line partial paragraph 케이스
- pi=2 같은 큰 partial 처리가 영향받는 모든 다단 문서
관련
마일스톤
v1.0.0 (M100)
증상
samples/exam_kor.hwp섹션 2 페이지 18 (rhwp Stage 2 기준) 의 col 0 cur_h 가 HWP vpos 보다 약 100 px 앞서서 진행. 결과적으로 pi=11 (작은 paragraph) 이 col 0 에서 split 됨.PDF 비교: 한컴은 같은 콘텐츠를 더 컴팩트하게 배치 (pi=11 이 col 0 에 정상 포함).
정량 진단
RHWP_TYPESET_DRIFT=1로 측정한 섹션 2 페이지 18 col 0 진행:HWP 좌표:
rhwp advance = 1184.6 - 115.9 = 1068.7 px (HWP 대비 +124.3 px 과대)
추정 원인
pi=2처리 시 cur_h 누적이 한컴 대비 과대.pi=2 는 9 lines partial paragraph + Square wrap 3×2 표 (
pi=2 ci=0 wrap=Square):Square wrap 표는 텍스트가 옆으로 흐르므로 vertical 진행에는 영향 없음. 그러나 typeset 의 표 처리에서 cur_h 가 표 높이를 추가 누적했을 가능성.
또는 partial paragraph 내 line spacing 누적 차이 (paragraph 내부 vs 외부 ls 처리).
디버깅 데이터
원하는 동작
회귀 우려
관련
마일스톤
v1.0.0 (M100)