Skip to content

feat: 쪽 새 번호로 시작 — insertNewNumber WASM API + dialog UI (#791)#809

Closed
oksure wants to merge 3 commits into
edwardkim:develfrom
oksure:contrib/insert-new-number
Closed

feat: 쪽 새 번호로 시작 — insertNewNumber WASM API + dialog UI (#791)#809
oksure wants to merge 3 commits into
edwardkim:develfrom
oksure:contrib/insert-new-number

Conversation

@oksure
Copy link
Copy Markdown
Contributor

@oksure oksure commented May 11, 2026

변경 내용

page:new-page-num (쪽 > 새 번호로 시작) 커맨드를 stub에서 실동작으로 구현.

구현 범위

Rust (WASM API)

  • insert_new_number_native: 현재 커서 위치에 Control::NewNumber(Page, startNum) 삽입
    • find_control_text_positions로 삽입 인덱스 결정
    • char_offsets +8 조정 + control_mask 갱신
    • reflow_paragraphrecompose_sectionpaginate_if_needed 후처리
  • WASM 바인딩: insertNewNumber(sec, para, charOffset, startNum)

TypeScript (Dialog + Command)

  • NewNumberDialog: ModalDialog 패턴, 시작 번호 입력 (1~65535)
  • wasm-bridge.ts: insertNewNumber 메서드 추가
  • page.ts: page:new-page-num stub → NewNumberDialog 호출로 교체

연동

PR #745 (Task #634)에서 구현된 NewNumber 페이지 번호 표시 로직과 연동:

  • typeset.rsControl::NewNumber를 스캔하여 new_page_numbers 벡터에 적재
  • 페이지 렌더링 시 해당 번호부터 표시

테스트

  • cargo test + cargo clippy -- -D warnings 통과
  • TypeScript tsc --noEmit 통과 (WASM 모듈 제외)

closes #791

감사합니다.

- Rust: insert_new_number_native — Control::NewNumber(Page) 삽입
  - char_offset 기반 controls 배열 삽입 위치 결정
  - char_offsets +8 조정, control_mask 갱신
  - reflow + recompose + paginate 후처리
- WASM: insertNewNumber(sec, para, charOffset, startNum) 바인딩
- TypeScript: NewNumberDialog (시작 번호 입력, ModalDialog 패턴)
- Command: page:new-page-num stub → 실동작으로 교체

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 11, 2026 04:30
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

Implements the “쪽 > 새 번호로 시작” feature end-to-end by adding a Rust-side WASM mutation API to insert a Control::NewNumber(Page, startNum) at the current cursor position, and wiring a Studio command + modal dialog UI to collect the start number and invoke the WASM API.

Changes:

  • Added WASM API insertNewNumber(sec, para, charOffset, startNum) that forwards to a new native core command.
  • Implemented DocumentCore::insert_new_number_native(...) to insert the NewNumber control and trigger reflow/recompose/pagination.
  • Added Studio UI (NewNumberDialog) and connected page:new-page-num command + WasmBridge.insertNewNumber().

Reviewed changes

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

Show a summary per file
File Description
src/wasm_api.rs Exposes insertNewNumber to JS/WASM callers.
src/document_core/commands/object_ops.rs Implements native insertion of Control::NewNumber and post-edit layout invalidation.
rhwp-studio/src/ui/new-number-dialog.ts Adds modal dialog UI for choosing the start page number and calling WASM.
rhwp-studio/src/core/wasm-bridge.ts Adds insertNewNumber(...) wrapper on the Studio side.
rhwp-studio/src/command/commands/page.ts Replaces the stub command with real dialog invocation at cursor position.

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

Comment thread src/wasm_api.rs
Comment on lines +1070 to +1073
para_idx as usize,
char_offset as usize,
start_num as u16,
)
Comment on lines +3795 to +3801
if !paragraph.char_offsets.is_empty() {
let text_len = paragraph.text.chars().count();
let safe_offset = char_offset.min(text_len);
for co in paragraph.char_offsets[safe_offset..].iter_mut() {
*co += 8;
}
}
Comment thread rhwp-studio/src/ui/new-number-dialog.ts Outdated
Comment on lines +60 to +61
this.eventBus.emit('document:changed');
this.eventBus.emit('recompose:request');
Comment on lines +274 to +280
canExecute: (ctx) => ctx.hasDocument,
execute(services) {
const ih = services.getInputHandler();
if (!ih) return;
const cursor = (ih as any).cursor;
if (!cursor) return;
const pos = cursor.getPosition();
Comment on lines +3755 to +3759
pub fn insert_new_number_native(
&mut self,
section_idx: usize,
para_idx: usize,
char_offset: usize,
oksure and others added 2 commits May 11, 2026 05:25
- wasm_api.rs: start_num 0 또는 >65535 시 에러 반환 (u16 overflow 방지)
- new-number-dialog.ts: 'document:changed' → 'document-changed'
  (프로젝트 표준 이벤트명 사용, 존재하지 않는 'recompose:request' 제거)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
표 셀 내부에서는 body paragraph 전용 insertNewNumber API가 동작하지 않으므로
canExecute에서 차단.
@oksure
Copy link
Copy Markdown
Contributor Author

oksure commented May 11, 2026

Copilot 리뷰 반영 (05f487d): canExecute에 !inTable 가드 추가 (표 셀 내부에서 body 전용 API 호출 차단)

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
Copy link
Copy Markdown
Owner

@oksure 머지 완료 (commit 47ef8fca).

PR #755 close 후속 영역 NewNumber 컨트롤 신규 insertNewNumber API 정확. PR #745 (Task #634 NewNumber Page 표시) 인프라 활용 — typeset.rs 영역 Control::NewNumber 스캔 + 페이지 번호 표시 정합.

리뷰 반영 commits (start_num 범위 검증 + !inTable Copilot 가드) 정합. 본 환경 충돌 2 파일 수동 해결 — page.ts import / wasm-bridge.ts 두 메서드 양쪽 보존.

자기 검증 tsc + cargo test/clippy ALL GREEN + 광범위 sweep 7 fixture / 170 페이지 / 회귀 0 (신규 API opt-in 영역 영역 기존 동작 무영향 입증) + WASM 4.5 MB. 작업지시자 인터랙션 검증 통과 (메뉴 + dialog + 페이지 번호 갱신).

수고하셨습니다.

@edwardkim edwardkim closed this May 11, 2026
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 행 추가
jangster77 added a commit to jangster77/rhwp that referenced this pull request May 11, 2026
…im#810 후속 (5/11 orders 갱신)

# Conflicts:
#	mydocs/orders/20260511.md
jangster77 added a commit to jangster77/rhwp that referenced this pull request May 11, 2026
… 후속 (5/11 orders 갱신)

# Conflicts:
#	mydocs/orders/20260511.md
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