개요
`samples/hwp3-sample16-hwp5.hwp` 를 rhwp-studio 에서 열 때:
자동 보정의 +5 페이지는 본 task #998 의 fix path 우회 때문.
동작 차이
| 단계 |
code path |
spacing_before |
페이지 수 |
| 그대로 보기 |
composer.compose_lines fallback (line_segs.is_empty()) |
0 (PR #999 보정) |
64 ✓ |
| 자동 보정 |
`reflow_line_segs` → line_segs 채움 |
2264 HU (raw, 보정 미적용) |
69 |
Root cause
`reflow_line_segs` (src/renderer/composer/line_breaking.rs:902\) 가 paragraph 의 비어있던 line_segs 를 채워줌 (sample16 의 59 paragraph → 163건 line_seg 생성).
이후 composer 호출 시:
재현
```bash
그대로 보기 (composer fallback): 64 페이지
./target/release/rhwp export-svg samples/hwp3-sample16-hwp5.hwp -o /tmp/h5/
ls /tmp/h5/*.svg | wc -l # 64
rhwp-studio 에서 자동 보정 클릭 후: 69 페이지 (시각 확인)
또는 reflow_line_segs 호출 후 export 시: 69 페이지
```
수정 방향 후보
| 후보 |
설명 |
위치 |
Risk |
| I1 |
typeset 의 spacing_before=0 보정을 `line_segs.is_empty()` 조건 외에 다른 마커로 발동 (예: reflow 시 표시) |
typeset.rs |
중 |
| I2 |
reflow_line_segs 가 line_segs 채울 때 spacing_before 도 같이 보정 (paragraph 데이터 자체 수정) |
composer/line_breaking.rs |
중 |
| I3 |
typeset 의 spacing_before 보정 조건 완화 (예: 특정 ParaShape pattern 감지) |
typeset.rs |
큼 |
scope
- 1차 검증: `samples/hwp3-sample16-hwp5.hwp` 의 자동 보정 후 페이지 수 (목표: 64)
- 영향 모듈: `src/renderer/typeset.rs` 또는 `src/renderer/composer/line_breaking.rs`
- 회귀 검증: 240 sample + Editor 기능
관련
개요
`samples/hwp3-sample16-hwp5.hwp` 를 rhwp-studio 에서 열 때:
자동 보정의 +5 페이지는 본 task #998 의 fix path 우회 때문.
동작 차이
Root cause
`reflow_line_segs` (
src/renderer/composer/line_breaking.rs:902\) 가 paragraph 의 비어있던 line_segs 를 채워줌 (sample16 의 59 paragraph → 163건 line_seg 생성).이후 composer 호출 시:
재현
```bash
그대로 보기 (composer fallback): 64 페이지
./target/release/rhwp export-svg samples/hwp3-sample16-hwp5.hwp -o /tmp/h5/
ls /tmp/h5/*.svg | wc -l # 64
rhwp-studio 에서 자동 보정 클릭 후: 69 페이지 (시각 확인)
또는 reflow_line_segs 호출 후 export 시: 69 페이지
```
수정 방향 후보
scope
관련