현상
samples/exam_kor.hwp 6페이지 좌측 단 (col 0) 의 [18~21] passage 박스가 col_bottom 근처에서 하단 stroke 가 그려져 박스가 닫혀 보임. PDF 는 박스가 col 1 / 페이지 7 까지 이어지므로 col 0 하단 줄을 미렌더.
박스 구성
| pi |
h |
위치 |
text |
bf_id |
| 192 |
72.0 |
col 0 page 6 |
[앞부분의 줄거리]... |
X |
| 193 |
61.3 |
col 0 page 6 |
원수가 대경하여... |
X |
| 194 |
15.3 |
col 0 page 6 |
"어서 바삐..." |
X |
| 195 |
46.0 |
col 1 page 6 |
한데 왕비 크게 노하여... |
X (계속) |
SVG 출력
<rect x="128.50" y="1182.48" width="400.61" height="235.10" fill="none" stroke="#000000" stroke-width="0.5"/>
→ 4면 모두 stroke. col 0 의 마지막 paragraph (pi=194) 가 자체로는 FullParagraph 이라 is_partial_end = end < composed.lines.len() 이 false → bottom 그려짐.
원인
paragraph_layout.rs:2527-2528:
let is_partial_start = start_line > 0;
let is_partial_end = end < composed.lines.len();
이 플래그는 단일 paragraph 내부 split 만 검출. col 경계로 같은 bf_id 가 이어지는 케이스는 미감지.
수정 방향 후보
| 방안 |
설명 |
영향 |
| A |
merge 그룹 첫/마지막 paragraph 의 다음 paragraph (sequential) 가 같은 bf_id 면 partial 마킹 |
전역 paragraph 시퀀스 lookup 필요 |
| B |
col_area.bottom 근접 (예: 30px) 이면 partial_end 휴리스틱 |
정상 박스 false-positive 가능 |
| C |
section-wide paragraph→border_group 매핑 사전 계산 후 그룹이 컬럼/페이지 경계를 넘는지 판정 |
가장 정확하나 큰 변경 |
관련
현상
samples/exam_kor.hwp6페이지 좌측 단 (col 0) 의 [18~21] passage 박스가 col_bottom 근처에서 하단 stroke 가 그려져 박스가 닫혀 보임. PDF 는 박스가 col 1 / 페이지 7 까지 이어지므로 col 0 하단 줄을 미렌더.박스 구성
SVG 출력
→ 4면 모두 stroke. col 0 의 마지막 paragraph (pi=194) 가 자체로는 FullParagraph 이라
is_partial_end = end < composed.lines.len()이 false → bottom 그려짐.원인
paragraph_layout.rs:2527-2528:이 플래그는 단일 paragraph 내부 split 만 검출. col 경계로 같은 bf_id 가 이어지는 케이스는 미감지.
수정 방향 후보
관련