Skip to content

Task #724: hwp3-sample5-hwp5.hwp paragraph 441 wrap zone + HWP3 파서 IR 정합 (closes #724)#732

Closed
jangster77 wants to merge 8 commits into
edwardkim:develfrom
jangster77:local/task724
Closed

Task #724: hwp3-sample5-hwp5.hwp paragraph 441 wrap zone + HWP3 파서 IR 정합 (closes #724)#732
jangster77 wants to merge 8 commits into
edwardkim:develfrom
jangster77:local/task724

Conversation

@jangster77

Copy link
Copy Markdown
Collaborator

⚠️ 의존성

본 PR 은 PR #723 (Task #722) 머지 후 적용 요청합니다. 본 PR 은 PR #723 위 분기되어 있으며, PR #723 머지 시 자동으로 base 갱신되어 본 task #724 의 commit (a8b8eff) 만 남습니다.

요약

hwp3-sample5-hwp5.hwp (HWP3→HWP5 한컴 변환본) paragraph 441 wrap zone 매칭 실패 + 본 환경 HWP3 파서의 sw=0 인코딩 결함 (한컴 HWP5 변환본 IR 정합 sw=51024 위반) 본질 정정.

본질

작업지시자 핵심 지적: "HWP3 파서가 잘못해석해서 IR 로 잘못 전달, composer.rs 에서 처리하면 너무 예외 — HWP3 파서 ↔ Document IR 표준 정합 영역 본질"

본 환경 HWP3 파서가 wrap_zone 영역 끝 / 페이지 break 후 paragraph 의 LINE_SEG.sw 를 0 으로 인코딩. 한컴 HWP5 변환본 IR 정합은 sw=51024 (col_area 전체 폭). 본 환경 composer/layout 의 sw=0 fallback 결함으로 좁은 폭 분산 layout 발생.

CLAUDE.md "HWP3 파서 규칙" 정합 — composer/layout 정정 영역 회피, HWP3 파서 영역 정합화로 본질 도달.

정정 영역

파일 변경
src/renderer/typeset.rs (1) HWP5 변환본 anchor host cs=0 caption-style 매칭 가드 (anchor_image_match image expected_cs 정확 일치) (2) Task #321 vpos-reset 가드의 wrap_around 강제 종료 (anchor cs=0 한정)
src/parser/hwp3/mod.rs (1) 빈 paragraph + page break flag 가드 2 곳 (column_type=Normal + force_vpos_reset) (2) wrap_zone 영역 끝 sw=col_area_width 정합화 (3) wrap_zone 비활성 cs=0/sw=0 정합화

Case 가드 정합

typeset.rs:

  • anchor_image_match (anchor cs=0 한정): expected_cs = (image_x_offset + width + 2*margin) - body_left + tolerance 200 HU + para_cs+sw <= body_w
  • vpos-reset wrap_around 강제 종료 (anchor cs=0 한정)

parser/hwp3/mod.rs:

  • 빈 paragraph (text_len=0 + controls=0) + page break flag → column_type=Normal + force_vpos_reset (HWP5 변환본 IR 정합 paragraph 171 column_type=Normal)
  • wrap_zone 영역 끝 sw=column_width_hu (본 환경 sw=0 인코딩 결함 정정)
  • wrap_zone 비활성 cs=0/sw=0 → sw=column_width_hu (페이지 break 후 paragraph 정합)

IR 정합 검증 (HWP3 native vs HWP5 변환본)

paragraph 본 환경 정정 전 본 환경 정정 후 HWP5 변환본 정합
171 column_type Page Normal Normal ✓
189 ls[3~6] sw=0 sw=51024 sw=51024 ✓
191 ls[0] sw=0 sw=51024 sw=51024 ✓
435 ls[0~2] vpos 221760 (절대) 1440 (페이지 안) 1440 ✓
443 ls[2~6] sw=0 sw=51024 sw=51024 ✓

시각 판정 (PDF 권위 자료 정합)

검증

  • cargo test --lib --release: 1166 passed (회귀 0)
  • cargo clippy --release: 신규 경고 0
  • 광범위 sweep (209 fixture): 페이지 수 차이 0
  • 메인테이너 시각 판정: ★ 통과 (사용자 직접 시각 검증 완료)

Test plan

🤖 Generated with Claude Code

jangster77 and others added 6 commits May 9, 2026 12:01
…loses edwardkim#722)

페이지 8/27/48 의 wrap=Square 그림 paragraph 한컴 PDF 권위 자료 정합 회복.

본질 정정 영역:
- typeset.rs: anchor 다음 paragraph register + anchor host self register
  (image margin_right 추출, LINE_SEG 갯수 + caption_room 가드)
