@webc.site/math 0.1.37 → 0.1.39

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 CHANGED
@@ -6,22 +6,26 @@
6
6
 
7
7
  # @webc.site/math : The world's smallest and fastest web Markdown formula renderer
8
8
 
9
- - [@webc.site/math : The world's smallest and fastest web Markdown formula renderer](#webcsitemath-the-worlds-smallest-and-fastest-web-markdown-formula-renderer)
10
- - [1. Features](#1-features)
11
- - [2. Usage](#2-usage)
12
- - [Compilation Examples](#compilation-examples)
13
- - [Render TeX Formulas Directly](#render-tex-formulas-directly)
14
- - [Replace Formulas in Markdown Text](#replace-formulas-in-markdown-text)
15
- - [Font and CSS Configuration](#font-and-css-configuration)
16
- - [CSS Font Styling](#css-font-styling)
17
- - [3. Plugins](#3-plugins)
18
- - [3.1 markdown-it](#31-markdown-it)
19
- - [3.2 marked](#32-marked)
20
- - [3.3 remark](#33-remark)
21
- - [4. Design](#4-design)
22
- - [5. Tech Stack](#5-tech-stack)
23
- - [6. Code Structure](#6-code-structure)
24
- - [7. Historical Background](#7-historical-background)
9
+ - [1. Features](#1-features)
10
+ - [2. Usage](#2-usage)
11
+ - [Compilation Examples](#compilation-examples)
12
+ - [Render TeX Formulas Directly](#render-tex-formulas-directly)
13
+ - [Replace Formulas in Markdown Text](#replace-formulas-in-markdown-text)
14
+ - [Font and CSS Configuration](#font-and-css-configuration)
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)
21
+ - [3. Plugins](#3-plugins)
22
+ - [3.1 markdown-it](#31-markdown-it)
23
+ - [3.2 marked](#32-marked)
24
+ - [3.3 remark](#33-remark)
25
+ - [4. Design](#4-design)
26
+ - [5. Tech Stack](#5-tech-stack)
27
+ - [6. Code Structure](#6-code-structure)
28
+ - [7. Historical Background](#7-historical-background)
25
29
 
26
30
  ## 1. Features
27
31
 
@@ -30,7 +34,7 @@ This project compiles LaTeX math formulas into browser-native MathML Core markup
30
34
  Key Features:
31
35
 
32
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.
33
- - **Lightweight**: Core package size is 9.30 KB (4.61 KB gzipped) with zero external dependencies.
37
+ - **Lightweight**: Core package size is 9.14 KB (4.62 KB gzipped) with zero external dependencies.
34
38
  - **Zero Runtime Overhead**: Relies entirely on the browser's native engine for layout, eliminating client-side JavaScript formatting libraries.
35
39
  - **Robust Fault Tolerance**: Catches syntax errors (such as unclosed braces) and reverts to raw TeX string output to prevent application crashes.
36
40
  - **High Compatibility**: Generates standard MathML tags suitable for Server-Side Rendering (SSR), Static Site Generation (SSG), and Client-Side Rendering (CSR).
@@ -59,13 +63,79 @@ const html = mdMath("Euler's identity: $$e^{i\\pi} + 1 = 0$$", compile);
59
63
 
60
64
  ### Font and CSS Configuration
61
65
 
62
- Configure math fonts to ensure proper layout alignment. Latin Modern Math font from the `18s` package is recommended.
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.
63
67
 
64
- #### CSS Font Styling
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:
65
112
 
66
113
  ```css
67
114
  math {
68
- font-family: m, t, math, sans-serif;
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;
69
139
  }
70
140
  ```
71
141
 
@@ -146,7 +216,7 @@ console.log(String(html));
146
216
 
147
217
  The compiler extracts TeX formulas from input Markdown text, tokenizes and parses them, and translates the AST to semantic MathML markup.
148
218
 
149
- ![](https://fastly.jsdelivr.net/gh/webc-fs/-@KO/IZZ_fnFFaApQiIQ86yMw.svg)
219
+ ![](https://jsdmirror.cn/gh/webc-fs/-@KO/IZZ_fnFFaApQiIQ86yMw.svg)
150
220
 
151
221
  ## 5. Tech Stack
152
222
 
@@ -183,26 +253,31 @@ To resolve this issue, organizations like Igalia and Mozilla refactored the spec
183
253
 
184
254
  In January 2023, Chrome 109 reintroduced support for the MathML Core specification. With Blink, Gecko, and WebKit all natively supporting this subset, web browsers achieved consistent native MathML rendering. This project compiles TeX directly to native MathML markup at compile time, eliminating client-side layout engines and avoiding client-side rendering overhead.
185
255
 
186
-
187
256
  ---
188
257
 
189
258
  <a id="zh"></a>
259
+
190
260
  # @webc.site/math : 全球最小最快的网页 Markdown 公式渲染器
191
261
 
192
- - [@webc.site/math : 全球最小最快的网页 Markdown 公式渲染器](#webcsitemath-全球最小最快的网页-markdown-公式渲染器)
193
- - [1. 功能介绍](#1-功能介绍)
194
- - [2. 使用演示](#2-使用演示)
195
- - [直接渲染 TeX 公式](#直接渲染-tex-公式)
196
- - [替换 Markdown 文本中的公式](#替换-markdown-文本中的公式)
197
- - [字体与 CSS 配置](#字体与-css-配置)
198
- - [3. 插件](#3-插件)
199
- - [3.1 markdown-it](#31-markdown-it)
200
- - [3.2 marked](#32-marked)
201
- - [3.3 remark](#33-remark)
202
- - [4. 设计思路](#4-设计思路)
203
- - [5. 技术栈](#5-技术栈)
204
- - [6. 代码结构](#6-代码结构)
205
- - [7. 历史故事](#7-历史故事)
262
+ - [1. 功能介绍](#1-功能介绍)
263
+ - [2. 使用演示](#2-使用演示)
264
+ - [直接渲染 TeX 公式](#直接渲染-tex-公式)
265
+ - [替换 Markdown 文本中的公式](#替换-markdown-文本中的公式)
266
+ - [字体与 CSS 配置](#字体与-css-配置)
267
+ - [引入数学字体](#引入数学字体)
268
+ - [方式一:CDN 在线引用(推荐)](#方式一cdn-在线引用推荐)
269
+ - [方式二:本地托管字体文件](#方式二本地托管字体文件)
270
+ - [CSS 样式配置](#css-样式配置)
271
+ - [字体族声明与回退链](#字体族声明与回退链)
272
+ - [块级公式排版优化](#块级公式排版优化)
273
+ - [3. 插件](#3-插件)
274
+ - [3.1 markdown-it](#31-markdown-it)
275
+ - [3.2 marked](#32-marked)
276
+ - [3.3 remark](#33-remark)
277
+ - [4. 设计思路](#4-设计思路)
278
+ - [5. 技术栈](#5-技术栈)
279
+ - [6. 代码结构](#6-代码结构)
280
+ - [7. 历史故事](#7-历史故事)
206
281
 
207
282
  ## 1. 功能介绍
208
283
 
@@ -211,7 +286,7 @@ In January 2023, Chrome 109 reintroduced support for the MathML Core specificati
211
286
  核心特性:
212
287
 
213
288
  - **高性能**:TeX 公式直接转换为原生 MathML 标签,处理速度达每秒 300,000 次以上
214
- - **轻量化**:核心包体积 9.30 KB(Gzip 压缩后 4.61 KB),无外部依赖
289
+ - **轻量化**:核心包体积 9.14 KB(Gzip 压缩后 4.62 KB),无外部依赖
215
290
  - **零运行开销**:完全依赖浏览器原生引擎排版与渲染
216
291
  - **高容错性**:自动捕获语法错误,降级输出原始 TeX 字符串
217
292
  - **强兼容性**:生成标准 MathML 标签,适配 SSR、SSG 和 CSR
@@ -238,11 +313,79 @@ const html = mdMath("欧拉恒等式:$$e^{i\\pi} + 1 = 0$$", compile);
238
313
 
239
314
  ### 字体与 CSS 配置
240
315
 
241
- 配置数学字体确保排版对齐:
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>` 标签配置字体族与继承颜色:
242
362
 
243
363
  ```css
244
364
  math {
245
- font-family: m, t, math, sans-serif;
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;
246
389
  }
247
390
  ```
248
391
 
@@ -313,9 +456,7 @@ const processor = unified()
313
456
  .use(mathRemark)
314
457
  .use(remarkHtml, { sanitize: false });
315
458
 
316
- const html = await processor.process(
317
- "行内公式: $E = mc^2$ 和 块级公式: \n$$\n\\frac{a}{b}\n$$",
318
- );
459
+ const html = await processor.process("行内公式: $E = mc^2$ 和 块级公式: \n$$\n\\frac{a}{b}\n$$");
319
460
  console.log(String(html));
320
461
  ```
321
462
 
@@ -323,7 +464,7 @@ console.log(String(html));
323
464
 
324
465
  编译器从输入文本中提取 TeX 公式,依次通过扫描、词法分析、语法分析,最终生成语义化 MathML 标记。
325
466
 
326
- ![](https://fastly.jsdelivr.net/gh/webc-fs/-@gq/L4enESoVQsPqCvjpDYmA.svg)
467
+ ![](https://jsdmirror.cn/gh/webc-fs/-@gq/L4enESoVQsPqCvjpDYmA.svg)
327
468
 
328
469
  ## 5. 技术栈
329
470
 
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];if(o+=t.length,i.push(4,t),/^\\text(?:rm|bf|it|sf|tt)?$/.test(t)){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`),ee=` stretchy="false"`+i(0),te=i(4),ne=i(5),h={__proto__:null},g=(e,t,n)=>{e.replace(/([a-zA-Z]+)([^a-zA-Z]+)/g,(e,r,i)=>{h[r]=n?[t,i,n]:[t,i]})};g(`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),g(`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),g(`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),g(`neq≠ne≠lt<gt>`,3,o),g(`mp∓lor∨land∧oplus⊕ominus⊖otimes⊗oslash⊘odot⊙circ∘bullet∙star⋆ast∗setminus∖wr≀diamond⋄sqcap⊓sqcup⊔triangleleft◁triangleright▷`,3,te),g(`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,ne),`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=>h[e]=[9,e]),[[`,`,`3px`],[`:`,`4px`],[`;`,`5px`],[`!`,`-3px`],[` `,`4px`],[`quad`,`16px`],[`qquad`,`32px`],[`thinspace`,`3px`],[`medspace`,`4px`],[`thickspace`,`5px`],[`enspace`,`8px`],[`negthinspace`,`-3px`],[`negmedspace`,`-4px`],[`negthickspace`,`-5px`]].map(([e,t])=>h[e]=[17,t]);const _={__proto__:null,boxed:1,cancel:2,sout:3},v={"-":[3,`−`],"*":[3,`∗`],"/":[3,`/`,o],"|":[3,`|`,ee],".":[3,`.`,o],"'":[3,`′`]},y=(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]},b=(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}},x=(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},S=(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,x(e,t)===r)break;t[0]=n}if(c===`&`||c===`\\\\`){t[0]+=2,a.push(o),o=[],c===`\\\\`&&(b(e,t,1),i.push(a),a=[]);continue}let l=I(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},re=(e,t,n)=>{if(e[t[0]]===7){t[0]+=2;let r=S(e,t,0,n);return e[t[0]]>0&&(t[0]+=2),[14,n,r]}let r=F(e,t,1);return r?[14,n,[[[r]]]]:null},C=(e,t)=>{if(e[t[0]]===7){let n=x(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=F(e,t,1);if(n)return[16,n[1]];throw[3,`text`]},ie=(e,t,n)=>{if(e[t[0]]===7){let n=x(e,t);return n===`array`&&(b(e,t),e[t[0]]===7?x(e,t):F(e,t)),[14,n,S(e,t,1,n)]}return[1,n]},w=(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=I(e,t);r&&n.push(r)}return e[t[0]]===3&&(t[0]+=2),[11,F(e,t,1),[8,n]]}return[10,F(e,t,1)]},T=(e,t)=>{let n=y(e,t),r=L(e,t);if(e[t[0]]===4&&e[t[0]+1]===`\\right`)return t[0]+=2,[12,[n,...r,y(e,t)].filter(Boolean)];throw[1,n]},E=(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=>E(e,t))];if(n>=4&&n<=6||n===13){let n=[...e];return n[1]=E(n[1],t),n}return e},D=e=>(t,n)=>E(F(t,n,1),e),O=e=>(t,n)=>[13,F(t,n,1),e],k=O(`¯`),A=(e,t)=>{let n=F(e,t,1);return[4,F(e,t,1),n,1]},j=(e,t)=>{let n=F(e,t,1);return[5,F(e,t,1),n,1]},M=(e,t)=>[7,F(e,t,1),F(e,t,1)],N={__proto__:null,"\\":(e,t)=>(e[t[0]]===3&&e[t[0]+1]===`*`&&(t[0]+=2),b(e,t,1),[15]),text:C,textrm:C,textbf:C,textit:C,textsf:C,texttt:C,frac:M,dfrac:M,tfrac:M,cfrac:M,overline:k,bar:k,hat:O(`^`),widehat:O(`^`),tilde:O(`~`),widetilde:O(`~`),vec:O(`→`),dot:O(`˙`),ddot:O(`¨`),check:O(`ˇ`),widecheck:O(`ˇ`),acute:O(`´`),grave:O("`"),breve:O(`˘`),mathring:O(`˚`),stackrel:A,overset:A,underset:j,mathbf:D(s),boldsymbol:D(m),bm:D(m),mathrm:D(o),mathbb:D(c),bb:D(c),mathcal:D(l),cal:D(l),mathfrak:D(u),frak:D(u),mathsf:D(d),sf:D(d),mathtt:D(f),tt:D(f),mathit:D(p),it:D(p),rm:D(o),bf:D(s),operatorname:(e,t)=>{e[t[0]]===3&&e[t[0]+1]===`*`&&(t[0]+=2);let n=F(e,t,1);return[9,n?n[0]===8?n[1].map(e=>e[1]).join(``):n[1]:``]},tag:(e,t)=>[8,[[17,`2em`],v[`(`],F(e,t,1),v[`)`]]],sqrt:w,left:T,phantom:(e,t)=>[19,F(e,t,1)],pmod:(e,t)=>[8,[[17,`8px`],v[`(`],[16,`mod`],[17,`4px`],F(e,t,1),v[`)`]]],begin:ie,end:(e,t,n,r)=>{throw[0,r]},right:(e,t,n,r)=>{throw[2,r]}},P={2:e=>[1,e],3:e=>v[e]??[3,e],1:e=>[2,e],7:(e,t,n)=>{let r=[8,L(t,n)];return t[n[0]]>0&&(n[0]+=2),r},4:(e,t,n)=>{let r=e.slice(1),i=N[r];if(i)return i(t,n,e,r);if(/^(?:[pbvV]?matrix|cases|array)$/.test(r)){let e=re(t,n,r);if(e)return e}if(_[r])return[18,_[r],F(t,n,1)];let a=h[r];if(a)return a;throw[4,e]}},F=(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),P[i](o,e,t)},I=(e,t)=>{let n=F(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=F(e,t,1):o=F(e,t,1)}return a?o?[6,n,a,o,i]:[5,n,a,i]:o?[4,n,o,i]:n},L=(e,t)=>{let n=[],r;for(;(r=e[t[0]])>0&&!(r===8||r===4&&e[t[0]+1]===`\\right`);){let r=I(e,t);r&&n.push(r)}return n};[...`()[]`].map(e=>v[e]=[3,e,` stretchy="false"`]);const R=`mrow`,z=`left`,B=[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%)"`],V=[`right`,z],H=[`;padding-right:0`,`;padding-left:0`],U=H.map((e,t)=>` style="justify-items:`+(t?`start`:`end`)+e+`"`),W=H.map(e=>` style="justify-items:start`+e+`"`),G=[null,`mi`,`mn`,`mo`],K=e=>e.replace(/[&<>"]/g,e=>e===`&`?`&amp;`:e===`<`?`&lt;`:e===`>`?`&gt;`:`&quot;`),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(R,``);let[t,n]=e;return t===8&&!n[1]?Q(n[0]):t===8||t===9?q(R,$(e)):$(e)},ae={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(R,e.map($).join(``)),13:([,e,t=`¯`])=>X(`mover`,e,[3,t]),18:([,e,t])=>B[e]?q(R,Q(t),B[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?W[t%2]:` style="justify-items:start"`:i?U[t%2]:``),c=q(`mtable`,n.map(e=>q(`mtr`,e.map((e,t)=>{let n=e.map($).join(``);return q(`mtd`,e[1]?q(R,n):n,s[t]||``)}).join(``))).join(``),r?Y(z,a?`0`:`1em`):i?Y(o.map((e,t)=>V[t%2]).join(` `),o.slice(1).map((e,t)=>t%2?`2em`:`0`).join(` `),`.6em`,` displaystyle="true"`):``),l=`pbvVc`.indexOf(t[0]);return l>=0?q(R,J(`mo`,`([|‖{`[l])+c+(l<4?J(`mo`,`)]‖‖`[l]):``)):c},15:()=>q(`mspace`,``,` linebreak="newline"`)},$=e=>e?e[0]<=3?J(G[e[0]],e[1],e[2]):ae[e[0]](e):``;var oe=(e,t)=>{let n=e.replace(/[\r\n]+/g,` `);return q(`math`,q(`semantics`,q(R,L(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{oe as default};
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 STYLE_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 = STYLE_PREFIX + 'border:1px solid;padding:2px 3px\"',\n STYLE_CANCEL = STYLE_PREFIX + GRAD + \"to top right,\" + LINE + '\"',\n STYLE_SOUT = STYLE_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 const cmd = m[0];\n idx += cmd.length;\n res.push(TOK_CMD, cmd);\n if (/^\\\\text(?:rm|bf|it|sf|tt)?$/.test(cmd)) {\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 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\n[\n [\",\", \"3px\"],\n [\":\", \"4px\"],\n [\";\", \"5px\"],\n [\"!\", \"-3px\"],\n [\" \", \"4px\"],\n [\"quad\", \"16px\"],\n [\"qquad\", \"32px\"],\n [\"thinspace\", \"3px\"],\n [\"medspace\", \"4px\"],\n [\"thickspace\", \"5px\"],\n [\"enspace\", \"8px\"],\n [\"negthinspace\", \"-3px\"],\n [\"negmedspace\", \"-4px\"],\n [\"negthickspace\", \"-5px\"],\n].map(([k, v]) => (SYM_MAP[k] = [TYPE_SPACE, v]));\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_MROOT,\n TYPE_LEFT_RIGHT,\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 textrm: txt,\n textbf: txt,\n textit: txt,\n textsf: txt,\n texttt: 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\n[...\"()[]\"].map((c) => (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_MROOT,\n TYPE_LEFT_RIGHT,\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) =>\n str.replace(/[&<>\"]/g, (m) =>\n m === \"&\" ? \"&amp;\" : m === \"<\" ? \"&lt;\" : m === \">\" ? \"&gt;\" : \"&quot;\",\n ),\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.37","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":{}}
1
+ {"name":"@webc.site/math","version":"0.1.39","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":{}}