Task #702: shortcut.hwp 다단 정의 후속 갱신 누락 정정 (closes #702)#710
Closed
planet6897 wants to merge 2 commits into
Closed
Conversation
) samples/basic/shortcut.hwp (한글 2010 단축키 일람표, A4 가로) 의 SVG 출력이 한글 2022 PDF 정답 (7쪽) 대비 10쪽 (+43%) 으로 폭주하던 결함 정정. ## 본질 정정 (2건) ### 본질 1A — Distribute 다단의 짧은 컬럼 vpos-reset 검출 임계값 src/renderer/typeset.rs:430-446 기존 임계값 `pv > 5000` 은 짧은 Distribute (배분) 컬럼 (예: 지우기 3+3 분배) 에서 마지막 paragraph vpos=3000 < 5000 미달로 column-advance 미발동 → 6항목 1단 적층. ColumnType::Distribute (HWPX BalancedNewspaper) 한정 임계값 `pv > 0` 으로 완화. Normal/단단 분기는 기존 `pv > 5000` 유지 → Task edwardkim#321/edwardkim#418/edwardkim#470 회귀 차단. ### 본질 1B — Page/Column break + 새 ColumnDef 미적용 shortcut.hwp p2 의 파일/미리보기/편집 sections 는 다음 패턴 사용: - [쪽나누기] + 단정의:1단 + 표(header) - [단나누기] + 단정의:2단 배분 기존 코드는 MultiColumn break 만 ColumnDef 적용 → Page/Column break 동반 ColumnDef 무시 → col_count 가 이전 zone 값 유지 → 페이지 분기 폭주. Page/Column break 처리 시 새 ColumnDef 검출 후 zone 재정의 적용: - Column + has_diff_col_def: process_multicolumn_break 호출 - Column + 동일 ColumnDef: 기존 advance_column_or_new_page - Page/Section + has_diff_col_def: force_new_page 후 ColumnDef 적용 (col_count, layout, column_type 갱신) ### 보조 변경 - TypesetState 에 current_zone_column_type: ColumnType 필드 추가 - TypesetState::new 시그니처에 column_type 인자 추가 - process_multicolumn_break 에서 ColumnDef 적용 시 column_type 전파 - typeset_section 에서 초기 column_def.column_type 전달 ## 검증 | 항목 | 수정 전 | 수정 후 | |------|--------|--------| | 페이지 수 | 10 | 8 (PDF 7 +1쪽) | | LAYOUT_OVERFLOW | 다수 (40~60px) | 1건 | | 페이지 1 지우기 | 1단 6항목 | 2단 3+3 ✓ | | 페이지 2 섹션 | 파일 header 만 | 파일+미리보기+편집 ✓ | cargo test --release: 1248+ tests, 0 failed - exam_eng_multicolumn: 14 passed (Task edwardkim#470 회귀 차단) - issue_418: 1 passed (단단 partial-table split 잔재) - svg_snapshot: 7 passed (golden snapshots) - issue_702 (신규): 2 passed (회귀 가드) ## 잔여 결함 → 별도 이슈 분리 - Issue edwardkim#708: pi=94 bare [단나누기] at last col 1쪽 시프트 (fix 시도 시 test_539/test_548/test_exam_math_page_count 회귀 발견 → rollback) - Issue edwardkim#709: 부수 시각 결함 4건 (PUA 글자 / 탭 leader / 바탕쪽 자동번호 / right col 우측 정렬) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CLAUDE.md 하이퍼워터폴 절차 산출물: - mydocs/plans/task_m100_702.md (수행계획서) - mydocs/plans/task_m100_702_impl.md (구현계획서) - mydocs/working/task_m100_702_stage2.md (Stage 2 본질 1 정정 보고) - mydocs/working/task_m100_702_stage3.md (Stage 3 광범위 회귀 + 시각 판정) - mydocs/report/task_m100_702_report.md (최종 결과 보고서) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim
added a commit
that referenced
this pull request
May 9, 2026
본질 (2 영역): 1. Distribute 다단의 짧은 컬럼 vpos-reset 임계값 — `pv > 5000` 임계값이 짧은 Distribute (배분) 컬럼 (예: 지우기 3+3 분배, vpos=3000) 에서 미달 → column-advance 미발동 → 6항목 1단 적층. 2. Page/Column break + 새 ColumnDef 미적용 — `MultiColumn` break 만 ColumnDef 적용. shortcut.hwp p2 의 [쪽나누기]+1단 / [단나누기]+2단 배분 패턴에서 col_count 가 이전 zone 값 유지 → 페이지 분기 폭주. 정정 (src/renderer/typeset.rs +50/-6): - ColumnType 추적: `TypesetState.current_zone_column_type` 필드 추가 - vpos-reset trigger Distribute 한정 완화: pv > 0 (Normal/단단 영역 보존) - Page/Column break + 새 ColumnDef 검출 후 zone 재정의: · Column + has_diff_col_def: process_multicolumn_break 호출 · Page/Section + has_diff_col_def: force_new_page 후 ColumnDef 적용 영향 좁힘 (feedback_hancom_compat_specific_over_general): - Normal (NEWSPAPER) 다단 → 기존 pv > 5000 유지 → Task #321/#418/#470 회귀 차단 - 단일 단 → 기존 cv == 0 && pv > 5000 유지 회귀 가드 (tests/issue_702.rs +102 LOC, 신규): - shortcut_distribute_short_column_split: 페이지 수 ≤ 8 - shortcut_page2_has_three_sections: 페이지 2 SVG 에 "파일"/"편집" 섹션 헤더 모두 존재 검증: - cargo test --release: lib 1167 + 통합 ALL GREEN, failed 0 - cargo test --release --test issue_702: 2 PASS (회귀 가드) - cargo test --release --test exam_eng_multicolumn: PASS (Normal 다단 회귀 차단) - cargo test --release --test issue_418: PASS (Task #321/#418 회귀 차단) - cargo test --release --test svg_snapshot: 8/8 (form-002 PR #706 영역 보존) - cargo clippy --release: 신규 경고 0 - 광범위 sweep 7 fixture / 170 페이지 / 회귀 0 - WASM 빌드 4,604,562 bytes 본 환경 직접 페이지 수 측정 (PR 본문 정합 입증): - samples/basic/shortcut.hwp: 10 → 8 페이지 (PDF 권위 7, +1쪽 Issue #708 잔존) 분리된 후속: - Issue #708: pi=94 bare [단나누기] 마지막 col 1쪽 시프트 (별개 본질) - Issue #709: 부수 시각 결함 4건 (PUA 글자 / 탭 leader / 바탕쪽 자동번호 / 우측 정렬) 작업지시자 결정: 잔존 결함 분리 정합 → 시각 판정 면제 머지. Closes #702 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_710_review.md (검토 문서)
- mydocs/pr/archives/pr_710_report.md (처리 보고서)
- mydocs/plans/archives/task_m100_702{,_impl}.md
- mydocs/orders/20260509.md: PR #710 행 + 본 사이클 패턴 라인 추가
처리 결과:
- 옵션 A — 2 commits 단계별 보존 cherry-pick + no-ff merge (63d3873)
- 시각 판정 면제 (작업지시자 결정 — 잔존 결함 분리 정합)
- 본 환경 직접 페이지 수 측정 정합 회복: shortcut.hwp 10 → 8 페이지
- 광범위 sweep 7 fixture / 170 페이지 / 회귀 0
- Issue #702 close 자동 정합
분리된 후속: Issue #708 OPEN (1쪽 시프트 잔존) + Issue #709 OPEN (부수 시각 결함 4건)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Owner
|
@planet6897 PR 머지 완료되었습니다 (devel 처리 결과
검증
본 환경 직접 페이지 수 측정 (PR 본문 정합 입증)
메모리 룰 정합
잔존 후속
처리 보고서: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
samples/basic/shortcut.hwp(한글 2010 단축키 일람표, A4 가로) 의 SVG 출력이 한글 2022 PDF 정답 (pdf/basic/shortcut-2022.pdf, 7쪽) 대비 10쪽 (+43%) 으로 폭주하던 결함 정정.LAYOUT_OVERFLOWRoot cause (2건)
본질 1A — Distribute 다단의 짧은 컬럼 vpos-reset 임계값
src/renderer/typeset.rs:430-446기존 임계값
pv > 5000이 짧은 Distribute (배분) 컬럼 (예: 지우기 3+3 분배, 마지막 paragraph vpos=3000) 에서 미달 → column-advance 미발동 → 6항목 1단 적층.정정:
ColumnType::Distribute(HWPXBalancedNewspaper) 한정 임계값pv > 0으로 완화. Normal/단단 분기는 기존pv > 5000유지.본질 1B — Page/Column break + 새 ColumnDef 미적용
shortcut.hwp p2 의 파일/미리보기/편집 sections 는 다음 패턴 사용:
[쪽나누기] + 단정의:1단 + 표(header)[단나누기] + 단정의:2단 배분기존 코드는
MultiColumnbreak 만 ColumnDef 적용 → Page/Column break 동반 ColumnDef 무시 →col_count가 이전 zone 값 유지 → 페이지 분기 폭주.정정: Page/Column break 처리 시 새 ColumnDef 검출 후 zone 재정의:
Column + has_diff_col_def:process_multicolumn_break호출Column + 동일 ColumnDef: 기존advance_column_or_new_pagePage/Section + has_diff_col_def:force_new_page후 ColumnDef 적용변경 파일
src/renderer/typeset.rs(+50 / -6)ColumnTypeimport +TypesetState.current_zone_column_type필드TypesetState::new시그니처 변경 (column_type 인자)process_multicolumn_break에서 column_type 전파tests/issue_702.rs(신규, 2 회귀 가드)shortcut_distribute_short_column_split: 페이지 수 ≤ 8shortcut_page2_has_three_sections: 페이지 2 SVG 에 파일/편집 헤더 모두 존재mydocs/plans/task_m100_702.md,task_m100_702_impl.mdmydocs/working/task_m100_702_stage2.md,task_m100_702_stage3.mdmydocs/report/task_m100_702_report.md회귀 차단 가드
Normal(NEWSPAPER) 다단은 기존pv > 5000유지 → Task #321/#418/#470 회귀 차단:tests/exam_eng_multicolumn.rs: 14 passedtests/issue_418.rs: 1 passedtests/svg_snapshot.rs: 7 passed (golden snapshots)tests/issue_702.rs: 2 passed (신규 가드)cargo test --release: 1248+ tests, 0 failed잔여 결함 → 별도 이슈 분리
[단나누기]at last col 1쪽 시프트test_539_partial_paragraph_after_overlay_shape,test_548_cell_inline_shape_first_line_indent_p8,test_exam_math_page_count회귀 발견 → rollback다른 열린 PR 과의 관계
src/renderer/typeset.rs를 건드리는 다른 열린 PR (#644, #679, #707) 과 텍스트 충돌 없음 (각각 다른 line 영역, 다른 함수 분기):LAYOUT_DRIFT_SAFETY_PX(다른 메커니즘)typeset_paragraph+ trailing empty 가드 (col_count == 1한정)머지 순서 무관, rebase + cargo test 통과 시 안전.
Test plan
cargo build --release통과cargo test --release: 1248+ passed, 0 failedrhwp dump-pages samples/basic/shortcut.hwp: 페이지 1 지우기 단 5/6 = items=3/3, 페이지 2 = 파일+미리보기+편집 통합rhwp export-svg samples/basic/shortcut.hwp: 8쪽 (수정 전 10쪽),LAYOUT_OVERFLOW1건 (수정 전 다수)🤖 Generated with Claude Code