배경
Task #894 의 Stage 4 (sample16 페이지 18 추가 시각 정합) 진단 중 발견된 두 가지 차이. 본 task #894 의 HWP3 파서/IR 영역과 다른 영역 (rhwp paragraph_layout / WMF converter) 으로 별도 task 분리.
상세 분석: PR (Task #894 PR 으로 곧 생성) 의 mydocs/working/task_m100_894_report.md
차이 1 — paragraph 의 ◦ 글머리 x 좌표 차이 (rhwp paragraph_layout)
증상
samples/hwp3-sample16.hwp 페이지 18 의 본문 paragraph 들 ◦ 글머리 x 좌표 불일치:
| paragraph |
첫 글머리 |
rhwp SVG x |
한컴 viewer |
| 396 |
○ |
117.81 |
(들여쓰기 정합) |
| 397 |
◦ |
107.30 (-10.5 px) |
(paragraph 396 과 같은 x) |
| 398 |
◦ |
107.30 (-10.5 px) |
(paragraph 396 과 같은 x) |
| 399 |
◦ |
107.30 (-10.5 px) |
(paragraph 396 과 같은 x) |
모두 동일 ParaShape (ps_id=426, margins left=6500 indent=-2500). 그러나 paragraph 397~399 만 ◦ x 가 왼쪽으로 시프트.
Root Cause
paragraph 397/398/399 의 raw HWP3 char_shapes 구조 (paragraph 396 과 다름):
paragraph 396:
[CS] pos=0 id=1116 spacing=-8% char=" " (single char_shape)
paragraph 397:
[CS] pos=0 id=1117 spacing=0% char="" ← empty char + 0% spacing
[CS] pos=0 id=1118 spacing=-8% char=" " ← 그 다음 ' '
[CS] pos=7 id=1119 spacing=-12% char="사"
[CS] pos=44 id=1120 spacing=0% char="" ← 또 empty char
paragraph 397 은 첫 부분에 empty char 의 char_shape (pos=0 id=1117) 가 추가됨. rhwp paragraph_layout 이 이 빈 char_shape 의 spacing/font 를 paragraph 시작 x 계산에 반영하여 ◦ 위치 시프트.
fixup_hwp3_outline_bullets (Task #877) 는 paragraph 397 의 두번째 char 가 이미 ◦ 이라 skip — 이 fixup 이 원인 아님. 한컴 HWP3 raw 자체가 paragraph 별로 다른 char_shape 구조 사용.
영역
src/renderer/layout/paragraph_layout.rs — paragraph 의 첫 빈 char_shape 처리.
Fix 방향 (회귀 위험 높음)
- paragraph 의 첫 빈 char ("") 의 char_shape 를 paragraph 시작 x 계산에서 skip
- 단 이는 모든 paragraph 영향 — HWP5/HWPX/HWP3 회귀 점검 필요
차이 2 — WMF 그림 안 텍스트 겹침 (WMF converter)
증상
samples/hwp3-sample16.hwp 페이지 18 의 paragraph 394 picture (WMF 다이어그램 bin_id=3, "주전산센터 목표시스템 구성(안)") 내부의 텍스트 (Windows 서버군, DMZ, Unix 서버군 등) 가 한컴 viewer 와 달리 겹쳐 보임.
영역
src/wmf/converter/ — WMF binary → SVG 변환:
text_out, ext_text_out — 텍스트 출력
set_text_align, set_text_color, set_text_justification — 텍스트 속성
- 한컴 사적 WMF 확장 가능성
Fix 방향 (영역 매우 큼)
- WMF text positioning / font / clipping 정합
- 한컴 WMF spec 정밀 비교 필요
- 다른 WMF 샘플 회귀 점검 자료 확보 필요
권장 처리
각 차이가 영역이 다르므로 분리 task 진행 권장:
- 차이 1 — rhwp paragraph_layout 의 첫 빈 char_shape 처리 (회귀 매우 높)
- 차이 2 — WMF converter 의 text positioning (영역 매우 큼)
본 통합 issue 는 두 차이의 추적용. 각 차이별 독립 작업 가능.
관련
배경
Task #894 의 Stage 4 (sample16 페이지 18 추가 시각 정합) 진단 중 발견된 두 가지 차이. 본 task #894 의 HWP3 파서/IR 영역과 다른 영역 (rhwp paragraph_layout / WMF converter) 으로 별도 task 분리.
상세 분석: PR (Task #894 PR 으로 곧 생성) 의
mydocs/working/task_m100_894_report.md차이 1 — paragraph 의 ◦ 글머리 x 좌표 차이 (rhwp paragraph_layout)
증상
samples/hwp3-sample16.hwp페이지 18 의 본문 paragraph 들 ◦ 글머리 x 좌표 불일치:모두 동일 ParaShape (ps_id=426, margins left=6500 indent=-2500). 그러나 paragraph 397~399 만 ◦ x 가 왼쪽으로 시프트.
Root Cause
paragraph 397/398/399 의 raw HWP3 char_shapes 구조 (paragraph 396 과 다름):
paragraph 397 은 첫 부분에
empty char의 char_shape (pos=0 id=1117) 가 추가됨. rhwp paragraph_layout 이 이 빈 char_shape 의 spacing/font 를 paragraph 시작 x 계산에 반영하여 ◦ 위치 시프트.fixup_hwp3_outline_bullets(Task #877) 는 paragraph 397 의 두번째 char 가 이미 ◦ 이라 skip — 이 fixup 이 원인 아님. 한컴 HWP3 raw 자체가 paragraph 별로 다른 char_shape 구조 사용.영역
src/renderer/layout/paragraph_layout.rs— paragraph 의 첫 빈 char_shape 처리.Fix 방향 (회귀 위험 높음)
차이 2 — WMF 그림 안 텍스트 겹침 (WMF converter)
증상
samples/hwp3-sample16.hwp페이지 18 의 paragraph 394 picture (WMF 다이어그램bin_id=3, "주전산센터 목표시스템 구성(안)") 내부의 텍스트 (Windows 서버군, DMZ, Unix 서버군 등) 가 한컴 viewer 와 달리 겹쳐 보임.영역
src/wmf/converter/— WMF binary → SVG 변환:text_out,ext_text_out— 텍스트 출력set_text_align,set_text_color,set_text_justification— 텍스트 속성Fix 방향 (영역 매우 큼)
권장 처리
각 차이가 영역이 다르므로 분리 task 진행 권장:
본 통합 issue 는 두 차이의 추적용. 각 차이별 독립 작업 가능.
관련
mydocs/working/task_m100_894_report.md(merge 후 접근)