Skip to content

Supplementary PUA-A 의 SVG 출력 누락 — UTF-16 surrogate pair 처리 결함 추정 #513

@edwardkim

Description

@edwardkim

본질

Task #509 영역 진행 중 발견 — Supplementary PUA-A (U+F02B0~F02FF) 의 SVG 출력 영역 누락.

현상

  • map_pua_bullet_char 함수 영역 매핑 정확:
    • U+F02B1F02B9 → ① ~ ⑨ (U+2460U+2468)
    • U+F02EF → · (U+00B7, Middle dot)
  • 단위 테스트 5/5 통과 (pua_mapping_tests)
  • 한컴 2022 편집기 영역에서 본 영역 모두 정상 출력 (한컴 PDF 정답지 캡처 확인)
  • rhwp 의 SVG 출력 영역에서 본 영역 모두 누락 — text 요소 자체 영역 부재

재현 영역

cargo run --bin rhwp -- gen-pua samples/pua-test.hwp
cargo run --bin rhwp -- export-svg samples/pua-test.hwp -o output/svg/pua-test/
python3 -c \"
with open('output/svg/pua-test/pua-test.svg', 'r') as f: raw = f.read()
print('· (U+00B7) count:', raw.count('·'))   # 0 — 누락 영역
print('① count:', raw.count(''))             # 0 — 누락 영역
\"

추정 원인

Supplementary Plane (U+F0000~U+10FFFF) 의 코드포인트는 UTF-16 영역에서 surrogate pair (4 byte) 영역. BMP 영역의 single u16 영역과 영역 차이.

추정 결함 영역:

  • parse_para_text (src/parser/body_text.rs:353) 의 surrogate pair 디코딩 영역 — 정합 영역
  • paragraph_layout.rschar_offsetschars() 정합 영역 — UTF-16 unit 영역 (Supplementary 는 2 unit) ↔ Rust char 영역 (Supplementary 는 1 char) 영역의 정합 결함 추정
  • 본 영역에서 character_positions / cluster 분할 단계의 영역에서 Supplementary 영역이 영역 누락

진단 도구 영역

gen-pua 영역 (Task #509 영역에서 추가) 의 영역에서 18 종 PUA 코드포인트 영역 검증 영역 활용 가능:

  • 본 영역에서 BMP 영역 (U+0F076~U+0F0FE) 은 정상 영역 출력
  • Supplementary 영역 (U+F02B1~U+F02EF) 은 영역 누락

영향 영역

샘플 사용 codepoint 회수
mel-001 U+F02B1~F02B9 12
kps-ai U+F02B1, F02B2 6
KTX U+F02EF 4

메모리 정합

우선순위

본 영역 결함은 KTX/mel-001/kps-ai 샘플 영역 시각 영역 회귀 영역 — 본 영역 정합 영역 정정 영역 권장.

관련 영역

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