Skip to content

수식 토크나이저: rm/it/bold 폰트 스타일 키워드를 식별자 prefix로 분리하지 못함 #488

@planet6897

Description

@planet6897

증상

samples/exam_science.hwp 페이지 1의 표 안 수식이 화학 기호(K⁺, X⁻, Ca²⁺, O²⁻ 등) 대신 rmK, rmX, rmCa, rmO, rmmol, itl, itaq 등 raw 식별자로 출력됨.

samples/pdf/hwp2022/exam_science.pdf 정답 PDF와 비교하면 페이지 1 전반에서 광범위하게 발생.

원인

HWP 수식(hwpeq) 문법에서 폰트 스타일 키워드 rm / it / bold 는 다음 식별자에 공백 없이 붙여 쓸 수 있다 (예: `rmK` = `rm` + `K`, `itl` = `it` + `l`, `rmmol` = `rm` + `mol`). 한컴 hwpeq 파서는 키워드 길이만큼만 소비하고 나머지는 다음 토큰으로 넘긴다.

`src/renderer/equation/tokenizer.rs:80 read_command()` 는 영문자/숫자를 끝까지 탐욕적으로 읽기 때문에 위 패턴이 단일 토큰이 되어 `src/renderer/equation/symbols.rs:181` `("rm", FontStyleKind::Roman)` 매핑과 매칭에 실패한다. 결과적으로 SVG 출력에 `rm` / `it` prefix가 그대로 글자로 남는다.

원본 스크립트 샘플 (exam_science.hwp s0.p12 표 / 페이지 1)

```
cell5 "rmK ^{+}" → 정답 K⁺
cell5 "rmX ^{-}" → 정답 X⁻
cell13 "rmCa ^{2+}" → 정답 Ca²⁺
cell13 "rmO ^{2-}" → 정답 O²⁻
cell2 "1`rmmol" → 정답 1 mol
cell2 "LEFT ( rmmol RIGHT )" → 정답 (mol)
```

페이지 1 본문에는 `rmKOH LEFT ( itaq RIGHT )` (KOH(aq)), `rmH _{2} O` LEFT ( itl RIGHT )` (H₂O(l)) 등 동일 패턴이 반복.

영향 범위

  • `samples/exam_science.hwp` 페이지 1 전체 (이온/원소/단위/상태 표기 포함 모든 화학 수식)
  • 동일 hwpeq 문법을 사용하는 다른 과학·수학 문서 광범위

수정 방향

`read_command()` 에서 식별자를 읽을 때, `symbols.rs:179 FONT_STYLES` (`bold`, `it`, `rm`)에 등록된 키워드가 prefix로 매치되면 거기서 토큰을 끊는다. 가장 긴 키워드 우선 (bold → it → rm).

영문 식별자 내부에 우연히 `rm` 등이 포함된 경우(`arm`, `firm` — 실제 hwpeq에 거의 없지만)는 prefix가 아니므로 영향 없음.

검증

  • 수정 전후 SVG 비교: `output/svg/exam_science/` 페이지 1 표 안 수식이 K⁺, Ca²⁺ 등으로 정상 출력
  • `samples/pdf/hwp2022/exam_science.pdf` 와 시각 비교
  • 회귀 검증: `samples/` 내 다른 HWP 파일 SVG 출력 차이 확인

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions