Skip to content

fix: PUA 심볼 렌더링 + 문단 테두리 여백 반영 (v0.7.3)#234

Closed
seanshin wants to merge 7 commits into
edwardkim:mainfrom
seanshin:main
Closed

fix: PUA 심볼 렌더링 + 문단 테두리 여백 반영 (v0.7.3)#234
seanshin wants to merge 7 commits into
edwardkim:mainfrom
seanshin:main

Conversation

@seanshin

Copy link
Copy Markdown

Summary

  • PUA 심볼 문자 렌더링: draw_text에서 Wingdings 등 심볼 폰트의 PUA 문자(U+F000~F0FF)를 map_pua_bullet_char로 유니코드 표준 문자로 변환 (⇩⇧⇦⇨ 화살표, ●■◆ 도형, ✔☑ 체크마크 등)
  • 문단 테두리/배경 여백: border_fill 렌더링 시 문단의 margin_left/margin_right를 반영하여 테두리 박스가 텍스트 영역과 정확히 일치
  • Visual Diff 파이프라인(한컴 PDF ↔ rhwp SVG 페이지별 픽셀 비교)으로 검증

Changed Files

File Change
src/renderer/svg.rs draw_text에서 PUA → 유니코드 변환 추가
src/renderer/layout/paragraph_layout.rs border_fill rect에 margin_left/right 반영
CHANGELOG.md v0.7.3 변경 사항
Cargo.toml version 0.7.2 → 0.7.3
README.md Rendering features에 Symbol fonts, Paragraph border/fill 추가

Test plan

  • cargo test — 793 passed, 0 failed
  • Visual Diff: KTX.hwp 페이지 7 — ⇩ 화살표 7개 정상 표시 확인
  • Visual Diff: KTX.hwp 페이지 11 — border_fill 박스 마진 정상 반영 확인
  • 기존 페이지 regression 없음 (페이지 2, 6 SSIM 유지)

🤖 Generated with Claude Code

hyoun mouk shin and others added 3 commits April 22, 2026 09:58
- SVG draw_text에서 PUA 문자(U+F000~F0FF)를 map_pua_bullet_char로
  유니코드 표준 문자로 변환 (Wingdings ⇩⇧⇦⇨ 등 정상 표시)
- 문단 border_fill rect에 margin_left/margin_right 반영하여
  테두리 박스가 텍스트 영역과 정확히 일치
- Visual Diff 파이프라인으로 한컴 렌더링과 비교 검증 완료
- 793 tests passed, 0 failed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SVG 렌더러에만 적용했던 PUA 문자 변환을 web_canvas.rs, html.rs의
draw_text에도 동일하게 적용하여 에디터/HTML 출력에서도
Wingdings 심볼(⇩⇧●■✔ 등)이 정상 표시되도록 수정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
셀 테두리만으로 표 외곽이 채워지지 않을 때
table.border_fill_id의 borders를 외곽 엣지에 fallback으로 보충.
셀의 바깥 면 테두리가 None인 경우에도 표 전체 외곽선이 정상 표시됨.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
셀이 존재하지만 의도적으로 테두리를 없앤 외곽 엣지에는
table.border_fill_id fallback을 적용하지 않도록 수정.
셀이 커버하지 않는 외곽 엣지에만 테두리 보충.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
hyoun mouk shin and others added 3 commits April 22, 2026 11:41
available_width에 margin_left가 포함되어 서로 다른 margin의 문단에서
right tab 위치가 어긋나는 문제 수정. right_tab_width(col_area.width -
margin_right)를 사용하여 모든 문단의 페이지 번호가 동일 위치에 정렬.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 테스트 수 793+으로 갱신
- Visual diff 테스트 파이프라인 항목 추가
- 목차 right tab 정렬 기획서, visual diff 기획서 추가

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

edwardkim commented Apr 22, 2026

Copy link
Copy Markdown
Owner

PR 감사합니다 🙏

@seanshin 님, PR을 열어주셔서 감사합니다. PUA 심볼 렌더링문단 테두리 여백 반영 아이디어는 매우 좋고, Visual Diff 파이프라인으로 한컴 렌더링과 비교 검증하신 점이 인상적입니다.

