fix: PUA 심볼 렌더링 + 문단 테두리 여백 반영 (v0.7.3)#234
Conversation
- 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>
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>
This reverts commit 7f4f405.
- 테스트 수 793+으로 갱신 - Visual diff 테스트 파이프라인 항목 추가 - 목차 right tab 정렬 기획서, visual diff 기획서 추가 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PR 감사합니다 🙏@seanshin 님, PR을 열어주셔서 감사합니다. PUA 심볼 렌더링과 문단 테두리 여백 반영 아이디어는 매우 좋고, Visual Diff 파이프라인으로 한컴 렌더링과 비교 검증하신 점이 인상적입니다. 다만 현재 PR을 그대로 머지하기에는 몇 가지 정리가 필요해서 다시 작업해주시기를 요청드립니다. 아래 사항을 반영해서 재제출해주시면 빠르게 검토해드리겠습니다. 1. 🔀 Base 브랜치 문제 (Critical)PR의 head와 base가 모두
# 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가 구 2. 📝 문서 언어 규칙rhwp는 모든 프로젝트 문서를 한국어로 작성합니다. 이는 단순한 선호가 아니라 프로젝트의 문화/역사 맥락을 보존하기 위한 규칙입니다.
현재 PR에 포함된 아래 2개 계획서는:
위치와 언어 둘 다 재조정이 필요합니다:
파일명 규칙: CLAUDE.md — 파일명 규칙 3. 🧭 Hyper-Waterfall 절차rhwp는 Hyper-Waterfall 방법론을 엄격히 적용합니다. PR 전에 다음 산출물이 필요합니다:
현재 PR에는 2개 영문 계획서는 있으나, 이는 Hyper-Waterfall의 수행/구현계획서 구조가 아닙니다. 절차에 맞춰 한국어로 재작성 부탁드립니다. 4. 🔁 버전/CHANGELOG 충돌PR이
재제출 시 5. 🧹 커밋 히스토리 정리PR의 7개 커밋 중 #5(
6. ✅ 잘 되어 있는 점
기능 자체는 필요하고 가치 있는 변경입니다. 다시 말씀드리면기능 PR 자체는 환영하지만, rhwp는 개발 방법론 자체가 프로젝트의 일부입니다. Hyper-Waterfall 절차와 한국어 문서 규칙을 지켜주셔야 합니다. 번거로우시겠지만:
이 순서로 진행해주시면 감사하겠습니다. 궁금하신 점 있으시면 언제든 코멘트 남겨주세요. 🙏 — 메인테이너 드림 |
|
재제출 요청 — 위 리뷰 코멘트 참고 부탁드립니다. 이 PR은 닫고, 가이드라인에 맞춰 새 PR로 다시 열어주세요. 🙏 |
기여자 @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건 관측)
|
아 이제 이메일 확인했습니다.
알겠습니다.
2026년 4월 22일 (수) 오후 8:09, edward kim ***@***.***>님이 작성:
… *edwardkim* left a comment (edwardkim/rhwp#234)
<#234?email_source=notifications&email_token=ACA5FZG6U4BO2BQW6B7OD2L4XCR6PA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTIMRZGU3DONJRGUY2M4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJNLQOJPWG33NNVSW45C7N5YGK3S7MNWGSY3L#issuecomment-4295675151>
재제출 요청 — 위 리뷰 코멘트 참고 부탁드립니다. 이 PR은 닫고, 가이드라인에 맞춰 새 PR로 다시 열어주세요. 🙏
—
Reply to this email directly, view it on GitHub
<#234?email_source=notifications&email_token=ACA5FZG6U4BO2BQW6B7OD2L4XCR6PA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTIMRZGU3DONJRGUY2M4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJNLQOJPWG33NNVSW45C7N5YGK3S7MNWGSY3L#issuecomment-4295675151>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACA5FZCF47L47O3TL4PSPOL4XCR6PAVCNFSM6AAAAACYBVH6IOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DEOJVGY3TKMJVGE>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
--
===============================================================
*신현묵, Sean Shin, velog ***@***.***>, 블로그
<https://blog.naver.com/zetlos>, 브런치 ***@***.***>,* 페이스북
<http://facebook.com/zetlos>, 팟캐스트 <http://www.podbbang.com/ch/1774012>
'백세코딩', 스스로의 삶을 프로그래밍 하라 <http://www.yes24.com/24/goods/13895529>
===============================================================
전) 우리들병원그룹, WGIMC IT전략담당이사. 관동대학교 명지병원 정보통신팀 팀장. 지식경제부, IT융합지원센터
기획위원장. 지식경제부 디지털병원수출지원사업 (기술위원장). 한국디지털병원 수출사업협동조합 (IT전략 전문위원). 대한의료정보학회
기획의원, NIPA 실무아키텍트 포럼 의료분과장, 기술표준원 스마트의료 기획위원, 스윗트래커 CTO, 케어랩스 CTO/ 굿닥사업부
서비스본부장, 와탭랩스 CBO, 뉴로핏 부사장/CPO, 페오펫 기술고문, 케어마인드 부사장
자문 : 아크릴, 인피니트 헬스케어, NHN Labs, 말랑스튜디오, 핀다, AX, 4차산업위 헬스케어분과 기획위원
===============================================================
This e-mail may contain confidential information and is intended only for
the individual(s) named above. If you are not the named addressee, you
should not disseminate, distribute or copy this e-mail. Please notify the
sender immediately by e-mail if you have received it by mistake and delete
it from your system. E-mail transmission cannot be guaranteed to be secure
or error-free as information could be intercepted, corrupted, lost,
destroyed, or incomplete. This e-mail may arrive late or contain viruses.
The sender therefore does not accept liability for any errors or omissions
in the contents of this message, which arise as a result of e-mail
transmission.
본 메일에는 비밀정보가 포함되어 있을 수 있으며, 이 메일은 위의 수신자에게만 발송된 것입니다. 위의 수신자가아니면 본 메일을 유포,
배포, 복사를 해서는 안됩니다. 본 메일이 잘못 전송된 경우 즉시 메일 발신자에게 알려주시고, 아울러 이 메일을 삭제해 주시기
바랍니다. 전자메일은 정보의 도청, 변조, 손실, 훼손, 지연 도착, 일부 멸실, 바이러스 감염 등이 발생할 수 있어 보안성이나
무결성을 보장받지 못합니다. 따라서, 메일 발신자는 전자메일 전송으로 발생하는 내용상 오류 및 누락 등에 관하여 책임을 지지 않습니다.
|
…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>
…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>
Summary
draw_text에서 Wingdings 등 심볼 폰트의 PUA 문자(U+F000~F0FF)를map_pua_bullet_char로 유니코드 표준 문자로 변환 (⇩⇧⇦⇨ 화살표, ●■◆ 도형, ✔☑ 체크마크 등)border_fill렌더링 시 문단의margin_left/margin_right를 반영하여 테두리 박스가 텍스트 영역과 정확히 일치Changed Files
src/renderer/svg.rsdraw_text에서 PUA → 유니코드 변환 추가src/renderer/layout/paragraph_layout.rsCHANGELOG.mdCargo.tomlREADME.mdTest plan
cargo test— 793 passed, 0 failed🤖 Generated with Claude Code