- pagination.rs: WrapAnchorRef.anchor_image_margin_right 필드 추가
- paragraph_layout.rs: wrap_anchor 처리 cs/sw 보정 (inter-image-text gap 3mm)

3 paragraph 정합:
- 페이지 8 paragraph 175 (LINE_SEG 2): image 우측 wrap zone + gap 3mm
- 페이지 27 paragraph 779 (LINE_SEG 1, caption_room>line_height): image 위 caption
- 페이지 48 paragraph 1394 (LINE_SEG 1, caption_room≤line_height): image 우측 wrap zone

검증: 1165 lib + clippy clean + 광범위 sweep 209 fixture DIFF 0 + rsvg-convert PNG
시각 판정 PDF 권위 정합 ★ 통과.

HWP5 변환본 결함 (hwp3-sample5-hwp5.hwp paragraph 441) 은 별도 issue 분리.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…+ HWP3 파서 IR 정합 (closes edwardkim#724)

PR edwardkim#723 (Task edwardkim#722) 후속. HWP5 변환본 paragraph 441 wrap zone 매칭 실패 +
HWP3 파서 sw=0 인코딩 결함 (한컴 HWP5 변환본 IR 정합 sw=51024 위반).

본질 정정:
- typeset.rs: anchor host cs=0 caption-style 매칭 가드 (anchor_image_match)
  + Task edwardkim#321 vpos-reset 가드의 wrap_around 강제 종료 (anchor cs=0 한정)
- parser/hwp3/mod.rs: 빈 paragraph + page break flag 가드 (column_type=Normal +
  force_vpos_reset) + wrap_zone 영역 끝 sw=col_area_width 정합화 +
  wrap_zone 비활성 cs=0/sw=0 정합화

작업지시자 핵심 지적: "HWP3 파서가 잘못해석해서 IR 로 잘못 전달, composer.rs
에서 처리하면 너무 예외" — HWP3 파서 ↔ Document IR 표준 정합 영역 본질 식별.
CLAUDE.md HWP3 파서 규칙 정합 (composer/layout 미수정).

3 paragraph 정합 회복 (HWP3 native):
- 페이지 4 paragraph 75: image 우측 wrap zone 21 lines
- 페이지 9 paragraph 191/192: "루트 파일시스템" 등 표시 회복
- 페이지 16 paragraph 435/441/443: 본문 + image wrap zone

HWP5 변환본:
- 페이지 16 paragraph 441/442/443: image 우측 wrap zone (anchor_image_match)
- 페이지 22 paragraph 599: 페이지 분할 정합

검증: 1166 lib + clippy clean + 광범위 sweep 209 fixture DIFF 0
시각 판정 PDF 권위 정합 ★ 통과.

PR edwardkim#723 (Task edwardkim#722) 머지 후 적용 요청.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 9, 2026
…시각 정합

PR #723 (@jangster77) 옵션 A 처리 — 1 commit cherry-pick + no-ff merge.

본질 정정 (3 영역):
- src/renderer/pagination.rs (+6 LOC): WrapAnchorRef 영역 anchor_image_margin_right 필드 추가
- src/renderer/typeset.rs (+56 LOC): anchor 다음 paragraph + anchor host self-register, caption_room 가드 (LINE_SEG ≥ 2 / LINE_SEG 1 + caption_room ≤ line_height → wrap zone, LINE_SEG 1 + caption_room > line_height → caption-style)
- src/renderer/layout/paragraph_layout.rs (+10/-3): wrap_anchor 영역 cs/sw 영역 inter-image-text gap (3mm = 852 HU) 보정

대상 영역:
- 페이지 8 paragraph 175 (디렉토리 트리 설명)
- 페이지 27 paragraph 779 (Figure 4-4 caption — caption-style 보존)
- 페이지 48 paragraph 1394 (접근 제어)

자기 검증:
- cargo build --release ✅
- cargo test --release: lib 1173 + 통합 ALL GREEN
- cargo clippy --release: 신규 경고 0
- 광범위 sweep: 7 fixture / 170 페이지 / 168 same / 2 diff (exam_science_001/002.svg)
  → text 좌표 시프트 영역, exam_science 영역 wrap=Square 그림 부재 영역 → 작업지시자 시각 판정 게이트 영역

시각 판정 게이트:
- 페이지 8/27/48 PDF 권위본 (pdf/hwp3-sample5-2022.pdf) 정합 점검
- exam_science p1 회귀 점검 (text 좌표 시프트 의도성)

분리된 후속:
- Issue #732 (Task #724): HWP5 변환본 paragraph 441 영역 별도 처리

closes #722
edwardkim added a commit that referenced this pull request May 9, 2026
…#732 통합 결정

- mydocs/pr/archives/pr_723_review.md: 검토 문서 archives 이동
- mydocs/pr/archives/pr_723_report.md: 처리 보고서 작성
  · PR 본질 (페이지 8/27/48 PDF 정합) ✅ 시각 판정 통과
  · exam_science p1/p2/p8 5번/8번/12번 문항 지문 왼쪽 경계 클립핑 ⚠️ 회귀 판정
  · 처리 결정: 머지 유지 + PR #732 (Task #724, 동일 컨트리뷰터) 후속 통합
- mydocs/plans/archives/task_m100_722.md(_impl).md: plans archives 이동
- mydocs/orders/20260510.md: PR #723 항목 추가 + 후속 영역 PR #732 영역 통합 명시

`feedback_pr_supersede_chain` 신규 패턴 (c) 등록 — 머지+회귀 정정 후속 PR 통합 영역
…am_science 5번/8번/12번 클립핑 정정

본질
- PR edwardkim#723 (Task edwardkim#722) 머지 후 메인테이너 광범위 sweep 에서 발견 (PR edwardkim#723 보고서):
  exam_science.hwp 1, 2, 8 페이지 — 5번/8번/12번 문항 지문과 그림 배치 영역
  에서 지문 왼쪽 끝 경계 글자 클립핑 회귀 (HWP3 native sweep diff 2건).
- 진단 영역 — Task edwardkim#722 typeset.rs Block 2 (host_self register, 786~) 가
  exam_science p.21 (5번)/p.37 (8번)/p.60 (12번) 의 Square wrap picture
  (image_voff=0, image_mr=0) 에서 fire → wrap_anchor 등록 후 paragraph_layout
  의 wrap_anchor 분기에서 line cs/sw 본 sample line_seg 인코딩 (sw=19592 등)
  으로 layout → text justification 영향 → 글자 위치 ±2~13px 시프트 + 좌측
  경계 클립핑.

가드 영역
- Task edwardkim#722 의 본질 (sample5 page 8/27/48) 영역 image_mr > 0 (image margin
  부재 아님) → 가드 통과, host_self register 정합 보존.
