Skip to content

Task #1068: HWPX treat_as_char 표 LINE_SEG lh 보정 over-inflation 정정 — 본문 하단 overflow 해소 (closes #1068)#1069

Open
planet6897 wants to merge 1 commit into
edwardkim:develfrom
planet6897:pr/task1068-tac-table-lh
Open

Task #1068: HWPX treat_as_char 표 LINE_SEG lh 보정 over-inflation 정정 — 본문 하단 overflow 해소 (closes #1068)#1069
planet6897 wants to merge 1 commit into
edwardkim:develfrom
planet6897:pr/task1068-tac-table-lh

Conversation

@planet6897
Copy link
Copy Markdown
Contributor

증상

거의 한 페이지 크기의 treat_as_char 표가 제목줄과 같은 문단에 있을 때, 표 줄이 본문 하단 아래로 통째로 그려져 약 839px overflow 발생 (#1068).

근본 원인

src/document_core/commands/document.rs 의 HWPX TAC 표 LINE_SEG.lh 보정이 무조건 first_mut()(제목줄) 을 표 높이로 확대했다.

표가 둘째 줄 이후에 있는 문단(제목줄 + 표줄)에서 제목줄의 lh 가 표 높이로 오염(예: vertsize 2200 → 63234)되어, 렌더러의 lh 기반 표 줄 탐지(place_table_with_text)가 제목줄을 표 줄로 오매칭 → 표 줄이 post-text 로 포함되어 PageItem::Table이중 그리기 → overflow.

HWPX XML 원본(linesegarrayvertsize)을 대조하여 제목줄의 원래 높이가 표 높이가 아님을 확정.

참고: 초기에는 페이지네이션 carry(typeset) 레이어 문제로 추정했으나, 진단 결과 표는 현재 페이지에 정상 fit 되며 carry 경로에 도달하지 않음을 확인 — 진짜 원인은 파서 후처리 단계의 lh over-inflation 이었다.

수정

이미 표 높이를 담은 LINE_SEG 가 있으면(한컴이 저장한 실제 linesegarray — 표 줄 seg 의 vertsize 가 표 높이) 보정을 생략한다. linesegarray 가 없어 기본 lh=100 단일 seg 만 합성된 경우에만 첫 seg 를 표 높이로 확대(기존 의도 보존). 라우팅·렌더러 미변경.

let already_covered = para.line_segs.iter().any(|s| s.line_height >= max_tac_h);
if !already_covered {
    if let Some(seg) = para.line_segs.first_mut() {
        if seg.line_height < max_tac_h { seg.line_height = max_tac_h; }
    }
}

검증

  • 타깃 문서 표줄 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.

🤖 Generated with Claude Code

@edwardkim edwardkim self-requested a review May 22, 2026 06:37
@edwardkim edwardkim added the enhancement New feature or request label May 22, 2026
@edwardkim edwardkim added this to the v1.0.0 milestone May 22, 2026
@planet6897
Copy link
Copy Markdown
Contributor Author

PR #1093 (Task #1046) 와의 영역 중복 분석

본 PR(Task #1068, lh over-inflation 정정) 후속 작업으로 PR #1093 (Task #1046, 측정 통일 B) 재제출 (closes #1046) 을 진행하던 중, 본 PR 타깃 파일이 #1093 만으로도 사실상 해소됨을 확인했습니다.

측정 (현 stream/devel fbfcf682 기준)

적용본 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 의 의미 차이

같은 파일 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 의 변경 영역(document_core/commands/document.rs:283 first_mut() 가드) 은 #1093 의 변경 영역(typeset.rs measurement / layout.rs overflow 판정 / rendering.rs paginate_pass) 과 파일이 겹치지 않아 자동 충돌은 없습니다. 메인테이너 판단에 맡깁니다.

@planet6897 planet6897 force-pushed the pr/task1068-tac-table-lh branch 2 times, most recently from 1800ca3 to 6c731a5 Compare May 25, 2026 05:01
…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>
@planet6897 planet6897 force-pushed the pr/task1068-tac-table-lh branch from 6c731a5 to 7c893a7 Compare May 25, 2026 05:14
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