@webc.site/math 0.1.38 → 0.1.40
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/README.md +153 -8
- package/mathml.js +1 -1
- package/mathml.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,12 @@
|
|
|
12
12
|
- [Render TeX Formulas Directly](#render-tex-formulas-directly)
|
|
13
13
|
- [Replace Formulas in Markdown Text](#replace-formulas-in-markdown-text)
|
|
14
14
|
- [Font and CSS Configuration](#font-and-css-configuration)
|
|
15
|
-
- [
|
|
15
|
+
- [Importing the Math Font](#importing-the-math-font)
|
|
16
|
+
- [Option 1: Via CDN (Recommended)](#option-1-via-cdn-recommended)
|
|
17
|
+
- [Option 2: Self-hosting Font Files](#option-2-self-hosting-font-files)
|
|
18
|
+
- [CSS Styling Configuration](#css-styling-configuration)
|
|
19
|
+
- [Font Family Fallback Chain](#font-family-fallback-chain)
|
|
20
|
+
- [Block Formula Layout Optimization](#block-formula-layout-optimization)
|
|
16
21
|
- [3. Plugins](#3-plugins)
|
|
17
22
|
- [3.1 markdown-it](#31-markdown-it)
|
|
18
23
|
- [3.2 marked](#32-marked)
|
|
@@ -29,7 +34,7 @@ This project compiles LaTeX math formulas into browser-native MathML Core markup
|
|
|
29
34
|
Key Features:
|
|
30
35
|
|
|
31
36
|
- **High Performance**: Compiles TeX formulas directly to native MathML. Processing speed exceeds 300,000 operations per second, 3 times faster than KaTeX and 40 times faster than MathJax.
|
|
32
|
-
- **Lightweight**: Core package size is 9.
|
|
37
|
+
- **Lightweight**: Core package size is 9.13 KB (4.62 KB gzipped) with zero external dependencies.
|
|
33
38
|
- **Zero Runtime Overhead**: Relies entirely on the browser's native engine for layout, eliminating client-side JavaScript formatting libraries.
|
|
34
39
|
- **Robust Fault Tolerance**: Catches syntax errors (such as unclosed braces) and reverts to raw TeX string output to prevent application crashes.
|
|
35
40
|
- **High Compatibility**: Generates standard MathML tags suitable for Server-Side Rendering (SSR), Static Site Generation (SSG), and Client-Side Rendering (CSR).
|
|
@@ -58,13 +63,79 @@ const html = mdMath("Euler's identity: $$e^{i\\pi} + 1 = 0$$", compile);
|
|
|
58
63
|
|
|
59
64
|
### Font and CSS Configuration
|
|
60
65
|
|
|
61
|
-
|
|
66
|
+
MathML layout relies on OpenType Math fonts containing dedicated mathematical metrics (the `MATH` table) to correctly handle radical scaling, delimiter stretching (e.g., parentheses, braces), fraction line thickness, and sub/superscript alignments.
|
|
62
67
|
|
|
63
|
-
|
|
68
|
+
The classic TeX math font **Latin Modern Math** (derived from Donald Knuth's Computer Modern family) is recommended.
|
|
69
|
+
|
|
70
|
+
#### Importing the Math Font
|
|
71
|
+
|
|
72
|
+
##### Option 1: Via CDN (Recommended)
|
|
73
|
+
|
|
74
|
+
Import the Latin Modern Math font stylesheet from the `18s` font package (which registers the font family name as `m`):
|
|
75
|
+
|
|
76
|
+
In CSS:
|
|
77
|
+
|
|
78
|
+
```css
|
|
79
|
+
@import url("https://registry.npmmirror.com/18s/0.2.24/files/m.css");
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Or in HTML `<head>`:
|
|
83
|
+
|
|
84
|
+
```html
|
|
85
|
+
<link rel="stylesheet" href="https://registry.npmmirror.com/18s/0.2.24/files/m.css" />
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
To include the body text font (`t`) and monospace code font (`c`) along with the math font, import the complete stylesheet:
|
|
89
|
+
|
|
90
|
+
```html
|
|
91
|
+
<link rel="stylesheet" href="https://registry.npmmirror.com/18s/0.2.24/files/_.css" />
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
##### Option 2: Self-hosting Font Files
|
|
95
|
+
|
|
96
|
+
Download the Latin Modern Math WOFF2 font file and declare `@font-face`:
|
|
97
|
+
|
|
98
|
+
```css
|
|
99
|
+
@font-face {
|
|
100
|
+
font-family: "Latin Modern Math";
|
|
101
|
+
src: url("/fonts/latinmodern-math.woff2") format("woff2");
|
|
102
|
+
font-style: normal;
|
|
103
|
+
font-display: swap;
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
#### CSS Styling Configuration
|
|
108
|
+
|
|
109
|
+
##### Font Family Fallback Chain
|
|
110
|
+
|
|
111
|
+
Declare the font stack and inherit text color for `<math>` elements:
|
|
64
112
|
|
|
65
113
|
```css
|
|
66
114
|
math {
|
|
67
|
-
font-family: m,
|
|
115
|
+
font-family: m, "Latin Modern Math", "Cambria Math", math, sans-serif;
|
|
116
|
+
color: inherit;
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
- `m`: Latin Modern Math declared via `m.css`
|
|
121
|
+
- `"Latin Modern Math"`: Self-hosted or system-installed Latin Modern Math
|
|
122
|
+
- `"Cambria Math"`: Built-in Windows system math font
|
|
123
|
+
- `math`: W3C CSS Fonts generic math font family keyword (natively supported in modern browsers)
|
|
124
|
+
- `sans-serif`: Final sans-serif fallback
|
|
125
|
+
|
|
126
|
+
##### Block Formula Layout Optimization
|
|
127
|
+
|
|
128
|
+
Compiled block formulas contain the `display="block"` attribute. To prevent wide formulas from overflowing containers on mobile or narrow screens, configure horizontal scrolling and centering:
|
|
129
|
+
|
|
130
|
+
```css
|
|
131
|
+
math[display="block"] {
|
|
132
|
+
display: block;
|
|
133
|
+
max-width: 100%;
|
|
134
|
+
overflow-x: auto;
|
|
135
|
+
overflow-y: hidden;
|
|
136
|
+
margin: 1em auto;
|
|
137
|
+
padding: 0.5em 0;
|
|
138
|
+
text-align: center;
|
|
68
139
|
}
|
|
69
140
|
```
|
|
70
141
|
|
|
@@ -193,6 +264,12 @@ In January 2023, Chrome 109 reintroduced support for the MathML Core specificati
|
|
|
193
264
|
- [直接渲染 TeX 公式](#直接渲染-tex-公式)
|
|
194
265
|
- [替换 Markdown 文本中的公式](#替换-markdown-文本中的公式)
|
|
195
266
|
- [字体与 CSS 配置](#字体与-css-配置)
|
|
267
|
+
- [引入数学字体](#引入数学字体)
|
|
268
|
+
- [方式一:CDN 在线引用(推荐)](#方式一cdn-在线引用推荐)
|
|
269
|
+
- [方式二:本地托管字体文件](#方式二本地托管字体文件)
|
|
270
|
+
- [CSS 样式配置](#css-样式配置)
|
|
271
|
+
- [字体族声明与回退链](#字体族声明与回退链)
|
|
272
|
+
- [块级公式排版优化](#块级公式排版优化)
|
|
196
273
|
- [3. 插件](#3-插件)
|
|
197
274
|
- [3.1 markdown-it](#31-markdown-it)
|
|
198
275
|
- [3.2 marked](#32-marked)
|
|
@@ -209,7 +286,7 @@ In January 2023, Chrome 109 reintroduced support for the MathML Core specificati
|
|
|
209
286
|
核心特性:
|
|
210
287
|
|
|
211
288
|
- **高性能**:TeX 公式直接转换为原生 MathML 标签,处理速度达每秒 300,000 次以上
|
|
212
|
-
- **轻量化**:核心包体积 9.
|
|
289
|
+
- **轻量化**:核心包体积 9.13 KB(Gzip 压缩后 4.62 KB),无外部依赖
|
|
213
290
|
- **零运行开销**:完全依赖浏览器原生引擎排版与渲染
|
|
214
291
|
- **高容错性**:自动捕获语法错误,降级输出原始 TeX 字符串
|
|
215
292
|
- **强兼容性**:生成标准 MathML 标签,适配 SSR、SSG 和 CSR
|
|
@@ -236,11 +313,79 @@ const html = mdMath("欧拉恒等式:$$e^{i\\pi} + 1 = 0$$", compile);
|
|
|
236
313
|
|
|
237
314
|
### 字体与 CSS 配置
|
|
238
315
|
|
|
239
|
-
|
|
316
|
+
浏览器排版 MathML 依赖包含数学排版度量(OpenType Math 表)的数学字体,用于呈现根号伸缩、大括号拉伸、分式厚度与上下标对齐。
|
|
317
|
+
|
|
318
|
+
推荐使用 TeX 经典数学字体 **Latin Modern Math**(源自 Computer Modern 字体家族)。
|
|
319
|
+
|
|
320
|
+
#### 引入数学字体
|
|
321
|
+
|
|
322
|
+
##### 方式一:CDN 在线引用(推荐)
|
|
323
|
+
|
|
324
|
+
通过 `18s` 字体包在线引入 Latin Modern Math 样式(该样式将 Latin Modern Math 声明为字体族 `m`):
|
|
325
|
+
|
|
326
|
+
在 CSS 中引入:
|
|
327
|
+
|
|
328
|
+
```css
|
|
329
|
+
@import url("https://registry.npmmirror.com/18s/0.2.24/files/m.css");
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
或在 HTML `<head>` 中引入:
|
|
333
|
+
|
|
334
|
+
```html
|
|
335
|
+
<link rel="stylesheet" href="https://registry.npmmirror.com/18s/0.2.24/files/m.css" />
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
若同时需要页面正文字体(`t`)与代码等宽字体(`c`),可直接引用完整样式表:
|
|
339
|
+
|
|
340
|
+
```html
|
|
341
|
+
<link rel="stylesheet" href="https://registry.npmmirror.com/18s/0.2.24/files/_.css" />
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
##### 方式二:本地托管字体文件
|
|
345
|
+
|
|
346
|
+
下载 Latin Modern Math 字体文件(WOFF2 格式),通过 `@font-face` 声明:
|
|
347
|
+
|
|
348
|
+
```css
|
|
349
|
+
@font-face {
|
|
350
|
+
font-family: "Latin Modern Math";
|
|
351
|
+
src: url("/fonts/latinmodern-math.woff2") format("woff2");
|
|
352
|
+
font-style: normal;
|
|
353
|
+
font-display: swap;
|
|
354
|
+
}
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
#### CSS 样式配置
|
|
358
|
+
|
|
359
|
+
##### 字体族声明与回退链
|
|
360
|
+
|
|
361
|
+
为 `<math>` 标签配置字体族与继承颜色:
|
|
240
362
|
|
|
241
363
|
```css
|
|
242
364
|
math {
|
|
243
|
-
font-family: m,
|
|
365
|
+
font-family: m, "Latin Modern Math", "Cambria Math", math, sans-serif;
|
|
366
|
+
color: inherit;
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
- `m`:`m.css` 声明的 Latin Modern Math 网页字体
|
|
371
|
+
- `"Latin Modern Math"`:本地托管或系统安装的 Latin Modern Math 字体
|
|
372
|
+
- `"Cambria Math"`:Windows 系统内置数学字体
|
|
373
|
+
- `math`:CSS Fonts 规范定义的数学通用字体族关键字(现代主流浏览器原生支持)
|
|
374
|
+
- `sans-serif`:无衬线回退字体
|
|
375
|
+
|
|
376
|
+
##### 块级公式排版优化
|
|
377
|
+
|
|
378
|
+
块级公式编译后带有 `display="block"` 属性。为防止长公式超出容器或在移动端撑破页面,推荐配置横向滚动与居中样式:
|
|
379
|
+
|
|
380
|
+
```css
|
|
381
|
+
math[display="block"] {
|
|
382
|
+
display: block;
|
|
383
|
+
max-width: 100%;
|
|
384
|
+
overflow-x: auto;
|
|
385
|
+
overflow-y: hidden;
|
|
386
|
+
margin: 1em auto;
|
|
387
|
+
padding: 0.5em 0;
|
|
388
|
+
text-align: center;
|
|
244
389
|
}
|
|
245
390
|
```
|
|
246
391
|
|
package/mathml.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=(t,n)=>t.charCodeAt(n)<=32?e(t,n+1):n,t=/\d+(?:\.\d+)?|\.\d+/y,n=/\\(?:[a-zA-Z]+|.)/y;var r=r=>{let i=[],a=r.length,o=0;for(;o<a&&(o=e(r,o),!(o>=a));){n.lastIndex=o;let s=n.exec(r);if(s){let t=s[0];o+=t.length;let n=/^\\text(?:rm|bf|it|sf|tt)?$/.test(t);if(n&&(t=`\\text`),i.push(4,t),n){let t=e(r,o);if(r.charCodeAt(t)===123){let e=1,n=t;for(;n<a&&e;){let t=r.charCodeAt(++n);t===123?++e:t===125&&--e}e||(i.push(7,``,2,r.slice(t+1,n),8,``),o=n+1)}}continue}if(t.lastIndex=o,s=t.exec(r),s){let e=s[0];i.push(1,e),o+=e.length;continue}let c=r[o],l=`_^{}`.indexOf(c);i.push((c.charCodeAt(0)|32)-97>>>0<26?2:l>=0?l+5:3,c),++o}return i.push(0,``),i};const i=e=>` lspace="`+e+`px" rspace="`+e+`px"`,a=e=>` mathvariant="`+e+`"`,o=a(`normal`),s=a(`bold`),c=a(`double-struck`),l=a(`script`),u=a(`fraktur`),d=a(`sans-serif`),f=a(`monospace`),p=a(`italic`),m=a(`bold-italic`),h=` stretchy="false"`+i(0),
|
|
1
|
+
const e=(t,n)=>t.charCodeAt(n)<=32?e(t,n+1):n,t=/\d+(?:\.\d+)?|\.\d+/y,n=/\\(?:[a-zA-Z]+|.)/y;var r=r=>{let i=[],a=r.length,o=0;for(;o<a&&(o=e(r,o),!(o>=a));){n.lastIndex=o;let s=n.exec(r);if(s){let t=s[0];o+=t.length;let n=/^\\text(?:rm|bf|it|sf|tt)?$/.test(t);if(n&&(t=`\\text`),i.push(4,t),n){let t=e(r,o);if(r.charCodeAt(t)===123){let e=1,n=t;for(;n<a&&e;){let t=r.charCodeAt(++n);t===123?++e:t===125&&--e}e||(i.push(7,``,2,r.slice(t+1,n),8,``),o=n+1)}}continue}if(t.lastIndex=o,s=t.exec(r),s){let e=s[0];i.push(1,e),o+=e.length;continue}let c=r[o],l=`_^{}`.indexOf(c);i.push((c.charCodeAt(0)|32)-97>>>0<26?2:l>=0?l+5:3,c),++o}return i.push(0,``),i};const i=e=>` lspace="`+e+`px" rspace="`+e+`px"`,a=e=>` mathvariant="`+e+`"`,o=a(`normal`),s=a(`bold`),c=a(`double-struck`),l=a(`script`),u=a(`fraktur`),d=a(`sans-serif`),f=a(`monospace`),p=a(`italic`),m=a(`bold-italic`),h=` stretchy="false"`+i(0),ee=i(4),te=i(5),g={__proto__:null},_=(e,t,n)=>{e.replace(/([a-zA-Z]+)([^a-zA-Z]+)/g,(e,r,i)=>{g[r]=n?[t,i,n]:[t,i]})};_(`alphaαbetaβgammaγthetaθpiπdeltaδepsilonϵzetaζetaηiotaιkappaκlambdaλmuμnuνxiξrhoρsigmaσtauτupsilonυphiϕchiχpsiψomegaωellℓhbarℏneg¬varphiφvarpiϖvarrhoϱvarthetaϑvarepsilonεvarsigmaς`,1),_(`DeltaΔGammaΓThetaΘLambdaΛXiΞPiΠSigmaΣUpsilonΥPhiΦPsiΨOmegaΩinfty∞nabla∇partial∂forall∀exists∃emptyset∅degree°alephℵwp℘top⊤bot⊥angle∠`,1,o),_(`prime′cdot⋅times×pm±div÷sum∑prod∏coprod∐int∫iint∬iiint∭oint∮leftrightarrow↔Leftarrow⇐Rightarrow⇒Leftrightarrow⇔cdots⋯in∈notin∉subset⊂supset⊃subseteq⊆supseteq⊇cup∪cap∩to→rightarrow→leftarrow←gets←dots…ldots…le≤leq≤ge≥geq≥bigcap⋂bigcup⋃bigvee⋁bigwedge⋀bigoplus⨁bigotimes⨂bigodot⨀biguplus⨄bigsqcup⨆downarrow↓uparrow↑updownarrow↕Downarrow⇓Uparrow⇑Updownarrow⇕longrightarrow⟶longleftarrow⟵longleftrightarrow⟷Longrightarrow⟹Longleftarrow⟸Longleftrightarrow⟺mapsto↦longmapsto⟼nearrow↗searrow↘nwarrow↖swarrow↙hookrightarrow↪hookleftarrow↩rightharpoonup⇀rightharpoondown⇁leftharpoonup↼leftharpoondown↽`,3),_(`neq≠ne≠lt<gt>`,3,o),_(`mp∓lor∨land∧oplus⊕ominus⊖otimes⊗oslash⊘odot⊙circ∘bullet∙star⋆ast∗setminus∖wr≀diamond⋄sqcap⊓sqcup⊔triangleleft◁triangleright▷`,3,ee),_(`approx≈sim∼cong≅propto∝equiv≡ni∋perp⟂parallel∥mid∣nmid∤ll≪gg≫simeq≃prec≺succ≻preceq⪯succeq⪰vdash⊢dashv⊣models⊨owns∋sqsubset⊏sqsupset⊐sqsubseteq⊑sqsupseteq⊒`,3,te),`sin cos tan cot sec csc log lg ln lim exp max min sup inf det gcd arcsin arccos arctan sinh cosh tanh coth deg arg`.replace(/\w+/g,e=>g[e]=[9,e]),[[`,`,3],[`:`,4],[`;`,5],[`!`,-3],[` `,4],[`quad`,16],[`qquad`,32],[`thinspace`,3],[`medspace`,4],[`thickspace`,5],[`enspace`,8],[`negthinspace`,-3],[`negmedspace`,-4],[`negthickspace`,-5]].map(([e,t])=>g[e]=[17,t+`px`]);const v={__proto__:null,boxed:1,cancel:2,sout:3},y={"-":[3,`−`],"*":[3,`∗`],"/":[3,`/`,o],"|":[3,`|`,h],".":[3,`.`,o],"'":[3,`′`]},b=(e,t)=>{let n=t[0];if(e[n]==null)return null;t[0]+=2;let r=e[n+1];return r===`.`?[3,``,` fence="true" stretchy="true" symmetric="true"`]:[3,r===`<`?`⟨`:r===`>`?`⟩`:r[0]===`\\`?r.slice(1):r]},x=(e,t,n)=>{let r=t[0];if(e[r]===3&&e[r+1]===`[`&&(!n||e[r+2]===1)){for(r+=2;e[r]>0&&(e[r]!==3||e[r+1]!==`]`);)r+=2;e[r]>0&&(r+=2),t[0]=r}},S=(e,t)=>{let n=t[0],r=``;if(e[n]===7){for(n+=2;e[n]>0&&e[n]!==8;n+=2)r+=e[n+1];e[n]>0&&(n+=2),t[0]=n}return r},C=(e,t,n,r)=>{let i=[],a=[],o=[];for(;e[t[0]]>0;){let s=e[t[0]],c=e[t[0]+1];if(!n&&s===8)break;if(n&&s===4&&c===`\\end`){let n=t[0];if(t[0]+=2,S(e,t)===r)break;t[0]=n}if(c===`&`||c===`\\\\`){t[0]+=2,a.push(o),o=[],c===`\\\\`&&(x(e,t,1),i.push(a),a=[]);continue}let l=R(e,t);l&&o.push(l)}return o.length&&a.push(o),a.length&&i.push(a),i.length&&!i[i.length-1][1]&&!i[i.length-1][0][0]&&i.pop(),i},w=(e,t,n)=>{if(e[t[0]]===7){t[0]+=2;let r=C(e,t,0,n);return e[t[0]]>0&&(t[0]+=2),[14,n,r]}let r=L(e,t,1);return r?[14,n,[[[r]]]]:null},T=(e,t)=>{if(e[t[0]]===7){let n=S(e,t);if(n===``)return[8,[]];let r=n.split(`\\\\`);return r.length>1?[8,r.flatMap((e,t)=>[...t?[[15]]:[],...e?[[16,e]]:[]])]:[16,n]}let n=L(e,t,1);if(n)return[16,n[1]];throw[3,`text`]},E=(e,t,n)=>{if(e[t[0]]===7){let n=S(e,t);return n===`array`&&(x(e,t),e[t[0]]===7?S(e,t):L(e,t)),[14,n,C(e,t,1,n)]}return[1,n]},ne=(e,t)=>{if(e[t[0]]===3&&e[t[0]+1]===`[`){t[0]+=2;let n=[];for(;e[t[0]]>0&&(e[t[0]]!==3||e[t[0]+1]!==`]`);){let r=R(e,t);r&&n.push(r)}return e[t[0]]===3&&(t[0]+=2),[11,L(e,t,1),[8,n]]}return[10,L(e,t,1)]},re=(e,t)=>{let n=b(e,t),r=z(e,t);if(e[t[0]]===4&&e[t[0]+1]===`\\right`)return t[0]+=2,[12,[n,...r,b(e,t)].filter(Boolean)];throw[1,n]},D=(e,t)=>{if(!e)return e;let[n,r]=e;if(n===1||n===2)return[n,r,t];if(n===8)return[n,r.map(e=>D(e,t))];if(n>=4&&n<=6||n===13){let n=[...e];return n[1]=D(n[1],t),n}return e},O=e=>(t,n)=>D(L(t,n,1),e),k=e=>(t,n)=>[13,L(t,n,1),e],A=k(`¯`),j=e=>(t,n)=>{let r=L(t,n,1);return[e,L(t,n,1),r,1]},M=j(4),N=j(5),P=(e,t)=>[7,L(e,t,1),L(e,t,1)],F={__proto__:null,"\\":(e,t)=>(e[t[0]]===3&&e[t[0]+1]===`*`&&(t[0]+=2),x(e,t,1),[15]),text:T,frac:P,dfrac:P,tfrac:P,cfrac:P,overline:A,bar:A,hat:k(`^`),tilde:k(`~`),vec:k(`→`),dot:k(`˙`),ddot:k(`¨`),check:k(`ˇ`),acute:k(`´`),grave:k("`"),breve:k(`˘`),mathring:k(`˚`),stackrel:M,overset:M,underset:N,mathbf:O(s),boldsymbol:O(m),bm:O(m),mathrm:O(o),mathbb:O(c),bb:O(c),mathcal:O(l),cal:O(l),mathfrak:O(u),frak:O(u),mathsf:O(d),sf:O(d),mathtt:O(f),tt:O(f),mathit:O(p),it:O(p),rm:O(o),bf:O(s),operatorname:(e,t)=>{e[t[0]]===3&&e[t[0]+1]===`*`&&(t[0]+=2);let n=L(e,t,1);return[9,n?n[0]===8?n[1].map(e=>e[1]).join(``):n[1]:``]},tag:(e,t)=>[8,[[17,`2em`],y[`(`],L(e,t,1),y[`)`]]],sqrt:ne,left:re,phantom:(e,t)=>[19,L(e,t,1)],pmod:(e,t)=>[8,[[17,`8px`],y[`(`],[16,`mod`],[17,`4px`],L(e,t,1),y[`)`]]],begin:E,end:(e,t,n,r)=>{throw[0,r]},right:(e,t,n,r)=>{throw[2,r]}},I={2:e=>[1,e],3:e=>y[e]??[3,e],1:e=>[2,e],7:(e,t,n)=>{let r=[8,z(t,n)];return t[n[0]]>0&&(n[0]+=2),r},4:(e,t,n)=>{let r=e.slice(1),i=F[r]||F[r.replace(/^wide/,``)];if(i)return i(t,n,e,r);if(/^(?:[pbvV]?matrix|cases|array)$/.test(r)){let e=w(t,n,r);if(e)return e}if(v[r])return[18,v[r],L(t,n,1)];let a=g[r];if(a)return a;throw[4,e]}},L=(e,t,n)=>{let r=t[0],i=e[r],a=t[1];if(!i)return null;let o=e[r+1];return a&&(o=o.slice(a)),n&&i===1&&o[1]?(t[1]=a+1,o=o[0]):(t[0]+=2,t[1]=0),I[i](o,e,t)},R=(e,t)=>{let n=L(e,t),r=t[0];if(!n)return null;let i=e[r+1]===`\\limits`?1:e[r+1]===`\\nolimits`?2:0,a,o,s;for(i&&(t[0]+=2);(s=e[t[0]])>0;){let n=0;for(;e[t[0]+1]===`'`;t[0]+=2)++n;if(n){o=[3,`′`.repeat(n)];continue}if(s!==5&&s!==6)break;t[0]+=2,s===5?a=L(e,t,1):o=L(e,t,1)}return a?o?[6,n,a,o,i]:[5,n,a,i]:o?[4,n,o,i]:n},z=(e,t)=>{let n=[],r;for(;(r=e[t[0]])>0&&!(r===8||r===4&&e[t[0]+1]===`\\right`);){let r=R(e,t);r&&n.push(r)}return n};for(let e of`()[]`)y[e]=[3,e,` stretchy="false"`];const B=`mrow`,V=`left`,H=`start`,U=[null,` style="display:inline-block;border:1px solid;padding:2px 3px"`,` style="display:inline-block;background:linear-gradient(to top right,transparent 47%,currentColor 47%,currentColor 53%,transparent 53%)"`,` style="display:inline-block;background:linear-gradient(transparent 47%,currentColor 47%,currentColor 53%,transparent 53%)"`],ie=[`right`,V],W=[`;padding-right:0`,`;padding-left:0`],G=` style="justify-items:`,ae=W.map((e,t)=>G+(t?H:`end`)+e+`"`),oe=W.map(e=>G+H+e+`"`),se=[null,`mi`,`mn`,`mo`],K=e=>e.replace(/[&<>"]/g,e=>`&#`+e.charCodeAt(0)+`;`),q=(e,t,n)=>`<`+e+(n||``)+`>`+t+`</`+e+`>`,J=(e,t,n)=>q(e,K(t),n),Y=(e,t,n=`.2em`,r=``)=>r+` columnalign="`+e+`" rowspacing="`+n+`" columnspacing="`+t+`"`,X=(e,...t)=>q(e,t.map(Q).join(``)),Z=(e,t,n,r,[,i]=e[1],a=e[t])=>X(a===1||!a&&/^([∑∏∐⋂⋃⨁⨂⋁⋀]|lim|max|min|sup|inf)$/.test(i)?n:r,...e.slice(1,t)),Q=e=>{if(!e)return q(B,``);let[t,n]=e;return t===8&&!n[1]?Q(n[0]):t===8||t===9?q(B,$(e)):$(e)},ce={9:([,e])=>J(`mi`,e)+q(`mo`,``),8:([,e])=>e.map($).join(``),7:([,e,t])=>X(`mfrac`,e,t),4:e=>Z(e,3,`mover`,`msup`),5:e=>Z(e,3,`munder`,`msub`),6:e=>Z(e,4,`munderover`,`msubsup`),16:([,e])=>J(`mtext`,e.replace(/ /g,`\xA0`)),17:([,e])=>q(`mspace`,``,` width="`+e+`"`),10:([,e])=>q(`msqrt`,Q(e)),11:([,e,t])=>X(`mroot`,e,t),12:([,e])=>q(B,e.map($).join(``)),13:([,e,t])=>X(`mover`,e,[3,t]),18:([,e,t])=>U[e]?q(B,Q(t),U[e]):Q(t),19:([,e])=>q(`mphantom`,Q(e)),14:e=>{let[,t,n]=e,r=t===`cases`,i=/^align|split/.test(t),a=r&&n.every(e=>{let[t,n]=e[1]?.[0]||[];return!t||t===3&&`=<≤≥≠≈≡∝>`.includes(n)}),o=n[0]||[],s=o.map((e,t)=>r?a?oe[t%2]:` style="justify-items:start"`:i?ae[t%2]:``),c=n.map(e=>q(`mtr`,e.map((e,t)=>{let n=e.map($).join(``);return q(`mtd`,e[1]?q(B,n):n,s[t]||``)}).join(``))).join(``),l=r?Y(V,a?`0`:`1em`):i?Y(o.map((e,t)=>ie[t%2]).join(` `),o.slice(1).map((e,t)=>t%2?`2em`:`0`).join(` `),`.6em`,` displaystyle="true"`):``,u=q(`mtable`,c,l),d=`pbvVc`.indexOf(t[0]);return d>=0?q(B,J(`mo`,`([|‖{`[d])+u+(d<4?J(`mo`,`)]‖‖`[d]):``)):u},15:()=>q(`mspace`,``,` linebreak="newline"`)},$=e=>e?e[0]<=3?J(se[e[0]],e[1],e[2]):ce[e[0]](e):``;var le=(e,t)=>{let n=e.replace(/[\r\n]+/g,` `);return q(`math`,q(`semantics`,q(B,z(r(n),[0,0]).map($).join(``))+q(`annotation`,K(n),` encoding="application/x-tex"`)),` xmlns="http://www.w3.org/1998/Math/MathML"`+(t?` display="block"`:``))};export{le as default};
|
package/mathml.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mathml.js","names":["lex"],"sources":["../src/const/STYL.js","../src/lex.js","../src/const/ATTR.js","../src/const/SYM.js","../src/parse.js","../src/mathml.js"],"sourcesContent":["// 公共前缀/渐变线拆为 const 复用,避免重复书写\nconst PREFIX = ' style=\"display:inline-block;',\n GRAD = \"background:linear-gradient(\",\n LINE = \"transparent 47%,currentColor 47%,currentColor 53%,transparent 53%)\";\n\nexport const STYLE_BOX = PREFIX + 'border:1px solid;padding:2px 3px\"',\n STYLE_CANCEL = PREFIX + GRAD + \"to top right,\" + LINE + '\"',\n STYLE_SOUT = PREFIX + GRAD + LINE + '\"';\n","import {\n TOK_EOF,\n TOK_NUM,\n TOK_IDENT,\n TOK_OP,\n TOK_CMD,\n TOK_SUB,\n TOK_LBRACE,\n TOK_RBRACE,\n} from \"./const/TOK.js\";\n\nconst skip = (str, idx) => (str.charCodeAt(idx) <= 32 ? skip(str, idx + 1) : idx),\n NUM_RE = /\\d+(?:\\.\\d+)?|\\.\\d+/y,\n CMD_RE = /\\\\(?:[a-zA-Z]+|.)/y;\n\nexport default (str) => {\n const res = [],\n len = str.length;\n let idx = 0;\n while (idx < len) {\n idx = skip(str, idx);\n if (idx >= len) break;\n\n CMD_RE.lastIndex = idx;\n let m = CMD_RE.exec(str);\n if (m) {\n let cmd = m[0];\n idx += cmd.length;\n // \\textrm 等 6 种 text 命令行为一致,统一归一为 \\text,省去 CMD_MAP 同义键\n const is_text = /^\\\\text(?:rm|bf|it|sf|tt)?$/.test(cmd);\n if (is_text) cmd = \"\\\\text\";\n res.push(TOK_CMD, cmd);\n if (is_text) {\n const pos = skip(str, idx);\n if (str.charCodeAt(pos) === 123) {\n let braces = 1,\n t_idx = pos;\n while (t_idx < len && braces) {\n const cc = str.charCodeAt(++t_idx);\n if (cc === 123) ++braces;\n else if (cc === 125) --braces;\n }\n if (!braces) {\n // LBRACE/RBRACE 的值不会被读取,填空串省体积\n res.push(TOK_LBRACE, \"\", TOK_IDENT, str.slice(pos + 1, t_idx), TOK_RBRACE, \"\");\n idx = t_idx + 1;\n }\n }\n }\n continue;\n }\n\n NUM_RE.lastIndex = idx;\n m = NUM_RE.exec(str);\n if (m) {\n const num = m[0];\n res.push(TOK_NUM, num);\n idx += num.length;\n continue;\n }\n\n const char = str[idx],\n pos = \"_^{}\".indexOf(char);\n res.push(\n ((char.charCodeAt(0) | 32) - 97) >>> 0 < 26 ? TOK_IDENT : pos >= 0 ? pos + TOK_SUB : TOK_OP,\n char,\n );\n ++idx;\n }\n res.push(TOK_EOF, \"\");\n return res;\n};\n","const FALSE = ' stretchy=\"false\"',\n space = (n) => ' lspace=\"' + n + 'px\" rspace=\"' + n + 'px\"',\n mathvar = (v) => ' mathvariant=\"' + v + '\"';\n\nexport const ATTR_NORMAL = mathvar(\"normal\"),\n ATTR_BOLD = mathvar(\"bold\"),\n ATTR_DOUBLE_STRUCK = mathvar(\"double-struck\"),\n ATTR_SCRIPT = mathvar(\"script\"),\n ATTR_FRAKTUR = mathvar(\"fraktur\"),\n ATTR_SANSSERIF = mathvar(\"sans-serif\"),\n ATTR_MONOSPACE = mathvar(\"monospace\"),\n ATTR_ITALIC = mathvar(\"italic\"),\n ATTR_BOLD_ITALIC = mathvar(\"bold-italic\"),\n ATTR_STRETCHY_FALSE = FALSE,\n ATTR_BAR = FALSE + space(0),\n ATTR_BIN = space(4),\n ATTR_REL = space(5);\n","import { TYPE_IDENT, TYPE_OP, TYPE_FUNC, TYPE_SPACE } from \"./TYPE.js\";\nimport { ATTR_NORMAL, ATTR_BIN, ATTR_REL } from \"./ATTR.js\";\n\nexport const SYM_MAP = { __proto__: null };\n\nconst parseSymbols = (str, type, attr) => {\n str.replace(/([a-zA-Z]+)([^a-zA-Z]+)/g, (m, k, v) => {\n SYM_MAP[k] = attr ? [type, v, attr] : [type, v];\n });\n};\n\nparseSymbols(\n \"alphaαbetaβgammaγthetaθpiπdeltaδepsilonϵzetaζetaηiotaιkappaκlambdaλmuμnuνxiξrhoρsigmaσtauτupsilonυphiϕchiχpsiψomegaωellℓhbarℏneg¬varphiφvarpiϖvarrhoϱvarthetaϑvarepsilonεvarsigmaς\",\n TYPE_IDENT,\n);\nparseSymbols(\n \"DeltaΔGammaΓThetaΘLambdaΛXiΞPiΠSigmaΣUpsilonΥPhiΦPsiΨOmegaΩinfty∞nabla∇partial∂forall∀exists∃emptyset∅degree°alephℵwp℘top⊤bot⊥angle∠\",\n TYPE_IDENT,\n ATTR_NORMAL,\n);\nparseSymbols(\n \"prime′cdot⋅times×pm±div÷sum∑prod∏coprod∐int∫iint∬iiint∭oint∮leftrightarrow↔Leftarrow⇐Rightarrow⇒Leftrightarrow⇔cdots⋯in∈notin∉subset⊂supset⊃subseteq⊆supseteq⊇cup∪cap∩to→rightarrow→leftarrow←gets←dots…ldots…le≤leq≤ge≥geq≥bigcap⋂bigcup⋃bigvee⋁bigwedge⋀bigoplus⨁bigotimes⨂bigodot⨀biguplus⨄bigsqcup⨆downarrow↓uparrow↑updownarrow↕Downarrow⇓Uparrow⇑Updownarrow⇕longrightarrow⟶longleftarrow⟵longleftrightarrow⟷Longrightarrow⟹Longleftarrow⟸Longleftrightarrow⟺mapsto↦longmapsto⟼nearrow↗searrow↘nwarrow↖swarrow↙hookrightarrow↪hookleftarrow↩rightharpoonup⇀rightharpoondown⇁leftharpoonup↼leftharpoondown↽\",\n TYPE_OP,\n);\nparseSymbols(\"neq≠ne≠lt<gt>\", TYPE_OP, ATTR_NORMAL);\nparseSymbols(\n \"mp∓lor∨land∧oplus⊕ominus⊖otimes⊗oslash⊘odot⊙circ∘bullet∙star⋆ast∗setminus∖wr≀diamond⋄sqcap⊓sqcup⊔triangleleft◁triangleright▷\",\n TYPE_OP,\n ATTR_BIN,\n);\nparseSymbols(\n \"approx≈sim∼cong≅propto∝equiv≡ni∋perp⟂parallel∥mid∣nmid∤ll≪gg≫simeq≃prec≺succ≻preceq⪯succeq⪰vdash⊢dashv⊣models⊨owns∋sqsubset⊏sqsupset⊐sqsubseteq⊑sqsupseteq⊒\",\n TYPE_OP,\n ATTR_REL,\n);\n\n// 函数名直接并入 SYM_MAP,消除 FUNC_NAMES\n\"sin cos tan cot sec csc log lg ln lim exp max min sup inf det gcd arcsin arccos arctan sinh cosh tanh coth deg arg\".replace(\n /\\w+/g,\n (e) => (SYM_MAP[e] = [TYPE_FUNC, e]),\n);\n\n// 空格命令直接并入 SYM_MAP,消除 SPACE_MAP;宽度用数字书写,构建 map 时统一补 px\n[\n [\",\", 3],\n [\":\", 4],\n [\";\", 5],\n [\"!\", -3],\n [\" \", 4],\n [\"quad\", 16],\n [\"qquad\", 32],\n [\"thinspace\", 3],\n [\"medspace\", 4],\n [\"thickspace\", 5],\n [\"enspace\", 8],\n [\"negthinspace\", -3],\n [\"negmedspace\", -4],\n [\"negthickspace\", -5],\n].map(([k, v]) => (SYM_MAP[k] = [TYPE_SPACE, v + \"px\"]));\n","import {\n ERR_EXTRA_END,\n ERR_MISSING_RIGHT,\n ERR_EXTRA_RIGHT,\n ERR_MISSING_BRACE,\n ERR_UNKNOWN_CMD,\n} from \"./const/ERR.js\";\nimport {\n TYPE_IDENT,\n TYPE_NUM,\n TYPE_OP,\n TYPE_SUP,\n TYPE_SUB,\n TYPE_SUPSUB,\n TYPE_FRAC,\n TYPE_GROUP,\n TYPE_FUNC,\n TYPE_MSQRT,\n TYPE_LEFT_RIGHT,\n TYPE_MROOT,\n TYPE_OVERLINE,\n TYPE_MATRIX,\n TYPE_LINEBREAK,\n TYPE_TEXT,\n TYPE_SPACE,\n TYPE_MENCLOSE,\n TYPE_MPHANTOM,\n} from \"./const/TYPE.js\";\n\nimport {\n ATTR_NORMAL,\n ATTR_BOLD,\n ATTR_DOUBLE_STRUCK,\n ATTR_SCRIPT,\n ATTR_FRAKTUR,\n ATTR_SANSSERIF,\n ATTR_MONOSPACE,\n ATTR_ITALIC,\n ATTR_BOLD_ITALIC,\n ATTR_STRETCHY_FALSE,\n ATTR_BAR,\n} from \"./const/ATTR.js\";\nimport { SYM_MAP } from \"./const/SYM.js\";\nimport {\n TOK_EOF,\n TOK_NUM,\n TOK_IDENT,\n TOK_OP,\n TOK_CMD,\n TOK_SUB,\n TOK_SUP,\n TOK_LBRACE,\n TOK_RBRACE,\n} from \"./const/TOK.js\";\n\nconst MENCLOSE_MAP = {\n __proto__: null,\n boxed: 1,\n cancel: 2,\n sout: 3,\n },\n CHAR_MAP = {\n \"-\": [TYPE_OP, \"−\"],\n \"*\": [TYPE_OP, \"∗\"],\n \"/\": [TYPE_OP, \"/\", ATTR_NORMAL],\n \"|\": [TYPE_OP, \"|\", ATTR_BAR],\n \".\": [TYPE_OP, \".\", ATTR_NORMAL],\n \"'\": [TYPE_OP, \"′\"],\n },\n delim = (tokens, ref) => {\n const idx = ref[0];\n if (tokens[idx] == null) return null;\n ref[0] += 2;\n const val = tokens[idx + 1];\n if (val === \".\") return [TYPE_OP, \"\", ' fence=\"true\" stretchy=\"true\" symmetric=\"true\"'];\n return [TYPE_OP, val === \"<\" ? \"⟨\" : val === \">\" ? \"⟩\" : val[0] === \"\\\\\" ? val.slice(1) : val];\n },\n opt = (tokens, ref, check_num) => {\n let idx = ref[0];\n if (\n tokens[idx] === TOK_OP &&\n tokens[idx + 1] === \"[\" &&\n (!check_num || tokens[idx + 2] === TOK_NUM)\n ) {\n idx += 2;\n while (tokens[idx] > 0 && (tokens[idx] !== TOK_OP || tokens[idx + 1] !== \"]\")) {\n idx += 2;\n }\n tokens[idx] > 0 && (idx += 2);\n ref[0] = idx;\n }\n },\n brace = (tokens, ref) => {\n let idx = ref[0],\n str = \"\";\n if (tokens[idx] === TOK_LBRACE) {\n idx += 2;\n for (; tokens[idx] > 0 && tokens[idx] !== TOK_RBRACE; idx += 2) {\n str += tokens[idx + 1];\n }\n tokens[idx] > 0 && (idx += 2);\n ref[0] = idx;\n }\n return str;\n },\n rows = (tokens, ref, end_check, env) => {\n const rows = [];\n let row = [],\n cell = [];\n while (tokens[ref[0]] > 0) {\n const type = tokens[ref[0]],\n val = tokens[ref[0] + 1];\n if (!end_check && type === TOK_RBRACE) break;\n if (end_check && type === TOK_CMD && val === \"\\\\end\") {\n const pos = ref[0];\n ref[0] += 2;\n const end = brace(tokens, ref);\n if (end === env) {\n break;\n }\n ref[0] = pos;\n }\n if (val === \"&\" || val === \"\\\\\\\\\") {\n ref[0] += 2;\n row.push(cell);\n cell = [];\n if (val === \"\\\\\\\\\") {\n opt(tokens, ref, 1);\n rows.push(row);\n row = [];\n }\n continue;\n }\n const node = grab(tokens, ref);\n if (node) cell.push(node);\n }\n cell.length && row.push(cell);\n row.length && rows.push(row);\n if (rows.length && !rows[rows.length - 1][1] && !rows[rows.length - 1][0][0]) {\n rows.pop();\n }\n return rows;\n },\n matrix = (tokens, ref, name) => {\n if (tokens[ref[0]] === TOK_LBRACE) {\n ref[0] += 2;\n const res = rows(tokens, ref, 0, name);\n tokens[ref[0]] > 0 && (ref[0] += 2);\n return [TYPE_MATRIX, name, res];\n }\n const node = read(tokens, ref, 1);\n return node ? [TYPE_MATRIX, name, [[[node]]]] : null;\n },\n txt = (tokens, ref) => {\n if (tokens[ref[0]] === TOK_LBRACE) {\n const val = brace(tokens, ref);\n if (val === \"\") return [TYPE_GROUP, []];\n const parts = val.split(\"\\\\\\\\\");\n if (parts.length > 1) {\n return [\n TYPE_GROUP,\n parts.flatMap((p, i) => [\n ...(i ? [[TYPE_LINEBREAK]] : []),\n ...(p ? [[TYPE_TEXT, p]] : []),\n ]),\n ];\n }\n return [TYPE_TEXT, val];\n }\n const node = read(tokens, ref, 1);\n if (node) {\n return [TYPE_TEXT, node[1]];\n }\n throw [ERR_MISSING_BRACE, \"text\"];\n },\n begin = (tokens, ref, val) => {\n if (tokens[ref[0]] === TOK_LBRACE) {\n const env = brace(tokens, ref);\n if (env === \"array\") {\n opt(tokens, ref);\n if (tokens[ref[0]] === TOK_LBRACE) brace(tokens, ref);\n else read(tokens, ref);\n }\n const res = rows(tokens, ref, 1, env);\n return [TYPE_MATRIX, env, res];\n }\n return [TYPE_IDENT, val];\n },\n sqrt = (tokens, ref) => {\n if (tokens[ref[0]] === TOK_OP && tokens[ref[0] + 1] === \"[\") {\n ref[0] += 2;\n const nodes = [];\n while (tokens[ref[0]] > 0 && (tokens[ref[0]] !== TOK_OP || tokens[ref[0] + 1] !== \"]\")) {\n const node = grab(tokens, ref);\n if (node) nodes.push(node);\n }\n if (tokens[ref[0]] === TOK_OP) ref[0] += 2;\n return [TYPE_MROOT, read(tokens, ref, 1), [TYPE_GROUP, nodes]];\n }\n return [TYPE_MSQRT, read(tokens, ref, 1)];\n },\n fence = (tokens, ref) => {\n const left = delim(tokens, ref),\n body = parse(tokens, ref);\n if (tokens[ref[0]] === TOK_CMD && tokens[ref[0] + 1] === \"\\\\right\") {\n ref[0] += 2;\n return [TYPE_LEFT_RIGHT, [left, ...body, delim(tokens, ref)].filter(Boolean)];\n }\n throw [ERR_MISSING_RIGHT, left];\n },\n fontNode = (node, attr) => {\n if (!node) return node;\n const [type, val] = node;\n if (type === TYPE_IDENT || type === TYPE_NUM) return [type, val, attr];\n if (type === TYPE_GROUP) return [type, val.map((n) => fontNode(n, attr))];\n if ((type >= TYPE_SUP && type <= TYPE_SUPSUB) || type === TYPE_OVERLINE) {\n const res = [...node];\n res[1] = fontNode(res[1], attr);\n return res;\n }\n return node;\n },\n mathFont = (attr) => (tokens, ref) => fontNode(read(tokens, ref, 1), attr),\n accent = (op) => (tokens, ref) => [TYPE_OVERLINE, read(tokens, ref, 1), op],\n over = accent(\"¯\"),\n mover = (tokens, ref) => {\n const top = read(tokens, ref, 1);\n return [TYPE_SUP, read(tokens, ref, 1), top, 1];\n },\n munder = (tokens, ref) => {\n const bot = read(tokens, ref, 1);\n return [TYPE_SUB, read(tokens, ref, 1), bot, 1];\n },\n frac = (tokens, ref) => [TYPE_FRAC, read(tokens, ref, 1), read(tokens, ref, 1)],\n phantom = (tokens, ref) => [TYPE_MPHANTOM, read(tokens, ref, 1)],\n pmod = (tokens, ref) => [\n TYPE_GROUP,\n [\n [TYPE_SPACE, \"8px\"],\n CHAR_MAP[\"(\"],\n [TYPE_TEXT, \"mod\"],\n [TYPE_SPACE, \"4px\"],\n read(tokens, ref, 1),\n CHAR_MAP[\")\"],\n ],\n ],\n CMD_MAP = {\n __proto__: null,\n \"\\\\\": (tokens, ref) => {\n tokens[ref[0]] === TOK_OP && tokens[ref[0] + 1] === \"*\" && (ref[0] += 2);\n opt(tokens, ref, 1);\n return [TYPE_LINEBREAK];\n },\n text: txt,\n frac,\n dfrac: frac,\n tfrac: frac,\n cfrac: frac,\n overline: over,\n bar: over,\n hat: accent(\"^\"),\n widehat: accent(\"^\"),\n tilde: accent(\"~\"),\n widetilde: accent(\"~\"),\n vec: accent(\"→\"),\n dot: accent(\"˙\"),\n ddot: accent(\"¨\"),\n check: accent(\"ˇ\"),\n widecheck: accent(\"ˇ\"),\n acute: accent(\"´\"),\n grave: accent(\"`\"),\n breve: accent(\"˘\"),\n mathring: accent(\"˚\"),\n stackrel: mover,\n overset: mover,\n underset: munder,\n mathbf: mathFont(ATTR_BOLD),\n boldsymbol: mathFont(ATTR_BOLD_ITALIC),\n bm: mathFont(ATTR_BOLD_ITALIC),\n mathrm: mathFont(ATTR_NORMAL),\n mathbb: mathFont(ATTR_DOUBLE_STRUCK),\n bb: mathFont(ATTR_DOUBLE_STRUCK),\n mathcal: mathFont(ATTR_SCRIPT),\n cal: mathFont(ATTR_SCRIPT),\n mathfrak: mathFont(ATTR_FRAKTUR),\n frak: mathFont(ATTR_FRAKTUR),\n mathsf: mathFont(ATTR_SANSSERIF),\n sf: mathFont(ATTR_SANSSERIF),\n mathtt: mathFont(ATTR_MONOSPACE),\n tt: mathFont(ATTR_MONOSPACE),\n mathit: mathFont(ATTR_ITALIC),\n it: mathFont(ATTR_ITALIC),\n rm: mathFont(ATTR_NORMAL),\n bf: mathFont(ATTR_BOLD),\n operatorname: (tokens, ref) => {\n tokens[ref[0]] === TOK_OP && tokens[ref[0] + 1] === \"*\" && (ref[0] += 2);\n const node = read(tokens, ref, 1);\n return [\n TYPE_FUNC,\n node ? (node[0] === TYPE_GROUP ? node[1].map((n) => n[1]).join(\"\") : node[1]) : \"\",\n ];\n },\n tag: (tokens, ref) => [\n TYPE_GROUP,\n [[TYPE_SPACE, \"2em\"], CHAR_MAP[\"(\"], read(tokens, ref, 1), CHAR_MAP[\")\"]],\n ],\n sqrt,\n left: fence,\n phantom,\n pmod,\n begin,\n end: (tokens, ref, val, name) => {\n throw [ERR_EXTRA_END, name];\n },\n right: (tokens, ref, val, name) => {\n throw [ERR_EXTRA_RIGHT, name];\n },\n },\n TOK_MAP = {\n [TOK_IDENT]: (val) => [TYPE_IDENT, val],\n [TOK_OP]: (val) => CHAR_MAP[val] ?? [TYPE_OP, val],\n [TOK_NUM]: (val) => [TYPE_NUM, val],\n [TOK_LBRACE]: (val, tokens, ref) => {\n const res = [TYPE_GROUP, parse(tokens, ref)];\n tokens[ref[0]] > 0 && (ref[0] += 2);\n return res;\n },\n [TOK_CMD]: (val, tokens, ref) => {\n const name = val.slice(1),\n handler = CMD_MAP[name];\n if (handler) return handler(tokens, ref, val, name);\n if (/^(?:[pbvV]?matrix|cases|array)$/.test(name)) {\n const mat = matrix(tokens, ref, name);\n if (mat) return mat;\n }\n if (MENCLOSE_MAP[name]) {\n return [TYPE_MENCLOSE, MENCLOSE_MAP[name], read(tokens, ref, 1)];\n }\n const sym = SYM_MAP[name];\n if (sym) return sym;\n throw [ERR_UNKNOWN_CMD, val];\n },\n },\n read = (tokens, ref, split_num) => {\n const idx = ref[0],\n type = tokens[idx],\n offset = ref[1];\n if (!type) return null;\n let val = tokens[idx + 1];\n offset && (val = val.slice(offset));\n if (split_num && type === TOK_NUM && val[1]) {\n ref[1] = offset + 1;\n val = val[0];\n } else {\n ref[0] += 2;\n ref[1] = 0;\n }\n return TOK_MAP[type](val, tokens, ref);\n },\n grab = (tokens, ref) => {\n const base = read(tokens, ref),\n idx = ref[0];\n if (!base) return null;\n let limits = tokens[idx + 1] === \"\\\\limits\" ? 1 : tokens[idx + 1] === \"\\\\nolimits\" ? 2 : 0,\n sub,\n sup,\n type;\n limits && (ref[0] += 2);\n while ((type = tokens[ref[0]]) > 0) {\n let count = 0;\n for (; tokens[ref[0] + 1] === \"'\"; ref[0] += 2) ++count;\n if (count) {\n sup = [TYPE_OP, \"′\".repeat(count)];\n continue;\n }\n if (type !== TOK_SUB && type !== TOK_SUP) break;\n ref[0] += 2;\n if (type === TOK_SUB) sub = read(tokens, ref, 1);\n else sup = read(tokens, ref, 1);\n }\n return sub\n ? sup\n ? [TYPE_SUPSUB, base, sub, sup, limits]\n : [TYPE_SUB, base, sub, limits]\n : sup\n ? [TYPE_SUP, base, sup, limits]\n : base;\n },\n parse = (tokens, ref) => {\n const nodes = [];\n let type;\n while ((type = tokens[ref[0]]) > 0) {\n if (type === TOK_RBRACE) break;\n if (type === TOK_CMD && tokens[ref[0] + 1] === \"\\\\right\") break;\n const node = grab(tokens, ref);\n if (node) nodes.push(node);\n }\n return nodes;\n };\n\nfor (const c of \"()[]\") CHAR_MAP[c] = [TYPE_OP, c, ATTR_STRETCHY_FALSE];\n\nexport default parse;\n","import {\n TYPE_IDENT,\n TYPE_NUM,\n TYPE_OP,\n TYPE_SUP,\n TYPE_SUB,\n TYPE_SUPSUB,\n TYPE_FRAC,\n TYPE_GROUP,\n TYPE_FUNC,\n TYPE_MSQRT,\n TYPE_LEFT_RIGHT,\n TYPE_MROOT,\n TYPE_OVERLINE,\n TYPE_MATRIX,\n TYPE_LINEBREAK,\n TYPE_TEXT,\n TYPE_SPACE,\n TYPE_MENCLOSE,\n TYPE_MPHANTOM,\n} from \"./const/TYPE.js\";\nimport { STYLE_BOX, STYLE_CANCEL, STYLE_SOUT } from \"./const/STYL.js\";\nimport lex from \"./lex.js\";\nimport parse from \"./parse.js\";\n\nconst MROW = \"mrow\",\n LEFT = \"left\",\n START = \"start\",\n STYLES = [null, STYLE_BOX, STYLE_CANCEL, STYLE_SOUT],\n ALIGN_RL = [\"right\", LEFT],\n PAD_RL = [\";padding-right:0\", \";padding-left:0\"],\n JUSTIFY = ' style=\"justify-items:',\n STYLE_ALIGN = PAD_RL.map((p, i) => JUSTIFY + (i ? START : \"end\") + p + '\"'),\n STYLE_CASES_REL = PAD_RL.map((p) => JUSTIFY + START + p + '\"'),\n STYLE_START = JUSTIFY + START + '\"',\n TAGS = [null, \"mi\", \"mn\", \"mo\"],\n esc = (str) => str.replace(/[&<>\"]/g, (m) => \"&#\" + m.charCodeAt(0) + \";\"),\n wrap = (tag_name, inner, attr) =>\n \"<\" + tag_name + (attr || \"\") + \">\" + inner + \"</\" + tag_name + \">\",\n tag = (name, val, attr) => wrap(name, esc(val), attr),\n tblAttr = (align, space, row_space = \".2em\", extra = \"\") =>\n extra +\n ' columnalign=\"' +\n align +\n '\" rowspacing=\"' +\n row_space +\n '\" columnspacing=\"' +\n space +\n '\"',\n nest = (name, ...ns) => wrap(name, ns.map(row).join(\"\")),\n scr = (n, idx, display, inline, [, v] = n[1], limits = n[idx]) =>\n nest(\n limits === 1 || (!limits && /^([∑∏∐⋂⋃⨁⨂⋁⋀]|lim|max|min|sup|inf)$/.test(v)) ? display : inline,\n ...n.slice(1, idx),\n ),\n row = (n) => {\n if (!n) return wrap(MROW, \"\");\n const [type, val] = n;\n return type === TYPE_GROUP && !val[1]\n ? row(val[0])\n : type === TYPE_GROUP || type === TYPE_FUNC\n ? wrap(MROW, show(n))\n : show(n);\n },\n SHOW_MAP = {\n [TYPE_FUNC]: ([, val]) => tag(\"mi\", val) + wrap(\"mo\", \"\\u2061\"),\n [TYPE_GROUP]: ([, ns]) => ns.map(show).join(\"\"),\n [TYPE_FRAC]: ([, n_1, n_2]) => nest(\"mfrac\", n_1, n_2),\n [TYPE_SUP]: (n) => scr(n, 3, \"mover\", \"msup\"),\n [TYPE_SUB]: (n) => scr(n, 3, \"munder\", \"msub\"),\n [TYPE_SUPSUB]: (n) => scr(n, 4, \"munderover\", \"msubsup\"),\n [TYPE_TEXT]: ([, val]) => tag(\"mtext\", val.replace(/ /g, \"\\u00A0\")),\n [TYPE_SPACE]: ([, val]) => wrap(\"mspace\", \"\", ' width=\"' + val + '\"'),\n [TYPE_MSQRT]: ([, n_1]) => wrap(\"msqrt\", row(n_1)),\n [TYPE_MROOT]: ([, n_1, n_2]) => nest(\"mroot\", n_1, n_2),\n [TYPE_LEFT_RIGHT]: ([, ns]) => wrap(MROW, ns.map(show).join(\"\")),\n [TYPE_OVERLINE]: ([, n_1, op = \"¯\"]) => nest(\"mover\", n_1, [TYPE_OP, op]),\n [TYPE_MENCLOSE]: ([, style_id, node]) =>\n STYLES[style_id] ? wrap(MROW, row(node), STYLES[style_id]) : row(node),\n [TYPE_MPHANTOM]: ([, n_1]) => wrap(\"mphantom\", row(n_1)),\n [TYPE_MATRIX]: (n) => {\n const [, env, rows] = n,\n is_cases = env === \"cases\",\n is_align = /^align|split/.test(env),\n has_rel =\n is_cases &&\n rows.every((r) => {\n const [t, v] = r[1]?.[0] || [];\n return !t || (t === TYPE_OP && \"=<≤≥≠≈≡∝>\".includes(v));\n }),\n row_0 = rows[0] || [],\n col_styles = row_0.map((_, i) =>\n is_cases\n ? has_rel\n ? STYLE_CASES_REL[i % 2]\n : STYLE_START\n : is_align\n ? STYLE_ALIGN[i % 2]\n : \"\",\n ),\n inner = rows\n .map((r) =>\n wrap(\n \"mtr\",\n r\n .map((c, i) => {\n const html = c.map(show).join(\"\");\n return wrap(\"mtd\", c[1] ? wrap(MROW, html) : html, col_styles[i] || \"\");\n })\n .join(\"\"),\n ),\n )\n .join(\"\"),\n tbl_attr = is_cases\n ? tblAttr(LEFT, has_rel ? \"0\" : \"1em\")\n : is_align\n ? tblAttr(\n row_0.map((_, i) => ALIGN_RL[i % 2]).join(\" \"),\n row_0\n .slice(1)\n .map((_, i) => (i % 2 ? \"2em\" : \"0\"))\n .join(\" \"),\n \".6em\",\n ' displaystyle=\"true\"',\n )\n : \"\",\n tbl = wrap(\"mtable\", inner, tbl_attr),\n idx = \"pbvVc\".indexOf(env[0]);\n\n return idx >= 0\n ? wrap(MROW, tag(\"mo\", \"([|‖{\"[idx]) + tbl + (idx < 4 ? tag(\"mo\", \")]‖‖\"[idx]) : \"\"))\n : tbl;\n },\n [TYPE_LINEBREAK]: () => wrap(\"mspace\", \"\", ' linebreak=\"newline\"'),\n },\n show = (n) => (n ? (n[0] <= 3 ? tag(TAGS[n[0]], n[1], n[2]) : SHOW_MAP[n[0]](n)) : \"\");\n\nexport default (tex, block) => {\n const clean = tex.replace(/[\\r\\n]+/g, \" \");\n return wrap(\n \"math\",\n wrap(\n \"semantics\",\n wrap(MROW, parse(lex(clean), [0, 0]).map(show).join(\"\")) +\n wrap(\"annotation\", esc(clean), ' encoding=\"application/x-tex\"'),\n ),\n ' xmlns=\"http://www.w3.org/1998/Math/MathML\"' + (block ? ' display=\"block\"' : \"\"),\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mathml.js","names":["lex"],"sources":["../src/const/STYL.js","../src/lex.js","../src/const/ATTR.js","../src/const/SYM.js","../src/parse.js","../src/mathml.js"],"sourcesContent":["// 公共前缀/渐变线拆为 const 复用,避免重复书写\nconst PREFIX = ' style=\"display:inline-block;',\n GRAD = \"background:linear-gradient(\",\n LINE = \"transparent 47%,currentColor 47%,currentColor 53%,transparent 53%)\";\n\nexport const STYLE_BOX = PREFIX + 'border:1px solid;padding:2px 3px\"',\n STYLE_CANCEL = PREFIX + GRAD + \"to top right,\" + LINE + '\"',\n STYLE_SOUT = PREFIX + GRAD + LINE + '\"';\n","import {\n TOK_EOF,\n TOK_NUM,\n TOK_IDENT,\n TOK_OP,\n TOK_CMD,\n TOK_SUB,\n TOK_LBRACE,\n TOK_RBRACE,\n} from \"./const/TOK.js\";\n\nconst skip = (str, idx) => (str.charCodeAt(idx) <= 32 ? skip(str, idx + 1) : idx),\n NUM_RE = /\\d+(?:\\.\\d+)?|\\.\\d+/y,\n CMD_RE = /\\\\(?:[a-zA-Z]+|.)/y;\n\nexport default (str) => {\n const res = [],\n len = str.length;\n let idx = 0;\n while (idx < len) {\n idx = skip(str, idx);\n if (idx >= len) break;\n\n CMD_RE.lastIndex = idx;\n let m = CMD_RE.exec(str);\n if (m) {\n let cmd = m[0];\n idx += cmd.length;\n // \\textrm 等 6 种 text 命令行为一致,统一归一为 \\text,省去 CMD_MAP 同义键\n const is_text = /^\\\\text(?:rm|bf|it|sf|tt)?$/.test(cmd);\n if (is_text) cmd = \"\\\\text\";\n res.push(TOK_CMD, cmd);\n if (is_text) {\n const pos = skip(str, idx);\n if (str.charCodeAt(pos) === 123) {\n let braces = 1,\n t_idx = pos;\n while (t_idx < len && braces) {\n const cc = str.charCodeAt(++t_idx);\n if (cc === 123) ++braces;\n else if (cc === 125) --braces;\n }\n if (!braces) {\n // LBRACE/RBRACE 的值不会被读取,填空串省体积\n res.push(TOK_LBRACE, \"\", TOK_IDENT, str.slice(pos + 1, t_idx), TOK_RBRACE, \"\");\n idx = t_idx + 1;\n }\n }\n }\n continue;\n }\n\n NUM_RE.lastIndex = idx;\n m = NUM_RE.exec(str);\n if (m) {\n const num = m[0];\n res.push(TOK_NUM, num);\n idx += num.length;\n continue;\n }\n\n const char = str[idx],\n pos = \"_^{}\".indexOf(char);\n res.push(\n ((char.charCodeAt(0) | 32) - 97) >>> 0 < 26 ? TOK_IDENT : pos >= 0 ? pos + TOK_SUB : TOK_OP,\n char,\n );\n ++idx;\n }\n res.push(TOK_EOF, \"\");\n return res;\n};\n","const FALSE = ' stretchy=\"false\"',\n space = (n) => ' lspace=\"' + n + 'px\" rspace=\"' + n + 'px\"',\n mathvar = (v) => ' mathvariant=\"' + v + '\"';\n\nexport const ATTR_NORMAL = mathvar(\"normal\"),\n ATTR_BOLD = mathvar(\"bold\"),\n ATTR_DOUBLE_STRUCK = mathvar(\"double-struck\"),\n ATTR_SCRIPT = mathvar(\"script\"),\n ATTR_FRAKTUR = mathvar(\"fraktur\"),\n ATTR_SANSSERIF = mathvar(\"sans-serif\"),\n ATTR_MONOSPACE = mathvar(\"monospace\"),\n ATTR_ITALIC = mathvar(\"italic\"),\n ATTR_BOLD_ITALIC = mathvar(\"bold-italic\"),\n ATTR_STRETCHY_FALSE = FALSE,\n ATTR_BAR = FALSE + space(0),\n ATTR_BIN = space(4),\n ATTR_REL = space(5);\n","import { TYPE_IDENT, TYPE_OP, TYPE_FUNC, TYPE_SPACE } from \"./TYPE.js\";\nimport { ATTR_NORMAL, ATTR_BIN, ATTR_REL } from \"./ATTR.js\";\n\nexport const SYM_MAP = { __proto__: null };\n\nconst parseSymbols = (str, type, attr) => {\n str.replace(/([a-zA-Z]+)([^a-zA-Z]+)/g, (m, k, v) => {\n SYM_MAP[k] = attr ? [type, v, attr] : [type, v];\n });\n};\n\nparseSymbols(\n \"alphaαbetaβgammaγthetaθpiπdeltaδepsilonϵzetaζetaηiotaιkappaκlambdaλmuμnuνxiξrhoρsigmaσtauτupsilonυphiϕchiχpsiψomegaωellℓhbarℏneg¬varphiφvarpiϖvarrhoϱvarthetaϑvarepsilonεvarsigmaς\",\n TYPE_IDENT,\n);\nparseSymbols(\n \"DeltaΔGammaΓThetaΘLambdaΛXiΞPiΠSigmaΣUpsilonΥPhiΦPsiΨOmegaΩinfty∞nabla∇partial∂forall∀exists∃emptyset∅degree°alephℵwp℘top⊤bot⊥angle∠\",\n TYPE_IDENT,\n ATTR_NORMAL,\n);\nparseSymbols(\n \"prime′cdot⋅times×pm±div÷sum∑prod∏coprod∐int∫iint∬iiint∭oint∮leftrightarrow↔Leftarrow⇐Rightarrow⇒Leftrightarrow⇔cdots⋯in∈notin∉subset⊂supset⊃subseteq⊆supseteq⊇cup∪cap∩to→rightarrow→leftarrow←gets←dots…ldots…le≤leq≤ge≥geq≥bigcap⋂bigcup⋃bigvee⋁bigwedge⋀bigoplus⨁bigotimes⨂bigodot⨀biguplus⨄bigsqcup⨆downarrow↓uparrow↑updownarrow↕Downarrow⇓Uparrow⇑Updownarrow⇕longrightarrow⟶longleftarrow⟵longleftrightarrow⟷Longrightarrow⟹Longleftarrow⟸Longleftrightarrow⟺mapsto↦longmapsto⟼nearrow↗searrow↘nwarrow↖swarrow↙hookrightarrow↪hookleftarrow↩rightharpoonup⇀rightharpoondown⇁leftharpoonup↼leftharpoondown↽\",\n TYPE_OP,\n);\nparseSymbols(\"neq≠ne≠lt<gt>\", TYPE_OP, ATTR_NORMAL);\nparseSymbols(\n \"mp∓lor∨land∧oplus⊕ominus⊖otimes⊗oslash⊘odot⊙circ∘bullet∙star⋆ast∗setminus∖wr≀diamond⋄sqcap⊓sqcup⊔triangleleft◁triangleright▷\",\n TYPE_OP,\n ATTR_BIN,\n);\nparseSymbols(\n \"approx≈sim∼cong≅propto∝equiv≡ni∋perp⟂parallel∥mid∣nmid∤ll≪gg≫simeq≃prec≺succ≻preceq⪯succeq⪰vdash⊢dashv⊣models⊨owns∋sqsubset⊏sqsupset⊐sqsubseteq⊑sqsupseteq⊒\",\n TYPE_OP,\n ATTR_REL,\n);\n\n// 函数名直接并入 SYM_MAP,消除 FUNC_NAMES\n\"sin cos tan cot sec csc log lg ln lim exp max min sup inf det gcd arcsin arccos arctan sinh cosh tanh coth deg arg\".replace(\n /\\w+/g,\n (e) => (SYM_MAP[e] = [TYPE_FUNC, e]),\n);\n\n// 空格命令直接并入 SYM_MAP,消除 SPACE_MAP;宽度用数字书写,构建 map 时统一补 px\n[\n [\",\", 3],\n [\":\", 4],\n [\";\", 5],\n [\"!\", -3],\n [\" \", 4],\n [\"quad\", 16],\n [\"qquad\", 32],\n [\"thinspace\", 3],\n [\"medspace\", 4],\n [\"thickspace\", 5],\n [\"enspace\", 8],\n [\"negthinspace\", -3],\n [\"negmedspace\", -4],\n [\"negthickspace\", -5],\n].map(([k, v]) => (SYM_MAP[k] = [TYPE_SPACE, v + \"px\"]));\n","import {\n ERR_EXTRA_END,\n ERR_MISSING_RIGHT,\n ERR_EXTRA_RIGHT,\n ERR_MISSING_BRACE,\n ERR_UNKNOWN_CMD,\n} from \"./const/ERR.js\";\nimport {\n TYPE_IDENT,\n TYPE_NUM,\n TYPE_OP,\n TYPE_SUP,\n TYPE_SUB,\n TYPE_SUPSUB,\n TYPE_FRAC,\n TYPE_GROUP,\n TYPE_FUNC,\n TYPE_MSQRT,\n TYPE_LEFT_RIGHT,\n TYPE_MROOT,\n TYPE_OVERLINE,\n TYPE_MATRIX,\n TYPE_LINEBREAK,\n TYPE_TEXT,\n TYPE_SPACE,\n TYPE_MENCLOSE,\n TYPE_MPHANTOM,\n} from \"./const/TYPE.js\";\n\nimport {\n ATTR_NORMAL,\n ATTR_BOLD,\n ATTR_DOUBLE_STRUCK,\n ATTR_SCRIPT,\n ATTR_FRAKTUR,\n ATTR_SANSSERIF,\n ATTR_MONOSPACE,\n ATTR_ITALIC,\n ATTR_BOLD_ITALIC,\n ATTR_STRETCHY_FALSE,\n ATTR_BAR,\n} from \"./const/ATTR.js\";\nimport { SYM_MAP } from \"./const/SYM.js\";\nimport {\n TOK_EOF,\n TOK_NUM,\n TOK_IDENT,\n TOK_OP,\n TOK_CMD,\n TOK_SUB,\n TOK_SUP,\n TOK_LBRACE,\n TOK_RBRACE,\n} from \"./const/TOK.js\";\n\nconst MENCLOSE_MAP = {\n __proto__: null,\n boxed: 1,\n cancel: 2,\n sout: 3,\n },\n CHAR_MAP = {\n \"-\": [TYPE_OP, \"−\"],\n \"*\": [TYPE_OP, \"∗\"],\n \"/\": [TYPE_OP, \"/\", ATTR_NORMAL],\n \"|\": [TYPE_OP, \"|\", ATTR_BAR],\n \".\": [TYPE_OP, \".\", ATTR_NORMAL],\n \"'\": [TYPE_OP, \"′\"],\n },\n delim = (tokens, ref) => {\n const idx = ref[0];\n if (tokens[idx] == null) return null;\n ref[0] += 2;\n const val = tokens[idx + 1];\n if (val === \".\") return [TYPE_OP, \"\", ' fence=\"true\" stretchy=\"true\" symmetric=\"true\"'];\n return [TYPE_OP, val === \"<\" ? \"⟨\" : val === \">\" ? \"⟩\" : val[0] === \"\\\\\" ? val.slice(1) : val];\n },\n opt = (tokens, ref, check_num) => {\n let idx = ref[0];\n if (\n tokens[idx] === TOK_OP &&\n tokens[idx + 1] === \"[\" &&\n (!check_num || tokens[idx + 2] === TOK_NUM)\n ) {\n idx += 2;\n while (tokens[idx] > 0 && (tokens[idx] !== TOK_OP || tokens[idx + 1] !== \"]\")) {\n idx += 2;\n }\n tokens[idx] > 0 && (idx += 2);\n ref[0] = idx;\n }\n },\n brace = (tokens, ref) => {\n let idx = ref[0],\n str = \"\";\n if (tokens[idx] === TOK_LBRACE) {\n idx += 2;\n for (; tokens[idx] > 0 && tokens[idx] !== TOK_RBRACE; idx += 2) {\n str += tokens[idx + 1];\n }\n tokens[idx] > 0 && (idx += 2);\n ref[0] = idx;\n }\n return str;\n },\n rows = (tokens, ref, end_check, env) => {\n const rows = [];\n let row = [],\n cell = [];\n while (tokens[ref[0]] > 0) {\n const type = tokens[ref[0]],\n val = tokens[ref[0] + 1];\n if (!end_check && type === TOK_RBRACE) break;\n if (end_check && type === TOK_CMD && val === \"\\\\end\") {\n const pos = ref[0];\n ref[0] += 2;\n const end = brace(tokens, ref);\n if (end === env) {\n break;\n }\n ref[0] = pos;\n }\n if (val === \"&\" || val === \"\\\\\\\\\") {\n ref[0] += 2;\n row.push(cell);\n cell = [];\n if (val === \"\\\\\\\\\") {\n opt(tokens, ref, 1);\n rows.push(row);\n row = [];\n }\n continue;\n }\n const node = grab(tokens, ref);\n if (node) cell.push(node);\n }\n cell.length && row.push(cell);\n row.length && rows.push(row);\n if (rows.length && !rows[rows.length - 1][1] && !rows[rows.length - 1][0][0]) {\n rows.pop();\n }\n return rows;\n },\n matrix = (tokens, ref, name) => {\n if (tokens[ref[0]] === TOK_LBRACE) {\n ref[0] += 2;\n const res = rows(tokens, ref, 0, name);\n tokens[ref[0]] > 0 && (ref[0] += 2);\n return [TYPE_MATRIX, name, res];\n }\n const node = read(tokens, ref, 1);\n return node ? [TYPE_MATRIX, name, [[[node]]]] : null;\n },\n txt = (tokens, ref) => {\n if (tokens[ref[0]] === TOK_LBRACE) {\n const val = brace(tokens, ref);\n if (val === \"\") return [TYPE_GROUP, []];\n const parts = val.split(\"\\\\\\\\\");\n if (parts.length > 1) {\n return [\n TYPE_GROUP,\n parts.flatMap((p, i) => [\n ...(i ? [[TYPE_LINEBREAK]] : []),\n ...(p ? [[TYPE_TEXT, p]] : []),\n ]),\n ];\n }\n return [TYPE_TEXT, val];\n }\n const node = read(tokens, ref, 1);\n if (node) {\n return [TYPE_TEXT, node[1]];\n }\n throw [ERR_MISSING_BRACE, \"text\"];\n },\n begin = (tokens, ref, val) => {\n if (tokens[ref[0]] === TOK_LBRACE) {\n const env = brace(tokens, ref);\n if (env === \"array\") {\n opt(tokens, ref);\n if (tokens[ref[0]] === TOK_LBRACE) brace(tokens, ref);\n else read(tokens, ref);\n }\n const res = rows(tokens, ref, 1, env);\n return [TYPE_MATRIX, env, res];\n }\n return [TYPE_IDENT, val];\n },\n sqrt = (tokens, ref) => {\n if (tokens[ref[0]] === TOK_OP && tokens[ref[0] + 1] === \"[\") {\n ref[0] += 2;\n const nodes = [];\n while (tokens[ref[0]] > 0 && (tokens[ref[0]] !== TOK_OP || tokens[ref[0] + 1] !== \"]\")) {\n const node = grab(tokens, ref);\n if (node) nodes.push(node);\n }\n if (tokens[ref[0]] === TOK_OP) ref[0] += 2;\n return [TYPE_MROOT, read(tokens, ref, 1), [TYPE_GROUP, nodes]];\n }\n return [TYPE_MSQRT, read(tokens, ref, 1)];\n },\n fence = (tokens, ref) => {\n const left = delim(tokens, ref),\n body = parse(tokens, ref);\n if (tokens[ref[0]] === TOK_CMD && tokens[ref[0] + 1] === \"\\\\right\") {\n ref[0] += 2;\n return [TYPE_LEFT_RIGHT, [left, ...body, delim(tokens, ref)].filter(Boolean)];\n }\n throw [ERR_MISSING_RIGHT, left];\n },\n fontNode = (node, attr) => {\n if (!node) return node;\n const [type, val] = node;\n if (type === TYPE_IDENT || type === TYPE_NUM) return [type, val, attr];\n if (type === TYPE_GROUP) return [type, val.map((n) => fontNode(n, attr))];\n if ((type >= TYPE_SUP && type <= TYPE_SUPSUB) || type === TYPE_OVERLINE) {\n const res = [...node];\n res[1] = fontNode(res[1], attr);\n return res;\n }\n return node;\n },\n mathFont = (attr) => (tokens, ref) => fontNode(read(tokens, ref, 1), attr),\n accent = (op) => (tokens, ref) => [TYPE_OVERLINE, read(tokens, ref, 1), op],\n over = accent(\"¯\"),\n // stackrel/overset 与 underset 结构一致,type 参数化\n stack = (type) => (tokens, ref) => {\n const top = read(tokens, ref, 1);\n return [type, read(tokens, ref, 1), top, 1];\n },\n mover = stack(TYPE_SUP),\n munder = stack(TYPE_SUB),\n frac = (tokens, ref) => [TYPE_FRAC, read(tokens, ref, 1), read(tokens, ref, 1)],\n phantom = (tokens, ref) => [TYPE_MPHANTOM, read(tokens, ref, 1)],\n pmod = (tokens, ref) => [\n TYPE_GROUP,\n [\n [TYPE_SPACE, \"8px\"],\n CHAR_MAP[\"(\"],\n [TYPE_TEXT, \"mod\"],\n [TYPE_SPACE, \"4px\"],\n read(tokens, ref, 1),\n CHAR_MAP[\")\"],\n ],\n ],\n CMD_MAP = {\n __proto__: null,\n \"\\\\\": (tokens, ref) => {\n tokens[ref[0]] === TOK_OP && tokens[ref[0] + 1] === \"*\" && (ref[0] += 2);\n opt(tokens, ref, 1);\n return [TYPE_LINEBREAK];\n },\n text: txt,\n frac,\n dfrac: frac,\n tfrac: frac,\n cfrac: frac,\n overline: over,\n bar: over,\n hat: accent(\"^\"),\n tilde: accent(\"~\"),\n vec: accent(\"→\"),\n dot: accent(\"˙\"),\n ddot: accent(\"¨\"),\n check: accent(\"ˇ\"),\n acute: accent(\"´\"),\n grave: accent(\"`\"),\n breve: accent(\"˘\"),\n mathring: accent(\"˚\"),\n stackrel: mover,\n overset: mover,\n underset: munder,\n mathbf: mathFont(ATTR_BOLD),\n boldsymbol: mathFont(ATTR_BOLD_ITALIC),\n bm: mathFont(ATTR_BOLD_ITALIC),\n mathrm: mathFont(ATTR_NORMAL),\n mathbb: mathFont(ATTR_DOUBLE_STRUCK),\n bb: mathFont(ATTR_DOUBLE_STRUCK),\n mathcal: mathFont(ATTR_SCRIPT),\n cal: mathFont(ATTR_SCRIPT),\n mathfrak: mathFont(ATTR_FRAKTUR),\n frak: mathFont(ATTR_FRAKTUR),\n mathsf: mathFont(ATTR_SANSSERIF),\n sf: mathFont(ATTR_SANSSERIF),\n mathtt: mathFont(ATTR_MONOSPACE),\n tt: mathFont(ATTR_MONOSPACE),\n mathit: mathFont(ATTR_ITALIC),\n it: mathFont(ATTR_ITALIC),\n rm: mathFont(ATTR_NORMAL),\n bf: mathFont(ATTR_BOLD),\n operatorname: (tokens, ref) => {\n tokens[ref[0]] === TOK_OP && tokens[ref[0] + 1] === \"*\" && (ref[0] += 2);\n const node = read(tokens, ref, 1);\n return [\n TYPE_FUNC,\n node ? (node[0] === TYPE_GROUP ? node[1].map((n) => n[1]).join(\"\") : node[1]) : \"\",\n ];\n },\n tag: (tokens, ref) => [\n TYPE_GROUP,\n [[TYPE_SPACE, \"2em\"], CHAR_MAP[\"(\"], read(tokens, ref, 1), CHAR_MAP[\")\"]],\n ],\n sqrt,\n left: fence,\n phantom,\n pmod,\n begin,\n end: (tokens, ref, val, name) => {\n throw [ERR_EXTRA_END, name];\n },\n right: (tokens, ref, val, name) => {\n throw [ERR_EXTRA_RIGHT, name];\n },\n },\n TOK_MAP = {\n [TOK_IDENT]: (val) => [TYPE_IDENT, val],\n [TOK_OP]: (val) => CHAR_MAP[val] ?? [TYPE_OP, val],\n [TOK_NUM]: (val) => [TYPE_NUM, val],\n [TOK_LBRACE]: (val, tokens, ref) => {\n const res = [TYPE_GROUP, parse(tokens, ref)];\n tokens[ref[0]] > 0 && (ref[0] += 2);\n return res;\n },\n [TOK_CMD]: (val, tokens, ref) => {\n const name = val.slice(1),\n // \\widehat 等与 \\hat 共用同一处理,去掉 wide 前缀回退查表\n handler = CMD_MAP[name] || CMD_MAP[name.replace(/^wide/, \"\")];\n if (handler) return handler(tokens, ref, val, name);\n if (/^(?:[pbvV]?matrix|cases|array)$/.test(name)) {\n const mat = matrix(tokens, ref, name);\n if (mat) return mat;\n }\n if (MENCLOSE_MAP[name]) {\n return [TYPE_MENCLOSE, MENCLOSE_MAP[name], read(tokens, ref, 1)];\n }\n const sym = SYM_MAP[name];\n if (sym) return sym;\n throw [ERR_UNKNOWN_CMD, val];\n },\n },\n read = (tokens, ref, split_num) => {\n const idx = ref[0],\n type = tokens[idx],\n offset = ref[1];\n if (!type) return null;\n let val = tokens[idx + 1];\n offset && (val = val.slice(offset));\n if (split_num && type === TOK_NUM && val[1]) {\n ref[1] = offset + 1;\n val = val[0];\n } else {\n ref[0] += 2;\n ref[1] = 0;\n }\n return TOK_MAP[type](val, tokens, ref);\n },\n grab = (tokens, ref) => {\n const base = read(tokens, ref),\n idx = ref[0];\n if (!base) return null;\n let limits = tokens[idx + 1] === \"\\\\limits\" ? 1 : tokens[idx + 1] === \"\\\\nolimits\" ? 2 : 0,\n sub,\n sup,\n type;\n limits && (ref[0] += 2);\n while ((type = tokens[ref[0]]) > 0) {\n let count = 0;\n for (; tokens[ref[0] + 1] === \"'\"; ref[0] += 2) ++count;\n if (count) {\n sup = [TYPE_OP, \"′\".repeat(count)];\n continue;\n }\n if (type !== TOK_SUB && type !== TOK_SUP) break;\n ref[0] += 2;\n if (type === TOK_SUB) sub = read(tokens, ref, 1);\n else sup = read(tokens, ref, 1);\n }\n return sub\n ? sup\n ? [TYPE_SUPSUB, base, sub, sup, limits]\n : [TYPE_SUB, base, sub, limits]\n : sup\n ? [TYPE_SUP, base, sup, limits]\n : base;\n },\n parse = (tokens, ref) => {\n const nodes = [];\n let type;\n while ((type = tokens[ref[0]]) > 0) {\n if (type === TOK_RBRACE) break;\n if (type === TOK_CMD && tokens[ref[0] + 1] === \"\\\\right\") break;\n const node = grab(tokens, ref);\n if (node) nodes.push(node);\n }\n return nodes;\n };\n\nfor (const c of \"()[]\") CHAR_MAP[c] = [TYPE_OP, c, ATTR_STRETCHY_FALSE];\n\nexport default parse;\n","import {\n TYPE_IDENT,\n TYPE_NUM,\n TYPE_OP,\n TYPE_SUP,\n TYPE_SUB,\n TYPE_SUPSUB,\n TYPE_FRAC,\n TYPE_GROUP,\n TYPE_FUNC,\n TYPE_MSQRT,\n TYPE_LEFT_RIGHT,\n TYPE_MROOT,\n TYPE_OVERLINE,\n TYPE_MATRIX,\n TYPE_LINEBREAK,\n TYPE_TEXT,\n TYPE_SPACE,\n TYPE_MENCLOSE,\n TYPE_MPHANTOM,\n} from \"./const/TYPE.js\";\nimport { STYLE_BOX, STYLE_CANCEL, STYLE_SOUT } from \"./const/STYL.js\";\nimport lex from \"./lex.js\";\nimport parse from \"./parse.js\";\n\nconst MROW = \"mrow\",\n LEFT = \"left\",\n START = \"start\",\n STYLES = [null, STYLE_BOX, STYLE_CANCEL, STYLE_SOUT],\n ALIGN_RL = [\"right\", LEFT],\n PAD_RL = [\";padding-right:0\", \";padding-left:0\"],\n JUSTIFY = ' style=\"justify-items:',\n STYLE_ALIGN = PAD_RL.map((p, i) => JUSTIFY + (i ? START : \"end\") + p + '\"'),\n STYLE_CASES_REL = PAD_RL.map((p) => JUSTIFY + START + p + '\"'),\n STYLE_START = JUSTIFY + START + '\"',\n TAGS = [null, \"mi\", \"mn\", \"mo\"],\n esc = (str) => str.replace(/[&<>\"]/g, (m) => \"&#\" + m.charCodeAt(0) + \";\"),\n wrap = (tag_name, inner, attr) =>\n \"<\" + tag_name + (attr || \"\") + \">\" + inner + \"</\" + tag_name + \">\",\n tag = (name, val, attr) => wrap(name, esc(val), attr),\n tblAttr = (align, space, row_space = \".2em\", extra = \"\") =>\n extra +\n ' columnalign=\"' +\n align +\n '\" rowspacing=\"' +\n row_space +\n '\" columnspacing=\"' +\n space +\n '\"',\n nest = (name, ...ns) => wrap(name, ns.map(row).join(\"\")),\n scr = (n, idx, display, inline, [, v] = n[1], limits = n[idx]) =>\n nest(\n limits === 1 || (!limits && /^([∑∏∐⋂⋃⨁⨂⋁⋀]|lim|max|min|sup|inf)$/.test(v)) ? display : inline,\n ...n.slice(1, idx),\n ),\n row = (n) => {\n if (!n) return wrap(MROW, \"\");\n const [type, val] = n;\n return type === TYPE_GROUP && !val[1]\n ? row(val[0])\n : type === TYPE_GROUP || type === TYPE_FUNC\n ? wrap(MROW, show(n))\n : show(n);\n },\n SHOW_MAP = {\n [TYPE_FUNC]: ([, val]) => tag(\"mi\", val) + wrap(\"mo\", \"\\u2061\"),\n [TYPE_GROUP]: ([, ns]) => ns.map(show).join(\"\"),\n [TYPE_FRAC]: ([, n_1, n_2]) => nest(\"mfrac\", n_1, n_2),\n [TYPE_SUP]: (n) => scr(n, 3, \"mover\", \"msup\"),\n [TYPE_SUB]: (n) => scr(n, 3, \"munder\", \"msub\"),\n [TYPE_SUPSUB]: (n) => scr(n, 4, \"munderover\", \"msubsup\"),\n [TYPE_TEXT]: ([, val]) => tag(\"mtext\", val.replace(/ /g, \"\\u00A0\")),\n [TYPE_SPACE]: ([, val]) => wrap(\"mspace\", \"\", ' width=\"' + val + '\"'),\n [TYPE_MSQRT]: ([, n_1]) => wrap(\"msqrt\", row(n_1)),\n [TYPE_MROOT]: ([, n_1, n_2]) => nest(\"mroot\", n_1, n_2),\n [TYPE_LEFT_RIGHT]: ([, ns]) => wrap(MROW, ns.map(show).join(\"\")),\n [TYPE_OVERLINE]: ([, n_1, op]) => nest(\"mover\", n_1, [TYPE_OP, op]),\n [TYPE_MENCLOSE]: ([, style_id, node]) =>\n STYLES[style_id] ? wrap(MROW, row(node), STYLES[style_id]) : row(node),\n [TYPE_MPHANTOM]: ([, n_1]) => wrap(\"mphantom\", row(n_1)),\n [TYPE_MATRIX]: (n) => {\n const [, env, rows] = n,\n is_cases = env === \"cases\",\n is_align = /^align|split/.test(env),\n has_rel =\n is_cases &&\n rows.every((r) => {\n const [t, v] = r[1]?.[0] || [];\n return !t || (t === TYPE_OP && \"=<≤≥≠≈≡∝>\".includes(v));\n }),\n row_0 = rows[0] || [],\n col_styles = row_0.map((_, i) =>\n is_cases\n ? has_rel\n ? STYLE_CASES_REL[i % 2]\n : STYLE_START\n : is_align\n ? STYLE_ALIGN[i % 2]\n : \"\",\n ),\n inner = rows\n .map((r) =>\n wrap(\n \"mtr\",\n r\n .map((c, i) => {\n const html = c.map(show).join(\"\");\n return wrap(\"mtd\", c[1] ? wrap(MROW, html) : html, col_styles[i] || \"\");\n })\n .join(\"\"),\n ),\n )\n .join(\"\"),\n tbl_attr = is_cases\n ? tblAttr(LEFT, has_rel ? \"0\" : \"1em\")\n : is_align\n ? tblAttr(\n row_0.map((_, i) => ALIGN_RL[i % 2]).join(\" \"),\n row_0\n .slice(1)\n .map((_, i) => (i % 2 ? \"2em\" : \"0\"))\n .join(\" \"),\n \".6em\",\n ' displaystyle=\"true\"',\n )\n : \"\",\n tbl = wrap(\"mtable\", inner, tbl_attr),\n idx = \"pbvVc\".indexOf(env[0]);\n\n return idx >= 0\n ? wrap(MROW, tag(\"mo\", \"([|‖{\"[idx]) + tbl + (idx < 4 ? tag(\"mo\", \")]‖‖\"[idx]) : \"\"))\n : tbl;\n },\n [TYPE_LINEBREAK]: () => wrap(\"mspace\", \"\", ' linebreak=\"newline\"'),\n },\n show = (n) => (n ? (n[0] <= 3 ? tag(TAGS[n[0]], n[1], n[2]) : SHOW_MAP[n[0]](n)) : \"\");\n\nexport default (tex, block) => {\n const clean = tex.replace(/[\\r\\n]+/g, \" \");\n return wrap(\n \"math\",\n wrap(\n \"semantics\",\n wrap(MROW, parse(lex(clean), [0, 0]).map(show).join(\"\")) +\n wrap(\"annotation\", esc(clean), ' encoding=\"application/x-tex\"'),\n ),\n ' xmlns=\"http://www.w3.org/1998/Math/MathML\"' + (block ? ' display=\"block\"' : \"\"),\n );\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@webc.site/math","version":"0.1.
|
|
1
|
+
{"name":"@webc.site/math","version":"0.1.40","description":"The world's smallest and fastest web Markdown formula renderer / 全球最小最快的网页Markdown公式渲染器","keywords":["markdown","math","mathml","render","tex"],"homepage":"https://math.webc.site","license":"MulanPSL-2.0","author":"i18n.site@gmail.com","repository":{"type":"git","url":"git+https://github.com/webc-site/math.git"},"type":"module","exports":{".":{"types":"./mathml.d.ts","default":"./mathml.js"},"./md.js":{"types":"./md.d.ts","default":"./md.js"},"./*":"./*"},"dependencies":{}}
|