Task #511: HWP3 Square wrap 렌더링 보완 6-13 + narrow zone 정정#553
Task #511: HWP3 Square wrap 렌더링 보완 6-13 + narrow zone 정정#553jangster77 wants to merge 7 commits into
Conversation
…rdkim#546 정합 local/task511 브랜치 13 commit (보완6~13)을 upstream/devel(Task edwardkim#546 revert 포함)에 squash merge하여 conflict 해결. 포함: - src/parser/hwp3/mod.rs (+508 LOC) — 보완7,8,11,12,13 누적 - src/renderer/composer.rs (+148 LOC) — 보완12 (HWP3 앵커 문단 binary 신뢰) - src/renderer/layout/paragraph_layout.rs (+38 LOC) — wrap_precomputed line 처리 - src/model/paragraph.rs (+11 LOC) — v_push_before 필드 추가 - src/renderer/layout.rs — v_push_before 처리 (Fix C Pattern B) - src/serializer/{body_text.rs, hwpx/section.rs} — model 변경 정합 - mydocs/plans/working/report — Task edwardkim#511 문서 일체 제외 (Task edwardkim#546 정합): - task460 보완5 (82e41ba) 코드 — wrap_pic_bottom_y, wrap_around_pic_bottom_px 처리. Task #546이 exam_science.hwp 회귀 정정으로 revert한 영역. 본 squash merge에서도 conflict 해결 시 HEAD(upstream/devel) 유지. Trade-off (별도 issue로 분리): - 손실: HWP3 Square wrap 그림 아래 텍스트 y위치 정합 (page 4/8/22/48 겹침 재발) - Task edwardkim#546 commit 메시지 권장: "Stage 5 시각 판정 시 HWP3 fixture 점검 후 재발 시 별도 task 분리" 검증: - cargo build 통과 - cargo test --lib 1113 passed - cargo clippy --lib 0건 - 통합 테스트 svg_snapshot 6/6, issue_418/501/505/530/546 통과 - exam_science.hwp 4 페이지 (Task edwardkim#546 정합) - hwp3-sample5.hwp 65 페이지 (clean upstream/devel 64 페이지 — 별도 issue) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…m-push 정정 세션 작업 결과 + stash apply (Task edwardkim#546 정합 유지하면서 task511 hwp3 변수 복원). 수정 1 - composer.rs wrap_ref_span gate (Groucho Marx fix): - HWP3 wrap_precomputed paragraph 중 non-TAC picture가 없는 문단은 sub-line splitting 적용 안 함. Latin 텍스트의 경우 cps_est(CJK 기준)가 과소평가되어 단일 시각 줄을 잘못 분할하면 양쪽정렬 시 단어 간격이 비정상적으로 벌어지는 문제 해결. - 사례: hwp3-sample5.hwp page 48 pi=1396 ("I don't care to belong to a club...") — 글자 간격 70+ px → 14.3 px (정상 영어 단어 간격). 수정 2 - layout.rs paper_images z-order swap: - body_node를 먼저 push하고 paper_images를 그 후에 push. - SVG 문서 순서상 나중 요소가 위에 그려지므로 floating image가 텍스트 위에 렌더됨 (정상 z-order). 수정 3 - layout.rs HWP3 narrow zone bottom-push 제거: - narrow zone 종료 후 full-width 문단을 그림 하단으로 밀지 않음. - HWP3에서 그림은 텍스트 위에 float되므로 자연 위치에서 시작. - 기존엔 그림 우측에 빈 공간이 발생해 사용자 컴플레인. 수정 4 - parser/hwp3/{drawing.rs, mod.rs} body_top_pgy 파라미터: - parse_paragraph_list에 body_top_pgy 파라미터 추가 - 드로잉 내부 텍스트는 body_top_pgy=0 (용지 기준 변환 불필요) 검증: - cargo build 통과 - cargo test --lib 1113 passed - 통합 테스트 svg_snapshot 6/6, issue_418/501/505/530/546 통과 Known limitations (별도 issue로 분리 권장): - Page 22 narrow zone 후속 문단(pi=605) 자체 wrap-around 미지원 → HWP97은 narrow zone 종료 후에도 그림 하단까지 narrow wrap 유지 → rhwp는 file의 cs=0를 그대로 사용. 본질적 wrap-around 재구현 필요. - Page 4/8 그림 아래 텍스트 겹침 (Task edwardkim#546 revert로 손실된 task460 보완5 기능 복원 미완) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
squash merge of local/task511 into upstream/devel-based branch removed upstream docs that didn't exist in task511 base. Restoring from upstream/devel: - Task edwardkim#525 (계획서/구현계획/단계별/최종 보고서) - PR edwardkim#551 (검토 + 처리 보고서) These docs are unrelated to Task edwardkim#511 and should remain in the tree. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
원본 HWP3 fixture (hwp3-sample.hwp, hwp3-sample4.hwp, hwp3-sample5.hwp)는 upstream/devel에 이미 존재. HWP3 파서의 변환 결과물(같은 문서를 HWP5/HWPX 포맷으로 저장한 파일)을 회귀 테스트/IR 비교 검증용으로 추가. 추가 파일: - samples/hwp3-sample-hwp5.hwp (109 KB) - samples/hwp3-sample-hwpx.hwpx (106 KB) - samples/hwp3-sample4-hwp5.hwp (645 KB) - samples/hwp3-sample5-hwp5.hwp (289 KB) - samples/hwp3-sample5-hwpx.hwpx (267 KB) 용도: - ir-diff 명령으로 HWP3 → HWP5 IR 정합 검증 - HWP3 파서 회귀 시 IR 변환 결과 비교 - HWPX 변환본은 XML 기반이라 텍스트 diff 가능 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
# Conflicts: # src/renderer/layout.rs
|
@jangster77 님, 본 PR 의 검토 + 시각 판정 결과 작업지시자 결정으로 cherry-pick rollback 처리하고 close 합니다. 처리 결과 — Rollback본 PR 의 본질 정정 (HWP3 Square wrap 보완 6-13 + narrow zone + composer wrap_ref_span 등) 자체는 정합한 영역이라 cherry-pick 시뮬레이션 + 결정적 검증 통과 (1118 / svg_snapshot 6/6 / clippy 0). 작업지시자 의도된 옵션 C (Task #525 호출 제거 유지 + Task #511 wrap_precomputed 인프라 통합) 도 정상 적용. 그러나 시각 판정 단계에서 page 4 + page 8 의 그림 + 문단 배치 결함 이 작업지시자 시각 판정에서 수용 불가능한 영역으로 판단됨: `samples/hwp3-sample5-hwp5.hwp` page 4 / page 8 — pi=74 / pi=140 등 Square wrap 그림 (어울림, tac=false) 영역에서 그림 + 후속 paragraph 의 배치 결함:
본 결함은 PR 본문 §"회귀 영역" 1번 (HWP3 Square wrap 그림 아래 텍스트 y위치 회귀, page 4/8 그림 겹침) 의 영역과 본질적으로 같은 본질 — Task #546 의 `82e41ba` revert trade-off. 본 PR 본문이 의도된 trade-off 로 명시한 영역. 다만 작업지시자 시각 판정에서 수용 불가능 으로 판단:
재 PR 요청 사항본 PR 의 본질 정정 영역은 매우 정합하고 가치 있는 작업입니다. page 4/8 의 결함만 정정 후 재 PR 부탁드립니다: 정정 방향 — HWP3 Square wrap 그림 아래 텍스트 y위치 정합
추가 고려 사항 — HWP 3.0 직렬화작업지시자 의견:
본 PR 의 `wrap_precomputed` / `v_push_before` 등 model 변경이 HWP3 → HWP3 round-trip (직렬화) 까지 정합한지 점검 권장. 본 정정이 IR 모델에 영향을 주는 영역이므로 향후 직렬화 시 정합한 인코딩 필요. 본 PR 의 정합한 영역 (재 PR 시 보존 권장)
재 PR 시 base 동기화본 cherry-pick rollback 후 본 환경 devel 은 `b84c5e9` (PR #551 Task #528 처리 후속) 시점으로 유지됩니다. 본 PR 의 base 와 동일하므로 재 PR 시 동기화 추가 필요 없습니다. 컨트리뷰터께 감사본 PR 의 진단 깊이 + Task #546 의식 + 정합한 PR 형식 (5 commits / 26 files) 이 매우 인상적이었습니다. PR #538/#551 의 fork devel 누적 패턴과 다른 모범 사례 — 본 환경 devel 정확히 분기점 (`b84c5e9`) 으로 두고 정합한 변경만 포함. page 4/8 결함만 정정 후 재 PR 부탁드립니다. 본 PR 의 다른 영역은 그대로 보존하시면 됩니다. 검토 자료
|
- 외부 컨트리뷰터 @jangster77 의 PR #553 (Task #511 HWP3 Square wrap 보완) - 작업지시자 옵션 C (Task #525 호출 제거 유지 + Task #511 wrap_precomputed 통합) cherry-pick 진행 후 결정적 검증 통과 (1118 / svg_snapshot 6/6 / clippy 0) - 그러나 시각 판정에서 hwp3-sample5 page 4 + page 8 그림 + 문단 배치 결함 (Square wrap 어울림 텍스트 y위치) 수용 불가 - 작업지시자 결정으로 옵션 2 (rollback) 진행: · git reset --hard b84c5e9 로 local/devel 복원 · devel push 안 됨, 영향 0 · exam_science 4 페이지 (Task #546) / Task #525 / Task #528 모두 유지 - PR #553 close + 컨트리뷰터에게 안내: · page 4/8 결함 정정 후 재 PR 요청 · PR 본질 정정 영역 (HWP3 파서 + narrow zone + composer 등) 보존 권장 · HWP 3.0 직렬화 고려 (작업지시자 의견) · 트러블슈팅 문서 (square_wrap_pic_bottom_double_advance.md) 참조 권장 산출물: - mydocs/pr/archives/pr_553_review.md (검토 보고서, rollback 결정 반영) - mydocs/orders/20260504.md (오늘할일 신규) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…commit) 본 PR 은 외부 컨트리뷰터 @oksure (Hyunwoo Park) 의 세 번째 PR (PR #581/#582 후속). cherry-pick: - 21fe401 (8dc75f6): fix: 그룹 내 그림(Picture) 직렬화 구현 + 라운드트립 테스트 · src/serializer/control.rs +13/-2 · src/serializer/control/tests.rs +79 본질: serialize_group_child 의 ShapeObject::Picture TODO 빈 분기 → 단독 Picture 직렬화와 동일 패턴 적용 (HWPTAG_SHAPE_COMPONENT + HWPTAG_SHAPE_COMPONENT_PICTURE). PR #428 후속 (Copilot 리뷰 피드백 반영, 라운드트립 테스트 포함). 검증: - cargo test --lib 1125 passed (신규 GREEN +1) - test_roundtrip_group_picture_child 통과 - 회귀 0 (issue_505/530/546/418/501/svg_snapshot) - cargo clippy --lib 0 건 작업지시자 의견 정합 (HWP 직렬화 영역, PR #553 close 시 명시).
…er77 7 commits + 시각 판정 ★ 통과) PR #589 (Task #511 v2 + Task #554, @jangster77): - PR #553 close 회신 응답 — page 4/8 결함 정정 후 재PR - 옵션 A2 — wrap_precomputed IR 플래그 + cs_offset 단일 접근 - Task #546 회귀 영역 모두 회피 (wrap_around_pic_bottom_px 등 제외) - HWP 3.0 직렬화 round-trip 정합 — derived 필드 + serializer 미참조 검증: - cargo test --lib 1129 / issue_554 12 / issue_546 1 회귀 0 - WASM 4,569,773 bytes (-12,772 vs devel) - 시각 판정 ★ 통과 (page 4/8 정정 + page 17/18/48 보완8 영향 + page 27 trade-off 수용) PR #556 (Task #554 단독) close 처리 예정.
- 처리 보고서 추가: mydocs/pr/archives/pr_589_report.md PR #553 → PR #589 재PR 의 메인테이너 회신 3개 요청 응답 검증 + cherry-pick 7 commits + 결정적 검증 + WASM + 시각 판정 ★ 통과 - 검토 보고서 archives 이동: mydocs/pr/pr_589_review.md → mydocs/pr/archives/pr_589_review.md - 5/5 orders 신규 작성: mydocs/orders/20260505.md PR #589 처리 + Issue #598 (각주 삭제 기능) 등록 + 인프라 정합 (local/devel 재생성 / 메모리 동기화 / 페르소나 덤프)
Summary
변경 영역
소스 (14 파일, +1063 / -93)
src/parser/hwp3/mod.rssrc/renderer/layout.rssrc/renderer/composer.rssrc/renderer/layout/paragraph_layout.rssrc/renderer/typeset.rssrc/model/paragraph.rssrc/{parser,serializer,wasm_api}/*문서 (7 파일, +302)
mydocs/plans/task_m100_511.md— 수행 계획서mydocs/plans/task_m100_511_impl.md— 구현 계획서mydocs/working/task_m100_511_stage{1,2}.md— 단계별 보고서mydocs/report/task_m100_511_report.md— 최종 보고서mydocs/orders/20260501.md— Task HWP3 Square wrap 렌더링 세부 보정: wrap zone x/y 위치 + 앵커 높이 + single-LineSeg 감지 #511 항목CLAUDE.md— HWP3 파서 규칙 예외 조항 ("일반 렌더러 버그는 공통 모듈 수정 허용")회귀 테스트 (3 파일)
tests/golden_svg/{form-002,issue-157,issue-267}/page-*.svg— 보완11 (body clip 우측 확장 시 텍스트 노드 제외) 정합샘플 (5 파일, ~1.4 MB)
samples/hwp3-sample{,4,5}-hwp5.hwp— HWP3 → HWP5 변환본 (회귀 검증용)samples/hwp3-sample{,5}-hwpx.hwpx— HWP3 → HWPX 변환본 (XML diff 가능)시각 검증
회복된 결함
회귀 무재발
회귀 영역 (별도 issue 분리 권장)
Task #546 commit 메시지의 명시적 권장사항 ("Stage 5 시각 판정 시 HWP3 fixture 점검 후 재발 시 별도 task 분리")에 따라, 본 PR에 포함하지 않는 잔존 결함:
HWP3 Square wrap 그림 아래 텍스트 y위치 회귀 (page 4/8 그림 겹침)
9575667)의 task460 보완5 (82e41ba) 전체 revertHWP3 narrow zone 후속 full-width 문단 wrap-around 미지원 (page 22)
Test plan
cargo test --lib: 1113 passed (회귀 0)cargo clippy --lib -- -D warnings: 0건빌드 / 머지 노트
local/task511을upstream/devel에 squash merge한 결과 (rebase 시도 후 다중 commit 충돌로 squash 전환)wrap_pic_bottom_y,wrap_around_pic_bottom_px등)는 Task exam_science.hwp 2페이지 페이지네이션 회귀 — PR #506 머지 후 본문 누락 (4페이지 → 6페이지) #546 정합 유지를 위해 의도적으로 미포함커밋 (5건)
```
64bb10a samples: HWP3 → HWP5/HWPX 변환 fixture 추가
c6de8c3 Restore orders/20260503.md accidentally removed by squash merge
9a28ce6 Restore upstream docs accidentally removed by squash merge
db536d6 Task #511 후속: HWP3 narrow zone Groucho Marx 분리/z-order/bottom-push 정정
3568646 Task #511: HWP3 Square wrap 보완 6-13 squash merge — Task #546 정합
```
🤖 Generated with Claude Code