Skip to content

옛한글 PUA → KS X 1026-1:2007 자모 변환 (HncPUAConverter 정합) — exam_kor 17p 고어 미렌더 #528

@planet6897

Description

@planet6897

v2 — 본질 정정 (2026-05-02)

초기 가설 (Hangul Jamo Extended-A/B 폰트 fallback) 이 부정확함이 측정으로 확정. 실제 본질은 PUA 인코딩.

Stage 1 발견

samples/exam_kor.hwp p17 텍스트 추출 (rhwp export-text -p 16) 결과:

영역 발견 본 task v1 가설 정합
Hangul Jamo (U+1100-11FF) 0 ❌ 가설 영역, 부재
Hangul Jamo Extended-A (U+A960-A97F) 0 ❌ 가설 영역, 부재
Hangul Jamo Extended-B (U+D7B0-D7FF) 0 ❌ 가설 영역, 부재
Basic PUA (U+E000-F8FF) 22 unique, 50 회 ★ 실제 영역
Supplementary PUA-A (U+F00DA, F0854, F0855) 3 unique, 68 회 ★ 실제 영역

→ 옛한글 음절이 한컴 자체 PUA 영역에 인코딩됨.

#512 흡수

Issue #512 "PUA 옛한글 영역 KS X 1026-1:2007 자모 변환" 이 본 본질을 정확히 다루고 있음 → 본 task 가 #512 를 흡수.

증상

samples/exam_kor.hwp 페이지 17 의 중세국어 표기 미렌더:

  • '다'(되다), '(혼자)', '​​' 등 옛한글 음절 빈 글리프
  • p17 만 약 25 종 PUA 옛한글 음절 (Basic PUA 22 + Supplementary PUA-A 3)

본질

HanCom 옛한글 인코딩 진화

한컴 버전 옛한글 인코딩
한/글 2010 이전 PUA (U+E000-F8FF + U+F0000+) — 한컴 자체 정의
한/글 2010+ KS X 1026-1:2007 자모 영역 (U+1100-11FF + U+A960-A97F + U+D7B0-D7FF) — 표준

exam_kor.hwp 는 한/글 2010+ 환경이지만 옛한글 입력은 이전 판 호환 (PUA) 으로 보존.

HncPUAConverter

한컴은 자체 변환 도구 (hncpuaconverter.htm) 제공:

HncPUAConverter.exe — PUA 영역 옛한글 → KS X 1026-1:2007 유니코드 자모 시퀀스 변환

rhwp 도 동일 변환을 자체 구현해야 정상 렌더링 가능.

한컴 PDF 가 정상 렌더되는 이유

한컴 자체 폰트 (함초롬바탕 LVT) 가 PUA 코드포인트에 옛한글 글리프 직접 보유. rhwp 는 라이선스로 이 폰트 사용 불가 → PUA 변환 필수.

해결안

변환 파이프라인

[원본 IR: PUA U+E38A 등]
       ↓ Composer 단계
[map_pua_old_hangul] — 매핑 표 룩업
       ↓
[KS X 1026-1 자모 시퀀스: U+1112 + U+1163 + U+11AB 등]
       ↓ Task #122 자모 클러스터 처리 (기존 인프라)
[자모 클러스터 → 폰트 합자 (CCMP/LJMO/VJMO/TJMO)]
       ↓
[Noto Serif KR 또는 Source Han Serif K Old Hangul]

작업 영역

  1. PUA 매핑 표 확보 — 오픈소스 자료원 (pyhwp, hwp.js) + KS X 1026-1:2007 표준 + gen-pua 도구로 한컴 PDF 비교
  2. 변환 함수 구현src/renderer/pua_oldhangul.rs (신규 모듈)
  3. Composer 통합src/renderer/composer.rs::convert_pua_old_hangul
  4. 폰트 fallback 보강 (조건부) — Noto Serif KR 합자 미지원 시 본명조 (Source Han Serif K) Old Hangul subset 도입
  5. 광범위 회귀 + 작업지시자 시각 판정 (한컴 2010 / 2020 PDF 비교)

핵심 회귀 영역

산출물

  • mydocs/plans/task_m100_528.md v2
  • mydocs/plans/task_m100_528_impl.md v2
  • mydocs/working/task_m100_528_stage{1..4}.md
  • mydocs/report/task_m100_528_report.md
  • src/renderer/pua_oldhangul.rs (신규)
  • src/renderer/composer.rs (수정)
  • tests/pua_oldhangul.rs + tests/issue_528.rs (신규)
  • (조건부) 폰트 자산 + style_resolver 갱신

마일스톤

v1.0.0 (M100)

참고

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions