Skip to content

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

Closed
planet6897 wants to merge 3 commits into
edwardkim:develfrom
planet6897:pr-task703
Closed

Task #703: BehindText/InFrontOfText 표 본문 흐름 누락 정정 (closes #703)#707
planet6897 wants to merge 3 commits into
edwardkim: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 9, 2026 08:57
…름 누락 결함 검증 테스트

수행계획서 (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 본질 외 — 별도 처리.
edwardkim added a commit that referenced this pull request May 9, 2026
본질: typeset.rs::typeset_table_paragraph 분기에 BehindText/InFrontOfText
(글뒤로/글앞으로) 가드 누락. pagination/engine.rs:976-981 에는 동일
가드가 존재하나 메인 pagination 인 typeset.rs 영역에 미반영.

→ place_table_with_text 의 cur_h += pre_height + table_total_height 가
   BehindText/InFrontOfText 표에도 적용되어 본문 흐름 누적 발생 →
   trailing 항목 다음 페이지 밀림.

정정 (src/renderer/typeset.rs:1403, +13 LOC):
- Control::Table 분기 진입 시 text_wrap 가드 (InFrontOfText | BehindText)
- 가드 발동 시 PageItem::Shape 로 push 후 continue (current_height 누적
  영향 부재)
- pagination/engine.rs:976-981 와 의미 정합

영향 좁힘:
- text_wrap 두 변형만 가드 (다른 wrap 영역 영향 부재)
- feedback_hancom_compat_specific_over_general 정합

검증:
- cargo test --release: lib 1167 + 통합 ALL GREEN, failed 0
- cargo test --release --test issue_703: 1 PASS + 2 ignored (Issue #704 별개)
- cargo test --release --test svg_snapshot form_002_page_0: PASS (PR #706 영역 보존)
- cargo clippy --release: 신규 경고 0

본 환경 직접 페이지 수 측정 (PR 본문 정합 입증):
- samples/basic/calendar_year.hwp: 2 -> 1 페이지 (한컴 PDF 권위 정합)
- samples/table-ipc.hwp: 11 -> 10 페이지 (한컴 PDF 권위 정합, 부수 효과)

광범위 sweep (PR 본문):
- 196 샘플 SVG/PDF 페이지 수 비교 — 회귀 0, 정합 +2

분리된 후속 (Issue #704):
- 통합재정통계 (2010.11/2011.10) 페이지 분할 결함은 다른 본질 영역 —
  TopAndBottom TAC 1×1 + 각주 환경 0.84 px borderline. tests/issue_703.rs
  의 해당 2 케이스는 #[ignore] 처리.

Closes #703

Co-Authored-By: Jaeook Ryu <jaeook.ryu@gmail.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 9, 2026
- mydocs/pr/archives/pr_707_review.md (검토 문서)
- mydocs/pr/archives/pr_707_report.md (처리 보고서)
- mydocs/plans/archives/task_m100_703{,_impl}.md
- mydocs/orders/20260509.md: PR #707 행 + 본 사이클 패턴 라인 추가

처리 결과:
- 옵션 A — 3 commits 단계별 보존 cherry-pick + no-ff merge (e348410)
- 시각 판정 게이트 면제 (결정적 검증 + sweep + 직접 측정 모두 통과)
- 본 환경 직접 페이지 수 측정 정합 회복: calendar_year 2→1 / table-ipc 11→10
- Issue #703 close 자동 정합

부수 사실:
- 분리된 후속 Issue #704 OPEN (TopAndBottom TAC + 각주 환경 borderline)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@edwardkim

Copy link
Copy Markdown
Owner

@planet6897 PR 머지 완료되었습니다 (devel e3484101, --no-ff merge).

처리 결과

  • 옵션 A — 3 commits 단계별 보존 cherry-pick + no-ff merge
  • 시각 판정 게이트 면제 (결정적 검증 + sweep + 직접 측정 모두 통과)
  • 충돌 0건

검증

본 환경 직접 페이지 수 측정 (PR 본문 정합 입증)

  • samples/basic/calendar_year.hwp: 2 → 1 페이지 (한컴 PDF 권위 정합) ★
  • samples/table-ipc.hwp: 11 → 10 페이지 (한컴 PDF 권위 정합, 부수 효과) ★

메모리 룰 정합

잔존 후속: Issue #704 OPEN (TopAndBottom TAC + 각주 환경 0.84 px borderline 결함, 별개 본질) — 후속 PR 처리 가능.

처리 보고서: mydocs/pr/archives/pr_707_report.md. 감사합니다.

@edwardkim edwardkim closed this May 9, 2026
edwardkim pushed a commit that referenced this pull request May 10, 2026
…px 시프트 회귀 캡처

회귀 진원지 (bisect 확정): a759a1c (Task #703 / PR #707) — typeset.rs 의
InFrontOfText/BehindText 가드가 다단 영역에서 컬럼 분배 변경.

calendar_year.hwp / exam_eng.hwp IR 사전 검사 결과:
- calendar_year.hwp: 1단(column_count=1), BehindText, vert=Para
- exam_eng.hwp: 2단, InFrontOfText, vert=Para
→ vert_rel_to 는 양쪽 동일(Para) → 옵션 B 폐기, 옵션 A (column_count==1) 채택.

tests/issue_775.rs: cell-clip y=277.08 가드 (FAIL +446.61 px 차이 캡처).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request May 10, 2026
…ntOfText/BehindText 표 컬럼 분배 복원)

@planet6897 자기 PR #707 (Task #703, 5/9 머지) 회귀 정정 — InFrontOfText/BehindText 가드 영역 다단 컬럼 분배 변경 → exam_eng.hwp p4 27번 보기 +446.6 px 회귀 (cell-clip y 277.08 → 723.69).

bisect 진원지: a759a1c (Task #703 GREEN 시점).

정정 본질 (typeset.rs +5/-1, 단일 가드 라인): InFrontOfText/BehindText 가드 영역 `&& st.col_count == 1` 조건 추가 — Task #703 fix 영역 단일 컬럼 한정.

| 케이스 | column_count | 결과 |
|--------|--------------|------|
| calendar_year.hwp (Task #703) | 1 | ✅ 1 page 유지 |
| exam_eng.hwp p4 (회귀 케이스) | 2 | ✅ y=277.08 정상 복원 |

검증:
- cargo build/test/clippy --release ALL GREEN
- 회귀 가드 (issue_775_exam_eng_p4_pi181_table_at_column_top) PASS
- Task #703 본 케이스 보존 (issue_703_calendar_year_single_page) PASS
- 광범위 sweep 168 same / 2 diff (exam_eng_002 ID 순서만 + exam_eng_004 의도된 정정, PR 본문 정확 일치)
- WASM 4.68 MB 재빌드
- 작업지시자 웹 에디터 시각 판정 ✅ 통과

closes #775
edwardkim added a commit that referenced this pull request May 10, 2026
PR #778 (closes #775) — 자기 PR #707 (Task #703) 회귀 정정.
typeset.rs 영역 단일 컬럼 한정 가드 (col_count==1) 영역 정밀화.

Merge commit: 103bae7
Cherry-pick: c46c0a4d + 8c574bf4 + 3b84a08
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