Skip to content

옛한글 PUA → 자모 변환 후 폰트 매트릭스 (글자폭/줄간격) 계산 갱신 필요 (Task #528 후속) #555

@edwardkim

Description

@edwardkim

배경

PR #551 의 Task #528 (옛한글 PUA → KS X 1026-1:2007 자모 변환) cherry-pick 머지 후 작업지시자 시각 판정 중 발견된 후속 결함.

결함

옛한글 PUA 코드포인트가 정상적으로 자모 시퀀스로 매핑되어 시각 출력은 정합 (`exam_kor p17` PUA 잔존 0 + Hangul Jamo 102 정상 표시). 그러나 폰트 매트릭스 (글자폭 / advance / 줄간격 등) 계산 이 PUA char 1글자 기준으로 유지되어 있어 자모 시퀀스 (3-4 char) 와 정합 안 됨.

작업지시자 인용:

폰트 매트릭스 계산도 이에 따라 갱신되어야 겠네요.

본질 (가설)

Task #528 의 정정 (Stage 3, commit `a15847c`) 이 Option A — 렌더러 draw_text 시점 변환 채택:

  • `run.text` 는 IR 와 동일하게 PUA char 1글자 보존
  • `display_text` 필드 (Composer) + draw_text 시점 변환 (svg.rs / web_canvas.rs)
  • `char_offsets` / `char_start` / `line_chars` 등 인덱싱 불변성 유지

인덱싱 불변성 유지의 trade-off: 폰트 매트릭스 계산 (예: `estimate_text_width`, char advance 등) 이 `run.text` 의 PUA 1글자 폭으로 계산되어 실제 표시되는 자모 시퀀스의 글자폭과 다름.

가능한 영향:

  1. Square wrap / 줄바꿈 위치 — 글자폭이 짧게 계산되어 줄에 더 많은 글자가 들어가는 것으로 인식 (실제 출력은 더 넓음)
  2. 줄간격 — 자모 합자의 height 가 PUA 추정값과 다를 가능성
  3. TAC / 인라인 그림과의 정합 — 글자폭 차이로 인한 위치 오차

정정 후보 (Stage 1 진단 후 결정)

옵션 A — display_text 기반 매트릭스 계산

`run.text` 가 아닌 `display_text` (또는 `map_pua_old_hangul(run.text)`) 를 매트릭스 계산에 사용. 인덱싱 (char_offsets) 은 별도 분기로 PUA 1글자 기준 유지.

옵션 B — IR 단계에서 변환 (Composer 영역)

draw_text 시점 변환을 IR 변환 시점으로 이동. char_offsets 도 자모 시퀀스 기준으로 재계산. 광범위 영향 (12+ 모듈) 가능성.

옵션 C — Option A 보강 (글자폭만 별도 계산)

draw_text 시점 변환 유지 + `estimate_text_width` 등 폰트 매트릭스 함수만 자모 시퀀스 기준으로 계산.

진단 절차

```bash
rhwp dump samples/exam_kor.hwp -s 0 -p 17 # pi=17 의 line_segs / char_offsets 점검
rhwp export-svg samples/exam_kor.hwp -p 16 -o output/debug/ # SVG 의 글자 위치 비교
```

한컴 2010/2020 PDF 와 비교하여 글자 위치 / 줄바꿈 / 줄간격 영역의 정합도 측정.

의존성

환경

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions