Skip to content

Task #634: 첫 NewNumber Page 발화 전 쪽번호 미표시 — 한컴 호환#745

Closed
oksure wants to merge 2 commits into
edwardkim:develfrom
oksure:contrib/page-number-newnumber-gate
Closed

Task #634: 첫 NewNumber Page 발화 전 쪽번호 미표시 — 한컴 호환#745
oksure wants to merge 2 commits into
edwardkim:develfrom
oksure:contrib/page-number-newnumber-gate

Conversation

@oksure
Copy link
Copy Markdown
Contributor

@oksure oksure commented May 9, 2026

문제

PageNumberPos 컨트롤이 등록된 시점부터 모든 페이지에 쪽번호가 표시됩니다. 한컴오피스는 첫 NewNumber Page 컨트롤이 발화한 페이지부터만 쪽번호를 표시합니다.

결과: 표지/요약문/목차 페이지에서 한컴과 시각 차이 발생.

수정 내용

  • PageNumberAssignernumbering_started: bool 플래그 추가
  • assign() 호출 시 첫 NewNumber 소비 시점에 true로 전환
  • should_hide_page_number() 메서드 추가: NewNumber가 존재하지만 아직 미발화 시 true
  • finalize_pages()에서 page_number_pos 할당을 should_hide_page_number() 가드로 게이트

NewNumber 컨트롤이 없는 문서(기존 대부분 문서)는 new_page_numbers가 빈 벡터이므로 should_hide_page_number()가 항상 false — 기존 동작과 동일합니다.

검증

  • cargo test — 전체 통과
  • cargo clippy -- -D warnings — 경고 0건
  • samples/aift.hwp:
    • 페이지 1~6 (표지/목차): 쪽번호 미출력 (한컴 동일)
    • 페이지 7 (NewNumber Page=1 발화): "- 1 -" 정상 출력

Closes #634

감사합니다.

한컴 호환: NewNumber 컨트롤이 존재하는 문서에서 첫 NewNumber가
발화되기 전 페이지(표지/목차 등)에는 쪽번호를 표시하지 않는다.

PageNumberAssigner에 numbering_started 플래그 추가.
finalize_pages에서 should_hide_page_number() 체크로
page_number_pos 할당을 게이트.

검증: samples/aift.hwp 페이지 1(표지) 쪽번호 미출력,
      페이지 7(NewNumber 발화) "- 1 -" 정상 출력.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 9, 2026 14:04
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates page-number rendering to match Hancom Office behavior by hiding page numbers on pages before the first NewNumber (Page) control actually “fires” (i.e., is first encountered in layout), even if PageNumberPos is present.

Changes:

  • Added numbering_started state to PageNumberAssigner to detect when the first NewNumber has been consumed.
  • Introduced should_hide_page_number() to decide whether page numbers should be suppressed before numbering starts.
  • Gated page_number_pos assignment in pagination finalization so early pages don’t render page numbers when NewNumber exists but hasn’t fired yet.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/renderer/pagination/engine.rs Conditionally assigns page_number_pos based on should_hide_page_number() to suppress early-page numbering.
src/renderer/page_number.rs Adds numbering_started tracking and exposes should_hide_page_number() for Hancom-compatible page-number visibility.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1902 to +1904
if !assigner.should_hide_page_number() {
page.page_number_pos = page_number_pos.clone();
}
Comment on lines +63 to +67
/// NewNumber가 존재하지만 아직 발화되지 않은 상태인지 판별한다.
/// true이면 이 페이지에 쪽번호를 표시하지 않아야 한다 (한컴 호환).
pub fn should_hide_page_number(&self) -> bool {
!self.new_page_numbers.is_empty() && !self.numbering_started
}
- typeset.rs finalize_pages에서 should_hide_page_number() 가드 적용
  (engine.rs에만 적용되어 있던 것을 TypesetEngine 경로에도 동일 적용)
- should_hide_before_first_new_number, should_not_hide_when_no_new_numbers
  단위 테스트 2건 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@oksure
Copy link
Copy Markdown
Contributor Author

oksure commented May 9, 2026

Copilot 리뷰 반영 (9a9a427):

  • TypesetEngine::finalize_pages에도 should_hide_page_number() 가드 적용 (기존에 engine.rs에만 적용됨)
  • 단위 테스트 2건 추가: NewNumber 발화 전 숨김 동작 + NewNumber 없을 때 항상 표시 확인

edwardkim added a commit that referenced this pull request May 10, 2026
PR #745 (@oksure) 옵션 A 처리 — 2 commits cherry-pick + no-ff merge.

본질 정정 (3 files, +42/-4):
- src/renderer/page_number.rs (+36/-2): PageNumberAssigner 영역 영역 numbering_started: bool 추가 + should_hide_page_number() 메서드 + 신규 unit tests 2건 (should_hide_before_first_new_number / should_not_hide_when_no_new_numbers)
- src/renderer/pagination/engine.rs (+3/-1): finalize_pages 영역 영역 page_number_pos 할당 영역 영역 should_hide_page_number() 가드
- src/renderer/typeset.rs (+3/-1): TypesetEngine 동일 가드 (Copilot 리뷰 반영)

opt-in 정합:
- NewNumber 부재 문서 (대부분) — new_page_numbers 빈 벡터 영역 영역 should_hide_page_number() 항상 false → 기존 동작 100% 보존
- 두 경로 (pagination/engine + typeset) 동기 정합 — feedback_image_renderer_paths_separate 정합

Copilot 리뷰 반영 (commit cc1e654): TypesetEngine 경로에도 쪽번호 숨김 적용 + 테스트 추가

자기 검증:
- cherry-pick 충돌 0건 (auto-merge 정합)
- cargo build/test --release ✅ ALL GREEN
- page_number tests ✅ 8 PASS (신규 2건 + 기존 6건)
- 광범위 sweep 7 fixture / 170 페이지 / 회귀 0 ✅ (opt-in 정합 입증)
- WASM 빌드 4.66 MB

