Skip to content

Task #606: HWPX ColorRef 상위 바이트(alpha) 보존 — 표 배경 검정 렌더링 수정#744

Closed
oksure wants to merge 2 commits into
edwardkim:develfrom
oksure:contrib/hwpx-colorref-alpha
Closed

Task #606: HWPX ColorRef 상위 바이트(alpha) 보존 — 표 배경 검정 렌더링 수정#744
oksure wants to merge 2 commits into
edwardkim:develfrom
oksure:contrib/hwpx-colorref-alpha

Conversation

@oksure

@oksure oksure commented May 9, 2026

Copy link
Copy Markdown
Contributor

문제

HWPX 문서의 faceColor="#FF000000" (alpha=0xFF, 채우기 없음)이 0x00000000 (검정)으로 파싱되어 표 배경이 검정색으로 렌더링됩니다.

근본 원인

parse_color_str#AARRGGBB 8자리 입력에서 상위 alpha 바이트를 버리고 0x00BBGGRR로 변환합니다. style_resolver는 ColorRef 상위 바이트가 비제로이면 "채우기 없음"으로 처리하는 로직이 이미 있으나, alpha가 소실되어 이 분기에 도달하지 못합니다.

수정 내용

  • src/parser/hwpx/utils.rsparse_color_str: #AARRGGBB0xAABBGGRR (alpha 보존)
  • src/serializer/hwpx/header.rscolor_hex: alpha 비제로 시 #AARRGGBB 출력
  • src/serializer/hwpx/section.rscolor_ref_to_hwpx: 동일하게 alpha 보존 출력
  • 기존 테스트 test_parse_color_str_with_alpha 수정 및 케이스 추가

검증

  • cargo test — 전체 통과
  • cargo clippy -- -D warnings — 경고 0건

Closes #606

감사합니다.

parse_color_str에서 #AARRGGBB 파싱 시 alpha 바이트를 버리고
0x00BBGGRR로 변환하던 문제를 0xAABBGGRR로 보존하도록 수정.
style_resolver의 기존 로직(상위 바이트 비제로 → 채우기 없음)이
의도대로 동작하여 투명 배경이 검정으로 렌더링되는 결함 해소.

직렬화 경로(color_hex, color_ref_to_hwpx)도 alpha 비제로 시
#AARRGGBB 형식으로 출력하도록 수정하여 라운드트립 보존.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 9, 2026 13:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

HWPX 색상 문자열(faceColor="#AARRGGBB") 파싱/직렬화 과정에서 상위 바이트(예약/alpha 바이트)가 소실되어, 일부 표 배경이 검정으로 렌더링되는 문제(#606)를 해결하기 위한 변경입니다.

Changes:

  • parse_color_str#AARRGGBB 입력을 0xAABBGGRR로 변환하도록 상위 바이트를 보존
  • HWPX 직렬화 시 상위 바이트가 0이 아닌 ColorRef를 #AARRGGBB로 출력
  • 관련 테스트를 갱신하고 케이스를 추가

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
src/parser/hwpx/utils.rs #AARRGGBB 파싱 시 상위 바이트를 보존하도록 수정 + 테스트 보강
src/serializer/hwpx/header.rs ColorRef를 HWPX hex로 직렬화할 때 상위 바이트 보존 출력 지원
src/serializer/hwpx/section.rs 섹션 직렬화에서 ColorRef를 #RRGGBB/#AARRGGBB로 출력하도록 확장

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +316 to +320
if a == 0 {
format!("#{:02X}{:02X}{:02X}", r, g, b)
} else {
format!("#{:02X}{:02X}{:02X}{:02X}", a, r, g, b)
}
Comment thread src/serializer/hwpx/header.rs Outdated

fn color_hex(c: ColorRef) -> String {
// ColorRef = u32. HWP는 BGR 저장. HWPX는 RGB "#RRGGBB".
// ColorRef = u32. HWP는 0xAABBGGRR 저장. HWPX는 "#RRGGBB" 또는 "#AARRGGBB".
Comment thread src/parser/hwpx/utils.rs
Comment on lines +75 to +81
// AARRGGBB → 0xAABBGGRR (alpha 보존)
if let Ok(v) = u32::from_str_radix(hex, 16) {
let a = (v >> 24) & 0xFF;
let r = (v >> 16) & 0xFF;
let g = (v >> 8) & 0xFF;
let b = v & 0xFF;
return b << 16 | g << 8 | r;
return a << 24 | b << 16 | g << 8 | r;
- color_hex()에 0xFFFFFFFF 센티넬 → "none" 반환 추가
  (section.rs의 color_ref_to_hwpx와 일관성 확보)
- parse_color() 문서를 alpha 보존 동작에 맞게 수정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@oksure

oksure commented May 9, 2026

Copy link
Copy Markdown
Contributor Author

Copilot 리뷰 반영 (3ff9c56):

  • color_hex()에 0xFFFFFFFF 투명 센티넬 → "none" 반환 추가 (section.rs의 color_ref_to_hwpx와 동일한 패턴)
  • parse_color() doc comment를 alpha 보존 동작(0xAABBGGRR)에 맞게 수정

edwardkim added a commit that referenced this pull request May 10, 2026
…더링 정정

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)
edwardkim added a commit that referenced this pull request May 10, 2026
- 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건 처리)
@edwardkim

edwardkim commented May 10, 2026

Copy link
Copy Markdown
Owner

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

처리 결과

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

자기 검증

  • `cargo build/test --release` ✅ ALL GREEN
  • `cargo test --lib parser::hwpx::utils` ✅ 3 PASS (`test_parse_color_str_with_alpha` 신규 케이스 포함)
  • 광범위 sweep (7 fixture / 170 페이지) ✅ 170 same / 0 diff (HWPX 만 영향, HWP 변환본 무관)

PR supersede (a) 패턴

PR #607 (@dicebattle, 4/29 OPEN, parser 만 정정) 영역이 본 PR #744 가 본질 (parser alpha 보존) 완전 포함 + serializer 양방향 정합 추가 영역 close+통합 머지 처리합니다 (`feedback_pr_supersede_chain` (a) 패턴 정합).

시각 판정 면제

단위 테스트 결정적 검증 + 양방향 라운드트립 정합 → 시각 판정 면제 합리.

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

@oksure20+ 사이클 컨트리뷰션 영역 — 5/10 사이클 영역 영역 PR #720/#723/#725/#728/#729/#730/#732/#734/#735/#737/#738/#739/#740/#742/#743/#744 영역 16건 처리 완료 영역.

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.

3 participants