fix: LaTeX 분수 수식 미리보기 파싱 보정 (#143 1차)#563
Conversation
…@cskwork 1 commit + 시각 판정 통과)
|
@cskwork 님, rhwp 에 첫 PR 이시군요 — 환영합니다. 본 PR 의 단일 commit 통합 결과8 file (+333) — orders 영역에 사소한 충돌이 있어 본 환경의 PR 처리 표 형태로 통합했습니다 (옵션 C — 컨트리뷰터의 "수식 파서" 섹션은 본 환경 orders 컨벤션과 형태가 달라, PR #563 항목 자체로 통합). 본질 영역은 충돌 0 자동 머지. 본질 평가 — 정합1차 보정의 명시적 한정PR 본문에서 코드 안전성
작업지시자 절차Stage 1 + 계획서 + 구현계획서 + 최종보고서 + 시각 검증 스크린샷 완비 — 본 프로젝트의 하이퍼-워터폴 단계 절차에 정합한 모범 사례입니다. 결정적 검증
시각 판정 — 메인테이너 통과 확인
다음 PR 시 안내본 PR 의 base 가 git fetch upstream
git checkout devel
git merge --ff-only upstream/devel
git push origin devel
git checkout -b local/task{N}Issue #143 후속 권장본 PR 의 1차 보정 본질을 보존한 위에서 Issue #143 의 본 설계 (듀얼 토크나이저 — 본 PR 은 cherry-pick 통합 완료로 close 합니다. Issue #143 은 OPEN 유지 (후속 듀얼 토크나이저 사이클). 다음 PR 도 기다리겠습니다. |
PR #599 (refs #536, @seo-rii) 1차 검토 — render P4 native Skia PNG raster backend: - 본 환경 정체성 정합 (project_dtp_identity — DTP 엔진 + 다층 레이어 토대) - PR base skew 73 commits (eaac8bd, 5/4 PR #563 후속) — 단순 머지 시 본 사이클 cherry-pick 처리분 모두 revert 위험 - 그러나 본질 영역 (src/renderer/skia/ + layer_renderer.rs + image_conv.rs) 이 본 사이클 처리분과 0 중첩 → commit 단위 cherry-pick 가능 - 9 commits 순차 cherry-pick test: 모두 충돌 0 + cargo test --lib --release 1134 passed (회귀 0) + cargo test --features native-skia skia 20 passed + clippy 0건 - native-skia feature gate (기본 빌드 영향 없음, opt-in) 권장 처리: 옵션 A — 9 commits 순차 cherry-pick (단순 머지 절대 금지) + 결정적 검증 + Skia feature 테스트 + WASM check + PNG 내보내기 게이트웨이.
요약
\frac{1}{2}가 수식 미리보기에서 문자 그대로 보이던 문제를 보정Command토큰 흐름에 태우도록 토크나이저 보강\frac{a}{b}를 기존EqNode::Fraction으로 파싱하도록 연결\sqrt{...}및\sqrt[n]{...}입력이 기존 제곱근 AST로 이어지는지 회귀 테스트 추가Refs #143
배경
Issue #143은 LaTeX 입력 지원 전체를 다루는 큰 작업이다.
현재 수식 파서는 한컴 수식 문법(
1 over 2,SQRT x등)을 중심으로 동작하고 있고, LaTeX 형식의\frac{1}{2}같은 입력은 기존 수식 미리보기에서 정상적인 분수 구조로 연결되지 않았다.이 PR은 전체 LaTeX 파서를 구현하지 않고, 미리보기에서 가장 눈에 띄는 기본 구조인 분수와 제곱근 입력만 기존 AST에 연결하는 1차 보정이다.
현상
기존 코드에서
\frac{1}{2}를 파싱하면 기대한EqNode::Fraction이 아니라 다음과 같은 문자 조합으로 해석됐다.그 결과 사용자가 LaTeX 분수를 입력해도 미리보기에는 분수선이 있는 수식이 아니라
\frac텍스트에 가까운 형태로 보였다.근본 원인
src/renderer/equation/tokenizer.rs가 백슬래시를 LaTeX 명령어 prefix로 처리하지 않았다.토큰 흐름상
\frac가 하나의 명령어로 들어와야parse_command()가frac를 구조 명령으로 처리할 수 있는데, 기존에는\와frac가 분리되어 파서가 LaTeX 분수 명령을 인식할 수 없었다.해결책
1. LaTeX 명령어 토큰화
src/renderer/equation/tokenizer.rs에read_latex_command()를 추가했다.백슬래시 뒤에 ASCII alphabetic 문자가 이어지는 경우:
\frac→TokenType::Command, valuefrac\sqrt→TokenType::Command, valuesqrt\pm→TokenType::Command, valuepm으로 기존 명령어 파서 경로에 연결한다.
2. LaTeX 분수 파싱
src/renderer/equation/parser.rs에서FRAC명령을 만나면 다음 두 그룹을 분자/분모로 읽어 기존 AST에 매핑한다.3. LaTeX indexed sqrt 보강
기존
SQRT파싱 흐름에 LaTeX 형태의 index 문법을 추가했다.검증
신규 회귀 테스트
src/renderer/equation/tokenizer.rstest_latex_command_prefix\frac{1}{2}가Command("frac"), brace, number 토큰으로 분해되는지 확인src/renderer/equation/parser.rstest_latex_frac\frac{1}{2}가EqNode::Fraction으로 파싱되는지 확인test_latex_quadratic_slicex=\frac{-b \pm \sqrt{b^2}}{2a}에서Fraction,±,Sqrt가 모두 AST에 들어가는지 확인test_latex_sqrt_with_bracket_index\sqrt[3]{x}가 index 포함Sqrt로 파싱되는지 확인테스트 실행 결과
cargo test --lib test_latex통과cargo test --lib equation통과cargo test --lib통과cargo build --lib통과git diff --check HEAD~1..HEAD통과GitHub Actions
시각 검증
다음 스크린샷에서
\frac{1}{2}와x=\frac{-b \pm \sqrt{b^2}}{2a}가 분수/제곱근 형태로 렌더링되는 것을 확인했다.mydocs/working/task_m100_143_stage1/latex_equation_preview.png의도된 동작 변경
앞으로 백슬래시가 붙은 기본 LaTeX 명령어는 가능한 경우 기존 한컴 수식 AST 흐름으로 연결된다.
예:
\frac{1}{2}는 문자\frac가 아니라 분수로 렌더링\sqrt{b^2}는 기존 제곱근 노드로 렌더링\sqrt[3]{x}는 index 포함 제곱근으로 렌더링비-목표
이 PR은 Issue #143 전체를 닫지 않는다.
다음 범위는 후속 작업 대상이다.
변경 파일
src/renderer/equation/tokenizer.rssrc/renderer/equation/parser.rs\frac분수 파싱 및\sqrt[n]index 파싱 추가, 회귀 테스트 추가mydocs/orders/20260504.mdmydocs/plans/task_m100_143.mdmydocs/plans/task_m100_143_impl.mdmydocs/working/task_m100_143_stage1.mdmydocs/report/task_m100_143_report.mdmydocs/working/task_m100_143_stage1/latex_equation_preview.pngTest plan
cargo test --lib test_latexcargo test --lib equationcargo test --libcargo build --libgit diff --check HEAD~1..HEAD메타
maincskwork:task143-latex-frac-previewd5c7a22—Task #143: LaTeX 분수 입력 미리보기 지원