- exam_science 의 회귀 영역 image_mr = 0 (image margin 없음, line_seg 가
  이미 wrap zone 정합) → 가드 차단, OLD 의 col_area-full-width layout 정합
  복원.

검증
- exam_science 1, 2 페이지: feb11e7 baseline 정합 회복 (diff 0)
- sample5 page 8/27/48: ab910d6 (Task edwardkim#722 본질) 정합 보존 (diff 0)
- exam_eng/aift/synam-001 등 다른 sample: 본 가드 영향 없음 (HEAD 의 다른
  PR merge 영역 기존 diff 와 동일)
- cargo test --lib --release: 1173 passed
- cargo clippy --release --lib: 신규 경고 0

후속
- 메인테이너 광범위 sweep 에서 exam_eng/aift/synam-001 영역의 다른 diff
  (HEAD 의 multiple devel merge 영역 기존) 확인 필요 시 별도 task.
edwardkim pushed a commit that referenced this pull request May 9, 2026
…2번 클립핑 정정

본질
- PR #723 (Task #722) 머지 후 메인테이너 광범위 sweep 에서 발견 (PR #723 보고서):
  exam_science.hwp 1, 2, 8 페이지 — 5번/8번/12번 문항 지문과 그림 배치 영역
  에서 지문 왼쪽 끝 경계 글자 클립핑 회귀 (HWP3 native sweep diff 2건).
- 진단 영역 — Task #722 typeset.rs Block 2 (host_self register, 786~) 가
  exam_science p.21 (5번)/p.37 (8번)/p.60 (12번) 의 Square wrap picture
  (image_voff=0, image_mr=0) 에서 fire → wrap_anchor 등록 후 paragraph_layout
  의 wrap_anchor 분기에서 line cs/sw 본 sample line_seg 인코딩 (sw=19592 등)
  으로 layout → text justification 영향 → 글자 위치 ±2~13px 시프트 + 좌측
  경계 클립핑.

가드 영역
- Task #722 의 본질 (sample5 page 8/27/48) 영역 image_mr > 0 (image margin
  부재 아님) → 가드 통과, host_self register 정합 보존.
- exam_science 의 회귀 영역 image_mr = 0 (image margin 없음, line_seg 가
  이미 wrap zone 정합) → 가드 차단, OLD 의 col_area-full-width layout 정합
  복원.

