Skip to content

HWPX curve 도형 <hp:seg> 파싱 — 외곽선(태그 박스) 렌더링 (closes #1200)#1203

Merged
edwardkim merged 1 commit into
edwardkim:develfrom
planet6897:fix/1200-curve-seg-outline
Jun 1, 2026
Merged

HWPX curve 도형 <hp:seg> 파싱 — 외곽선(태그 박스) 렌더링 (closes #1200)#1203
edwardkim merged 1 commit into
edwardkim:develfrom
planet6897:fix/1200-curve-seg-outline

Conversation

@planet6897

Copy link
Copy Markdown
Contributor

문제 (closes #1200)

samples/3-09월_교육_통합_2022.hwpx 9쪽 우측 단 "다른 풀이"가 한글 2022 PDF에는 태그 박스( 꺾쇠) 안에 표시되나, 우리 렌더는 텍스트만 있고 박스 외곽선이 없음.

근본 원인

"다른 풀이"는 <hp:curve id="0"> 도형의 drawText 텍스트이고, 박스는 이 curve 도형의 외곽선이다.

이 curve 의 geometry 가 <hp:seg type="..." x1 y1 x2 y2> 417개로 인코딩됨 (<hc:pt> 0개). 그러나 파서 parse_shape_object() (src/parser/hwpx/section.rs)는 가변 꼭짓점을 <hc:pt>(b"pt")에서만 수집 → CurveShape.points 가 empty → curve_to_path_commands_scaled() 가 빈 path 반환 → 외곽선 미렌더. drawText 텍스트는 별도 경로라 텍스트만 보였음.

렌더 인프라(stroke → SVG/Skia, drawing_to_shape_style)는 이미 완비.

좌표/구조 확인

  • seg 좌표 x:50..3145, y:50..1040 = orgSz 3175×1090 로컬 HWPUNIT (렌더러 기대 공간과 동일).
  • 모든 seg chain (seg[i].end == seg[i+1].start), 폐곡선.
  • seg 는 점-대-점 인코딩(제어점 없음) → 폴리라인 재구성.

수정

parse_shape_object()b"seg" 분기 추가 → 첫 seg (x1,y1) + 각 seg (x2,y2)polygon_points 로 폴리라인 구성. segment_types 는 비운 채 유지(LineTo). 모델/렌더러 무변경.

검증

  • cargo build --release / cargo test --release 전체 통과, 회귀 0.
  • 9쪽 SVG: 417-segment <path stroke="#000000"> 외곽선 신규 (d_len 105→15577).
  • 한글 2022 PDF 9쪽 "다른 풀이" 태그 박스 시각 정합.
  • 회귀 테스트 1건 추가.

비고

<hp:seg> CURVE 타입의 진짜 베지어 정밀화는 범위 외(점-대-점 폴리라인으로 시각 정합 달성).

parse_shape_object 가 가변 꼭짓점을 <hc:pt> 에서만 수집해,
geometry 가 <hp:seg x1 y1 x2 y2> 로 인코딩된 curve 는 points 가 비어
외곽선이 그려지지 않았다 ("다른 풀이" 태그 박스 미표시).

<hp:seg> 분기 추가: 첫 seg 시작점 + 각 seg 끝점을 polygon_points 로
폴리라인 재구성 (seg 는 제어점이 아닌 sampled 꼭짓점 → segment_types 비움).
렌더 인프라(stroke→SVG/Skia)는 기존에 완비.

- 회귀 테스트 1건 추가 (curve seg → points chain)
- 검증: 한글 2022 PDF 9쪽 "다른 풀이" 태그 박스 시각 정합, 전체 테스트 통과

closes edwardkim#1200

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@edwardkim edwardkim self-requested a review June 1, 2026 07:35
@edwardkim edwardkim added the enhancement New feature or request label Jun 1, 2026
@edwardkim edwardkim added this to the v1.0.0 milestone Jun 1, 2026
@edwardkim edwardkim merged commit 4f5a8e2 into edwardkim:devel Jun 1, 2026
6 checks passed
@edwardkim

Copy link
Copy Markdown
Owner

머지했습니다(devel 4f5a8e22). 감사합니다.

<hp:seg> chain 을 폴리라인으로 재구성하는 분기 추가가 정확했고, 렌더 인프라(stroke→SVG/Skia)가 이미 완비되어 있어 점만 채우니 외곽선이 그려졌습니다. 9쪽 '다른 풀이' 태그 박스가 한글 2022 PDF 와 시각 정합함을 확인했습니다.

참고: 이 PR 이 #1202(prefixChar) 머지 전에 분기되어 section.rs 테스트 모듈에서 인접 충돌이 있었으나, 두 PR 의 테스트를 모두 보존하여 해소했습니다(본문 b"seg" 분기는 자동 머지). 전체 테스트 1897 passed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants