Skip to content

Task #157: 비-TAC wrap=위아래 표 out-of-flow 배치#266

Merged
edwardkim merged 3 commits intoedwardkim:develfrom
seanshin:feature/task157
Apr 24, 2026
Merged

Task #157: 비-TAC wrap=위아래 표 out-of-flow 배치#266
edwardkim merged 3 commits intoedwardkim:develfrom
seanshin:feature/task157

Conversation

@seanshin
Copy link
Copy Markdown

개요

비-TAC wrap=위아래(TopAndBottom) + vert=Para 표가 텍스트와 중첩되는 버그 수정.

Fixes #157, #103


원인

layout.rs의 vpos 기준점 리셋 로직이 Para-relative float 표 처리 후 무조건 실행되어,
한컴이 Para-float 기준으로 기록한 후속 문단 vpos가 잘못된 lazy_base로 교정됨.

  • 결과: 앵커 y 939.2px → body_bottom clamp → 표 y 894.7px (정상: 819.2px)
  • 표가 텍스트와 중첩 + LAYOUT_OVERFLOW 9.6px

수정

1. src/renderer/layout.rs — vpos 기준점 리셋 예외

Para-relative float 표(!treat_as_char + TextWrap::TopAndBottom + VertRelTo::Para)는
vpos 기준점 초기화에서 제외.

2. src/renderer/pagination/engine.rs — effective_table_height 방어

Para-float 표가 body 범위 내에 완전히 들어오면 effective_table_height = 0.0.


검증

항목 결과
cargo test ✅ 963 passed, 0 failed
cargo clippy --lib -- -D warnings ✅ 0 warnings
Table pi=25 LAYOUT_OVERFLOW ✅ 해소
Table y 894.7px(clamp) → 819.2px(정상)
Golden SVG tests/golden_svg/issue-157/page-1.svg 신규 등록
Regression 기존 golden 3건 영향 없음

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com

hyoun mouk shin and others added 3 commits April 24, 2026 08:28
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…#157)

layout.rs: Para-relative float 표(vert=Para, TopAndBottom, non-TAC)를
vpos 기준점 리셋 예외 처리하여 앵커 문단 y 좌표 drift 수정.
초기화 시 lazy_base가 잘못된 값으로 교정되어 표 y가 body_bottom에
clamp → 텍스트와 중첩되는 버그 해결.

engine.rs: Para-float 표가 body 범위 내에 완전히 들어오는 경우
effective_table_height = 0.0 방어 코드 추가.

- 수정: layout.rs(is_para_float_table 예외, +18줄)
        pagination/engine.rs(effective_table_height 보정, +4줄)
- 테스트: svg_snapshot.rs issue_157_page_1 신규 등록
- golden: tests/golden_svg/issue-157/page-1.svg
- 검증: cargo test 941+4 passed, Table pi=25 LAYOUT_OVERFLOW 해소
        Table y 894.7px(clamp) → 819.2px(정상)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown
Owner

@edwardkim edwardkim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved. 🎉

검토 결과

@seanshin 님, 긴 시간 걸린 레이아웃 버그 수정 감사합니다. #103과 #157을 근본 원인 공유로 동시 해결하신 점이 인상적입니다.

특히 인상 깊은 부분

  • 루트 원인 정확 — Para-relative float 표의 vpos 기준점 리셋이 후속 문단 vpos를 잘못된 lazy_base로 교정 → 앵커 y body_bottom clamp → 중첩. 원인 경로 추적이 명확.
  • 수정 범위 타이트is_para_float_table 를 3-조건 AND (!treat_as_char && TopAndBottom && VertRelTo::Para) 로 엄격히 한정. TAC/Shape/기타 케이스 영향 없음.
  • Golden SVG 등록 — 507줄 전체 페이지 스냅샷. 향후 회귀 즉시 감지 가능.

메인테이너 검증

항목 결과
cargo test --test svg_snapshot ✅ 4 / 0 (issue_157 포함)
cargo test --lib ✅ 963 / 0 / 1 ignored
cargo clippy --lib -- -D warnings ✅ clean
cargo check --target wasm32 ✅ clean
devel 자동 merge 시뮬레이션 ✅ 충돌 0건, 머지 후 964 / 0
WASM Docker 빌드 ✅ 성공
rhwp-studio 브라우저 시각 검증 ✅ 주주총회 참석장 2페이지 중첩 해소 확인

후속 요청 (merge 후 별도 커밋 가능)

CLAUDE.md 절차 기준으로 아래 문서가 누락되어 있습니다:

  1. 최종 보고서 mydocs/report/task_m100_157_report.md — 전체 타스크 정리 (근본 원인, 수정, 검증, 파급 효과)
  2. 구현 계획서에 2단계 이상이 있었다면 stage2/stage3 보고서 (현재 stage1.md만 존재)

코드 수정과 검증이 양호하여 merge 진행합니다. 후속 커밋으로 문서만 보완 부탁드립니다.

BEHIND 상태이지만 충돌 없이 자동 merge 가능합니다 — 진행합니다.

@edwardkim edwardkim merged commit a65bd06 into edwardkim:devel Apr 24, 2026
6 checks passed
edwardkim added a commit to seanshin/rhwp that referenced this pull request Apr 24, 2026
# Conflicts:
#	mydocs/orders/20260424.md
edwardkim added a commit that referenced this pull request Apr 24, 2026
…, #103)

