xmmath 1.0.9 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build.yml +5 -3
- package/AGENTS.md +31 -0
- package/biome.json +34 -0
- package/dist/xmmath.es.js +5293 -3219
- package/dist/xmmath.es.js.map +1 -1
- package/dist/xmmath.umd.js +3852 -2288
- package/dist/xmmath.umd.js.map +1 -1
- package/package.json +40 -27
- package/pnpm-workspace.yaml +2 -0
- package/src/ast.ts +161 -0
- package/src/emoji.json +2122 -1456
- package/src/main.ts +864 -1867
- package/src/normalize.ts +1381 -0
- package/src/symbols.json +1726 -827
- package/src/vdom.ts +173 -0
- package/tsconfig.json +11 -99
- package/vite.config.js +12 -9
|
@@ -8,6 +8,10 @@ on:
|
|
|
8
8
|
tags:
|
|
9
9
|
- "*"
|
|
10
10
|
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write # Required for OIDC
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
11
15
|
jobs:
|
|
12
16
|
build:
|
|
13
17
|
runs-on: ubuntu-latest
|
|
@@ -27,11 +31,9 @@ jobs:
|
|
|
27
31
|
- uses: actions/checkout@v3
|
|
28
32
|
- uses: actions/setup-node@v3
|
|
29
33
|
with:
|
|
30
|
-
node-version:
|
|
34
|
+
node-version: 24
|
|
31
35
|
registry-url: https://registry.npmjs.org/
|
|
32
36
|
- run: |
|
|
33
37
|
npm i
|
|
34
38
|
npm run build
|
|
35
39
|
- run: npm publish
|
|
36
|
-
env:
|
|
37
|
-
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
vitest作为测试 pnpm安装
|
|
2
|
+
|
|
3
|
+
这是一个库,传入typst数学语法,解析为mathml
|
|
4
|
+
|
|
5
|
+
symbols和emoji与上游同步到0.15.1,src语法解析渲染与上游同步到0.11.1
|
|
6
|
+
|
|
7
|
+
任何语法解析严格参照0.11.1,除非进行版本升级任务
|
|
8
|
+
|
|
9
|
+
语法解析后用vdom渲染,最后才是mathml,可能需要css实现更多装饰
|
|
10
|
+
|
|
11
|
+
火狐浏览器渲染的mathml不错,其他浏览器多少有细节问题
|
|
12
|
+
|
|
13
|
+
测试分层:test/corpus/math.test.ts 一个文件跑完整份 test/fixtures/math.json(412 例,每分类一个 describe、每例一个 it + vdom/MathML 快照,快照集中在 __snapshots__/math.test.ts.snap);test/custom.test.ts 是手工维护的针对性用例,普通 it 断言、不用快照(已知缺陷用 it.fails 占位,修好后它会反过来报警);阶段单测在 test/{ast,normalize,vdom,render}.test.ts;math.json 是唯一语料来源,可用 test/typst/get.mjs 从上游 tests/suite/math/*.typ 重新抽取
|
|
14
|
+
|
|
15
|
+
pnpm review 打开 test/review/index.html,只做对照不记录反馈:每例并排显示本库渲染与 typst 官方 PNG;「自定义」标签是临时输入对照,要长期钉住就写进 test/custom.test.ts。typst 图按 hash+typst版本缓存在 test/review/cache/(不进 git),版本固定在 test/review/config.json,默认 0.11.1(与 src 的 version.lan 一致;改版本会让缓存全部失效重渲染)
|
|
16
|
+
|
|
17
|
+
改语法/渲染导致快照不过时的流程:pnpm test 变红 → 立刻 pnpm snap:update 接受新预期并把快照连同 src 一起提交(git 里那份就是上一次认可的基线)→ pnpm review:changes 生成「git 基线 vs 工作区快照」的变更清单(cache/changes.json)→ pnpm review 的「变更」标签逐例看旧渲染/新渲染/typst 官方图;发现不对就回去改代码,下一轮循环会覆盖
|
|
18
|
+
|
|
19
|
+
官方一致性基准:typst 0.15.x `compile --format html --features html` 会输出原生 MathML(0.13/0.14 不会),可拿它和本库输出做结构化对比
|
|
20
|
+
|
|
21
|
+
语料里有一批 typst 自己也拒绝编译的用例(..args 展开、未定义变量、故意不配对的分隔符、旧符号名),不同版本失败集合不同,对照时按「官方无输出」处理
|
|
22
|
+
|
|
23
|
+
旧的人类测试 test/typst/more_test.html 保留作历史参考,现改为读 math.json,需经 pnpm dev 打开(/test/typst/more_test.html)
|
|
24
|
+
|
|
25
|
+
sync:symbols脚本用于同步emoji和symbols
|
|
26
|
+
|
|
27
|
+
render:typst可以自定typst版本,查看官方标准渲染结果的图片,如 `pnpm run render:typst --typst v0.11.1 --expr '1+1'` 注意inline和block——`--expr` 默认包成 `$ … $`(块级 display),加 `--inline` 才是 `$…$`(行内)。ai可以通过视觉读取来判断官方渲染结果
|
|
28
|
+
|
|
29
|
+
render:xmmath用本库渲染同一表达式做对照:`pnpm render:xmmath --expr 'sum_(i=1)^n i' [--inline]`,默认出 PNG(`--out` 扩展名或 `--format` 可换 html,html 只写 MathML+CSS 不需要浏览器);PNG 默认走无头 firefox(`--bin`/`$XMMATH_BROWSER` 可换)
|
|
30
|
+
|
|
31
|
+
版本升级任务(动 version.lan 之前)先读 docs/math-syntax-typst-diff.md 第 8 节:`_`/`^` 上下位置规则的源码坐标(0.11.1 vs 0.15.1)、帧宽差探针脚本与判据、0.11→0.15 的 11 个字符漂移清单;升级后先重跑探针、再改 src/normalize.ts 的 rel_names 及其注释
|
package/biome.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://biomejs.dev/schemas/2.5.14/schema.json",
|
|
3
|
+
"vcs": {
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"clientKind": "git",
|
|
6
|
+
"useIgnoreFile": true
|
|
7
|
+
},
|
|
8
|
+
"files": {
|
|
9
|
+
"ignoreUnknown": false
|
|
10
|
+
},
|
|
11
|
+
"formatter": {
|
|
12
|
+
"enabled": true,
|
|
13
|
+
"indentStyle": "tab"
|
|
14
|
+
},
|
|
15
|
+
"linter": {
|
|
16
|
+
"enabled": true,
|
|
17
|
+
"rules": {
|
|
18
|
+
"preset": "recommended"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"javascript": {
|
|
22
|
+
"formatter": {
|
|
23
|
+
"quoteStyle": "double"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"assist": {
|
|
27
|
+
"enabled": true,
|
|
28
|
+
"actions": {
|
|
29
|
+
"source": {
|
|
30
|
+
"organizeImports": "on"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|