증상
samples/exam_kor.hwp 섹션 1 페이지 14 (rhwp Stage 2 기준) 의 col 0 이 본문 높이를 초과하고 col 1 은 거의 비어있음.
페이지 14 단 0: items=25, used=1225.8px (본문 1211.3 초과 14px)
페이지 14 단 1: items=2, used=64.3px (pi=48, pi=49 만)
hwp_used≈1189.0px, diff=-1124.7px
PDF 비교: 한컴은 page 14 양쪽 단을 모두 채워 1 페이지에 화법과 작문 38~42 번 콘텐츠를 담음. rhwp 는 같은 콘텐츠가 page 14 + page 15 의 2 페이지에 걸쳐 출력.
정황
페이지 14 col 0 에는 Square wrap 표 4 개가 포함됨:
- pi=33, pi=37, pi=40, pi=47 — 모두
wrap=Square 3×2 작은 표
각 paragraph 가 line 단위로 처리되며 옆에 작은 표가 wrap. Square wrap 시 typeset 의 cur_h 누적이 표 높이만큼 정상 진행되는지 검토 필요.
추정 원인
paginate_text_lines (src/renderer/pagination/engine.rs:702-711) 의 표 직후 trailing line_spacing 제외 로직:
let overflow_threshold = if prev_is_table {
let trailing_ls = mp.line_spacings.get(end_line.saturating_sub(1)).copied().unwrap_or(0.0);
cumulative - trailing_ls // <- trailing 제외
} else {
cumulative
};
prev_is_table 분기에서 trailing 을 빼고 fit 검사 → col 0 over-fill 통과 → 다음 paragraph 가 col 1 시작 → col 1 에 대한 cur_h 가 부정확하게 시작 → pi=50 의 [단나누기] 까지 만나기 전에 col 1 가 거의 비어있는 상태로 페이지 종료.
디버깅 데이터
# 페이지 14 컬럼 사용량
rhwp dump-pages samples/exam_kor.hwp -p 13
# 표 직후 typeset cur_h 진행 확인
RHWP_TYPESET_DRIFT=1 rhwp export-svg samples/exam_kor.hwp -o /tmp/x 2>&1 | grep "pi=4[0-9] col="
원하는 동작
- 페이지 14 col 0 used ≤ 본문 높이 1211.3 px
- 페이지 14 col 1 used ≈ 1189 px (HWP 와 동일 수준)
- exam_kor.hwp 22 → 21 페이지 (페이지 14 + 15 통합)
회귀 우려
- 다른 Square wrap 표 사용 문서 (특히 hwpspec.hwp 의 표 + 텍스트 혼합)
- 단단 + 표 직후 paragraph fit 케이스
관련
마일스톤
v1.0.0 (M100)
증상
samples/exam_kor.hwp섹션 1 페이지 14 (rhwp Stage 2 기준) 의 col 0 이 본문 높이를 초과하고 col 1 은 거의 비어있음.PDF 비교: 한컴은 page 14 양쪽 단을 모두 채워 1 페이지에 화법과 작문 38~42 번 콘텐츠를 담음. rhwp 는 같은 콘텐츠가 page 14 + page 15 의 2 페이지에 걸쳐 출력.
정황
페이지 14 col 0 에는 Square wrap 표 4 개가 포함됨:
wrap=Square3×2 작은 표각 paragraph 가 line 단위로 처리되며 옆에 작은 표가 wrap. Square wrap 시 typeset 의 cur_h 누적이 표 높이만큼 정상 진행되는지 검토 필요.
추정 원인
paginate_text_lines(src/renderer/pagination/engine.rs:702-711) 의 표 직후 trailing line_spacing 제외 로직:prev_is_table 분기에서 trailing 을 빼고 fit 검사 → col 0 over-fill 통과 → 다음 paragraph 가 col 1 시작 → col 1 에 대한 cur_h 가 부정확하게 시작 → pi=50 의 [단나누기] 까지 만나기 전에 col 1 가 거의 비어있는 상태로 페이지 종료.
디버깅 데이터
원하는 동작
회귀 우려
관련
마일스톤
v1.0.0 (M100)