fix: HWPX ColorRef 상위 바이트 보존#607
Conversation
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 (영문).
|
@dicebattle 님 안녕하세요. 첫 PR 환영합니다. 검토 진행 중 안내 한 가지 드립니다. 시각 판정 자료 영역본 PR 의 본질 ( 다만 본 환경 보완 요청 사항본 PR 머지 전 가능하다면 다음 두 가지 함께 부탁드립니다:
이 두 자료가 추가되면 본 PR 의 본질 영역 (HWPX 8자리 색상 + 알파 채널) 회귀 차단 가드로 영구 보존되어, 향후 다른 영역 정정에서도 본 결함 재발 차단이 가능해집니다. 본 환경 측정 요약 (참고)
본 PR 의 진단 ( 샘플 파일 + 한컴 버전 정보 추가 후 메인테이너 시각 판정 → 머지 단계로 진행하겠습니다. 수고하셨습니다. |
|
준비해서 보강하겠습니다. 코멘트 감사드립니다. |
- @dicebattle (Sunyong Lim) 첫 PR 검토 - Task #606 HWPX ColorRef 상위 바이트 보존 (단일 파일 +9/-5) - 본 환경 검증: cargo test 1140 passed / clippy 0 / svg_snapshot 6/6 - 광범위 sweep: 164 fixture / 1,684 페이지 / 차이 0 - WASM: 4,588,198 bytes - 본 환경 샘플 (123kb.hwp/74kb.hwp) 미존재 → 시각 판정 자료 부재 - 컨트리뷰터에게 샘플 동봉 + 한컴 버전 정보 보완 요청 댓글 등록 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…더링 정정 PR #744 (@oksure) 옵션 A 처리 — 2 commits cherry-pick + no-ff merge. 본질 정정 (3 files, +26/-8): - src/parser/hwpx/utils.rs (+8/-5): parse_color_str — #AARRGGBB → 0xAABBGGRR (alpha 보존) - src/serializer/hwpx/header.rs (+12/-2): color_hex — alpha 비제로 시 #AARRGGBB 출력 + 0xFFFFFFFF 투명 센티넬 처리 - src/serializer/hwpx/section.rs (+6/-1): color_ref_to_hwpx — 동일 alpha 보존 출력 결함 본질 (Issue #606): - HWPX 문서의 faceColor="#FF000000" (alpha=0xFF, 채우기 없음) 영역 영역 0x00000000 (검정) 으로 파싱 - style_resolver의 ColorRef 상위 바이트 비제로 → "채우기 없음" 분기 도달 부재 - 표 배경 검정색 렌더링 발생 Copilot 리뷰 반영 (commit 2e5e993): color_hex 투명 센티넬 처리 + 문서 수정 PR supersede (a) 패턴: - PR #607 (@dicebattle, 4/29 OPEN, 첫 PR) — parser 만 정정 (+9/-5, 1 file) - PR #744 (@oksure, 5/9) — parser + serializer 양방향 정합 (+26/-8, 3 files) — PR #607 본질 완전 포함 + 확장 - 작업지시자 결정 시 PR #607 supersede close (정중 한국어 댓글 + supersede 명시) 자기 검증: - cherry-pick 충돌 0건 - cargo build/test --release ✅ ALL GREEN - parser/hwpx/utils tests ✅ 3 PASS (test_parse_color_str_with_alpha 신규 케이스 포함) - 광범위 sweep 7 fixture / 170 페이지 / 회귀 0 ✅ (HWPX 만 영향, HWP 변환본 무관) closes #606 관련: PR #607 (supersede)
- mydocs/pr/archives/pr_744_review.md: 검토 문서 archives 이동 - mydocs/pr/archives/pr_744_report.md: 처리 보고서 작성 · HWPX ColorRef alpha 보존 (Issue #606 closes) · PR supersede (a) 패턴 — PR #607 (@dicebattle) 본질 완전 포함 + serializer 양방향 정합 추가 · utils tests 3 PASS + 광범위 sweep 170/170 same · 시각 판정 면제 합리 (단위 테스트 결정적 검증) - mydocs/orders/20260510.md: PR #744 항목 추가 (5/10 사이클 영역 영역 16건 처리)
|
@dicebattle 님, 본 PR (#607, 4/29 등록) 의 본질 (parser 영역 영역 alpha 보존) 영역 영역 동일한 본질 + 추가 정정 (serializer 양방향 정합) 영역 영역 PR #744 (@oksure) 영역 영역 통합 머지 영역 영역 (머지 commit |
|
지금 메시지를 봤네요. 제보로 PR을 주말중에 보완하려는게 주말에 바빠서 보완이 늦었습니다. |
변경 요약
HWPX 색상 문자열
#AARRGGBB를 HWPColorRef로 변환할 때 상위 바이트를 버리지 않고 보존하도록 수정했습니다.이번 문제에서는
faceColor="#FF000000"/alpha="0"조합이 들어간 표 배경이 검정색으로 렌더링되고 있었습니다. 기존 파서는#FF000000을0x00000000으로 바꿨고, 이 값이 뒤쪽 렌더링 단계에서 일반 검정 채우기로 처리되었습니다.style_resolver쪽에는 이미ColorRef의 상위 바이트가 0이 아닌 경우 특수값 또는 확장값으로 보고 채우기 없음으로 처리하는 로직이 있으므로, 파서에서#AARRGGBB를0xAABBGGRR형태로 보존하게 바꾸는 것이 가장 작은 수정 범위라고 판단했습니다.추가로
parse_color_str단위 테스트에서#FF000000,#FFFFFFFF, 반투명 예시의 상위 바이트 보존을 검증하도록 기대값을 갱신했습니다.관련 이슈
closes #606
테스트
cargo test통과cargo clippy -- -D warnings통과123kb.hwp2페이지:rect fill="#000000"65개 → 0개74kb.hwp1페이지:rect fill="#000000"31개 → 0개export-svg/export-pdf경로에서 수행했습니다)추가로 실행한 검증:
cargo test --libcargo test --test svg_snapshotcargo build --release --bin rhwptarget/release/rhwp export-pdf로 두 샘플 PDF 재생성 후 비교스크린샷
123kb.hwp 2페이지
74kb.hwp 1페이지
이 PR의 코드 변경과 본문 작성에는 AI 도구(Codex)가 사용되었습니다.