결함 개요
선행: PR #863 (closes #860) — BMP 콘텐츠 누락 fix 적용 완료. 그러나 시각 정합 잔여.
samples/hwp3-sample14.hwp (및 HWP5/HWPX 변환본) 의 WMF metafile 내 element y 좌표가 한컴 PDF / 편집기와 반대 순서로 렌더링.
시각 비교 (page 2/11)
| 시각 요소 |
rhwp-studio |
한컴 편집기 / PDF |
| 페이지 상단 |
캡션 outline (점선 박스) + 텍스트 "'P' 명령 이후..." |
BMP 박스 2개 (Vim 화면) |
| 그 아래 |
BMP 박스 2개 (Vim 화면) |
캡션 outline + 텍스트 |
| paragraph 흐름 |
캡션 + 박스 후 본문 시작 위치 어긋남 |
박스 + 캡션 + 본문 흐름 정합 |
본질 진단 (PR #863 Stage D 결과)
<image href="data:image/svg+xml;base64,..."> 의 inner SVG element y 좌표:
| 요소 |
y 좌표 |
rhwp 위치 |
한컴 PDF 위치 |
| rect (캡션 outline) |
1008 |
위 |
아래 |
| text (캡션 글자) |
1205 |
위 |
아래 |
| image (BMP Vim 박스) |
1536 |
아래 |
위 |
rhwp: SVG 렌더링 시 y 작은 게 위 (top-down) → rect/text 위, image 아래
한컴: image 위 + rect/text 아래
진단된 시도 (PR #863 Stage D)
- `Window::as_view_box()` 가 origin 적용 — viewBox 시작점 정합
- viewBox 양방향 자동 확장 (min/max x/y) — element bbox cover
- y-flip framework (`Window::y_inverted`) 도입 — SetWindowExt y < 0 (Cartesian) 감지 (sample14 는 미적용)
이 3 시도로 BMP 콘텐츠 표시 + viewBox 정합 달성. 그러나 element y 순서 자체는 미정정.
WMF binary 분석 (RHWP_DEBUG_WMF trace)
- SetWindowOrg: (329, 1536), (624, 1872)
- SetWindowExt: (4231, 1189), (4176, 1400) — 모두 positive (top-down)
- Placeable BoundingBox: (329, 1536) ~ (4560, 2725)
- Window range: y ∈ [1536, 2725]
- element y=1008, 1205 < window top=1536 → element 가 window 위쪽 밖
이는:
- WMF binary 자체가 비정상 (element 가 BoundingBox 밖), 또는
- WMF parser 가 record 좌표 잘못 추출, 또는
- 한컴이 별도 y 변환 (e.g., logical_y → device_y 매핑) 적용
본질 가설
- H1: WMF binary 의 SetMapMode (MM_ANISOTROPIC 등) 처리 차이
- H2: WMF binary 의 SetViewportOrg / SetViewportExt 미처리 (현재 rhwp 가 Window 만 처리)
- H3: WMF record 의 좌표 변환 (logical → device) 처리 차이
- H4: 한컴이 element y 를 `origin_y + (origin_y + ext_y - y - elem_h)` 같은 변환 적용 (mirror 변환)
영향 sample
samples/hwp3-sample14.hwp (HWP3)
samples/hwp3-sample14-hwp5.hwp (HWP5 변환본)
samples/hwp3-sample14-hwp5.hwpx (HWPX 변환본)
- 다른 WMF 보유 sample 도 영향 가능 (현재 sample13/exam_eng 등은 WMF 미사용)
권위 자료
pdf/hwp3-sample14-hwp5-2022.pdf (한컴 한글 2022, 11 페이지)
- 사용자 한컴 편집기 screenshot (2/11쪽)
다음 단계 (제안)
- WMF binary 의 모든 record 추출 + dump (SetMapMode, SetViewport*, SetWindow* 등)
- WMF spec 정밀 분석 + element y 좌표 변환 로직 검증
- SetViewport* 처리 추가 (현재 미처리)
- 한컴 정합 정정 + 회귀 검증
CLAUDE.md 규칙 정합: EMF/WMF 는 공통 format 모듈 — HWP3 전용 분기 추가 금지.
선행
결함 개요
선행: PR #863 (closes #860) — BMP 콘텐츠 누락 fix 적용 완료. 그러나 시각 정합 잔여.
samples/hwp3-sample14.hwp(및 HWP5/HWPX 변환본) 의 WMF metafile 내 element y 좌표가 한컴 PDF / 편집기와 반대 순서로 렌더링.시각 비교 (page 2/11)
본질 진단 (PR #863 Stage D 결과)
<image href="data:image/svg+xml;base64,...">의 inner SVG element y 좌표:rhwp: SVG 렌더링 시 y 작은 게 위 (top-down) → rect/text 위, image 아래
한컴: image 위 + rect/text 아래
진단된 시도 (PR #863 Stage D)
이 3 시도로 BMP 콘텐츠 표시 + viewBox 정합 달성. 그러나 element y 순서 자체는 미정정.
WMF binary 분석 (RHWP_DEBUG_WMF trace)
이는:
본질 가설
영향 sample
samples/hwp3-sample14.hwp(HWP3)samples/hwp3-sample14-hwp5.hwp(HWP5 변환본)samples/hwp3-sample14-hwp5.hwpx(HWPX 변환본)권위 자료
pdf/hwp3-sample14-hwp5-2022.pdf(한컴 한글 2022, 11 페이지)다음 단계 (제안)
CLAUDE.md 규칙 정합: EMF/WMF 는 공통 format 모듈 — HWP3 전용 분기 추가 금지.
선행