작업지시자 시각 검증:
- 두 별 결함 발견 (PR #745 본질 영역 영역 무관, 후속 별 PR 영역 영역 정정):
  · aift_002.svg 영역 영역 일부 셀 검정 바탕 — BEFORE/AFTER 동일 (별 결함, PR #745 무관)
  · aift_006.svg 영역 영역 한컴 4 vs rhwp 3 — 페이지 번호 표시 자체 영역 영역 다른 본질 (별 결함)

처리 결정 (feedback_pr_supersede_chain (c) 패턴 정합):
- PR #745 머지 유지 (단위 테스트 결정적 검증 + opt-in 정합 입증)
- 두 결함 영역 영역 별 후속 이슈 영역 영역 분리 처리

closes #634
관련: 후속 이슈 (aift_002 검정 바탕 + aift_006 페이지 번호 표시)
edwardkim added a commit that referenced this pull request May 10, 2026
…속 등록

- mydocs/pr/archives/pr_745_review.md: 검토 문서 archives 이동
- mydocs/pr/archives/pr_745_report.md: 처리 보고서 작성
  · 첫 NewNumber Page 발화 전 쪽번호 미표시 (Issue #634 closes)
  · opt-in 정합 (NewNumber 부재 시 기존 동작 100% 보존)
  · 두 경로 동기 정합 (pagination/engine + typeset)
  · 작업지시자 시각 검증 — 두 별 결함 발견 영역 영역 (c) 패턴 후속 처리
- mydocs/orders/20260510.md: PR #745 항목 추가 (5/10 사이클 영역 영역 17건 처리)

후속 OPEN 이슈:
- Issue #782 — aift.hwp 페이지 2 영역 영역 일부 표 셀 검정 바탕 (HWP ColorRef alpha 처리 결함 가능)
- Issue #783 — aift.hwp 페이지 6 영역 영역 한컴 4 vs rhwp 3 페이지 번호 불일치
@edwardkim
Copy link
Copy Markdown
Owner

@oksure 님, 검토 + 머지 완료했습니다.

처리 결과

옵션 A (2 commits cherry-pick + no-ff merge `8ef9c86e`) 로 처리. 충돌 0건 (auto-merge 정합).

자기 검증

  • `cargo build/test --release` ✅ ALL GREEN
  • page_number tests ✅ 8 PASS (신규 2건 + 기존 6건)
  • 광범위 sweep (7 fixture / 170 페이지) ✅ 170 same / 0 diff (opt-in 정합 입증)
  • WASM 빌드 ✅ 4.66 MB

작업지시자 시각 검증 — 두 별 결함 발견

본 PR 본질 (NewNumber 미표시) 영역 영역 무관 영역 영역 두 별 결함 발견 영역 영역 별 후속 PR 영역 영역 통합 처리 (`feedback_pr_supersede_chain` (c) 패턴):

본질 정정

PR #745 영역 영역 NewNumber 발화 전 쪽번호 미표시 한컴 호환 정합 ✅:

  • opt-in 정합 (NewNumber 부재 시 기존 동작 100% 보존)
  • 두 경로 동기 정합 (pagination/engine + typeset, `feedback_image_renderer_paths_separate` 권위 사례 강화)

처리 보고서: `mydocs/pr/archives/pr_745_report.md`.

@oksure20+ 사이클 컨트리뷰션 영역 — 5/10 사이클 영역 영역 PR #720/#723/#725/#728/#729/#730/#732/#734/#735/#737/#738/#739/#740/#742/#743/#744/#745 영역 17건 처리 완료 영역.

@edwardkim edwardkim closed this May 10, 2026
edwardkim added a commit that referenced this pull request May 10, 2026
PR #745 (5/10 머지) 영역 영역 작업지시자 시각 검증 영역 발견 결함 (Issue #782) 정정 — samples/aift.hwp 페이지 2 영역 영역 일부 표 셀 검정 단색 fill.

본질: style_resolver.rs (표 셀 경로) 영역 영역 pattern_type 검사 누락. layout/utils.rs (도형 경로) 영역 영역 이미 동일 가드 정합 영역 영역 비대칭 본질.

정정 (style_resolver.rs +2/-1, 1 라인 가드):
- 기존: alpha 만 검사 — if (s.background_color >> 24) != 0 { None }
- 수정: pattern_type + alpha 검사 — if s.pattern_type > 0 || (s.background_color >> 24) != 0 { None }

영향: pattern_type > 0 시 background_color 영역 영역 패턴 배경색 (셀 단색 fill 아님) → 검정 단색 fill 차단.

검증:
- cargo build/test/clippy --release ALL GREEN
- 광범위 sweep 170/170 same (sweep fixture aift 영역 영역 다른 페이지 영역 영역 영향 부재)
- aift.hwp 페이지 2 SVG export 영역 영역 rect 검정 fill 0회 입증 (출력: output/svg/pr788/aift_002.svg)
- 작업지시자 시각 판정 ✅ 통과 (VSCode SVG 뷰어 dark mode 배경 영역 영역 검정 보였음 — 결함 부재)

closes #782
@edwardkim edwardkim mentioned this pull request May 10, 2026
4 tasks
edwardkim added a commit that referenced this pull request May 11, 2026
…dialog UI

@oksure — Issue #791 (PR #755 close 후속): page:new-page-num (쪽 > 새 번호로 시작) stub
→ 실동작 구현. PR #755 의 setNumberingRestart (paragraph numbering) 잘못 매핑 close 후
NewNumber 컨트롤 영역 신규 insertNewNumber API 영역 정확 본질.

본질 (3 commits, 5 files, +174/-1):
- Rust: insert_new_number_native (object_ops.rs +63) + insertNewNumber WASM 바인딩
  (wasm_api.rs +21) — find_control_text_positions 영역 삽입 인덱스 + char_offsets +8 조정
  + control_mask 갱신 + reflow/recompose/paginate 후처리
- TypeScript: NewNumberDialog 신규 (+65) + wasm-bridge.ts 래퍼 (+5)
  + page.ts 커맨드 교체 (+19/-1)

리뷰 반영 commits:
- 05a3f5e: start_num 범위 검증 (1~65535, u16) + 이벤트명 정정
- f285df1: Copilot 리뷰 — !inTable 가드 (표 셀 삽입 금지)

PR #745 (Task #634 NewNumber Page 표시) 정합 — typeset.rs 영역 Control::NewNumber 스캔
+ new_page_numbers 적재 + 페이지 렌더링 영역 해당 번호부터 표시.

본 환경 충돌 수동 해결 (2 파일):
- rhwp-studio/src/command/commands/page.ts: import 양쪽 보존
  (ColumnSettingsDialog devel 측 + NewNumberDialog incoming)
- rhwp-studio/src/core/wasm-bridge.ts: 두 메서드 모두 보존
  (getColumnDef devel 측 + insertNewNumber incoming)

자기 검증: tsc + cargo test/clippy ALL GREEN + 광범위 sweep 7 fixture / 170 페이지 /
회귀 0 (신규 API opt-in 영역 영역 기존 동작 무영향 입증) + WASM 4.5 MB 재빌드
시각 판정: 작업지시자 인터랙션 검증 ✅ 통과
edwardkim added a commit that referenced this pull request May 11, 2026
- mydocs/pr/archives/pr_809_review.md (insertNewNumber WASM API + dialog + 충돌 분석)
- mydocs/pr/archives/pr_809_report.md (옵션 A 처리 결과 + PR #745/#755 정합)
- mydocs/orders/20260511.md PR #809 행 추가
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.

3 participants