다만 현재 PR을 그대로 머지하기에는 몇 가지 정리가 필요해서 다시 작업해주시기를 요청드립니다. 아래 사항을 반영해서 재제출해주시면 빠르게 검토해드리겠습니다.


1. 🔀 Base 브랜치 문제 (Critical)

PR의 head와 base가 모두 main으로 설정되어 있습니다. rhwp의 워크플로우는 아래와 같습니다:

  • 외부 기여: Fork 기반 + devel 브랜치 대상 PR
  • 직접 기여: local/task{N}devel

참고: CLAUDE.md — 컨트리뷰터 워크플로우

# Fork 후
git checkout -b feature/pua-symbol-border-margin
# 작업 후
gh pr create --repo edwardkim/rhwp --base devel --head <contributor>:feature/pua-symbol-border-margin

또한 현재 PR은 base가 구 main(v0.7.3 시점)에 머물러 있어 충돌 상태(dirty) 입니다. 최신 devel로 rebase하여 재제출 부탁드립니다.


2. 📝 문서 언어 규칙

rhwp는 모든 프로젝트 문서를 한국어로 작성합니다. 이는 단순한 선호가 아니라 프로젝트의 문화/역사 맥락을 보존하기 위한 규칙입니다.

현재 PR에 포함된 아래 2개 계획서는:

  • mydocs/eng/plans/task_right_tab_align.md (167줄)
  • mydocs/eng/plans/task_visual_diff.md (503줄)

위치와 언어 둘 다 재조정이 필요합니다:

항목 현재 요청
위치 mydocs/eng/plans/ mydocs/plans/
파일명 task_{name}.md task_{milestone}_{issue}.md (예: task_m100_234.md)
언어 영문 한국어

파일명 규칙: CLAUDE.md — 파일명 규칙


3. 🧭 Hyper-Waterfall 절차

rhwp는 Hyper-Waterfall 방법론을 엄격히 적용합니다. PR 전에 다음 산출물이 필요합니다:

  1. GitHub Issue 등록 — 이 PR에 해당하는 이슈가 아직 없습니다
  2. 수행계획서 (mydocs/plans/task_m100_{이슈번호}.md)
  3. 구현계획서 (mydocs/plans/task_m100_{이슈번호}_impl.md)
  4. (단계별 구현 + 단계별 완료보고서)
  5. 최종 결과보고서 (mydocs/report/task_m100_{이슈번호}_report.md)

현재 PR에는 2개 영문 계획서는 있으나, 이는 Hyper-Waterfall의 수행/구현계획서 구조가 아닙니다. 절차에 맞춰 한국어로 재작성 부탁드립니다.


4. 🔁 버전/CHANGELOG 충돌

PR이 Cargo.toml0.7.2 → 0.7.3으로, CHANGELOG.md에 v0.7.3 항목을 추가하는데, 현재 devel은 이미 v0.7.3이 릴리즈된 이후 상태입니다.

  • 이미 배포된 v0.7.3 CHANGELOG: rhwp-vscode/CHANGELOG.md
  • 본 PR의 수정사항은 다음 마이너 버전(v0.8.0 또는 패치) 에 포함되어야 합니다

재제출 시 Cargo.toml/CHANGELOG.md 변경은 제거하고, 기능 변경만 남겨주세요. 버전 번호는 메인테이너가 릴리즈 시점에 올립니다.


5. 🧹 커밋 히스토리 정리

PR의 7개 커밋 중 #5(7f4f405, right tab 정렬)는 #6(78330fd)에서 스스로 revert하셨습니다. 재제출 시에는 revert 쌍을 squash/drop하여 히스토리를 정리해주세요. 최종적으로는 아래 논리 단위로 정리되면 좋습니다:

  1. PUA 심볼 문자 렌더링 (SVG + Canvas + HTML)
  2. 문단 border_fill margin 반영
  3. 표 외곽 테두리 fallback (셀 미커버 영역)

6. ✅ 잘 되어 있는 점

  • Visual Diff 파이프라인으로 한컴 PDF와 페이지별 픽셀 비교 검증 — 매우 좋은 접근
  • PUA 변환 로직을 SVG/Canvas/HTML 세 렌더러에 일관되게 적용
  • 표 외곽 테두리 fallback에서 셀 커버 영역 제외 처리 등 디테일 고려
  • 793 tests passed, 0 failed