- 작성자: @seanshin (Task #157, PR #266)
- Merge commit: a65bd06 (admin merge, BEHIND 상태였으나 충돌 없음)
- 이슈 #157, #103 closed (근본 원인 공유)

변경:
- src/renderer/layout.rs: Para-relative float 표 vpos 리셋 예외
- src/renderer/pagination/engine.rs: effective_table_height 방어
- tests/golden_svg/issue-157/page-1.svg 신규 (507줄)

검증:
- cargo test --lib: 964 passed / 0 failed (merge 시뮬레이션)
- cargo clippy + wasm32 check: clean
- WASM Docker 빌드 + rhwp-studio 브라우저 시각 검증 성공

후속 요청: 최종 보고서(task_m100_157_report.md) + stage2/3 보고서 작성자 제출 대기

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 24, 2026
…r 복구 (closes #275)

- 작성자: @planet6897 (Task #275, PR #278)
- Merge commit: 2a27b36 (admin merge, orders 문서 충돌 직접 해결)
- 이슈 #275 closed
- 커뮤니티 리뷰: @seanshin APPROVED

처리 절차:
- PR 브랜치에 origin/devel 머지 → orders 문서 충돌 해결 (Task #275 섹션 "## 5" 재배치)
- planet6897/local/task275에 push (maintainerCanModify 허용)
- 재승인 + admin merge

검증:
- cargo test --lib svg_fragment: 19 passed / 0 failed
- cargo test --lib: 983 passed / 0 failed / 1 ignored (+19 신규 svg_fragment)
- cargo clippy + wasm32 check: clean
- svg_snapshot: 6 passed

파급 효과: WASM canvas 에서 OLE 네이티브 이미지/EMF/OOXML 차트/Placeholder 모두 복구

===== 오늘 처리 5개 PR 완료 =====
#284 (#280) @planet6897 - 수식 폰트 스택
#285 (#283) @planet6897 - 수식 파렌 글리프
#266 (#157/#103) @seanshin - 비-TAC 표 out-of-flow
#273 (#267) @seanshin - right tab 공백 처리
#277 (#147) @seanshin - MEMO 바탕쪽 오분류
#278 (#275) @planet6897 - WASM OLE RawSvg/Placeholder

별도 추적: 이슈 #291 (KTX.hwp 2단 TAC 표 회귀, 핀셋 처리 예정)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 24, 2026
 #297)

- 작성자: @planet6897 (Task #297, PR #300, 오늘 6번째 기여)
- Merge commit: 0e3fb02 (admin merge, orders 3구간 충돌 직접 해결)
- 이슈 #297 CLOSED

처리 절차:
- PR 브랜치에 origin/devel 머지 → orders 섹션 3구간 해결 (#295 "## 7", #296 "## 8", #297 "## 9")
- planet6897/task297 에 push
- 재승인 + admin merge

변경 (1파일):
- src/renderer/layout/table_layout.rs +5 -2:
  - VertRelTo::Page => (col_area.y, col_area.height)  [쪽 본문 영역]
  - VertRelTo::Paper => (0, page_h_approx)  [용지 전체, 유지]
  - HWP 스펙 Page=쪽 본문, Paper=용지 전체 반영

성과:
- pi=22 "* 확인 사항" 박스 y: 1371.5 → 1224.07 (PDF 1226.5 ±2 일치)
- 145 샘플 중 본문 Page 표 13건 + 바탕쪽 5건 회귀 스캔 완료 (의도 범위 외 무회귀)

검증:
- cargo test --lib: 992 passed
- svg_snapshot: 6 passed (golden 유지)
- 실제 SVG y 좌표 확인: 1224.07px (PDF 일치)

#295#297 연결 모범 사례: PR #298 리뷰 중 사전 존재 버그로 분리 → 1시간 만에 PR #300 해결.
초기 가설(바탕쪽 Paper) 폐기 → pdftotext 실측으로 근본 원인(enum 미구분) 발견 → 1줄 수정.

===== 오늘 9번째 PR 머지 =====
#284 #285 #266 #273 #277 #278 #289 #292 #298 #300
+ 메인테이너 핀셋 #296

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
seanshin pushed a commit to seanshin/rhwp that referenced this pull request Apr 26, 2026
- mydocs/report/task_m100_157_report.md 신규 작성
- 수행계획서 원인 분석과 실제 원인(layout.rs vpos 리셋) 차이 기록
- 단계 1(layout.rs) + 단계 2(engine.rs) + 단계 3(검증) 통합 정리
- stage1.md에 단계 2·3 내용이 이미 통합됨 (단계별 진행 중 합산)
- PR edwardkim#266 메인테이너 리뷰 결과 및 edwardkim#103 동시 해결 파급 효과 포함

Requested-by: edwardkim (PR edwardkim#266 review comment)
seanshin pushed a commit to seanshin/rhwp that referenced this pull request Apr 26, 2026
- 최근 변경: v0.7.3 → v0.7.6 (2026-04-26) 교체
  - PR edwardkim#266 (Task edwardkim#157), edwardkim#273 (Task edwardkim#267), edwardkim#282 (Task edwardkim#279) by @seanshin
  - PR edwardkim#256, edwardkim#327, edwardkim#341, edwardkim#343 by @planet6897
  - PR edwardkim#334, edwardkim#335 by @oksure, PR edwardkim#339 by @postmelee
- devel 섹션: 머지된 항목 제거, 현재 분석 중(edwardkim#362/edwardkim#345) + 계획 중(edwardkim#150/edwardkim#253) 반영
- 테스트 수: 891+ → 1000+
- README_EN.md 동일 내용 영문 반영
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