Skip to content

Task #688: table-vpos-01.hwpx p.5 nested 표 외부 셀 height 미반영 (외부 표 + 측정자 1×1 unwrap 동일 결함)#694

Merged
edwardkim merged 4 commits into
edwardkim:develfrom
planet6897:pr-task688-stream
May 9, 2026
Merged

Task #688: table-vpos-01.hwpx p.5 nested 표 외부 셀 height 미반영 (외부 표 + 측정자 1×1 unwrap 동일 결함)#694
edwardkim merged 4 commits into
edwardkim:develfrom
planet6897:pr-task688-stream

Conversation

@planet6897

Copy link
Copy Markdown
Contributor

요약

samples/table-vpos-01.hwpx 5쪽 마지막 큰 표(pi=34, "정부혁신 4대 추진전략 / 12대 추진과제")의 nested 11×3 그리드(4그룹 + 12 추진과제)가 SVG 출력에서 시각적으로 누락되는 결함을 수정합니다.

PDF 권위본 (pdf/table-vpos-01-2022.pdf) 5쪽과 시각 정합 회복.

결함 본질 (두 곳 동일 코드 결함)

외부 1×1 표 셀 안에 nested 표 2개 (1×1 헤더 + 11×3 그리드) 가 있는 구조 처리 시:

  • src/renderer/layout/table_layout.rs::layout_table()
  • src/renderer/height_measurer.rs::measure_table_impl()

두 곳 모두 1×1 래퍼 unwrap 로직이 `flat_map(...).find_map(...)` 으로 셀 paragraphs 전체를 훑어 첫 nested 표만 가져오는 패턴.

paragraphs 가 2개 이상이면 두 번째 nested 표가 통째 누락:

  • layout_table: 외부 표가 nested 1×1 헤더로 unwrap → 11×3 그리드 누락
  • measure_table: measured_table.row_heights 가 nested 1×1 헤더 height(57.72px) 로 잡힘 → cell-clip 이 작게 그려져 nested 11×3 셀(y=295~)이 클립 밖

두 결함이 결합되어 페이지 5 의 nested 11×3 그리드가 SVG 에 그려지지 않거나 클립으로 가려졌습니다.

수정

두 곳 모두 unwrap 조건을 다음 4가지 모두 충족하는 경우로 좁힘:

  1. 외부 표 1×1 단일 셀 (현행)
  2. 셀 paragraphs 가 정확히 1개
  3. 그 paragraph 의 control 이 정확히 1개의 nested table 만
  4. visible text 없음 (현행)
Commit 파일 라인
Stage 1 `src/renderer/layout/table_layout.rs` +15 / -7
Stage 3 fix `src/renderer/height_measurer.rs` +13 / -9

검증

시각 정합 (DoD 1~4)

`rsvg-convert` 로 SVG → PNG 변환:

시점 페이지 5 PNG nested 11×3 그리드
결함 (수정 전) 누락
Stage 1 만 26 KB 클립으로 가려짐
Stage 1 + Stage 3 fix 142 KB ✅ 완전 표시 (PDF 권위본 정합)

광범위 회귀 (DoD 5)

159 샘플 / 1502 페이지 SVG byte 비교:

  • 의도된 변경: `table-vpos-01.{hwp,hwpx}` 페이지 5
  • 자연 해소: `exam_social.hwp` 페이지 1 (동일 결함이 paras=3 인 1×1 셀에도 영향, 외부 표 정상 렌더로 cell-clip 통합)
  • 회귀 0건

단위 테스트 (DoD 6)

`cargo test` 1192+ 테스트 전부 통과 (SVG 스냅샷 6건 포함)

보조 관찰 (별개 결함, 본 PR 범위 외)

  • 페이지 2 hwp_used diff = -791.9px, 페이지 3 = -1658.3px — 본 수정과 무관, 후속 이슈 분리 권장
  • 1×1 래퍼 unwrap 로직이 `layout_table` 과 `height_measurer` 두 곳에 중복 — 향후 공통 helper 추출 검토

Test plan

  • `cargo build --release`
  • `cargo test --release` 전체 통과
  • `samples/table-vpos-01.hwpx` SVG 시각 정합 (PDF 권위본 비교)
  • 159 샘플 / 1502 페이지 회귀 검증 (회귀 0건)

closes #688

🤖 Generated with Claude Code

planet6897 added 4 commits May 8, 2026 07:13
`layout_table()` 의 1×1 래퍼 unwrap 로직이 셀 paragraphs 전체를 flat_map 으로
훑어 첫 nested 표만 가져왔다. paragraphs 가 2개 이상이거나 nested 표 외 다른
control 이 섞인 경우 두 번째 paragraph 의 nested 표가 통째 누락되었다.

조건을 다음 4가지 모두 충족하는 경우로 좁힘:
1. 외부 표 1×1 단일 셀
2. 셀 paragraphs 정확히 1개
3. 그 paragraph 의 control 이 정확히 1개의 nested table 만
4. visible text 없음

검증: samples/table-vpos-01.hwpx p.5 nested 11×3 그리드 (4그룹+12 추진과제)
복원. SVG 크기 20KB→132KB, text 요소 55→343. 페이지 1 LAYOUT_OVERFLOW 4.1px
자연 해소.
cargo test 1192+ 테스트 전부 통과. samples/ 직속 159 샘플 (.hwp 155 + .hwpx 4)
대상 SVG byte 비교에서 diff 3건만 발생:
- table-vpos-01.{hwp,hwpx} p.5: 의도된 결함 수정
- exam_social.hwp p.1: 자연 해소 (문단 0.1 의 1×1 표 셀이 paras=3 으로
  unwrap 조건 미충족 → 외부 표 정상 렌더, cell-clip 통합 + width 411.92 정상화)