기능 자체는 필요하고 가치 있는 변경입니다.


다시 말씀드리면

기능 PR 자체는 환영하지만, rhwp는 개발 방법론 자체가 프로젝트의 일부입니다. Hyper-Waterfall 절차와 한국어 문서 규칙을 지켜주셔야 합니다.

번거로우시겠지만:

  1. GitHub Issue 등록 (원하시면 제목/개요 초안 도와드리겠습니다)
  2. Fork 후 devel 대상 PR로 재제출
  3. 한국어 수행/구현 계획서 작성
  4. 커밋 정리 (revert 쌍 제거, 논리 단위 squash)
  5. 버전/CHANGELOG 메타 변경 제거

이 순서로 진행해주시면 감사하겠습니다.

궁금하신 점 있으시면 언제든 코멘트 남겨주세요. 🙏

— 메인테이너 드림

@edwardkim

Copy link
Copy Markdown
Owner

재제출 요청 — 위 리뷰 코멘트 참고 부탁드립니다. 이 PR은 닫고, 가이드라인에 맞춰 새 PR로 다시 열어주세요. 🙏

@edwardkim edwardkim closed this Apr 22, 2026
edwardkim added a commit that referenced this pull request Apr 22, 2026
기여자 @planet6897 이 PR #235에 포함해 제출한 기존 섹션(Task #229 Fix / #240)은
그대로 보존하고, 오늘의 메인테이너 활동을 별도 섹션으로 추가:

- PR #234 (close, 재제출 요청) / #235 (merge) / #237 (작성자 자진 취소) 처리 요약
- mydocs/pr/ 폴더 체계 신설 + CLAUDE.md/CONTRIBUTING.md 규칙 보완
- 트러블슈팅 hwp_letter_spacing_compensation.md 추가
- Task #157 시작 (재현 확인, LAYOUT_OVERFLOW 4건 관측)
@seanshin

seanshin commented Apr 22, 2026 via email

Copy link
Copy Markdown
Author

edwardkim added a commit that referenced this pull request Apr 23, 2026
…ot 반영)

피드백 mydocs/feedback/manual_currency_audit.md 결정 반영. 최근 사이클의 주요 변경을
매뉴얼에 동기화하고, PR 처리 절차 매뉴얼을 신설.

[A] publish_guide.md
- 버전 예시 0.7.0 → 0.7.3 (현재 릴리즈 기준)
- 커맨드 예시 갱신 (git tag v0.7.3 등)
- 테스트 수치 783 → 941
- 신규 섹션 "브라우저 확장 버전 정책 (라이브러리와 이원화)" — v0.2.x 정책 명문화

[B] chrome_edge_extension_build_deploy.md → 통합 확장 매뉴얼로 확장
- 제목: "브라우저 확장 빌드 및 배포 매뉴얼 (Chrome/Edge/Firefox/Safari)"
- 빌드 크기 실측치 갱신 (WASM 3.9MB · 전체 23MB)
- 테스트 페이지에 06-security.html 추가
- 4.4 절 Firefox (AMO 제출 절차) + 4.5 절 Safari (macOS 전용 빌드) 신규

