배경
PR #323 (Task #321) 검토 중 회귀 발견:
- 21_언어_기출_편집가능본.hwp page 1 의 우측단(col 1) 첫 줄 "기법을 적용하여 …" 가 4×5 표(상단) 와 수직 겹침 위치에서 시작
- 정상은 표 아래 "이때 기존의 …" 가 첫 줄
분석 (작업지시자 제공)
| 브랜치 |
단 1 used |
hwp_used |
diff |
단 1 시작 |
| devel |
1223.1 |
38.9 |
+1184.3 |
body 하단 시작 (≈1184px reserve) |
| PR #323 |
1174.7 |
1213.1 |
-38.4 |
body 상단 시작 (reserve=0) |
원인
21_언어 4×5 표:
[common] treat_as_char=false, wrap=위아래, vert=용지(9872=34.8mm), horz=용지
vert_rel_to=Paper, vertical_offset=131px, height=183px → shape_bottom=314px
body_top = 209.8px → shape 가 body 와 수직 겹침
- v3 (commit
3932b83) 가 Paper-anchored 도형을 col 1+ reserve 에서 일률적으로 제외 → 본 케이스에서 reserve=0 되어 회귀
v3 의 가정 "Paper 기준 = 머리말 영역" 은 본 표에 부적합. body 와 겹치는 Paper 도형도 col 1 reserve 대상.
수정 방향 (Option A)
compute_body_wide_top_reserve_for_para (src/renderer/typeset.rs) 와 calculate_body_wide_shape_reserved (src/renderer/layout/shape_layout.rs) 양쪽:
if matches!(common.vert_rel_to, VertRelTo::Paper) {
let shape_top = hwpunit_to_px(common.vertical_offset as i32, dpi);
let shape_bottom = shape_top + hwpunit_to_px(common.height as i32, dpi);
let body_top = layout.body_area.y; // shape_layout 측은 body_area.y
if shape_bottom <= body_top {
continue; // 본문과 겹치지 않을 때만 제외
}
}
검증 기준
- 21_언어 1페이지 col 1 hwp_used → ≈38.9 부근 회복
- 4x5 표 아래에서 col 1 시작
- exam_math/kor/eng 회귀 없음
관련
배경
PR #323 (Task #321) 검토 중 회귀 발견:
분석 (작업지시자 제공)
원인
21_언어 4×5 표:
vert_rel_to=Paper,vertical_offset=131px,height=183px→shape_bottom=314pxbody_top = 209.8px→ shape 가 body 와 수직 겹침3932b83) 가 Paper-anchored 도형을 col 1+ reserve 에서 일률적으로 제외 → 본 케이스에서 reserve=0 되어 회귀v3 의 가정 "Paper 기준 = 머리말 영역" 은 본 표에 부적합. body 와 겹치는 Paper 도형도 col 1 reserve 대상.
수정 방향 (Option A)
compute_body_wide_top_reserve_for_para(src/renderer/typeset.rs) 와calculate_body_wide_shape_reserved(src/renderer/layout/shape_layout.rs) 양쪽:검증 기준
관련
3932b83(5ee912e 로 revert 됨, 본 fix 으로 정밀화 재적용)