회귀 0건 확정.
단계 1 에서 layout_table 의 1×1 unwrap 조건만 강화했으나, height_measurer.rs
의 measure_table_impl 에 동일 결함 코드가 남아있어 외부 표 측정 시 nested 1×1
헤더로 unwrap 되어 measured_table.row_heights = [4329HU=57.72px] 로 잡혔다.
layout 단계에서 measured_table 이 있으면 resolve_row_heights 가 early return
하므로 외부 표 권위 cell.height(50720HU)가 무시되고 cell-clip 이 57.72px 로
잡혀 nested 11×3 그리드(y=295~)가 모두 클립 밖으로 가려졌다.

layout_table 과 동일한 4가지 조건 (paragraphs.len()==1 + control 정확히 1개의
nested table + visible text 없음) 으로 좁혔다.

검증: SVG → PNG 변환에서 페이지 5의 4그룹 + 12 추진과제 그리드가 PDF 권위본
과 시각적으로 정합. 페이지 5 PNG 26KB → 142KB (×5.5).
단계 3 진행 중 발견된 height_measurer.rs 의 동일 결함 (Stage 3 fix, commit
7d8cca27) 으로 nested 11×3 그리드 시각 표시 회복. PDF 권위본 5쪽 4그룹 + 12
추진과제 모두 정합 (rsvg-convert 변환 PNG 26KB → 142KB).

광범위 회귀 재검증 (Stage 1 + Stage 3 fix 통합): 159 샘플 / 1502 페이지 /
diff 3건 (의도 변경 2 + 자연 해소 1, Stage 2 결과와 동일) — 회귀 0건.

보조 관찰:
- 페이지 2~3 hwp_used diff = -791.9 / -1658.3 px → 본 수정 무관, 별개 결함
- 단계 1 보고서의 LAYOUT_OVERFLOW 자연 해소 주장 정정 (pr-task677 환경 차이)

산출물: stage3.md / report.md / orders/20260508.md.
edwardkim added a commit that referenced this pull request May 9, 2026
- mydocs/pr/archives/pr_694_review.md (검토 문서)
- mydocs/pr/archives/pr_694_report.md (처리 보고서)
- mydocs/plans/archives/task_m100_688{,_impl}.md
- mydocs/orders/20260509.md (오늘할일 신규)
- 5/8 orders: PR #694 행 + 본 사이클 패턴 누적 라인 추가

처리 결과:
- 머지 commit: f353429 (메인테이너 충돌 해결 통합 정정)
- 시각 판정 ★ 통과 (table-vpos-01.hwpx p.5 nested 11×3 그리드 복원)
- 별건 결함 발견: 도형 2개 미출력 (회귀 아님, 새 이슈 등록 예정)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@edwardkim edwardkim merged commit f353429 into edwardkim:devel May 9, 2026
7 checks passed
@edwardkim

Copy link
Copy Markdown
Owner

@planet6897 PR 머지 완료되었습니다 (devel f3534293). 시각 판정 ★ 통과 (table-vpos-01.hwpx p.5 nested 11×3 그리드 시각 복원, PDF 권위본 pdf/table-vpos-01-2022.pdf 정합).

메인테이너 통합 정정 안내
PR #681 (Task #680, 자료 박스 외곽 테두리) 와 동일 분기 충돌. 본 PR 의 4 조건 가드 중 controls.len() == 1 을 그대로 적용하면 exam_social.hwp pi=15 (paragraphs=1, controls=2 — 정렬 마커 + nested 6×3 표) 케이스에서 PR #681 외곽선 분기까지 회귀 누락이 검출되어, 다음과 같이 통합 정정했습니다:

두 곳 (table_layout.rs + height_measurer.rs) 모두 동일 정정.

검증

별건 후속
시각 판정 과정에서 samples/table-vpos-01.hwpx p.5 의 도형 2개 미출력 결함이 발견되었습니다. 본 PR 정정으로 인한 회귀가 아닌 별개 결함으로 별도 이슈로 등록할 예정입니다.

처리 보고서: mydocs/pr/archives/pr_694_report.md.

edwardkim added a commit that referenced this pull request May 9, 2026
- mydocs/orders/20260509.md: 후속 이슈 영역에 Issue #726 정확 표기 + 결함 후보 두 영역
- mydocs/pr/archives/pr_694_report.md: 잔존 후속 영역에 Issue #726 + 본 환경 IR 권위 요약

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 11, 2026
- mydocs/pr/archives/pr_817_review.md (Task #688 이미 해결 + byte-identical SVG 분석)
- mydocs/pr/archives/pr_817_report.md (옵션 C 처리 결과 + Issue #726 진짜 본질 분리)
- mydocs/orders/20260512.md 신규 (5/12 사이클 시작)

핵심 본질:
- PR 본문 본질 (nested 11x3 그리드 누락) → Task #688 (PR #694, paragraphs.len() 가드 + 외곽 박스 border) 이미 해결
- 작업지시자 시각 비교 요청 → 5쪽 SVG byte-identical (diff exit code 0)
- Issue #726 진짜 본질 (4대 그룹 사이 화살표 도형 미출력) → 본 PR 무관, 별 PR 후속
- Issue #726 OPEN 유지

분리 PR 가이드:
- 후보 (a): src/renderer/ 도형 분기 (svg/canvas/paint json 4 backend)
- 후보 (b): src/parser/hwpx/ table cell GenShape 파싱
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants