Task #1068: HWPX treat_as_char 표 LINE_SEG lh 보정 over-inflation 정정 — 본문 하단 overflow 해소 (closes #1068)#1069
Conversation
PR #1093 (Task #1046) 와의 영역 중복 분석본 PR(Task #1068, lh over-inflation 정정) 후속 작업으로 PR #1093 (Task #1046, 측정 통일 B) 재제출 (closes #1046) 을 진행하던 중, 본 PR 타깃 파일이 #1093 만으로도 사실상 해소됨을 확인했습니다. 측정 (현
|
| 적용본 | samples/2. 인공지능(AI) 기반 재정통합시스템 구축 용역 제안요청서.hwpx |
|---|---|
| baseline | 12 lines / 107 px |
| #1093 만 적용 (#1046, 본 PR 미적용) | 1 line / 29 px |
본 PR 의 직접 타깃이었던 pi=567 839px overflow 는 #1093 만으로도 해소되며, 잔여 1/29px 는 in-scope 외 마이너 측정 드리프트 (#1049 영역) 입니다.
두 PR 의 의미 차이
- 본 PR (Task #1068: HWPX treat_as_char 표 LINE_SEG lh 보정 over-inflation 정정 — 본문 하단 overflow 해소 (closes #1068) #1069 / Task 거의 한 페이지 크기 treat_as_char 표 분할 시 새 페이지 미이월 → 본문 하단 overflow #1068): HWPX TAC 표의
LINE_SEG.lhover-inflation 근본 원인 정정 (document.rspost-처리 보정 게이트 추가). parser/IR 정합 측면 fix. - PR Task #1046: 본문 하단 overflow 정합 — 측정 통일(B) [#1048 rebase 재제출] (closes #1046) #1093 (Task 측정 통일 — 페이지네이터 cut/추정 높이 ↔ 렌더러 height (본문 하단 overflow 잔여, #1022 후속) #1046): typeset 측정 통일 + trailing overflow 오검출 정정. 본문 하단 overflow 증상 흡수.
같은 파일 overflow 를 두 PR 이 다른 메커니즘으로 해소합니다. 본 PR 은 lh 값 자체를 정정하므로 dump/round-trip/향후 lh 의존 로직 정합 측면에서 별개 가치가 있으나, 본문 overflow 시각 해소 목적만 본다면 #1093 가 흡수합니다.
다른 본 세션 PR 영향 (참고)
| PR | 타깃 | #1093 적용 시 |
|---|---|---|
| #1069 (본 PR) | 제안요청서.hwpx | 12/107→1/29 (거의 해소) |
| #1083 (#1073 중첩 표) | kps-ai.hwp | 10/849→2/763 (758px 그대로) |
| #1084 (#1079 그림 pushdown) | pr-149.hwp | 1/110 (불변) |
| #1091 (#1082 다단 미주) | 3-09/10/11월 | 거의 불변 |
다른 3 PR 은 각각 다른 메커니즘 — #1093 으로 대체 불가.
머지 판단 (메인테이너)
- (가) 본 PR 머지 — lh IR 정정 보존 + Task #1046: 본문 하단 overflow 정합 — 측정 통일(B) [#1048 rebase 재제출] (closes #1046) #1093 와 함께 적용 시 더 깨끗 (1/29 → 0 가능). 두 PR 동시 머지 시 충돌 가능성 검토 필요 (둘 다 본문 하단 overflow 영역).
- (나) 본 PR close — overflow 시각만 본다면 Task #1046: 본문 하단 overflow 정합 — 측정 통일(B) [#1048 rebase 재제출] (closes #1046) #1093 가 충분. lh IR 정정은 후속 별도 처리.
본 PR 의 변경 영역(document_core/commands/document.rs:283 first_mut() 가드) 은 #1093 의 변경 영역(typeset.rs measurement / layout.rs overflow 판정 / rendering.rs paginate_pass) 과 파일이 겹치지 않아 자동 충돌은 없습니다. 메인테이너 판단에 맡깁니다.
1800ca3 to
6c731a5
Compare
…on 정정 (closes edwardkim#1068) ## 증상 거의 한 페이지 크기의 treat_as_char 표가 제목줄과 같은 문단에 있을 때, 표 줄이 본문 하단 아래로 통째로 그려져 ~839px overflow. ## 근본 원인 `document_core/commands/document.rs` 의 HWPX TAC 표 LINE_SEG lh 보정이 무조건 `first_mut()`(제목줄)을 표 높이로 확대했다. 표가 둘째 줄 이후에 있는 문단(제목줄 + 표줄)에서 제목줄 lh 가 표 높이로 오염(예: vertsize 2200 → 63234)되어, 렌더러의 lh 기반 표 줄 탐지(place_table_with_text)가 제목줄을 표 줄로 오매칭 → 표 줄이 post-text 로 포함되어 Table item 과 이중 그리기 → overflow. HWPX XML 원본(linesegarray vertsize) 대조로 제목줄의 원래 높이가 표 높이가 아님을 확정. ## 수정 이미 표 높이를 담은 LINE_SEG 가 있으면(한컴이 저장한 실제 linesegarray — 표 줄 seg 의 vertsize 가 표 높이) 보정을 생략한다. linesegarray 가 없어 기본 lh=100 단일 seg 만 합성된 경우에만 첫 seg 를 표 높이로 확대 (기존 의도 보존). 라우팅·렌더러 미변경. ## 검증 - 타깃 문서 표줄 overflow 839px → 해소. - 전수 sweep(samples hwp/hwpx): overflow 라인/픽셀 합 회귀 0 (소폭 개선, tac-img-02 / aift 개선). - golden SVG 8/8, cargo test --release lib 1324 passed, clippy/fmt clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6c731a5 to
7c893a7
Compare
|
Cherry-picked into devel as e16a607. Verified with cargo fmt --check, cargo check, and cargo test --lib. Closing this PR because the change has been accepted via cherry-pick. |
증상
거의 한 페이지 크기의
treat_as_char표가 제목줄과 같은 문단에 있을 때, 표 줄이 본문 하단 아래로 통째로 그려져 약 839px overflow 발생 (#1068).근본 원인
src/document_core/commands/document.rs의 HWPX TAC 표LINE_SEG.lh보정이 무조건first_mut()(제목줄) 을 표 높이로 확대했다.표가 둘째 줄 이후에 있는 문단(제목줄 + 표줄)에서 제목줄의
lh가 표 높이로 오염(예:vertsize2200 → 63234)되어, 렌더러의lh기반 표 줄 탐지(place_table_with_text)가 제목줄을 표 줄로 오매칭 → 표 줄이 post-text 로 포함되어PageItem::Table과 이중 그리기 → overflow.HWPX XML 원본(
linesegarray의vertsize)을 대조하여 제목줄의 원래 높이가 표 높이가 아님을 확정.수정
이미 표 높이를 담은
LINE_SEG가 있으면(한컴이 저장한 실제linesegarray— 표 줄 seg 의vertsize가 표 높이) 보정을 생략한다.linesegarray가 없어 기본lh=100단일 seg 만 합성된 경우에만 첫 seg 를 표 높이로 확대(기존 의도 보존). 라우팅·렌더러 미변경.검증
cargo test --releaselib 1324 passed, clippy / fmt clean.🤖 Generated with Claude Code