Skip to content

Task #703: BehindText/InFrontOfText 표 본문 흐름 누락 정정 (closes #703)#707

Open
planet6897 wants to merge 3 commits intoedwardkim:develfrom
planet6897:pr-task703
Open

Task #703: BehindText/InFrontOfText 표 본문 흐름 누락 정정 (closes #703)#707
planet6897 wants to merge 3 commits intoedwardkim:develfrom
planet6897:pr-task703

Conversation

@planet6897
Copy link
Copy Markdown
Contributor

Summary

  • typeset.rs 의 표 컨트롤 처리 분기에 BehindText/InFrontOfText (글뒤로/글앞으로) 가드 누락으로 데코레이션 표가 본문 cur_h 에 잘못 가산되어 trailing 항목이 다음 페이지로 밀리는 결함 정정 (+13 줄, pagination/engine.rs:976-981 와 동일 시멘틱).
  • samples/basic/calendar_year.hwp: 한글2022 PDF 1 페이지 ↔ SVG 2 페이지 결함 해소.
  • 의도하지 않은 추가 정합: samples/table-ipc.hwp 13 → 10 페이지 (11 개 InFrontOfText 표 자동 정합).

Root cause

  • pagination/engine.rs:976-981 에는 BehindText/InFrontOfText 표를 Shape 처럼 push 후 continue 하는 가드가 있으나, 메인 pagination 인 typeset.rstypeset_table_paragraph 분기에 미반영.
  • place_table_with_textcur_h += pre_height + table_total_height 를 BehindText/InFrontOfText 표에도 적용하여 본문 흐름 누적이 발생.
  • calendar_year pi=1 (글뒤로 1×1 wrapper Table 캐리어 빈 paragraph) 단독으로 +23.77 px drift 발생, trailing PushButton (pi=12) 이 다음 페이지로 밀림.

정정

src/renderer/typeset.rs:1370Control::Table 분기 진입 시점에 가드 추가:

if matches!(
    table.common.text_wrap,
    crate::model::shape::TextWrap::InFrontOfText
        | crate::model::shape::TextWrap::BehindText
) {
    st.current_items.push(PageItem::Shape {
        para_index: para_idx,
        control_index: ctrl_idx,
    });
    continue;
}

분리된 후속 이슈

본 task 분석 단계에서 함께 식별된 통합재정통계 (2010.11/2011.10) 페이지 분할 결함은 다른 본질로 확인 (TopAndBottom TAC 1×1 + 각주 환경 0.84 px borderline) — Issue #704 별도 분리. tests/issue_703.rs 의 해당 2 케이스는 #[ignore] 처리.

Test plan

변경 파일

파일 변동
src/renderer/typeset.rs +13 본질 정정 + 단위 테스트
tests/issue_703.rs 신규 +51 (3 통합 테스트)
mydocs/plans/task_m100_703.md, _impl.md 신규 (수행/구현 계획서)
mydocs/working/task_m100_703_stage{1,2,3}.md 신규 (단계별 보고서)
mydocs/report/task_m100_703_report.md 신규 (최종 보고서)
mydocs/report/svg_vs_pdf_diff_20260508*.tsv 신규 (196 샘플 비교 baseline + after)

Closes #703.

planet6897 added 3 commits May 8, 2026 11:21
…름 누락 결함 검증 테스트

수행계획서 (mydocs/plans/task_m100_703.md) + 구현계획서 (mydocs/plans/task_m100_703_impl.md)
승인 후 Stage 1 진행.

신규 테스트 4건 RED 확인:
- 통합 (tests/issue_703.rs): calendar_year / 통합재정통계 2010·2011 (3건, 모두 page=2 left vs page=1 right)
- 단위 (typeset.rs#tests::test_typeset_703_behind_text_table_no_flow_advance): BehindText 1×1 wrapper Table 60000 HU 캐리어 paragraph + 후속 5 단락 fixture, paginator 1 페이지 vs typeset 2 페이지 RED

본질 정정 위치: typeset_block_table → place_table_with_text 의 cur_h 누적이 BehindText/InFrontOfText
표에 대해서도 적용되는 것이 결함. pagination/engine.rs:976-981 와 동일 가드를 typeset 분기에
추가하는 것이 Stage 2 작업.

196 샘플 SVG/PDF 페이지 수 비교 데이터 (mydocs/report/svg_vs_pdf_diff_20260508.tsv) 추가 —
Stage 3 회귀 검증 baseline.
…Text 표 가드 추가

src/renderer/typeset.rs (+13): typeset_table_paragraph 의 Control::Table 분기에
pagination/engine.rs:976-981 와 동일한 가드 추가. 글뒤로/글앞으로 표는 Shape 처럼
push 만 하고 cur_h 누적 건너뜀.

결과:
- calendar_year.hwp: 2 → 1 페이지 (한글2022 PDF 정합)
- test_typeset_703_behind_text_table_no_flow_advance: RED → GREEN
- issue_703_calendar_year_single_page: RED → GREEN
- 라이브러리 1158 tests: 회귀 0

통합재정통계 (2010.11/2011.10) 는 다른 본질의 결함 (TopAndBottom TAC 1×1 + 각주 환경
0.84 px borderline) 으로 확인 → Issue edwardkim#704 별도 분리. tests/issue_703.rs 의 해당 2 케이스는
#[ignore] 처리 (코드 보존 + edwardkim#704 정정 시 ignore 해제).
196 샘플 SVG/PDF 페이지 수 비교:
- 정합 (의도): basic/calendar_year 2 → 1 (PDF=1)
- 정합 (추가): table-ipc 13 → 10 (PDF=10) — 11개 InFrontOfText 표 자동 정합
- 기타 194 파일 변동 0 (회귀 0)

라이브러리 / 통합 / svg_snapshot:
- cargo test --lib --release: 1158 passed; 0 failed; 2 ignored
- cargo test --release --test issue_703: 1 passed; 0 failed; 2 ignored (Issue edwardkim#704)
- cargo test --release --test svg_snapshot: 7 passed; 0 failed
- cargo clippy --release -- -D warnings: 0 신규 경고
- cargo build --release: 정상

Stage 2 정정 (typeset_table_paragraph 의 Control::Table 분기에 BehindText/InFrontOfText
가드 추가, +13 줄) 의 본질 정합 효과가 의도 1 건 + 추가 1 건 으로 검증됨.

분리된 Issue edwardkim#704 (통합재정통계 borderline) 는 본 task 본질 외 — 별도 처리.
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.

1 participant