[C] browser_extension_dev_guide.md
- 제목: Safari/Chrome/Edge → Safari/Chrome/Edge/Firefox
- Service Worker vs Background Scripts 표에 Firefox 열 추가
- 9절 신규 "chrome.* vs browser.* 네임스페이스 차이"
- 10절 신규 "rhwp-shared/ 공통 모듈 + 심볼릭 링크 + dereference 빌드 패턴" (PR #214)
- 11절 신규 "Chrome onDeterminingFilename vs Firefox onCreated+onChanged"

[D] hyper_waterfall.md
- 783+ 테스트 → 941+ 테스트
- "1인 개발" → "1인 메인테이너 + Claude Code AI + 외부 기여자 9명 (v0.2.1 기준)"
- "v0.6.0 릴리즈" → "v0.5.0 공개 릴리즈 (뼈대 완성 지점)"

[E] e2e_verification_guide.md
- 신규 섹션 "SVG 회귀 검증 (Rust 유닛 테스트 기반)" — PR #181 하네스
- UPDATE_GOLDEN=1 사용법, 결정성 재확인 절차
- 경고: 렌더 영향 PR 머지 후 golden 재생성 필수 (PR #221 / #251 2회 재현)
- 신규 섹션 "향후 작업 — 한컴 PDF 기준 Visual Diff 하네스" — 이슈 #253

[F] onboarding_guide.md
- E2E 모드 설명 환경 일반화 (Windows Chrome → 로컬/컨테이너 헤드리스 · 호스트 Chrome/Chromium)

[G.2] 신규 mydocs/manual/pr_review_workflow.md
- PR 리뷰 · 통합 워크플로우 표준화
- 리뷰 문서 2종 (review + impl) 작성 절차
- 로컬 사전 검증 (빌드/테스트/Clippy/doctest/svg_snapshot)
- Admin merge 후 필수 후속 (이슈 close · 감사 코멘트 · devel sync · golden 재생성 · archives 이동)
- 재작업 요청 패턴 (PR #234#251 사례)
- 예외 케이스 (dependabot · 오래된 base · 대형 PR)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 23, 2026
…ot 반영)

피드백 mydocs/feedback/manual_currency_audit.md 결정 반영. 최근 사이클의 주요 변경을
매뉴얼에 동기화하고, PR 처리 절차 매뉴얼을 신설.

[A] publish_guide.md
- 버전 예시 0.7.0 → 0.7.3 (현재 릴리즈 기준)
- 커맨드 예시 갱신 (git tag v0.7.3 등)
- 테스트 수치 783 → 941
- 신규 섹션 "브라우저 확장 버전 정책 (라이브러리와 이원화)" — v0.2.x 정책 명문화

[B] chrome_edge_extension_build_deploy.md → 통합 확장 매뉴얼로 확장
- 제목: "브라우저 확장 빌드 및 배포 매뉴얼 (Chrome/Edge/Firefox/Safari)"
- 빌드 크기 실측치 갱신 (WASM 3.9MB · 전체 23MB)
- 테스트 페이지에 06-security.html 추가
- 4.4 절 Firefox (AMO 제출 절차) + 4.5 절 Safari (macOS 전용 빌드) 신규

[C] browser_extension_dev_guide.md
- 제목: Safari/Chrome/Edge → Safari/Chrome/Edge/Firefox
- Service Worker vs Background Scripts 표에 Firefox 열 추가
- 9절 신규 "chrome.* vs browser.* 네임스페이스 차이"
- 10절 신규 "rhwp-shared/ 공통 모듈 + 심볼릭 링크 + dereference 빌드 패턴" (PR #214)
- 11절 신규 "Chrome onDeterminingFilename vs Firefox onCreated+onChanged"

[D] hyper_waterfall.md
- 783+ 테스트 → 941+ 테스트
- "1인 개발" → "1인 메인테이너 + Claude Code AI + 외부 기여자 9명 (v0.2.1 기준)"
- "v0.6.0 릴리즈" → "v0.5.0 공개 릴리즈 (뼈대 완성 지점)"

[E] e2e_verification_guide.md
- 신규 섹션 "SVG 회귀 검증 (Rust 유닛 테스트 기반)" — PR #181 하네스
- UPDATE_GOLDEN=1 사용법, 결정성 재확인 절차
- 경고: 렌더 영향 PR 머지 후 golden 재생성 필수 (PR #221 / #251 2회 재현)
- 신규 섹션 "향후 작업 — 한컴 PDF 기준 Visual Diff 하네스" — 이슈 #253

[F] onboarding_guide.md
- E2E 모드 설명 환경 일반화 (Windows Chrome → 로컬/컨테이너 헤드리스 · 호스트 Chrome/Chromium)

[G.2] 신규 mydocs/manual/pr_review_workflow.md
- PR 리뷰 · 통합 워크플로우 표준화
- 리뷰 문서 2종 (review + impl) 작성 절차
- 로컬 사전 검증 (빌드/테스트/Clippy/doctest/svg_snapshot)
- Admin merge 후 필수 후속 (이슈 close · 감사 코멘트 · devel sync · golden 재생성 · archives 이동)
- 재작업 요청 패턴 (PR #234#251 사례)
- 예외 케이스 (dependabot · 오래된 base · 대형 PR)

Co-Authored-By: Claude Opus 4.7 (1M context) <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