검증
- exam_science 1, 2 페이지: feb11e7 baseline 정합 회복 (diff 0)
- sample5 page 8/27/48: ab910d6 (Task #722 본질) 정합 보존 (diff 0)
- exam_eng/aift/synam-001 등 다른 sample: 본 가드 영향 없음 (HEAD 의 다른
  PR merge 영역 기존 diff 와 동일)
- cargo test --lib --release: 1173 passed
- cargo clippy --release --lib: 신규 경고 0

후속
- 메인테이너 광범위 sweep 에서 exam_eng/aift/synam-001 영역의 다른 diff
  (HEAD 의 multiple devel merge 영역 기존) 확인 필요 시 별도 task.
edwardkim added a commit that referenced this pull request May 9, 2026
…one + HWP3 파서 IR 정합 + exam_science 회귀 정정

PR #732 (@jangster77) 옵션 A 처리 — 2 commits cherry-pick (ab910d6 skip — PR #723 영역 영역 적용 영역) + no-ff merge.

본질 정정:
1. Task #724 본질 (commit a8b8eff) — HWP5 변환본 paragraph 441 wrap zone + HWP3 파서 IR 정합
   - typeset.rs (+49): anchor host cs=0 caption-style 매칭 가드 (anchor_image_match) + Task #321 vpos-reset 가드 영역 wrap_around 강제 종료 (anchor cs=0 한정)
   - parser/hwp3/mod.rs (+37/-5): 빈 paragraph + page break flag 가드 + wrap_zone 영역 끝 sw=col_area_width 정합화 + wrap_zone 비활성 cs=0/sw=0 정합화
   - CLAUDE.md HWP3 파서 규칙 정합 (composer/layout 미수정)

2. PR #732 후속 (commit ab2fa52) — exam_science 회귀 정정 (PR #723 영역 영역 host_self register 영역 영역)
   - typeset.rs (+9/-1): image_margin_right_hu > 0 가드 추가
   - exam_science p.21 (5번) / p.37 (8번) / p.60 (12번) 영역 image_mr=0 → 가드 차단 → OLD 의 col_area-full-width layout 정합 복원
   - hwp3-sample5.hwp 페이지 8/27/48 (Task #722 본질) 영역 image_mr > 0 → 가드 통과 → 정합 유지

PR supersede 체인 (c) 패턴 권위 사례:
- PR #723 (Task #722, 16번째) 머지 commit 6ced74b + 시각 판정 영역 exam_science 회귀 발견
- PR #732 (Task #724, 17번째) 영역 컨트리뷰터 자발 영역 영역 회귀 정정 통합
- feedback_pr_supersede_chain (c) 패턴 정합

자기 검증:
- cherry-pick a8b8eff + ab2fa52 충돌 0건 (ab910d6 영역 영역 PR #723 머지 영역 영역 skip)
- cargo build/test --release ✅ ALL GREEN
- 광범위 sweep 7 fixture / 170 페이지: exam_science 2 diff — **회귀 정정 입증** (좌측 시프트 영역 영역 정상 복원, BEFORE 우측 시프트 회귀 → AFTER 정상)
  · "후" 585.34 → 583.18 / "시" 608.23 → 603.93 / "간" 620.80 → 616.50 / 그림 655.87 → 649.87
- WASM 빌드 4.65 MB
- 작업지시자 시각 판정 ✅ 통과 (HWP3 sample5 8/27/48 정합 보존 + HWP5 변환본 16/22 본질 + exam_science p1/p2 회귀 정정 입증)

IR 정합 검증 (HWP3 native vs HWP5 변환본):
- 171 column_type: Page → Normal (HWP5 변환본 정합)
- 189 ls[3~6] sw: 0 → 51024 (col_area 전체 폭)
- 191 ls[0] sw: 0 → 51024
- 435 ls[0~2] vpos: 221760 (절대) → 1440 (페이지 안)
- 443 ls[2~6] sw: 0 → 51024

closes #724
관련: PR #723 영역 영역 회귀 정정 통합 (Issue #762 영역 영역 별 영역 — exam_math `inf` 회귀 영역 영역 별건)
edwardkim added a commit that referenced this pull request May 9, 2026
- mydocs/pr/archives/pr_732_review.md: 검토 문서 archives 이동
- mydocs/pr/archives/pr_732_report.md: 처리 보고서 작성
  · Task #724 본질 (HWP5 변환본 paragraph 441 wrap zone + HWP3 파서 IR 정합)
  · PR #732 후속 (PR #723 영역 영역 exam_science 회귀 정정 — image_mr > 0 가드)
  · feedback_pr_supersede_chain (c) 패턴 권위 사례
  · 작업지시자 시각 판정 ✅ 통과
- mydocs/plans/archives/task_m100_724.md(_impl).md: plans archives 이동
- mydocs/orders/20260510.md: PR #732 항목 추가 (5/10 사이클 영역 영역 7건 처리)
@edwardkim

Copy link
Copy Markdown
Owner

@jangster77 님, 검토 + 머지 완료했습니다.

처리 결과

옵션 A (2 commits cherry-pick + no-ff merge `0e419fb8`) 로 처리.

본 환경 영역 영역 영역 8 commits 영역 영역 영역 cherry-pick 영역:

cherry-pick 충돌 0건.

자기 검증

  • `cargo build/test --release` ✅ ALL GREEN
  • 광범위 sweep (7 fixture / 170 페이지) ✅ exam_science 2 diff (회귀 정정 입증)
    · pre PR `ce5eaa6c` 영역 영역 PR Task #722: hwp3-sample5.hwp wrap=Square 그림 paragraph 시각 정합 (closes #722) #723 회귀 적용 영역 (text 우측 시프트)
    · post PR `local/task724` 영역 영역 정상 복원 (좌측 시프트)
    · "후" 585.34 → 583.18 / "시" 608.23 → 603.93 / "간" 620.80 → 616.50 / 그림 655.87 → 649.87
  • WASM 빌드 ✅ 4.65 MB

작업지시자 시각 판정 ✅ 통과

PR supersede 체인 (c) 패턴 권위 사례

본 PR 영역 영역 영역 `feedback_pr_supersede_chain` (c) 패턴 영역 영역 명확 영역 영역 권위 사례 영역:

본질 정합

작업지시자 핵심 지적: "HWP3 파서가 잘못해석해서 IR 로 잘못 전달, composer.rs 에서 처리하면 너무 예외 — HWP3 파서 ↔ Document IR 표준 정합 영역 본질"

본 PR 영역 영역 CLAUDE.md HWP3 파서 규칙 정합 영역 영역 — composer/layout 미수정, HWP3 파서 영역 영역 IR 정합화 영역 본질 도달. `feedback_hancom_compat_specific_over_general` 영역 정합 — `image_margin_right_hu > 0` 가드 영역 영역 case 가드 좁힘 (일반화 host_self register 영역 영역 회귀 본질).

처리 보고서: `mydocs/pr/archives/pr_732_report.md`.

IR 정합 검증 (HWP3 native vs HWP5 변환본)

paragraph 정정 전 정정 후 HWP5 변환본 정합
171 column_type Page Normal Normal ✓
189/191/443 ls sw 0 51024 51024 ✓
435 ls vpos 221760 1440 1440 ✓

@jangster7717번째 사이클 (HWP 3.0 파서 영역 핵심) 컨트리뷰션 영역 — 5/10 사이클 영역 영역 PR #720/#723/#725/#728/#729/#730/#732 영역 7건 처리 완료 영역.

edwardkim pushed a commit that referenced this pull request May 10, 2026
…eset 후속 가드

진행 단계:
- Stage 1: 본질 진단 (Document IR Picture + HWP3 파서 그림 + 폰트)
- Stage 2: image placeholder Document IR 확장
- Stage 3: TAC 그림 paragraph line_spacing=600 정합
- Stage 4: 매칭 실패 후 vpos-reset 후속 가드 (HWP5 변환본 paragraph 26)

본질 정정:
- model/image.rs: ImageAttr.external_path 필드 추가
- parser/hwp3/mod.rs: pic_name → external_path 전달, TAC ls=600
- renderer/render_tree.rs: ImageNode.external_path 필드
- renderer/layout/{picture_footnote,table_cell_content}.rs: external_path 전달
- renderer/svg.rs: 빈 binary + external_path placeholder
- renderer/typeset.rs: 매칭 실패 후 vpos-reset 후속 가드
- main.rs: dump 출력 external_path
- paint/json.rs, serializer/hwpx/picture.rs, document_core/commands/object_ops.rs: ImageAttr 구성 정합

검증:
- cargo test --lib --release: 1166 passed
- cargo clippy --release: 신규 경고 0
- 광범위 sweep: DIFF 0 (kps-ai 등 회귀 0)

시각 판정 (한컴 viewer ★):
- HWP3 native + HWP5 변환본 페이지 1 image placeholder 정합
- HWP5 변환본 페이지 2 paragraph 26 (제목차례) 시작 정합

PR #732 (Task #724) 머지 후 적용 요청.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants