Task #577: 셀 내부 단독 TopAndBottom 이미지 1라인 오프셋 정정 (closes #577)#580
Task #577: 셀 내부 단독 TopAndBottom 이미지 1라인 오프셋 정정 (closes #577)#580planet6897 wants to merge 4 commits into
Conversation
…1라인 오프셋) - 수행 계획서·구현 계획서 작성 - exam_science.hwp 1페이지 보기 표 5개 이미지 모두 cell-clip 영역을 19.10px 오프셋만큼 초과 확인 - 산식 확정: para_y(advanced) = cell_y + pad_top + line_height(=15.32px) → compute_object_position에 전달 - 수정 범위: text_wrap=TopAndBottom AND vert_rel_to=Para 인 비-TAC Picture 분기에 한정
table_layout.rs 비-TAC Picture 분기에서 vert_rel_to=Para AND text_wrap=TopAndBottom 인 경우 layout_composed_paragraph 가 advance 시킨 para_y 대신 para_y_before_compose 를 anchor 로 사용하도록 수정. exam_science 2번 보기 ⑤ (및 ②④) 이미지가 line_height(약 15.32px) 만큼 아래로 밀려 cell-clip 을 벗어나던 결함 정정. cargo build/test 통과. clippy 는 사전 존재 에러(layout.rs:313-314 doc_lazy_continuation)만 검출되며 본 변경과 무관.
…W 제거) exam_science.hwp 1페이지 보기 ①~⑤ 모두 image_y - cell_y = pad_top(3.78px) 로 정정. LAYOUT_OVERFLOW 변화: exam_science 9.5→3.4px, mel-001 8건→0건. 부수 효과로 일부 페이지의 좌표가 IR vpos 정합 방향으로 이동했으며 신규 회귀 없음.
셀 내부 단독 TopAndBottom 이미지 1라인 오프셋 정정 작업 종결. exam_science 보기 ①~⑤ 모두 셀 내부 정합, mel-001 LAYOUT_OVERFLOW 8건 → 0건. 승인 후 local/devel 로 merge 권고.
PR #580 (Task #577, @planet6897 PR / Jaeook Ryu commit author) 1차 검토: - 본질 결함: 셀 내부 비-TAC TopAndBottom + vert_rel_to=Para Picture 의 anchor 시점 좌표로 para_y (advance 후) 사용 → image_y - cell_y = pad_top(3.78) + line_height(15.32) = 19.10 px (cell-clip ~10.81 px 초과) - 본질 정정: text_wrap=TopAndBottom AND vert_rel_to=Para 양 조건에만 para_y_before_compose 사용 (HWP IR anchor 시점 정합) + compute_object_position 자체 무변경 (다른 호출처 회귀 차단) - 단일 파일 본질 (table_layout.rs +22/-3) - 정량 측정: image_y - cell_y 19.10 → 3.78 px / LAYOUT_OVERFLOW exam_science 9.5→3.4 / mel-001 8건→0건 - PR mergeable=CONFLICTING (PR base 시점 차이 추정), 본질 cherry-pick (0acd13a) 충돌 0 - 본 환경 임시 검증: cargo test --lib --release 1131 passed (회귀 0) / clippy 0건 권장 처리: 옵션 A — 핀셋 cherry-pick + 결정적 검증 + 광범위 sweep + WASM + 작업지시자 시각 판정.
…ixture 1,614 페이지 회귀 0 + exam_science page 1/4 의도된 정정
…m 이미지 1라인 오프셋 정정 — @planet6897 / Jaeook Ryu 1 commit + 시각 판정 ★ 통과) PR #580 (Task #577, @planet6897 PR / Jaeook Ryu commit author): - 본질 결함: 셀 내부 비-TAC TopAndBottom + vert_rel_to=Para Picture 의 anchor 시점 좌표로 para_y (advance 후) 사용 → image_y - cell_y = pad_top(3.78) + line_height(15.32) = 19.10 px (cell-clip ~10.81 px 초과) - 본질 정정: text_wrap=TopAndBottom AND vert_rel_to=Para 양 조건에만 para_y_before_compose 사용 (HWP IR anchor 시점 정합) + compute_object_position 자체 무변경 (다른 호출처 회귀 차단) - 단일 파일 본질 (table_layout.rs +22/-3) - 정량 측정: image_y - cell_y 19.10 → 3.78 px / LAYOUT_OVERFLOW exam_science 9.5→3.4 / mel-001 8건→0건 검증: - cargo test --lib --release 1131 passed (회귀 0) - svg_snapshot 6/6 / issue_546 1 / issue_554 12 / clippy 0 / build --release - WASM 4,571,643 bytes (PR #575 baseline +39 bytes — table_layout.rs +22/-3 정합) - 광범위 페이지네이션 회귀 sweep: 164 fixture (158 hwp + 6 hwpx) / 1,614 페이지 / 페이지 수 회귀 0 - exam_science byte 차이: page 1/4 의도된 정정 (page 2/3 byte-identical) - mel-001 byte 차이 0 (LAYOUT_OVERFLOW 정정이 SVG byte 단위는 무영향, clip 영역 안으로만 이동) 시각 판정 ★ 통과. closes #577.
|
본 PR 의 본질 commit ( 처리 결과본질 cherry-pick
결정적 검증
광범위 페이지네이션 회귀 sweep (본 환경 자동)
→ 케이스별 명시 가드 ( SVG byte 차이 (PR 본문 영역 + 회귀 검증)
시각 판정 (★ 게이트)작업지시자 시각 검증 결과:
PR 본문 측정 (image_y - cell_y = 19.10 → 3.78 px = pad_top, HWP IR 정합) + LAYOUT_OVERFLOW 정정 (exam_science 9.5→3.4 / mel-001 8건→0건) 의 시각적 효과 입증. 본 PR 의 본질 — HWP IR anchor 시점 정합
처리 보고서: 본 PR 도 두 분의 협업 흐름의 우수한 사례입니다. Stage 1 분석·재현 → Stage 2 본질 → Stage 3 검증의 정밀한 LAYOUT_OVERFLOW 측정 패턴이 메인테이너 검증에서도 정량 입증으로 이어졌습니다. 감사합니다. |
- 처리 보고서 추가: mydocs/pr/archives/pr_580_report.md PR #580 (Task #577, @planet6897 / @jangster77) 핀셋 cherry-pick 1 commit + 결정적 검증 + WASM 4,571,643 bytes + 광범위 페이지네이션 sweep (164 fixture / 1,614 페이지 / 회귀 0) + 시각 판정 ★ 통과 - 검토 보고서 archives 이동: mydocs/pr/pr_580_review.md → mydocs/pr/archives/pr_580_review.md - 5/5 orders 갱신: PR #580 항목 추가
… 오분류 정정 — @planet6897 / Jaeook Ryu 3 commits + 시각 판정 ★ 통과) PR #584 (Task #574, @planet6897 PR / Jaeook Ryu commit author): - 본질 결함: is_heavy_display_face hardcoded list 에 'HY견명조' 잘못 포함 → CharShape.bold=false 무시되고 SVG 에 font-weight='bold' 강제 적용 - Stage 0 정밀 진단으로 이슈 본문 가설 정정: 쪽번호 '1' 출처는 본문 표 셀 Shape TextBox 내부 literal text + IR 색상 #000000 ('회색' 가설 잘못, 본질은 굵기만) - 본질 정정 (단일 줄): hardcoded list 에서 'HY견명조' 제거 ('HY견명조B' 명시 Bold variant 보존) - TDD 흐름: Stage 2 RED + Stage 3 GREEN 분리 cherry-pick 3 commits: - 6d193ec Stage 0: 정밀 진단 + 진단 스크립트 (examples/inspect_574.rs) - ef6583c Stage 2: TDD 통합 테스트 + 단위 테스트 갱신 (RED) - 0002b49 Stage 3: fix 적용 (RED → GREEN) 옵션 C 충돌 통합: integration_tests.rs 의 test_521/test_552 (HEAD) 보존 + test_574 (ef6583c) 추가. 검증: - cargo test --lib --release 1132 passed (test_574 RED → GREEN, baseline +1) - svg_snapshot 6/6 / issue_546 1 / issue_554 12 / clippy 0 / build --release - WASM 4,581,498 bytes (PR #580 baseline +9,855 bytes) - 광범위 페이지네이션 회귀 sweep: 164 fixture (158 hwp + 6 hwpx) / 1,614 페이지 / 페이지 수 회귀 0 - SVG 정량 측정: font-weight='bold' 출현 횟수 -1,241건 제거 (exam_science -82 / exam_kor -759 / exam_eng -156 / exam_math -244) - 페이지 1 쪽번호 '1' 권위 케이스 검증 (HY견명조 font-size=44 우상단) 시각 판정 ★ 통과 — Canvas + SVG 양쪽 통과 (HY견고딕 의 굵음 영역은 본 PR 의 의도된 보존 영역으로 별도 task). closes #574.
v0.7.9 후속 patch 사이클 (5/4 ~ 5/6). ## 신규 기능 - **CLI 바이너리 릴리즈** (Issue #608/#612, @almet 의 요청) - 4 플랫폼 GitHub Release 자산 첨부 (Linux x86_64 / macOS x86_64+aarch64 / Windows x86_64) + SHA-256 체크섬 - **PNG raster backend** (PR #599, @seo-rii) — render P4 단계 - native Skia 기반 PageLayerTree → PNG export, native-skia feature gate - **AI 파이프라인 + VLM 연동 도입** (메인테이너 후속 정정): - --vlm-target claude (1568 longest edge / 1.15 MP, Claude Vision 정합) - --scale / --max-dimension (자동 scale 계산) - export-png CLI 명령 + 매뉴얼 (한글 + 영문 dual) - 한글 폰트 fallback chain + char 단위 fallback (공백 두부 정정) + --font-path 동적 로딩 ## 외부 PR cherry-pick (13 PR / 7 컨트리뷰터) - @planet6897 / Jaeook Ryu (협업): PR #587/#589/#561/#564/#570/#575/ #580/#584/#592/#593/#567 - @oksure (Hyunwoo Park): PR #600 (closes #513) - @seo-rii: PR #599 (refs #536) - @cskwork / @johndoekim / @nameofSEOKWONHONG / @jangster77 — 사이클 누적 ## 메인테이너 정정 Skia 폰트 영역 5개 정정 (한글 fallback / font-path / char-fallback / VLM 옵션 / export-png CLI). ## 인프라 - CI 빌드 안정성 (Cargo.toml [[example]] required-features) - 광범위 페이지네이션 회귀 sweep 도구 (164 fixture / 1,614 페이지 자동) ## 후속 이슈 - #613 (VLM 프리셋 확장) - #614 (DPI 메타데이터) - #615 (pua_oldhangul.rs U+F53A 한컴 정합) - #598 (rhwp-studio 각주 삭제, 외부 컨트리뷰터 공개) ## 잔여 PR (v0.7.11 후속 patch) PR #601, #602 (@oksure) / PR #607 (@dicebattle) / PR #609 (@jangster77, Task #604) / PR #611 (@kihyunnn). 상세: CHANGELOG.md (한글) / CHANGELOG_EN.md (영문).
Summary
exam_science.hwp페이지 1 — 2번 문제 보기 ⑤(및 ②④) 이미지 하단이 cell-clip 영역을 약 10.81 px 초과하여 잘려 보이던 결함을 정정합니다.text_wrap=TopAndBottom AND vert_rel_to=Para인 비-TAC Picture 가 셀에 들어 있을 때compute_object_position호출에 사용하던para_y가layout_composed_paragraph의 advance(line_height ≈ 15.32 px) 를 포함하고 있어 이미지가 anchor 라인 한 줄만큼 아래로 밀려 있던 문제입니다. anchor 시점 좌표para_y_before_compose를 사용하도록 정정합니다.Root cause
src/renderer/layout/table_layout.rs:1547..비-TAC Picture 분기:Change
src/renderer/layout/table_layout.rs1 hunk (+14/-3). 조건 부 anchor_y 도입:picture_footnote.rs::compute_object_position자체는 무변경(다른 호출처 회귀 방지).Verification
exam_science.hwp1페이지 보기 ①~⑤ 모두image_y - cell_y = 3.78 px (= pad_top)정합. cell-clip 내부 정상 배치.LAYOUT_OVERFLOW변화:Test plan
cargo build --releasecargo test --release --lib(1118 passed)samples/exam_science.hwp1페이지 보기 ①~⑤ 좌표 정합 확인samples/mel-001.hwp21페이지 회귀 비교 — LAYOUT_OVERFLOW 8→0건Documents
mydocs/plans/task_m100_577.mdmydocs/plans/task_m100_577_impl.mdmydocs/working/task_m100_577_stage{1..3}.mdmydocs/report/task_m100_577_report.mdcloses #577