Skip to content

Task #702: shortcut.hwp 다단 정의 후속 갱신 누락 정정 (closes #702)#710

Open
planet6897 wants to merge 2 commits intoedwardkim:develfrom
planet6897:pr-task702
Open

Task #702: shortcut.hwp 다단 정의 후속 갱신 누락 정정 (closes #702)#710
planet6897 wants to merge 2 commits intoedwardkim:develfrom
planet6897:pr-task702

Conversation

@planet6897
Copy link
Copy Markdown
Contributor

Summary

samples/basic/shortcut.hwp (한글 2010 단축키 일람표, A4 가로) 의 SVG 출력이 한글 2022 PDF 정답 (pdf/basic/shortcut-2022.pdf, 7쪽) 대비 10쪽 (+43%) 으로 폭주하던 결함 정정.

항목 수정 전 수정 후
페이지 수 10 8 (PDF 7 +1쪽)
LAYOUT_OVERFLOW 다수 (40~60px) 1건 (페이지 8 마지막)
페이지 1 지우기 1단 6항목 적층 2단 3+3 분할
페이지 2 섹션 파일 header 만 파일+미리보기+편집 통합

Root 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 (HWPX BalancedNewspaper) 한정 임계값 pv > 0 으로 완화. Normal/단단 분기는 기존 pv > 5000 유지.

본질 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 적용

변경 파일

  • src/renderer/typeset.rs (+50 / -6)
    • ColumnType import + TypesetState.current_zone_column_type 필드
    • TypesetState::new 시그니처 변경 (column_type 인자)
    • 메인 루프 column-break 검출 + ColumnDef 적용
    • vpos-reset trigger 분기 (Distribute 한정 완화)
    • process_multicolumn_break 에서 column_type 전파
  • tests/issue_702.rs (신규, 2 회귀 가드)
    • shortcut_distribute_short_column_split: 페이지 수 ≤ 8
    • shortcut_page2_has_three_sections: 페이지 2 SVG 에 파일/편집 헤더 모두 존재
  • mydocs/plans/task_m100_702.md, task_m100_702_impl.md
  • mydocs/working/task_m100_702_stage2.md, task_m100_702_stage3.md
  • mydocs/report/task_m100_702_report.md

회귀 차단 가드

Normal (NEWSPAPER) 다단은 기존 pv > 5000 유지 → Task #321/#418/#470 회귀 차단:

  • tests/exam_eng_multicolumn.rs: 14 passed
  • tests/issue_418.rs: 1 passed
  • tests/svg_snapshot.rs: 7 passed (golden snapshots)
  • tests/issue_702.rs: 2 passed (신규 가드)
  • 전체 cargo test --release: 1248+ tests, 0 failed

잔여 결함 → 별도 이슈 분리

다른 열린 PR 과의 관계

src/renderer/typeset.rs 를 건드리는 다른 열린 PR (#644, #679, #707) 과 텍스트 충돌 없음 (각각 다른 line 영역, 다른 함수 분기):

머지 순서 무관, rebase + cargo test 통과 시 안전.

Test plan

  • cargo build --release 통과
  • cargo test --release: 1248+ passed, 0 failed
  • rhwp dump-pages samples/basic/shortcut.hwp: 페이지 1 지우기 단 5/6 = items=3/3, 페이지 2 = 파일+미리보기+편집 통합
  • rhwp export-svg samples/basic/shortcut.hwp: 8쪽 (수정 전 10쪽), LAYOUT_OVERFLOW 1건 (수정 전 다수)
  • 시각 판정 (qlmanage 비교): 페이지 1, 2 PDF 정합 우수
  • 광범위 샘플 회귀 (KTX, aift, hwp-multi-001, kps-ai, exam_eng): 무회귀

🤖 Generated with Claude Code

planet6897 and others added 2 commits May 8, 2026 11:38
)

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>
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