수식 편집 UI 개선: 듀얼 모드, 자동완성, 탭 기반 템플릿#738
Conversation
- HWP ↔ LaTeX 듀얼 입력 모드 (타이틀바 토글 버튼) - 7개 탭 기반 템플릿 (구조/그리스/연산자/화살표/함수/장식/특수, 130+ 항목) - 명령어 자동완성 드롭다운 (2자 이상 입력 시 활성화, ↑↓/Tab/Enter) - 기호 검색 (이름/유니코드로 필터링) - HWP 모드에서 백슬래시 감지 시 LaTeX 전환 힌트 - 기존 스크립트에 \명령어 존재 시 LaTeX 모드로 자동 시작 Closes edwardkim#144
There was a problem hiding this comment.
Pull request overview
수식 편집 대화상자 UI를 확장하여 HWP ↔ LaTeX 듀얼 모드, 탭 기반 템플릿, 명령어 자동완성/검색을 제공하도록 개선하는 PR입니다. 기존 WASM 미리보기/속성 편집 흐름은 유지하면서, 입력 편의 기능과 템플릿 규모를 크게 늘리는 방향의 변경입니다.
Changes:
- HWP/LaTeX 모드 토글 및 기존 스크립트 기반 LaTeX 자동 시작 로직 추가
- 탭 UI로 템플릿 그룹화(구조/그리스/연산자/화살표/함수/장식/특수) 및 항목 확장
- 자동완성 드롭다운 + 기호 검색 UI/키보드 인터랙션 추가
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| rhwp-studio/src/ui/equation-editor-dialog.ts | 듀얼 모드/탭 템플릿/자동완성/검색 UI 로직 및 이벤트 처리 추가 |
| rhwp-studio/src/styles/dialogs.css | 수식 편집 대화상자 탭/모드 버튼/자동완성/검색/힌트 UI 스타일 추가 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| function buildCommandList(): CommandEntry[] { | ||
| const cmds: CommandEntry[] = []; | ||
| for (const grp of TEMPLATE_GROUPS) { | ||
| for (const t of grp.items) { | ||
| cmds.push({ name: t.hwp.split(/[\s{}_^]/)[0], display: t.label, insert: t.hwp, group: grp.name }); | ||
| } | ||
| } | ||
| return cmds; | ||
| } | ||
|
|
||
| const ALL_COMMANDS = buildCommandList(); |
| function buildCommandList(): CommandEntry[] { | ||
| const cmds: CommandEntry[] = []; | ||
| for (const grp of TEMPLATE_GROUPS) { | ||
| for (const t of grp.items) { | ||
| cmds.push({ name: t.hwp.split(/[\s{}_^]/)[0], display: t.label, insert: t.hwp, group: grp.name }); |
| const pos = ta.selectionStart; | ||
| const text = ta.value; | ||
| const before = text.substring(0, pos); | ||
| const match = before.match(/([a-zA-Z]+)$/); | ||
| if (!match) return; | ||
| const wordStart = pos - match[1].length; | ||
| const script = this.mode === 'hwp' ? cmd.insert : (cmd.insert.startsWith('\\') ? cmd.insert : '\\' + cmd.insert); | ||
| ta.value = text.substring(0, wordStart) + script + text.substring(pos); |
PR #738 (@oksure) 옵션 A 처리 — 2 commits cherry-pick + no-ff merge. 본질 정정 (2 files, +601/-98): - rhwp-studio/src/ui/equation-editor-dialog.ts (+447/-91): · HWP ↔ LaTeX 듀얼 입력 모드 (InputMode = 'hwp' | 'latex' + setMode/toggleMode) · 타이틀바 모드 토글 버튼 + 기존 스크립트 영역 영역 \명령어 존재 시 LaTeX 모드 자동 시작 · 탭 기반 130+ 템플릿 (7 탭: 구조/그리스/연산자/화살표/함수/장식/특수) · 명령어 자동완성 드롭다운 (2자 이상 입력 시 활성화, ↑↓ 선택 / Tab+Enter 확정 / Esc 닫기, 기호+이름+그룹 표시) · 기호 검색 (이름/유니코드 → 커서 위치 삽입) · LaTeX 전환 힌트 (HWP 모드 영역 \ + 영문자 감지 → 안내 배너) - rhwp-studio/src/styles/dialogs.css (+154/-7): 신규 UI 요소 영역 CSS (모드 토글 / 탭 / 자동완성 / 검색 / LaTeX 힌트) Copilot 리뷰 반영 (commit `f4636679`): LaTeX 모드 자동완성 정정 — 모드별 insert 분리 + 빈 name 방지 + 백슬래시 중복 제거. 백엔드 변경 부재: - Rust 수식 파서 영역 영역 PR #729 (closes #143) 영역 영역 양 구문 처리 영역 영역 활용 - WASM 변경 부재 — TypeScript + CSS 만 자기 검증: - cherry-pick 충돌 0건 - tsc --noEmit ✅ 통과 - 광범위 sweep 7 fixture / 170 페이지 / 회귀 0 ✅ (TypeScript 영역 영역 SVG 무영향 입증) - WASM 빌드 4.66 MB - 작업지시자 시각 판정 ✅ 통과 (dev server 영역 영역 모드 토글 / 자동완성 / 탭 템플릿 / 기호 검색 / LaTeX 힌트 5개 영역 영역 정합) PR supersede 체인 (a) 패턴 — close+통합 머지: - PR #738 영역 영역 PR #765 (closes #763, 5/9 19:35 등록, 동일 컨트리뷰터 @oksure) 영역 영역 의 본질 (UI 모드 토글) 영역 영역 완전 포함 - PR #765 영역 영역 close + Issue #763 close (PR #738 영역 영역 통합 영역 영역 명시) closes #144 관련: PR #765 (closes #763) — PR #738 영역 영역 supersede ((a) 패턴)
- mydocs/pr/archives/pr_738_review.md: 검토 문서 archives 이동 - mydocs/pr/archives/pr_738_report.md: 처리 보고서 작성 · 수식 편집 UI 개선 (듀얼 모드 + 자동완성 + 탭 130+ 템플릿 + 기호 검색 + LaTeX 힌트) · 백엔드 변경 부재 (PR #729 영역 영역 Rust 수식 파서 활용) · 작업지시자 시각 판정 ✅ 통과 · feedback_pr_supersede_chain (a) 패턴 권위 사례 — PR #738 영역 PR #765 (closes #763) supersede - mydocs/orders/20260510.md: PR #738 항목 추가 (5/10 사이클 영역 영역 11건 처리)
|
@oksure 님, 검토 + 머지 완료했습니다. 처리 결과옵션 A (2 commits cherry-pick + no-ff merge `11cb5424`) 로 처리. 충돌 0건. 자기 검증
작업지시자 시각 판정 ✅ 통과dev server 영역 수식 편집 대화상자 영역 영역 5개 영역 모두 정합:
본질수식 편집 UX 전면 개선 — Rust 수식 파서 (PR #729 closes #143) 영역 영역 양 구문 처리 영역 영역 활용 영역 영역 백엔드 변경 부재. `feedback_process_must_follow` 정합 — 인프라 재사용 영역 영역 위험 좁힘. PR supersede 체인 (a) 패턴 — PR #765 통합 처리본 PR #738 영역 영역 PR #765 (closes #763, 5/9 19:35 등록, hwpeq/LaTeX 모드 토글 + 30개 템플릿 + Ctrl+M 작은 PR) 영역 영역 의 본질 (UI 모드 토글) 영역 영역 완전 포함 영역 영역 → close+통합 머지 ((a) 패턴 정합, PR #649 → #650 동일 패턴). PR #765 영역 영역 close + Issue #763 close 후속 처리 영역 — `feedback_pr_supersede_chain` (a) 패턴 권위 사례. 처리 보고서: `mydocs/pr/archives/pr_738_report.md`. @oksure 님 20+ 사이클 컨트리뷰션 영역 — 5/10 사이클 영역 영역 PR #720/#723/#725/#728/#729/#730/#732/#734/#735/#737/#738 영역 11건 처리 완료 영역. |
PR #739 (@oksure) 옵션 A 처리 — 2 commits cherry-pick + 자기 정정 + no-ff merge. 본질 정정 (5 files, +152/-0): - src/document_core/commands/object_ops.rs (+94): insert_equation_native() — insertFootnote 패턴 정합 (controls.insert + char_offsets gap 8 + reflow + paginate). treat_as_char: true (한컴 수식 영역 영역 항상 TAC, project_equation_always_tac 정합) - src/wasm_api.rs (+22): WASM 바인딩 insertEquation(sec, para, charOffset, script, fontSize, color) - rhwp-studio/src/core/wasm-bridge.ts (+5): TypeScript 바인딩 insertEquation() - rhwp-studio/src/command/commands/insert.ts (+30): 'insert:equation' 커맨드 — 빈 수식 삽입 후 EquationEditorDialog 자동 진입 + 표 셀 내부 실행 차단 (이중 가드) - rhwp-studio/index.html (+1): 입력 메뉴 영역 영역 "수식 (Ctrl+N,M)" 항목 Copilot 리뷰 반영 (commit `e93f60dc`): 셀 내부 실행 차단 + CTRL_EQUATION 상수 사용 + control_mask |= 1<<11 비트 설정. 본 환경 자기 정정 (commit `76f9ade6`): EditorContext.inTableCellEditing 영역 영역 부재 영역 영역 본 환경 영역 영역 정의 영역 영역 inTable 영역 영역 대체 (tsc 에러 정정). 인프라 재사용: - insertFootnote 패턴 (object_ops.rs) - EquationEditorDialog (PR #738 closes #144) - Control::Equation IR + 기존 API (renderEquationPreview / getEquationProperties / setEquationProperties) 자기 검증: - cherry-pick 충돌 0건 - cargo build/test --release ✅ ALL GREEN - tsc --noEmit ✅ 통과 (자기 정정 후) - 광범위 sweep 7 fixture / 170 페이지 / 회귀 0 ✅ - WASM 빌드 4.65 MB (cargo clean wasm target 후 강제 재빌드 — insertEquation API 노출 정합) 작업지시자 웹 검증: - 메뉴 클릭 경로: 본문 캐럿 위치 영역 빈 수식 삽입 + 대화상자 자동 진입 ✅ 정합 동작 - 두 별 결함 발견 (PR #739 본질 영역 영역 무관, 후속 별 PR 영역 영역 정정): · Issue #766 — 수식 객체 backspace 삭제 시 "지정된 컨트롤이 Shape이 아닙니다" 오류 (input-handler-keyboard.ts 영역 picture-object selection ref dispatch 영역 영역 Equation 분기 부재) · Issue #767 — Ctrl+N+M 단축키 영역 chordMapN 영역 'm' 매핑 부재 → 브라우저 새 창 발생 (input-handler-keyboard.ts:chordMapN 영역 영역 등록 부재) 처리 결정 (feedback_pr_supersede_chain (c) 패턴 정합): - PR #739 머지 유지 (insertEquation API + 메뉴 항목 + 대화상자 자동 진입 본질 보존) - Issue #766/#767 영역 별 후속 PR 영역 영역 통합 처리 closes #731 관련 후속: Issue #766 / Issue #767
변경 사항
수식 편집 대화상자(
equation-editor-dialog.ts)를 전면 개선합니다.1. HWP ↔ LaTeX 듀얼 입력 모드
\명령어존재 시 LaTeX 모드로 자동 시작2. 탭 기반 확장 템플릿
symbols.rs명령어 체계와 정합3. 명령어 자동완성
4. 기호 검색
5. LaTeX 전환 힌트
\+ 영문자 입력 감지 시 LaTeX 전환 안내 배너 표시의존성
테스트
npx tsc --noEmit: 에러 없음 (WASM 모듈 제외)cargo test: 전체 통과cargo clippy -- -D warnings: 경고 없음Closes #144
감사합니다.