Skip to content

HWP3 wrap zone LineSeg cs/sw 누락 — pi=75 첫 N 줄이 그림 좌측 겹침 (hwp3-sample5.hwp page 4) #604

@jangster77

Description

@jangster77

결함 본질

`hwp3-sample5.hwp` page 4 (HWP3 native): pi=74 그림 (User level programs/Kernel/Hardware 다이어그램, 126.4×94.5mm, Square wrap, tac=false) 의 우측에 wrap text (pi=75, "커널의 가장 밑바탕은...") 가 정상 배치되지 않고 그림 좌측 + 그림 위 + 그림 아래 에 산재. 한컴뷰어 와 시각 차이.

한컴뷰어 vs rhwp 비교

영역 한컴뷰어 (정답) rhwp (결함)
pi=74 그림 위치 body 좌측 body 좌측 ✓
pi=75 텍스트 위치 그림 우측 wrap zone (단락 단위 흐름) 그림 좌측+위+아래 산재, 그림과 겹침

데이터 검증 (`rhwp dump`)

```
--- 문단 0.74 --- cc=1, text_len=1, controls=1 [쪽나누기]
텍스트: ""
ls[0]: ts=0, vpos=0, lh=1440, th=900, bl=765, ls=0, cs=35460, sw=15564
[0] 그림: bin_id=1, common=35840×26788 (126.4×94.5mm), tac=false
위치: 가로=용지 오프셋=13.7mm, 세로=용지 오프셋=20.2mm

--- 문단 0.75 --- cc=415, text_len=415, controls=0
텍스트: "커널의 가장 밑바탕은 갖가지 종류의 하드웨어..."
ls[0]: ts=0, vpos=0, lh=1440, ..., cs=0, sw=0 ← ❌ wrap zone 미설정
ls[1]: ts=17, vpos=0, lh=1440, ..., cs=0, sw=0 ← ❌
ls[2]: ts=33, vpos=0, lh=1440, ..., cs=0, sw=0 ← ❌
ls[3]: ts=50, vpos=0, lh=1440, ..., cs=35460, sw=15564 ← ✓
ls[4~]: cs=35460, sw=15564 ← ✓
```

원인 추정

`src/parser/hwp3/mod.rs:1399-1407` (PR #589 보완6 머지 후) 의 `current_zone` 추적 로직:

```rust
let line_cs_sw = current_zone.and_then(|(cs, sw, pgy_start, pgy_end)| {
if pic_wrap_zone.is_some() || (linfo.pgy >= pgy_start && linfo.pgy < pgy_end) {
Some((cs, sw))
} else {
None
}
});
```

pi=75 의 첫 3 줄 `linfo.pgy` 값이 pi=74 그림의 wrap zone pgy 범위 (`pgy_start..pgy_end`) 으로 판정되어 cs/sw=0 설정. 4번째 줄부터 pgy 가 wrap zone 안으로 진입하여 cs/sw 적용.

가능한 본질:

  1. HWP3 그림의 wrap zone pgy 범위 계산이 부정확 (`pic_wrap_zone` 의 pgy_start/pgy_end 산출)
  2. HWP3 LineSeg의 `pgy` 인코딩 의미 해석 오류
  3. `pic_wrap_zone.is_some()` 가드가 anchor 문단 (pi=74) 에만 적용되고 wrap text 문단 (pi=75) 은 line-level pgy 비교에 의존하는데, pi=74 와 pi=75 가 별개 문단이므로 pi=75 의 첫 줄 pgy 가 wrap zone 시작점보다 작을 가능성

영향 범위

  • `samples/hwp3-sample5.hwp` page 4 (확인됨)
  • 동일 패턴 (HWP3 Square wrap 그림 + 별도 wrap text 문단) 의 다른 페이지/파일 추정 영향
  • `hwp3-sample5.hwp` page 8/16/22/27 등 (재검증 필요)

관련 PR / Task

분석 자료 (본 환경 jangster77 fork)

  • `/tmp/hwp5_wrap_precomputed_analysis.md` — HWP5/HWPX wrap_precomputed 미적용 분석
  • `/tmp/document_ir_wrap_zone_standard_review.md` — IR 표준 부재 본질
  • `/tmp/document_ir_parser_relationship_analysis.md` — IR ↔ 각 파서 관계 16KB 분석

우선순위 / milestone

milestone: v1.0.0
priority: 시각 결함 (한컴뷰어 정합성 위배)

정정 방향 후보

본 분석은 정정 task 등록 후 본격적 옵션 비교 예정.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions