@webc.site/math 0.1.22 → 0.1.23

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,15 +6,34 @@
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)
25
+
9
26
  ## 1. Features
10
27
 
11
- This project compiles LaTeX math formulas into browser-native MathML Core markup, achieving zero-overhead rendering without client-side layout engines.
28
+ This project compiles LaTeX math formulas into browser-native MathML Core markup. Through compile-time conversion, it bypasses client-side layout engines to achieve zero-overhead formula rendering.
29
+
30
+ Key Features:
12
31
 
13
- - **High Performance**: Compiles TeX formulas directly to native MathML. Processing speed reaches ~329,000 operations per second, which is approximately 3.6 times faster than KaTeX and 48 times faster than MathJax.
14
- - **Ultra-lightweight**: The package size is 7.78 KB (3.58 KB gzipped), minimizing initial page load times.
15
- - **Zero Runtime Dependencies**: Renders math using the browser's native C++ layout engine instead of loading heavy client-side JavaScript formatting libraries.
16
- - **Robust Fault Tolerance**: Automatically catches syntax errors like unclosed brackets, reverting to raw TeX string output to prevent application crashes.
17
- - **Universal Compatibility**: Generates standard MathML tags suitable for Server-Side Rendering (SSR), Static Site Generation (SSG), and Client-Side Rendering (CSR).
32
+ - **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 7.69 KB (3.56 KB gzipped) with zero external dependencies.
34
+ - **Zero Runtime Overhead**: Relies entirely on the browser's native engine for layout, eliminating client-side JavaScript formatting libraries.
35
+ - **Robust Fault Tolerance**: Catches syntax errors (such as unclosed braces) and reverts to raw TeX string output to prevent application crashes.
36
+ - **High Compatibility**: Generates standard MathML tags suitable for Server-Side Rendering (SSR), Static Site Generation (SSG), and Client-Side Rendering (CSR).
18
37
 
19
38
  ## 2. Usage
20
39
 
@@ -25,7 +44,8 @@ This project compiles LaTeX math formulas into browser-native MathML Core markup
25
44
  ```javascript
26
45
  import mathml from "@webc.site/math";
27
46
 
28
- const html = mathml("e^{i\\pi} + 1 = 0", true); // Second parameter sets block style
47
+ // Second parameter set to true renders block style
48
+ const html = mathml("e^{i\\pi} + 1 = 0", true);
29
49
  ```
30
50
 
31
51
  #### Replace Formulas in Markdown Text
@@ -39,7 +59,7 @@ const html = mdMath("Euler's identity: $$e^{i\\pi} + 1 = 0$$", compile);
39
59
 
40
60
  ### Font and CSS Configuration
41
61
 
42
- To ensure optimal layout and typesetting, configure math fonts. It is recommended to use the OpenType **Latin Modern Math** font from the `18s` package.
62
+ Configure math fonts to ensure proper layout alignment. Latin Modern Math font from the `18s` package is recommended.
43
63
 
44
64
  #### CSS Font Styling
45
65
 
@@ -49,30 +69,92 @@ math {
49
69
  }
50
70
  ```
51
71
 
52
- ## 3. Design
72
+ ## 3. Plugins
73
+
74
+ This project provides extension plugins for mainstream Markdown parsers to render TeX formulas directly to MathML markup during compilation/building.
53
75
 
54
- The compiler extracts TeX math formulas from input Markdown text, runs lexical and syntax analyses, and generates semantic MathML markup.
76
+ ### 3.1 markdown-it
55
77
 
56
- ```mermaid
57
- graph TD
58
- Input[Input Markdown] --> Scanner[Scanner: Locates Delimiters]
59
- Scanner -- Plain Text --> Buffer[Output Buffer]
60
- Scanner -- TeX Formula --> Lexer[Lexer: Tokenizes Input]
61
- Lexer --> Parser[Parser: Builds AST]
62
- Parser --> Codegen[Codegen: Translates to MathML Tags]
63
- Codegen --> Wrapper[Semantic Wrapper]
64
- Wrapper --> MathML[MathML Output]
65
- Buffer --> Output[Final HTML]
66
- MathML --> Output
78
+ Installation:
79
+
80
+ ```bash
81
+ npm install @webc.site/math-markdown-it
67
82
  ```
68
83
 
69
- ## 4. Tech Stack
84
+ Usage:
85
+
86
+ ```javascript
87
+ import markdownit from "markdown-it";
88
+ import mathMarkdownIt from "@webc.site/math-markdown-it";
89
+
90
+ const md = markdownit().use(mathMarkdownIt);
91
+
92
+ const html = md.render("Inline math: $E = mc^2$ and block math: \n$$\n\\frac{a}{b}\n$$");
93
+ console.log(html);
94
+ ```
95
+
96
+ ### 3.2 marked
97
+
98
+ Installation:
99
+
100
+ ```bash
101
+ npm install @webc.site/math-marked
102
+ ```
103
+
104
+ Usage:
105
+
106
+ ```javascript
107
+ import { marked } from "marked";
108
+ import mathMarked from "@webc.site/math-marked";
109
+
110
+ marked.use(mathMarked());
70
111
 
71
- - **Runtime**: Bun, Node.js
112
+ const html = marked.parse("Inline math: $E = mc^2$ and block math: \n$$\n\\frac{a}{b}\n$$");
113
+ console.log(html);
114
+ ```
115
+
116
+ ### 3.3 remark
117
+
118
+ Installation:
119
+
120
+ ```bash
121
+ npm install @webc.site/math-remark
122
+ ```
123
+
124
+ Usage:
125
+
126
+ ```javascript
127
+ import { unified } from "unified";
128
+ import remarkParse from "remark-parse";
129
+ import remarkMath from "remark-math";
130
+ import mathRemark from "@webc.site/math-remark";
131
+ import remarkHtml from "remark-html";
132
+
133
+ const processor = unified()
134
+ .use(remarkParse)
135
+ .use(remarkMath)
136
+ .use(mathRemark)
137
+ .use(remarkHtml, { sanitize: false });
138
+
139
+ const html = await processor.process(
140
+ "Inline math: $E = mc^2$ and block math: \n$$\n\\frac{a}{b}\n$$",
141
+ );
142
+ console.log(String(html));
143
+ ```
144
+
145
+ ## 4. Design
146
+
147
+ The compiler extracts TeX formulas from input Markdown text, tokenizes and parses them, and translates the AST to semantic MathML markup.
148
+
149
+ ![](https://fastly.jsdelivr.net/gh/webc-fs/-@KO/IZZ_fnFFaApQiIQ86yMw.svg)
150
+
151
+ ## 5. Tech Stack
152
+
153
+ - **Build & Test Environment**: Bun, Node.js
72
154
  - **Linter & Formatter**: oxlint, oxfmt
73
155
  - **Build Tool**: Vite, Rolldown, Lightning CSS
74
156
 
75
- ## 5. Code Structure
157
+ ## 6. Code Structure
76
158
 
77
159
  ```
78
160
  .
@@ -82,37 +164,59 @@ graph TD
82
164
  │ ├── mathml.js # Core compiler (minified)
83
165
  │ └── md.js # Markdown math formula parser (minified)
84
166
  ├── src/ # Source code
85
- │ ├── const/ # Tokens, AST types, symbols and functions constants
167
+ │ ├── const/ # Tokens, AST types, symbols, and functions constants
86
168
  │ ├── lex.js # LaTeX lexer
87
169
  │ ├── parse.js # LaTeX parser (AST builder)
88
170
  │ ├── mathml.js # Core TeX-to-MathML compiler
89
171
  │ └── md.js # Markdown parser entry
90
172
  ├── sh/ # Scripts
91
- │ └── bench/ # Benchmark suites and historical data
92
173
  └── test.sh # Quality verification and test runner
93
174
  ```
94
175
 
95
- ## 6. Historical Background
176
+ ## 7. Historical Background
177
+
178
+ The W3C published the MathML 1.0 specification in 1998 to standardize mathematical notation on the web. However, the complexity of the specification placed a maintenance burden on browser layout engines.
179
+
180
+ In 2013, the Chromium team removed the unfinished MathML rendering implementation from the Blink engine due to maintenance costs and security vulnerabilities. Web developers subsequently relied on client-side JavaScript libraries (such as MathJax and KaTeX) to simulate formula layout. These libraries increased bundle sizes and consumed client-side CPU resources, impacting page load times and rendering performance.
96
181
 
97
- In the early history of the World Wide Web Consortium (W3C), MathML was proposed as a standard for mathematical notation in HTML5. However, implementation complexity caused fragmented support across browser engines. Chromium removed its initial MathML code in 2013 due to architectural and security issues, forcing web applications to load large, heavy layout libraries such as MathJax or KaTeX to calculate page styles and position symbols.
182
+ To resolve this issue, organizations like Igalia and Mozilla refactored the specification into the MathML Core standard, focusing on essential, implementable parts backed by Web Platform Tests.
98
183
 
99
- A decade later, in January 2023, Chrome 109 reintroduced native support for the MathML Core specification, which defines a subset of MathML optimized for browser performance. With WebKit (Safari), Gecko (Firefox), and Blink (Chrome/Edge) all supporting MathML Core natively, pages no longer require client-side JavaScript layout calculations. This project was created to compile LaTeX directly into native MathML tags at compile time, eliminating layout engine dependencies.
184
+ 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.
100
185
 
101
186
  ---
102
187
 
103
188
  <a id="zh"></a>
104
189
 
105
- # @webc.site/math : 全球最小最快的网页Markdown公式渲染器
190
+ # @webc.site/math : 全球最小最快的网页 Markdown 公式渲染器
191
+
192
+ - [@webc.site/math : 全球最小最快的网页 Markdown 公式渲染器](#webcsitemath-全球最小最快的网页-markdown-公式渲染器)
193
+ - [1. 功能介绍](#1-功能介绍)
194
+ - [2. 使用演示](#2-使用演示)
195
+ - [编译示例](#编译示例)
196
+ - [直接渲染 TeX 公式](#直接渲染-tex-公式)
197
+ - [替换 Markdown 文本中的公式](#替换-markdown-文本中的公式)
198
+ - [字体与 CSS 配置](#字体与-css-配置)
199
+ - [CSS 样式配置](#css-样式配置)
200
+ - [3. 插件使用](#3-插件使用)
201
+ - [3.1 markdown-it](#31-markdown-it)
202
+ - [3.2 marked](#32-marked)
203
+ - [3.3 remark](#33-remark)
204
+ - [4. 设计思路](#4-设计思路)
205
+ - [5. 技术栈](#5-技术栈)
206
+ - [6. 代码结构](#6-代码结构)
207
+ - [7. 历史故事](#7-历史故事)
106
208
 
107
209
  ## 1. 功能介绍
108
210
 
109
- 项目将 LaTeX 数学公式编译为浏览器原生支持的 MathML Core 标记,无需前端排版引擎,实现零运行开销渲染。
211
+ 本项目将 LaTeX 数学公式编译为浏览器原生支持的 MathML Core 标记。通过编译期转换,无需客户端排版引擎,实现零运行时开销的公式渲染。
110
212
 
111
- - **高性能**:直接将 TeX 公式翻译为原生 MathML 标签。处理速度达每秒 329,000 次操作,较 KaTeX 快 3.6 倍,较 MathJax 快 48 倍。
112
- - **体积小**:包体积仅 7.78 KB(Gzip 压缩后 3.58 KB),不影响页面首次加载性能。
113
- - **无运行时依赖**:利用浏览器底层的 C++ 原生引擎进行布局和渲染,免去加载前端 JavaScript 排版库的步骤。
114
- - **健壮容错**:自动捕获未闭合括号等语法错误,降级输出原始 TeX 字符串,防止页面程序崩溃。
115
- - **通用兼容**:输出标准的 MathML 元素,适用于服务端渲染(SSR)、静态站点生成(SSG)和前端动态转换。
213
+ 主要特性:
214
+
215
+ - **高性能**:TeX 公式直接转换为原生 MathML 标签。处理速度达每秒 300,000 次以上,为 KaTeX 的 3 倍以上,MathJax 的 40 倍以上。
216
+ - **轻量化**:核心包体积 7.69 KB(Gzip 压缩后 3.56 KB),无外部依赖。
217
+ - **零运行开销**:完全依赖浏览器原生引擎排版与渲染,无需加载客户端 JavaScript 排版库。
218
+ - **高容错性**:自动捕获语法错误(例如未闭合括号),降级输出原始 TeX 字符串,保证应用运行稳定。
219
+ - **强兼容性**:生成的 MathML 标签符合标准,适配服务端渲染(SSR)、静态网站生成(SSG)和客户端渲染(CSR)。
116
220
 
117
221
  ## 2. 使用演示
118
222
 
@@ -123,7 +227,8 @@ A decade later, in January 2023, Chrome 109 reintroduced native support for the
123
227
  ```javascript
124
228
  import mathml from "@webc.site/math";
125
229
 
126
- const html = mathml("e^{i\\pi} + 1 = 0", true); // 第二参数设为 true 表示块级公式
230
+ // 第二参数为 true 表示渲染为块级公式
231
+ const html = mathml("e^{i\\pi} + 1 = 0", true);
127
232
  ```
128
233
 
129
234
  #### 替换 Markdown 文本中的公式
@@ -137,9 +242,9 @@ const html = mdMath("欧拉恒等式:$$e^{i\\pi} + 1 = 0$$", compile);
137
242
 
138
243
  ### 字体与 CSS 配置
139
244
 
140
- 配置数学字体可确保排版美观。推荐使用 `18s` 字体包中的 **Latin Modern Math** 字体。
245
+ 配置数学字体以确保排版对齐。推荐使用 `18s` 字体包中的 Latin Modern Math 字体。
141
246
 
142
- #### CSS 字体样式设置
247
+ #### CSS 样式配置
143
248
 
144
249
  ```css
145
250
  math {
@@ -147,30 +252,90 @@ math {
147
252
  }
148
253
  ```
149
254
 
150
- ## 3. 设计思路
255
+ ## 3. 插件使用
256
+
257
+ 本项目为主流 Markdown 解析器提供了扩展插件,在编译/构建时直接将 TeX 公式渲染为 MathML 标签。
258
+
259
+ ### 3.1 markdown-it
260
+
261
+ 安装:
262
+
263
+ ```bash
264
+ npm install @webc.site/math-markdown-it
265
+ ```
266
+
267
+ 使用示例:
268
+
269
+ ```javascript
270
+ import markdownit from "markdown-it";
271
+ import mathMarkdownIt from "@webc.site/math-markdown-it";
272
+
273
+ const md = markdownit().use(mathMarkdownIt);
274
+
275
+ const html = md.render("行内公式: $E = mc^2$ 和 块级公式: \n$$\n\\frac{a}{b}\n$$");
276
+ console.log(html);
277
+ ```
278
+
279
+ ### 3.2 marked
280
+
281
+ 安装:
282
+
283
+ ```bash
284
+ npm install @webc.site/math-marked
285
+ ```
286
+
287
+ 使用示例:
288
+
289
+ ```javascript
290
+ import { marked } from "marked";
291
+ import mathMarked from "@webc.site/math-marked";
292
+
293
+ marked.use(mathMarked());
294
+
295
+ const html = marked.parse("行内公式: $E = mc^2$ 和 块级公式: \n$$\n\\frac{a}{b}\n$$");
296
+ console.log(html);
297
+ ```
298
+
299
+ ### 3.3 remark
300
+
301
+ 安装:
151
302
 
152
- 编译器从输入的 Markdown 文本中提取 TeX 公式,执行词法分析和语法分析,生成对应的语义化 MathML 标记。
303
+ ```bash
304
+ npm install @webc.site/math-remark
305
+ ```
306
+
307
+ 使用示例:
153
308
 
154
- ```mermaid
155
- graph TD
156
- Input[输入 Markdown] --> Scanner[扫描器: 定位定界符]
157
- Scanner -- 普通文本 --> Buffer[输出缓冲区]
158
- Scanner -- TeX 公式 --> Lexer[词法分析: 生成 Token]
159
- Lexer --> Parser[语法分析: 生成 AST]
160
- Parser --> Codegen[代码生成: 映射 MathML 标签]
161
- Codegen --> Wrapper[语义包装]
162
- Wrapper --> MathML[MathML 输出]
163
- Buffer --> Output[最终 HTML]
164
- MathML --> Output
309
+ ```javascript
310
+ import { unified } from "unified";
311
+ import remarkParse from "remark-parse";
312
+ import remarkMath from "remark-math";
313
+ import mathRemark from "@webc.site/math-remark";
314
+ import remarkHtml from "remark-html";
315
+
316
+ const processor = unified()
317
+ .use(remarkParse)
318
+ .use(remarkMath)
319
+ .use(mathRemark)
320
+ .use(remarkHtml, { sanitize: false });
321
+
322
+ const html = await processor.process("行内公式: $E = mc^2$ 和 块级公式: \n$$\n\\frac{a}{b}\n$$");
323
+ console.log(String(html));
165
324
  ```
166
325
 
167
- ## 4. 技术栈
326
+ ## 4. 设计思路
327
+
328
+ 编译器从输入的 Markdown 文本中提取 TeX 公式,依次通过扫描、词法分析、语法分析,最终生成对应的语义化 MathML 标记。
329
+
330
+ ![](https://fastly.jsdelivr.net/gh/webc-fs/-@GG/MT3SwQ2cp0w8_G8cxZsQ.svg)
331
+
332
+ ## 5. 技术栈
168
333
 
169
334
  - **运行环境**:Bun, Node.js
170
335
  - **语法检查与格式化**:oxlint, oxfmt
171
336
  - **构建工具**:Vite, Rolldown, Lightning CSS
172
337
 
173
- ## 5. 代码结构
338
+ ## 6. 代码结构
174
339
 
175
340
  ```
176
341
  .
@@ -182,16 +347,19 @@ graph TD
182
347
  ├── src/ # 源代码
183
348
  │ ├── const/ # Token、AST 节点、符号和函数常量定义
184
349
  │ ├── lex.js # LaTeX 词法分析器
185
- │ ├── parse.js # LaTeX 语法分析器(生成 AST)
350
+ │ ├── parse.js # LaTeX 语法分析器
186
351
  │ ├── mathml.js # TeX 至 MathML 核心编译器
187
352
  │ └── md.js # Markdown 公式解析入口
188
353
  ├── sh/ # 脚本目录
189
- └── bench/ # 性能基准测试与历史数据
190
- └── test.sh # 代码规范检查与测试运行脚本
354
+ └── test.sh # 代码规范与测试运行脚本
191
355
  ```
192
356
 
193
- ## 6. 历史故事
357
+ ## 7. 历史故事
358
+
359
+ 1998 年,W3C 发布 MathML 1.0 规范,旨在提供万维网数学公式的标准排版方案。由于早期规范复杂,给浏览器排版引擎带来维护负担。
360
+
361
+ 2013 年,Chromium 团队因维护成本与安全漏洞考量,移除了 Blink 引擎中的 MathML 渲染代码。网页公式排版转为依赖第三方 JavaScript 库(如 MathJax、KaTeX)模拟公式布局。这增加了网页资源体积,并消耗客户端 CPU 资源,影响页面加载与渲染速度。
194
362
 
195
- 在万维网联盟(W3C)早期历史中,MathML 曾被提议为 HTML5 标准数学排版规范。但因其实现复杂度高,各浏览器引擎对该规范的支持程度参差不齐。2013 年,Chromium 项目以系统架构和安全隐患为由移除了原有的 MathML 渲染实现。导致网页渲染公式时,必须依赖 MathJax KaTeX 等体积庞大的 JavaScript 排版库在前端进行复杂的样式布局和字符定位计算。
363
+ 为了解决该困境,Igalia、Mozilla 等团队推动了规范的重构,形成聚焦核心、易于实现的 MathML Core 标准,并进行了 Web 平台测试。
196
364
 
197
- 十年后,即 2023 年 1 月,Chrome 109 重新引入了对 MathML Core 标准的原生支持。该标准精简并优化了数学渲染逻辑,使其在现代浏览器引擎中表现更为高效。随着 WebKit (Safari)、Gecko (Firefox) Blink (Chrome/Edge) MathML Core 规范实现全面覆盖,前端不再需要引入重型的 JavaScript 排版引擎。该项目应运而生,在编译期将 LaTeX 直接转换为原生 MathML 标签,去除运行时排版库依赖。
365
+ 2023 年 1 月,Chrome 109 重新支持 MathML Core 标准,Blink、Gecko 和 WebKit 三大主流浏览器引擎实现原生 MathML 渲染支持。本项目在此背景下开发,将 TeX 在构建期或服务端直接编译为原生 MathML 标记,消除客户端排版计算开销。
package/mathml.js CHANGED
@@ -1,2 +1,2 @@
1
- const e={_:5,"^":6,"{":7,"}":8,"(":9,")":10},t=e=>e>47&&e<58,n=e=>(e|32)-97>>>0<26,r=(e,t)=>{for(;e.charCodeAt(t)<=32;)++t;return t};var i=i=>{let a=[],o=i.length,s=0;for(;s<o&&(s=r(i,s),!(s>=o));){let c=i.charCodeAt(s);if(c===92){let e=s++;if(s<o)if(n(i.charCodeAt(s)))for(;n(i.charCodeAt(++s)););else ++s;let t=i.slice(e,s);if(t===`\\text`){let e=r(i,s);if(i.charCodeAt(e)===123){let t=1,n=e+1,r=n;for(;r<o;){let e=i.charCodeAt(r);if(e===123)++t;else if(e===125&&!--t)break;++r}if(!t){a.push(4,`\\text`,7,`{`,2,i.slice(n,r),8,`}`),s=r+1;continue}}}a.push(4,t);continue}if(t(c)||c===46&&t(i.charCodeAt(s+1))){let e=s;if(c===46)s+=2;else{for(;t(i.charCodeAt(++s)););i.charCodeAt(s)===46&&t(i.charCodeAt(s+1))&&(s+=2)}for(;t(i.charCodeAt(s));)++s;a.push(1,i.slice(e,s));continue}if(n(c)){a.push(2,i[s]),++s;continue}let l=i[s];a.push(e[l]??3,l),++s}return a.push(0,``),a};const a=` stretchy="false"`,o=(e,t)=>` lspace="`+e+`px" rspace="`+t+`px"`,s=` mathvariant="normal"`,c=a,l=a+o(0,0),u=o(4,4),d=o(5,5),f={__proto__:null,matrix:1,pmatrix:1,bmatrix:1,vmatrix:1,Vmatrix:1,cases:1,array:1},p={__proto__:null,sin:1,cos:1,tan:1,cot:1,sec:1,csc:1,log:1,lg:1,ln:1,lim:1,exp:1,max:1,min:1,sup:1,inf:1,det:1,gcd:1,arcsin:1,arccos:1,arctan:1,sinh:1,cosh:1,tanh:1,coth:1,deg:1,arg:1},m=[3,`≤`],h=[3,`≥`],g=[3,`≠`,s],_=[3,`→`],v=[3,`←`],y=[3,`…`],b={__proto__:null,alpha:[1,`α`],beta:[1,`β`],gamma:[1,`γ`],theta:[1,`θ`],pi:[1,`π`],infty:[1,`∞`,s],le:m,leq:m,ge:h,geq:h,neq:g,ne:g,cdot:[3,`⋅`],times:[3,`×`],pm:[3,`±`],mp:[3,`∓`,u],div:[3,`÷`],sum:[3,`∑`],int:[3,`∫`],to:_,rightarrow:_,leftarrow:v,gets:v,leftrightarrow:[3,`↔`],Leftarrow:[3,`⇐`],Rightarrow:[3,`⇒`],Leftrightarrow:[3,`⇔`],dots:y,ldots:y,cdots:[3,`⋯`],Delta:[1,`Δ`,s],Gamma:[1,`Γ`,s],Theta:[1,`Θ`,s],Lambda:[1,`Λ`,s],Xi:[1,`Ξ`,s],Pi:[1,`Π`,s],Sigma:[1,`Σ`,s],Upsilon:[1,`Υ`,s],Phi:[1,`Φ`,s],Psi:[1,`Ψ`,s],Omega:[1,`Ω`,s],delta:[1,`δ`],epsilon:[1,`ϵ`],zeta:[1,`ζ`],eta:[1,`η`],iota:[1,`ι`],kappa:[1,`κ`],lambda:[1,`λ`],mu:[1,`μ`],nu:[1,`ν`],xi:[1,`ξ`],rho:[1,`ρ`],sigma:[1,`σ`],tau:[1,`τ`],upsilon:[1,`υ`],phi:[1,`ϕ`],chi:[1,`χ`],psi:[1,`ψ`],omega:[1,`ω`],nabla:[1,`∇`,s],partial:[1,`∂`,s],approx:[3,`≈`,d],sim:[3,`∼`,d],cong:[3,`≅`,d],propto:[3,`∝`,d],equiv:[3,`≡`,d],neg:[1,`¬`],lor:[3,`∨`,u],land:[3,`∧`,u],ni:[3,`∋`,d],perp:[3,`⟂`,d],parallel:[3,`∥`,d],ell:[1,`ℓ`],hbar:[1,`ℏ`],forall:[1,`∀`,s],exists:[1,`∃`,s],in:[3,`∈`],notin:[3,`∉`],subset:[3,`⊂`],supset:[3,`⊃`],subseteq:[3,`⊆`],supseteq:[3,`⊇`],cup:[3,`∪`],cap:[3,`∩`],emptyset:[1,`∅`,s]},x={"\\limits":1,"\\nolimits":2},ee={__proto__:null,boxed:1,cancel:2,sout:3},te={__proto__:null,quad:`16px`,qquad:`32px`},S={"-":[3,`−`],"*":[3,`∗`],"/":[3,`/`,s],"(":[3,`(`,c],")":[3,`)`,c],"[":[3,`[`,c],"]":[3,`]`,c],"|":[3,`|`,l],".":[3,`.`,s]},C={__proto__:null,"\\{":`{`,"\\}":`}`,"<":`⟨`,">":`⟩`},w=e=>[1,e],T=e=>[2,e],E=e=>S[e]??[3,e],D=()=>S[`(`],O=()=>S[`)`],k=(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,C[r]??(r[0]===`\\`?r.slice(1):r)]},A=(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]===3&&(r+=2),t[0]=r}},j=(e,t)=>{let n=t[0];if(e[n]===7){n+=2;let r=``;for(;e[n]!==0&&e[n]!==8;)r+=e[n+1],n+=2;return e[n]===8&&(n+=2),t[0]=n,r}return``},M=(e,t,n,r)=>{let i=[],a=[],o=[];for(;t[0]<e.length;){let s=e[t[0]],c=e[t[0]+1];if(s===0||!n&&s===8)break;if(n&&s===4&&c===`\\end`){let n=t[0];if(t[0]+=2,j(e,t)===r)break;t[0]=n}if(s===3&&c===`&`){t[0]+=2,a.push(o),o=[];continue}if(s===4&&c===`\\\\`){t[0]+=2,A(e,t,1),a.push(o),o=[],i.push(a),a=[];continue}let l=B(e,t);l&&o.push(l)}if((o.length||a.length)&&(a.push(o),i.push(a)),i.length){let e=i[i.length-1];!e[1]&&!e[0][0]&&i.pop()}return i},ne=(e,t,n)=>{if(e[t[0]]===7){t[0]+=2;let r=M(e,t,0,n);return e[t[0]]===8&&(t[0]+=2),[14,n,r]}let r=z(e,t,1);return r?[14,n,[[[r]]]]:null},re=(e,t)=>{if(e[t[0]]===7){let n=j(e,t);if(n===``)return[8,[]];let r=n.split(`\\\\`);if(r.length>1){let e=[];return r.forEach((t,n)=>{n>0&&e.push([15]),t&&e.push([16,t])}),[8,e]}return[16,n]}let n=z(e,t,1);if(n)return[16,n[1]];throw[3,`text`]},N=(e,t,n)=>{if(e[t[0]]===7){let n=j(e,t);return n===`array`&&(A(e,t),e[t[0]]===7?j(e,t):e[t[0]]!==0&&(t[0]+=2)),[14,n,M(e,t,1,n)]}return[1,n]},P=(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=B(e,t);r&&n.push(r)}return e[t[0]]===3&&(t[0]+=2),[11,z(e,t,1),[8,n]]}return[10,z(e,t,1)]},F=(e,t)=>{let n=k(e,t),r=V(e,t);if(e[t[0]]===4&&e[t[0]+1]===`\\right`)return t[0]+=2,[12,[n,...r,k(e,t)].filter(Boolean)];throw[1,n]},I=(e,t)=>[13,z(e,t,1)],L={__proto__:null,"\\":(e,t)=>(e[t[0]]===3&&e[t[0]+1]===`*`&&(t[0]+=2),A(e,t,1),[15]),text:re,frac:(e,t)=>[7,z(e,t,1),z(e,t,1)],overline:I,bar:I,sqrt:P,left:F,phantom:(e,t)=>[19,z(e,t,1)],pmod:(e,t)=>[8,[[17,`8px`],[3,`(`,c],[16,`mod`],[17,`4px`],z(e,t,1),[3,`)`,c]]],begin:N,end:(e,t,n,r)=>{throw[0,r]},right:(e,t,n,r)=>{throw[2,r]}},R={2:w,3:E,9:D,10:O,1:T,7:(e,t,n)=>{let r=[8,V(t,n)];return t[n[0]]===8&&(n[0]+=2),r},4:(e,t,n)=>{let r=e.slice(1),i=L[r];if(i)return i(t,n,e,r);if(f[r])return ne(t,n,r)??w(e);let a=te[r];if(a)return[17,a];let o=ee[r];return o?[18,o,z(t,n,1)]:p[r]?[9,r]:b[r]??w(e)}},z=(e,t,n)=>{let r=t[0],i=e[r];if(i==null)return null;t[0]+=2;let a=e[r+1];return n&&i===1&&a[1]&&(e.splice(t[0],0,1,a.slice(1)),a=a[0]),R[i]?.(a,e,t)??null},B=(e,t)=>{let n=z(e,t);if(!n)return null;let r=0,i=t[0];if(e[i]===4){let n=x[e[i+1]];n&&(r=n,t[0]+=2)}let a=null,o=null,s;for(;(s=e[t[0]])!=null&&!(s!==5&&s!==6);)t[0]+=2,s===5?a=z(e,t,1):o=z(e,t,1);return a?o?[6,n,a,o,r]:[5,n,a,r]:o?[4,n,o,r]:n},V=(e,t)=>{let n=[],r;for(;(r=e[t[0]])!=null&&!(r===0||r===8||r===4&&e[t[0]+1]===`\\right`);){let r=B(e,t);r&&n.push(r)}return n},H={__proto__:null,pmatrix:[`(`,`)`],bmatrix:[`[`,`]`],vmatrix:[`|`,`|`],Vmatrix:[`‖`,`‖`],cases:[`{`,``]},U=`mrow`,W={1:` style="display:inline-block;border:1px solid;padding:2px 3px"`,2:` style="display:inline-block;background:linear-gradient(to top right,transparent 47%,currentColor 47%,currentColor 53%,transparent 53%)"`,3:` style="display:inline-block;background:linear-gradient(transparent 47%,currentColor 47%,currentColor 53%,transparent 53%)"`},G={__proto__:null,lim:1,max:1,min:1,sup:1,inf:1},K={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`},q=e=>e.replace(/[&<>"]/g,e=>K[e]),J=(e,t,n)=>`<`+e+(n??``)+`>`+t+`</`+e+`>`,Y=(e,t,n)=>J(e,q(t),n),X=(e,t,n,r)=>J(e,Z(t)+Z(n)+(r?Z(r):``)),Z=e=>{if(!e)return J(U,``);let[t,n]=e;return t===8?n[1]?J(U,n.map($).join(``)):Z(n[0]):t===9?J(U,$(e)):$(e)},Q=(e,t,n,r)=>t===1||t!==2&&(e[1]===`∑`||e[0]===9&&G[e[1]])?n:r,ie={1:e=>Y(`mi`,e[1],e[2]),2:e=>Y(`mn`,e[1]),3:e=>Y(`mo`,e[1],e[2]),9:e=>Y(`mi`,e[1])+`<mo>⁡</mo>`,8:e=>e[1].map($).join(``),7:e=>X(`mfrac`,e[1],e[2]),4:e=>X(Q(e[1],e[3],`mover`,`msup`),e[1],e[2]),5:e=>X(Q(e[1],e[3],`munder`,`msub`),e[1],e[2]),6:e=>X(Q(e[1],e[4],`munderover`,`msubsup`),e[1],e[2],e[3]),16:e=>Y(`mtext`,e[1].replace(/ /g,`\xA0`)),17:e=>`<mspace width="`+e[1]+`"></mspace>`,10:e=>J(`msqrt`,Z(e[1])),11:e=>X(`mroot`,e[1],e[2]),12:e=>J(U,e[1].map($).join(``)),13:e=>X(`mover`,e[1],[3,`¯`]),18:e=>{let t=W[e[1]];return t?`<mrow`+t+`>`+Z(e[2])+`</mrow>`:Z(e[2])},19:e=>J(`mphantom`,Z(e[1])),14:e=>{let t=J(`mtable`,e[2].map(e=>J(`mtr`,e.map(e=>{let t=e.map($).join(``);return J(`mtd`,e[1]?J(U,t):t)}).join(``))).join(``)),n=H[e[1]];if(n){let[e,r]=n;return J(U,(e?Y(`mo`,e):``)+t+(r?Y(`mo`,r):``))}return t},15:()=>`<mspace linebreak="newline"></mspace>`},$=e=>e?ie[e[0]](e):``;var ae=(e,t)=>{let n=e.includes(`
1
+ const e={_:5,"^":6,"{":7,"}":8,"(":9,")":10},t=e=>e>47&&e<58,n=e=>(e|32)-97>>>0<26,r=(e,t)=>{for(;e.charCodeAt(t)<=32;)++t;return t};var i=i=>{let a=[],o=i.length,s=0;for(;s<o&&(s=r(i,s),!(s>=o));){let c=i.charCodeAt(s);if(c===92){let e=s++;if(s<o)if(n(i.charCodeAt(s)))for(;n(i.charCodeAt(++s)););else++s;let t=i.slice(e,s);if(t===`\\text`){let e=r(i,s);if(i.charCodeAt(e)===123){let t=1,n=e+1,r=n;for(;r<o;){let e=i.charCodeAt(r);if(e===123)++t;else if(e===125&&!--t)break;++r}if(!t){a.push(4,`\\text`,7,`{`,2,i.slice(n,r),8,`}`),s=r+1;continue}}}a.push(4,t);continue}if(t(c)||c===46&&t(i.charCodeAt(s+1))){let e=s;if(c===46)s+=2;else{for(;t(i.charCodeAt(++s)););i.charCodeAt(s)===46&&t(i.charCodeAt(s+1))&&(s+=2)}for(;t(i.charCodeAt(s));)++s;a.push(1,i.slice(e,s));continue}if(n(c)){a.push(2,i[s]),++s;continue}let l=i[s];a.push(e[l]??3,l),++s}return a.push(0,``),a};const a=` stretchy="false"`,o=(e,t)=>` lspace="`+e+`px" rspace="`+t+`px"`,s=` mathvariant="normal"`,c=a,l=a+o(0,0),u=o(4,4),d=o(5,5),f={__proto__:null,matrix:1,pmatrix:1,bmatrix:1,vmatrix:1,Vmatrix:1,cases:1,array:1},p={__proto__:null,sin:1,cos:1,tan:1,cot:1,sec:1,csc:1,log:1,lg:1,ln:1,lim:1,exp:1,max:1,min:1,sup:1,inf:1,det:1,gcd:1,arcsin:1,arccos:1,arctan:1,sinh:1,cosh:1,tanh:1,coth:1,deg:1,arg:1},m=[3,`≤`],h=[3,`≥`],g=[3,`≠`,s],_=[3,`→`],v=[3,`←`],y=[3,`…`],b={__proto__:null,alpha:[1,`α`],beta:[1,`β`],gamma:[1,`γ`],theta:[1,`θ`],pi:[1,`π`],infty:[1,`∞`,s],le:m,leq:m,ge:h,geq:h,neq:g,ne:g,cdot:[3,`⋅`],times:[3,`×`],pm:[3,`±`],mp:[3,`∓`,u],div:[3,`÷`],sum:[3,`∑`],int:[3,`∫`],to:_,rightarrow:_,leftarrow:v,gets:v,leftrightarrow:[3,`↔`],Leftarrow:[3,`⇐`],Rightarrow:[3,`⇒`],Leftrightarrow:[3,`⇔`],dots:y,ldots:y,cdots:[3,`⋯`],Delta:[1,`Δ`,s],Gamma:[1,`Γ`,s],Theta:[1,`Θ`,s],Lambda:[1,`Λ`,s],Xi:[1,`Ξ`,s],Pi:[1,`Π`,s],Sigma:[1,`Σ`,s],Upsilon:[1,`Υ`,s],Phi:[1,`Φ`,s],Psi:[1,`Ψ`,s],Omega:[1,`Ω`,s],delta:[1,`δ`],epsilon:[1,`ϵ`],zeta:[1,`ζ`],eta:[1,`η`],iota:[1,`ι`],kappa:[1,`κ`],lambda:[1,`λ`],mu:[1,`μ`],nu:[1,`ν`],xi:[1,`ξ`],rho:[1,`ρ`],sigma:[1,`σ`],tau:[1,`τ`],upsilon:[1,`υ`],phi:[1,`ϕ`],chi:[1,`χ`],psi:[1,`ψ`],omega:[1,`ω`],nabla:[1,`∇`,s],partial:[1,`∂`,s],approx:[3,`≈`,d],sim:[3,`∼`,d],cong:[3,`≅`,d],propto:[3,`∝`,d],equiv:[3,`≡`,d],neg:[1,`¬`],lor:[3,`∨`,u],land:[3,`∧`,u],ni:[3,`∋`,d],perp:[3,`⟂`,d],parallel:[3,`∥`,d],ell:[1,`ℓ`],hbar:[1,`ℏ`],forall:[1,`∀`,s],exists:[1,`∃`,s],in:[3,`∈`],notin:[3,`∉`],subset:[3,`⊂`],supset:[3,`⊃`],subseteq:[3,`⊆`],supseteq:[3,`⊇`],cup:[3,`∪`],cap:[3,`∩`],emptyset:[1,`∅`,s]},x={"\\limits":1,"\\nolimits":2},ee={__proto__:null,boxed:1,cancel:2,sout:3},te={__proto__:null,quad:`16px`,qquad:`32px`},S={"-":[3,`−`],"*":[3,`∗`],"/":[3,`/`,s],"(":[3,`(`,c],")":[3,`)`,c],"[":[3,`[`,c],"]":[3,`]`,c],"|":[3,`|`,l],".":[3,`.`,s]},C={__proto__:null,"\\{":`{`,"\\}":`}`,"<":`⟨`,">":`⟩`},w=e=>[1,e],T=e=>[2,e],E=e=>S[e]??[3,e],D=()=>S[`(`],O=()=>S[`)`],k=(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,C[r]??(r[0]===`\\`?r.slice(1):r)]},A=(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]===3&&(r+=2),t[0]=r}},j=(e,t)=>{let n=t[0];if(e[n]===7){n+=2;let r=``;for(;e[n]!==0&&e[n]!==8;)r+=e[n+1],n+=2;return e[n]===8&&(n+=2),t[0]=n,r}return``},M=(e,t,n,r)=>{let i=[],a=[],o=[];for(;t[0]<e.length;){let s=e[t[0]],c=e[t[0]+1];if(s===0||!n&&s===8)break;if(n&&s===4&&c===`\\end`){let n=t[0];if(t[0]+=2,j(e,t)===r)break;t[0]=n}if(s===3&&c===`&`){t[0]+=2,a.push(o),o=[];continue}if(s===4&&c===`\\\\`){t[0]+=2,A(e,t,1),a.push(o),o=[],i.push(a),a=[];continue}let l=B(e,t);l&&o.push(l)}if((o.length||a.length)&&(a.push(o),i.push(a)),i.length){let e=i[i.length-1];!e[1]&&!e[0][0]&&i.pop()}return i},ne=(e,t,n)=>{if(e[t[0]]===7){t[0]+=2;let r=M(e,t,0,n);return e[t[0]]===8&&(t[0]+=2),[14,n,r]}let r=z(e,t,1);return r?[14,n,[[[r]]]]:null},re=(e,t)=>{if(e[t[0]]===7){let n=j(e,t);if(n===``)return[8,[]];let r=n.split(`\\\\`);if(r.length>1){let e=[];return r.forEach((t,n)=>{n>0&&e.push([15]),t&&e.push([16,t])}),[8,e]}return[16,n]}let n=z(e,t,1);if(n)return[16,n[1]];throw[3,`text`]},N=(e,t,n)=>{if(e[t[0]]===7){let n=j(e,t);return n===`array`&&(A(e,t),e[t[0]]===7?j(e,t):e[t[0]]!==0&&(t[0]+=2)),[14,n,M(e,t,1,n)]}return[1,n]},P=(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=B(e,t);r&&n.push(r)}return e[t[0]]===3&&(t[0]+=2),[11,z(e,t,1),[8,n]]}return[10,z(e,t,1)]},F=(e,t)=>{let n=k(e,t),r=V(e,t);if(e[t[0]]===4&&e[t[0]+1]===`\\right`)return t[0]+=2,[12,[n,...r,k(e,t)].filter(Boolean)];throw[1,n]},I=(e,t)=>[13,z(e,t,1)],L={__proto__:null,"\\":(e,t)=>(e[t[0]]===3&&e[t[0]+1]===`*`&&(t[0]+=2),A(e,t,1),[15]),text:re,frac:(e,t)=>[7,z(e,t,1),z(e,t,1)],overline:I,bar:I,sqrt:P,left:F,phantom:(e,t)=>[19,z(e,t,1)],pmod:(e,t)=>[8,[[17,`8px`],[3,`(`,c],[16,`mod`],[17,`4px`],z(e,t,1),[3,`)`,c]]],begin:N,end:(e,t,n,r)=>{throw[0,r]},right:(e,t,n,r)=>{throw[2,r]}},R={2:w,3:E,9:D,10:O,1:T,7:(e,t,n)=>{let r=[8,V(t,n)];return t[n[0]]===8&&(n[0]+=2),r},4:(e,t,n)=>{let r=e.slice(1),i=L[r];if(i)return i(t,n,e,r);if(f[r])return ne(t,n,r)??w(e);let a=te[r];if(a)return[17,a];let o=ee[r];return o?[18,o,z(t,n,1)]:p[r]?[9,r]:b[r]??w(e)}},z=(e,t,n)=>{let r=t[0],i=e[r];if(i==null)return null;t[0]+=2;let a=e[r+1];return n&&i===1&&a[1]&&(e.splice(t[0],0,1,a.slice(1)),a=a[0]),R[i]?.(a,e,t)??null},B=(e,t)=>{let n=z(e,t);if(!n)return null;let r=0,i=t[0];if(e[i]===4){let n=x[e[i+1]];n&&(r=n,t[0]+=2)}let a=null,o=null,s;for(;(s=e[t[0]])!=null&&!(s!==5&&s!==6);)t[0]+=2,s===5?a=z(e,t,1):o=z(e,t,1);return a?o?[6,n,a,o,r]:[5,n,a,r]:o?[4,n,o,r]:n},V=(e,t)=>{let n=[],r;for(;(r=e[t[0]])!=null&&!(r===0||r===8||r===4&&e[t[0]+1]===`\\right`);){let r=B(e,t);r&&n.push(r)}return n},H={__proto__:null,pmatrix:[`(`,`)`],bmatrix:[`[`,`]`],vmatrix:[`|`,`|`],Vmatrix:[`‖`,`‖`],cases:[`{`,``]},U=`mrow`,W={1:` style="display:inline-block;border:1px solid;padding:2px 3px"`,2:` style="display:inline-block;background:linear-gradient(to top right,transparent 47%,currentColor 47%,currentColor 53%,transparent 53%)"`,3:` style="display:inline-block;background:linear-gradient(transparent 47%,currentColor 47%,currentColor 53%,transparent 53%)"`},G={__proto__:null,lim:1,max:1,min:1,sup:1,inf:1},K={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`},q=e=>e.replace(/[&<>"]/g,e=>K[e]),J=(e,t,n)=>`<`+e+(n??``)+`>`+t+`</`+e+`>`,Y=(e,t,n)=>J(e,q(t),n),X=(e,t,n,r)=>J(e,Z(t)+Z(n)+(r?Z(r):``)),Z=e=>{if(!e)return J(U,``);let[t,n]=e;return t===8?n[1]?J(U,n.map($).join(``)):Z(n[0]):t===9?J(U,$(e)):$(e)},Q=(e,t,n,r)=>t===1||t!==2&&(e[1]===`∑`||e[0]===9&&G[e[1]])?n:r,ie={1:e=>Y(`mi`,e[1],e[2]),2:e=>Y(`mn`,e[1]),3:e=>Y(`mo`,e[1],e[2]),9:e=>Y(`mi`,e[1])+`<mo>⁡</mo>`,8:e=>e[1].map($).join(``),7:e=>X(`mfrac`,e[1],e[2]),4:e=>X(Q(e[1],e[3],`mover`,`msup`),e[1],e[2]),5:e=>X(Q(e[1],e[3],`munder`,`msub`),e[1],e[2]),6:e=>X(Q(e[1],e[4],`munderover`,`msubsup`),e[1],e[2],e[3]),16:e=>Y(`mtext`,e[1].replace(/ /g,`\xA0`)),17:e=>`<mspace width="`+e[1]+`"></mspace>`,10:e=>J(`msqrt`,Z(e[1])),11:e=>X(`mroot`,e[1],e[2]),12:e=>J(U,e[1].map($).join(``)),13:e=>X(`mover`,e[1],[3,`¯`]),18:e=>{let t=W[e[1]];return t?`<mrow`+t+`>`+Z(e[2])+`</mrow>`:Z(e[2])},19:e=>J(`mphantom`,Z(e[1])),14:e=>{let t=J(`mtable`,e[2].map(e=>J(`mtr`,e.map(e=>{let t=e.map($).join(``);return J(`mtd`,e[1]?J(U,t):t)}).join(``))).join(``)),n=H[e[1]];if(n){let[e,r]=n;return J(U,(e?Y(`mo`,e):``)+t+(r?Y(`mo`,r):``))}return t},15:()=>`<mspace linebreak="newline"></mspace>`},$=e=>e?ie[e[0]](e):``;var ae=(e,t)=>{let n=e.includes(`
2
2
  `)||e.includes(`\r`)?e.replace(/[\r\n]+/g,` `):e;return`<math xmlns="http://www.w3.org/1998/Math/MathML"`+(t?` display="block"`:``)+`><semantics><mrow>`+V(i(n),[0]).map($).join(``)+`</mrow><annotation encoding="application/x-tex">`+q(n)+`</annotation></semantics></math>`};export{ae 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/ENV.js","../src/const/FUNC.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_SUP,\n TOK_LBRACE,\n TOK_RBRACE,\n TOK_LPAREN,\n TOK_RPAREN,\n} from \"./const/TOK.js\";\n\nconst CHAR_DOT = 46,\n CHAR_TOK = {\n _: TOK_SUB,\n \"^\": TOK_SUP,\n \"{\": TOK_LBRACE,\n \"}\": TOK_RBRACE,\n \"(\": TOK_LPAREN,\n \")\": TOK_RPAREN,\n },\n isDigit = (c) => c > 47 && c < 58,\n isAlpha = (c) => ((c | 32) - 97) >>> 0 < 26,\n skip = (str, idx) => {\n while (str.charCodeAt(idx) <= 32) ++idx;\n return idx;\n };\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 const code = str.charCodeAt(idx);\n if (code === 92) {\n const start = idx++;\n if (idx < len) {\n if (isAlpha(str.charCodeAt(idx))) {\n while (isAlpha(str.charCodeAt(++idx)));\n } else {\n ++idx;\n }\n }\n const cmd = str.slice(start, idx);\n if (cmd === \"\\\\text\") {\n const pos = skip(str, idx);\n if (str.charCodeAt(pos) === 123) {\n let braces = 1,\n t_start = pos + 1,\n t_idx = t_start;\n while (t_idx < len) {\n const cc = str.charCodeAt(t_idx);\n if (cc === 123) ++braces;\n else if (cc === 125 && !--braces) break;\n ++t_idx;\n }\n if (!braces) {\n res.push(\n TOK_CMD,\n \"\\\\text\",\n TOK_LBRACE,\n \"{\",\n TOK_IDENT,\n str.slice(t_start, t_idx),\n TOK_RBRACE,\n \"}\",\n );\n idx = t_idx + 1;\n continue;\n }\n }\n }\n res.push(TOK_CMD, cmd);\n continue;\n }\n if (isDigit(code) || (code === CHAR_DOT && isDigit(str.charCodeAt(idx + 1)))) {\n const start = idx;\n if (code === CHAR_DOT) {\n idx += 2;\n } else {\n while (isDigit(str.charCodeAt(++idx)));\n if (str.charCodeAt(idx) === CHAR_DOT && isDigit(str.charCodeAt(idx + 1))) {\n idx += 2;\n }\n }\n while (isDigit(str.charCodeAt(idx))) ++idx;\n res.push(TOK_NUM, str.slice(start, idx));\n continue;\n }\n if (isAlpha(code)) {\n res.push(TOK_IDENT, str[idx]);\n ++idx;\n continue;\n }\n const char = str[idx];\n res.push(CHAR_TOK[char] ?? TOK_OP, char);\n ++idx;\n }\n res.push(TOK_EOF, \"\");\n return res;\n};\n","const FALSE = ' stretchy=\"false\"',\n space = (l, r) => ' lspace=\"' + l + 'px\" rspace=\"' + r + 'px\"';\n\nexport const ATTR_NORMAL = ' mathvariant=\"normal\"',\n ATTR_STRETCHY_FALSE = FALSE,\n ATTR_BAR = FALSE + space(0, 0),\n ATTR_BIN = space(4, 4),\n ATTR_REL = space(5, 5);\n","export const ENV_NAMES = {\n __proto__: null,\n matrix: 1,\n pmatrix: 1,\n bmatrix: 1,\n vmatrix: 1,\n Vmatrix: 1,\n cases: 1,\n array: 1,\n};\n","export const FUNC_NAMES = {\n __proto__: null,\n sin: 1,\n cos: 1,\n tan: 1,\n cot: 1,\n sec: 1,\n csc: 1,\n log: 1,\n lg: 1,\n ln: 1,\n lim: 1,\n exp: 1,\n max: 1,\n min: 1,\n sup: 1,\n inf: 1,\n det: 1,\n gcd: 1,\n arcsin: 1,\n arccos: 1,\n arctan: 1,\n sinh: 1,\n cosh: 1,\n tanh: 1,\n coth: 1,\n deg: 1,\n arg: 1,\n};\n","import { TYPE_IDENT, TYPE_OP } from \"./TYPE.js\";\nimport { ATTR_NORMAL, ATTR_BIN, ATTR_REL } from \"./ATTR.js\";\n\nconst LE = [TYPE_OP, \"≤\"],\n GE = [TYPE_OP, \"≥\"],\n NE = [TYPE_OP, \"≠\", ATTR_NORMAL],\n RIGHT_ARROW = [TYPE_OP, \"→\"],\n LEFT_ARROW = [TYPE_OP, \"←\"],\n L_DOTS = [TYPE_OP, \"…\"];\n\nexport const SYM_MAP = {\n __proto__: null,\n alpha: [TYPE_IDENT, \"α\"],\n beta: [TYPE_IDENT, \"β\"],\n gamma: [TYPE_IDENT, \"γ\"],\n theta: [TYPE_IDENT, \"θ\"],\n pi: [TYPE_IDENT, \"π\"],\n infty: [TYPE_IDENT, \"∞\", ATTR_NORMAL],\n le: LE,\n leq: LE,\n ge: GE,\n geq: GE,\n neq: NE,\n ne: NE,\n cdot: [TYPE_OP, \"⋅\"],\n times: [TYPE_OP, \"×\"],\n pm: [TYPE_OP, \"±\"],\n mp: [TYPE_OP, \"∓\", ATTR_BIN],\n div: [TYPE_OP, \"÷\"],\n sum: [TYPE_OP, \"∑\"],\n int: [TYPE_OP, \"∫\"],\n to: RIGHT_ARROW,\n rightarrow: RIGHT_ARROW,\n leftarrow: LEFT_ARROW,\n gets: LEFT_ARROW,\n leftrightarrow: [TYPE_OP, \"↔\"],\n Leftarrow: [TYPE_OP, \"⇐\"],\n Rightarrow: [TYPE_OP, \"⇒\"],\n Leftrightarrow: [TYPE_OP, \"⇔\"],\n dots: L_DOTS,\n ldots: L_DOTS,\n cdots: [TYPE_OP, \"⋯\"],\n Delta: [TYPE_IDENT, \"Δ\", ATTR_NORMAL],\n Gamma: [TYPE_IDENT, \"Γ\", ATTR_NORMAL],\n Theta: [TYPE_IDENT, \"Θ\", ATTR_NORMAL],\n Lambda: [TYPE_IDENT, \"Λ\", ATTR_NORMAL],\n Xi: [TYPE_IDENT, \"Ξ\", ATTR_NORMAL],\n Pi: [TYPE_IDENT, \"Π\", ATTR_NORMAL],\n Sigma: [TYPE_IDENT, \"Σ\", ATTR_NORMAL],\n Upsilon: [TYPE_IDENT, \"Υ\", ATTR_NORMAL],\n Phi: [TYPE_IDENT, \"Φ\", ATTR_NORMAL],\n Psi: [TYPE_IDENT, \"Ψ\", ATTR_NORMAL],\n Omega: [TYPE_IDENT, \"Ω\", ATTR_NORMAL],\n delta: [TYPE_IDENT, \"δ\"],\n epsilon: [TYPE_IDENT, \"ϵ\"],\n zeta: [TYPE_IDENT, \"ζ\"],\n eta: [TYPE_IDENT, \"η\"],\n iota: [TYPE_IDENT, \"ι\"],\n kappa: [TYPE_IDENT, \"κ\"],\n lambda: [TYPE_IDENT, \"λ\"],\n mu: [TYPE_IDENT, \"μ\"],\n nu: [TYPE_IDENT, \"ν\"],\n xi: [TYPE_IDENT, \"ξ\"],\n rho: [TYPE_IDENT, \"ρ\"],\n sigma: [TYPE_IDENT, \"σ\"],\n tau: [TYPE_IDENT, \"τ\"],\n upsilon: [TYPE_IDENT, \"υ\"],\n phi: [TYPE_IDENT, \"ϕ\"],\n chi: [TYPE_IDENT, \"χ\"],\n psi: [TYPE_IDENT, \"ψ\"],\n omega: [TYPE_IDENT, \"ω\"],\n nabla: [TYPE_IDENT, \"∇\", ATTR_NORMAL],\n partial: [TYPE_IDENT, \"∂\", ATTR_NORMAL],\n approx: [TYPE_OP, \"≈\", ATTR_REL],\n sim: [TYPE_OP, \"∼\", ATTR_REL],\n cong: [TYPE_OP, \"≅\", ATTR_REL],\n propto: [TYPE_OP, \"∝\", ATTR_REL],\n equiv: [TYPE_OP, \"≡\", ATTR_REL],\n neg: [TYPE_IDENT, \"¬\"],\n lor: [TYPE_OP, \"∨\", ATTR_BIN],\n land: [TYPE_OP, \"∧\", ATTR_BIN],\n ni: [TYPE_OP, \"∋\", ATTR_REL],\n perp: [TYPE_OP, \"⟂\", ATTR_REL],\n parallel: [TYPE_OP, \"∥\", ATTR_REL],\n ell: [TYPE_IDENT, \"ℓ\"],\n hbar: [TYPE_IDENT, \"ℏ\"],\n forall: [TYPE_IDENT, \"∀\", ATTR_NORMAL],\n exists: [TYPE_IDENT, \"∃\", ATTR_NORMAL],\n in: [TYPE_OP, \"∈\"],\n notin: [TYPE_OP, \"∉\"],\n subset: [TYPE_OP, \"⊂\"],\n supset: [TYPE_OP, \"⊃\"],\n subseteq: [TYPE_OP, \"⊆\"],\n supseteq: [TYPE_OP, \"⊇\"],\n cup: [TYPE_OP, \"∪\"],\n cap: [TYPE_OP, \"∩\"],\n emptyset: [TYPE_IDENT, \"∅\", ATTR_NORMAL],\n};\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 {\n ERR_EXTRA_END,\n ERR_MISSING_RIGHT,\n ERR_EXTRA_RIGHT,\n ERR_MISSING_BRACE,\n} from \"./const/ERR.js\";\nimport { ATTR_NORMAL, ATTR_STRETCHY_FALSE, ATTR_BAR } from \"./const/ATTR.js\";\nimport { ENV_NAMES } from \"./const/ENV.js\";\nimport { FUNC_NAMES } from \"./const/FUNC.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 TOK_LPAREN,\n TOK_RPAREN,\n} from \"./const/TOK.js\";\nimport { NOTATION_BOX, NOTATION_CANCEL, NOTATION_SOUT } from \"./const/NOTATION.js\";\nimport { LIMITS_DEFAULT, LIMITS_DISPLAY, LIMITS_INLINE } from \"./const/LIMITS.js\";\n\nconst LIMITS_MAP = {\n \"\\\\limits\": LIMITS_DISPLAY,\n \"\\\\nolimits\": LIMITS_INLINE,\n },\n MENCLOSE_MAP = {\n __proto__: null,\n boxed: NOTATION_BOX,\n cancel: NOTATION_CANCEL,\n sout: NOTATION_SOUT,\n },\n SPACE_MAP = {\n __proto__: null,\n quad: \"16px\",\n qquad: \"32px\",\n },\n CHAR_MAP = {\n \"-\": [TYPE_OP, \"−\"],\n \"*\": [TYPE_OP, \"∗\"],\n \"/\": [TYPE_OP, \"/\", ATTR_NORMAL],\n \"(\": [TYPE_OP, \"(\", ATTR_STRETCHY_FALSE],\n \")\": [TYPE_OP, \")\", ATTR_STRETCHY_FALSE],\n \"[\": [TYPE_OP, \"[\", ATTR_STRETCHY_FALSE],\n \"]\": [TYPE_OP, \"]\", ATTR_STRETCHY_FALSE],\n \"|\": [TYPE_OP, \"|\", ATTR_BAR],\n \".\": [TYPE_OP, \".\", ATTR_NORMAL],\n },\n DELIM_MAP = {\n __proto__: null,\n \"\\\\{\": \"{\",\n \"\\\\}\": \"}\",\n \"<\": \"⟨\",\n \">\": \"⟩\",\n },\n ident = (val) => [TYPE_IDENT, val],\n num = (val) => [TYPE_NUM, val],\n op = (val) => CHAR_MAP[val] ?? [TYPE_OP, val],\n lparen = () => CHAR_MAP[\"(\"],\n rparen = () => CHAR_MAP[\")\"],\n delim = (tokens, ref) => {\n const idx = ref[0],\n type = tokens[idx];\n if (type == 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, DELIM_MAP[val] ?? (val[0] === \"\\\\\" ? val.slice(1) : val)];\n },\n opt = (tokens, ref, check_num) => {\n let idx = ref[0];\n if (tokens[idx] === TOK_OP && tokens[idx + 1] === \"[\") {\n if (!check_num || tokens[idx + 2] === TOK_NUM) {\n idx += 2;\n while (tokens[idx] !== TOK_EOF && (tokens[idx] !== TOK_OP || tokens[idx + 1] !== \"]\")) {\n idx += 2;\n }\n if (tokens[idx] === TOK_OP) idx += 2;\n ref[0] = idx;\n }\n }\n },\n brace = (tokens, ref) => {\n let idx = ref[0];\n if (tokens[idx] === TOK_LBRACE) {\n idx += 2;\n let str = \"\";\n while (tokens[idx] !== TOK_EOF && tokens[idx] !== TOK_RBRACE) {\n str += tokens[idx + 1];\n idx += 2;\n }\n if (tokens[idx] === TOK_RBRACE) idx += 2;\n ref[0] = idx;\n return str;\n }\n return \"\";\n },\n rows = (tokens, ref, end_check, env) => {\n const rows = [];\n let row = [],\n cell = [];\n while (ref[0] < tokens.length) {\n const type = tokens[ref[0]],\n val = tokens[ref[0] + 1];\n if (type === TOK_EOF) break;\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 (type === TOK_OP && val === \"&\") {\n ref[0] += 2;\n row.push(cell);\n cell = [];\n continue;\n }\n if (type === TOK_CMD && val === \"\\\\\\\\\") {\n ref[0] += 2;\n opt(tokens, ref, 1);\n row.push(cell);\n cell = [];\n rows.push(row);\n row = [];\n continue;\n }\n const node = grab(tokens, ref);\n if (node) cell.push(node);\n }\n if (cell.length || row.length) {\n row.push(cell);\n rows.push(row);\n }\n if (rows.length) {\n const last = rows[rows.length - 1];\n if (!last[1] && !last[0][0]) {\n rows.pop();\n }\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 if (tokens[ref[0]] === TOK_RBRACE) 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 const nodes = [];\n parts.forEach((p, i) => {\n if (i > 0) nodes.push([TYPE_LINEBREAK]);\n if (p) nodes.push([TYPE_TEXT, p]);\n });\n return [TYPE_GROUP, nodes];\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) {\n brace(tokens, ref);\n } else if (tokens[ref[0]] !== TOK_EOF) {\n ref[0] += 2;\n }\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 (\n tokens[ref[0]] !== TOK_EOF &&\n (tokens[ref[0]] !== TOK_OP || tokens[ref[0] + 1] !== \"]\")\n ) {\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 over = (tokens, ref) => [TYPE_OVERLINE, read(tokens, ref, 1)],\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 [TYPE_OP, \"(\", ATTR_STRETCHY_FALSE],\n [TYPE_TEXT, \"mod\"],\n [TYPE_SPACE, \"4px\"],\n read(tokens, ref, 1),\n [TYPE_OP, \")\", ATTR_STRETCHY_FALSE],\n ],\n ],\n CMD_MAP = {\n __proto__: null,\n \"\\\\\": (tokens, ref) => {\n if (tokens[ref[0]] === TOK_OP && tokens[ref[0] + 1] === \"*\") {\n ref[0] += 2;\n }\n opt(tokens, ref, 1);\n return [TYPE_LINEBREAK];\n },\n text: txt,\n frac,\n overline: over,\n bar: over,\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]: ident,\n [TOK_OP]: op,\n [TOK_LPAREN]: lparen,\n [TOK_RPAREN]: rparen,\n [TOK_NUM]: num,\n [TOK_LBRACE]: (val, tokens, ref) => {\n const res = [TYPE_GROUP, parse(tokens, ref)];\n if (tokens[ref[0]] === TOK_RBRACE) 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 (ENV_NAMES[name]) return matrix(tokens, ref, name) ?? ident(val);\n const space = SPACE_MAP[name];\n if (space) return [TYPE_SPACE, space];\n const notation = MENCLOSE_MAP[name];\n return notation\n ? [TYPE_MENCLOSE, notation, read(tokens, ref, 1)]\n : FUNC_NAMES[name]\n ? [TYPE_FUNC, name]\n : (SYM_MAP[name] ?? ident(val));\n },\n },\n read = (tokens, ref, split_num) => {\n const idx = ref[0],\n type = tokens[idx];\n if (type == null) return null;\n ref[0] += 2;\n let val = tokens[idx + 1];\n if (split_num && type === TOK_NUM && val[1]) {\n tokens.splice(ref[0], 0, TOK_NUM, val.slice(1));\n val = val[0];\n }\n return TOK_MAP[type]?.(val, tokens, ref) ?? null;\n },\n grab = (tokens, ref) => {\n const base = read(tokens, ref);\n if (!base) return null;\n let limits = LIMITS_DEFAULT;\n const idx = ref[0];\n if (tokens[idx] === TOK_CMD) {\n const lim = LIMITS_MAP[tokens[idx + 1]];\n if (lim) {\n limits = lim;\n ref[0] += 2;\n }\n }\n let sub = null,\n sup = null,\n type;\n while ((type = tokens[ref[0]]) != null) {\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]]) != null) {\n if (type === TOK_EOF || 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\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 { NOTATION_BOX, NOTATION_CANCEL, NOTATION_SOUT } from \"./const/NOTATION.js\";\nimport { LIMITS_DISPLAY, LIMITS_INLINE } from \"./const/LIMITS.js\";\nimport lex from \"./lex.js\";\nimport parse from \"./parse.js\";\n\nconst ENV_DELIMS = {\n __proto__: null,\n pmatrix: [\"(\", \")\"],\n bmatrix: [\"[\", \"]\"],\n vmatrix: [\"|\", \"|\"],\n Vmatrix: [\"‖\", \"‖\"],\n cases: [\"{\", \"\"],\n },\n MROW = \"mrow\",\n NOTATION_STYLE_MAP = {\n [NOTATION_BOX]: STYLE_BOX,\n [NOTATION_CANCEL]: STYLE_CANCEL,\n [NOTATION_SOUT]: STYLE_SOUT,\n },\n LIMITS_FUNCS = {\n __proto__: null,\n lim: 1,\n max: 1,\n min: 1,\n sup: 1,\n inf: 1,\n },\n ESC_MAP = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n },\n esc = (str) => str.replace(/[&<>\"]/g, (m) => ESC_MAP[m]),\n wrap = (tag_name, inner, attr) =>\n \"<\" + tag_name + (attr ?? \"\") + \">\" + inner + \"</\" + tag_name + \">\",\n tag = (name, val, attr) => wrap(name, esc(val), attr),\n nest = (name, n1, n2, n3) => wrap(name, row(n1) + row(n2) + (n3 ? row(n3) : \"\")),\n row = (n) => {\n if (!n) return wrap(MROW, \"\");\n const [type, val] = n;\n return type === TYPE_GROUP\n ? val[1]\n ? wrap(MROW, val.map(show).join(\"\"))\n : row(val[0])\n : type === TYPE_FUNC\n ? wrap(MROW, show(n))\n : show(n);\n },\n script = (n1, limits, display, inline) =>\n limits === LIMITS_DISPLAY ||\n (limits !== LIMITS_INLINE && (n1[1] === \"∑\" || (n1[0] === TYPE_FUNC && LIMITS_FUNCS[n1[1]])))\n ? display\n : inline,\n SHOW_MAP = {\n [TYPE_IDENT]: (n) => tag(\"mi\", n[1], n[2]),\n [TYPE_NUM]: (n) => tag(\"mn\", n[1]),\n [TYPE_OP]: (n) => tag(\"mo\", n[1], n[2]),\n [TYPE_FUNC]: (n) => tag(\"mi\", n[1]) + \"<mo>\\u2061</mo>\",\n [TYPE_GROUP]: (n) => n[1].map(show).join(\"\"),\n [TYPE_FRAC]: (n) => nest(\"mfrac\", n[1], n[2]),\n [TYPE_SUP]: (n) => nest(script(n[1], n[3], \"mover\", \"msup\"), n[1], n[2]),\n [TYPE_SUB]: (n) => nest(script(n[1], n[3], \"munder\", \"msub\"), n[1], n[2]),\n [TYPE_SUPSUB]: (n) => nest(script(n[1], n[4], \"munderover\", \"msubsup\"), n[1], n[2], n[3]),\n [TYPE_TEXT]: (n) => tag(\"mtext\", n[1].replace(/ /g, \"\\u00A0\")),\n [TYPE_SPACE]: (n) => '<mspace width=\"' + n[1] + '\"></mspace>',\n [TYPE_MSQRT]: (n) => wrap(\"msqrt\", row(n[1])),\n [TYPE_MROOT]: (n) => nest(\"mroot\", n[1], n[2]),\n [TYPE_LEFT_RIGHT]: (n) => wrap(MROW, n[1].map(show).join(\"\")),\n [TYPE_OVERLINE]: (n) => nest(\"mover\", n[1], [TYPE_OP, \"¯\"]),\n [TYPE_MENCLOSE]: (n) => {\n const style = NOTATION_STYLE_MAP[n[1]];\n return style ? \"<mrow\" + style + \">\" + row(n[2]) + \"</mrow>\" : row(n[2]);\n },\n [TYPE_MPHANTOM]: (n) => wrap(\"mphantom\", row(n[1])),\n [TYPE_MATRIX]: (n) => {\n const inner = n[2]\n .map((r) =>\n wrap(\n \"mtr\",\n r\n .map((c) => {\n const html = c.map(show).join(\"\");\n return wrap(\"mtd\", c[1] ? wrap(MROW, html) : html);\n })\n .join(\"\"),\n ),\n )\n .join(\"\"),\n tbl = wrap(\"mtable\", inner),\n del = ENV_DELIMS[n[1]];\n if (del) {\n const [d0, d1] = del;\n return wrap(MROW, (d0 ? tag(\"mo\", d0) : \"\") + tbl + (d1 ? tag(\"mo\", d1) : \"\"));\n }\n return tbl;\n },\n [TYPE_LINEBREAK]: () => '<mspace linebreak=\"newline\"></mspace>',\n },\n show = (n) => (n ? SHOW_MAP[n[0]](n) : \"\");\n\nexport default (tex, block) => {\n const clean = tex.includes(\"\\n\") || tex.includes(\"\\r\") ? tex.replace(/[\\r\\n]+/g, \" \") : tex;\n return (\n '<math xmlns=\"http://www.w3.org/1998/Math/MathML\"' +\n (block ? ' display=\"block\"' : \"\") +\n \"><semantics><mrow>\" +\n parse(lex(clean), [0]).map(show).join(\"\") +\n '</mrow><annotation encoding=\"application/x-tex\">' +\n esc(clean) +\n \"</annotation></semantics></math>\"\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/ENV.js","../src/const/FUNC.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_SUP,\n TOK_LBRACE,\n TOK_RBRACE,\n TOK_LPAREN,\n TOK_RPAREN,\n} from \"./const/TOK.js\";\n\nconst CHAR_DOT = 46,\n CHAR_TOK = {\n _: TOK_SUB,\n \"^\": TOK_SUP,\n \"{\": TOK_LBRACE,\n \"}\": TOK_RBRACE,\n \"(\": TOK_LPAREN,\n \")\": TOK_RPAREN,\n },\n isDigit = (c) => c > 47 && c < 58,\n isAlpha = (c) => ((c | 32) - 97) >>> 0 < 26,\n skip = (str, idx) => {\n while (str.charCodeAt(idx) <= 32) ++idx;\n return idx;\n };\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 const code = str.charCodeAt(idx);\n if (code === 92) {\n const start = idx++;\n if (idx < len) {\n if (isAlpha(str.charCodeAt(idx))) {\n while (isAlpha(str.charCodeAt(++idx)));\n } else {\n ++idx;\n }\n }\n const cmd = str.slice(start, idx);\n if (cmd === \"\\\\text\") {\n const pos = skip(str, idx);\n if (str.charCodeAt(pos) === 123) {\n let braces = 1,\n t_start = pos + 1,\n t_idx = t_start;\n while (t_idx < len) {\n const cc = str.charCodeAt(t_idx);\n if (cc === 123) ++braces;\n else if (cc === 125 && !--braces) break;\n ++t_idx;\n }\n if (!braces) {\n res.push(\n TOK_CMD,\n \"\\\\text\",\n TOK_LBRACE,\n \"{\",\n TOK_IDENT,\n str.slice(t_start, t_idx),\n TOK_RBRACE,\n \"}\",\n );\n idx = t_idx + 1;\n continue;\n }\n }\n }\n res.push(TOK_CMD, cmd);\n continue;\n }\n if (isDigit(code) || (code === CHAR_DOT && isDigit(str.charCodeAt(idx + 1)))) {\n const start = idx;\n if (code === CHAR_DOT) {\n idx += 2;\n } else {\n while (isDigit(str.charCodeAt(++idx)));\n if (str.charCodeAt(idx) === CHAR_DOT && isDigit(str.charCodeAt(idx + 1))) {\n idx += 2;\n }\n }\n while (isDigit(str.charCodeAt(idx))) ++idx;\n res.push(TOK_NUM, str.slice(start, idx));\n continue;\n }\n if (isAlpha(code)) {\n res.push(TOK_IDENT, str[idx]);\n ++idx;\n continue;\n }\n const char = str[idx];\n res.push(CHAR_TOK[char] ?? TOK_OP, char);\n ++idx;\n }\n res.push(TOK_EOF, \"\");\n return res;\n};\n","const FALSE = ' stretchy=\"false\"',\n space = (l, r) => ' lspace=\"' + l + 'px\" rspace=\"' + r + 'px\"';\n\nexport const ATTR_NORMAL = ' mathvariant=\"normal\"',\n ATTR_STRETCHY_FALSE = FALSE,\n ATTR_BAR = FALSE + space(0, 0),\n ATTR_BIN = space(4, 4),\n ATTR_REL = space(5, 5);\n","export const ENV_NAMES = {\n __proto__: null,\n matrix: 1,\n pmatrix: 1,\n bmatrix: 1,\n vmatrix: 1,\n Vmatrix: 1,\n cases: 1,\n array: 1,\n};\n","export const FUNC_NAMES = {\n __proto__: null,\n sin: 1,\n cos: 1,\n tan: 1,\n cot: 1,\n sec: 1,\n csc: 1,\n log: 1,\n lg: 1,\n ln: 1,\n lim: 1,\n exp: 1,\n max: 1,\n min: 1,\n sup: 1,\n inf: 1,\n det: 1,\n gcd: 1,\n arcsin: 1,\n arccos: 1,\n arctan: 1,\n sinh: 1,\n cosh: 1,\n tanh: 1,\n coth: 1,\n deg: 1,\n arg: 1,\n};\n","import { TYPE_IDENT, TYPE_OP } from \"./TYPE.js\";\nimport { ATTR_NORMAL, ATTR_BIN, ATTR_REL } from \"./ATTR.js\";\n\nconst LE = [TYPE_OP, \"≤\"],\n GE = [TYPE_OP, \"≥\"],\n NE = [TYPE_OP, \"≠\", ATTR_NORMAL],\n RIGHT_ARROW = [TYPE_OP, \"→\"],\n LEFT_ARROW = [TYPE_OP, \"←\"],\n L_DOTS = [TYPE_OP, \"…\"];\n\nexport const SYM_MAP = {\n __proto__: null,\n alpha: [TYPE_IDENT, \"α\"],\n beta: [TYPE_IDENT, \"β\"],\n gamma: [TYPE_IDENT, \"γ\"],\n theta: [TYPE_IDENT, \"θ\"],\n pi: [TYPE_IDENT, \"π\"],\n infty: [TYPE_IDENT, \"∞\", ATTR_NORMAL],\n le: LE,\n leq: LE,\n ge: GE,\n geq: GE,\n neq: NE,\n ne: NE,\n cdot: [TYPE_OP, \"⋅\"],\n times: [TYPE_OP, \"×\"],\n pm: [TYPE_OP, \"±\"],\n mp: [TYPE_OP, \"∓\", ATTR_BIN],\n div: [TYPE_OP, \"÷\"],\n sum: [TYPE_OP, \"∑\"],\n int: [TYPE_OP, \"∫\"],\n to: RIGHT_ARROW,\n rightarrow: RIGHT_ARROW,\n leftarrow: LEFT_ARROW,\n gets: LEFT_ARROW,\n leftrightarrow: [TYPE_OP, \"↔\"],\n Leftarrow: [TYPE_OP, \"⇐\"],\n Rightarrow: [TYPE_OP, \"⇒\"],\n Leftrightarrow: [TYPE_OP, \"⇔\"],\n dots: L_DOTS,\n ldots: L_DOTS,\n cdots: [TYPE_OP, \"⋯\"],\n Delta: [TYPE_IDENT, \"Δ\", ATTR_NORMAL],\n Gamma: [TYPE_IDENT, \"Γ\", ATTR_NORMAL],\n Theta: [TYPE_IDENT, \"Θ\", ATTR_NORMAL],\n Lambda: [TYPE_IDENT, \"Λ\", ATTR_NORMAL],\n Xi: [TYPE_IDENT, \"Ξ\", ATTR_NORMAL],\n Pi: [TYPE_IDENT, \"Π\", ATTR_NORMAL],\n Sigma: [TYPE_IDENT, \"Σ\", ATTR_NORMAL],\n Upsilon: [TYPE_IDENT, \"Υ\", ATTR_NORMAL],\n Phi: [TYPE_IDENT, \"Φ\", ATTR_NORMAL],\n Psi: [TYPE_IDENT, \"Ψ\", ATTR_NORMAL],\n Omega: [TYPE_IDENT, \"Ω\", ATTR_NORMAL],\n delta: [TYPE_IDENT, \"δ\"],\n epsilon: [TYPE_IDENT, \"ϵ\"],\n zeta: [TYPE_IDENT, \"ζ\"],\n eta: [TYPE_IDENT, \"η\"],\n iota: [TYPE_IDENT, \"ι\"],\n kappa: [TYPE_IDENT, \"κ\"],\n lambda: [TYPE_IDENT, \"λ\"],\n mu: [TYPE_IDENT, \"μ\"],\n nu: [TYPE_IDENT, \"ν\"],\n xi: [TYPE_IDENT, \"ξ\"],\n rho: [TYPE_IDENT, \"ρ\"],\n sigma: [TYPE_IDENT, \"σ\"],\n tau: [TYPE_IDENT, \"τ\"],\n upsilon: [TYPE_IDENT, \"υ\"],\n phi: [TYPE_IDENT, \"ϕ\"],\n chi: [TYPE_IDENT, \"χ\"],\n psi: [TYPE_IDENT, \"ψ\"],\n omega: [TYPE_IDENT, \"ω\"],\n nabla: [TYPE_IDENT, \"∇\", ATTR_NORMAL],\n partial: [TYPE_IDENT, \"∂\", ATTR_NORMAL],\n approx: [TYPE_OP, \"≈\", ATTR_REL],\n sim: [TYPE_OP, \"∼\", ATTR_REL],\n cong: [TYPE_OP, \"≅\", ATTR_REL],\n propto: [TYPE_OP, \"∝\", ATTR_REL],\n equiv: [TYPE_OP, \"≡\", ATTR_REL],\n neg: [TYPE_IDENT, \"¬\"],\n lor: [TYPE_OP, \"∨\", ATTR_BIN],\n land: [TYPE_OP, \"∧\", ATTR_BIN],\n ni: [TYPE_OP, \"∋\", ATTR_REL],\n perp: [TYPE_OP, \"⟂\", ATTR_REL],\n parallel: [TYPE_OP, \"∥\", ATTR_REL],\n ell: [TYPE_IDENT, \"ℓ\"],\n hbar: [TYPE_IDENT, \"ℏ\"],\n forall: [TYPE_IDENT, \"∀\", ATTR_NORMAL],\n exists: [TYPE_IDENT, \"∃\", ATTR_NORMAL],\n in: [TYPE_OP, \"∈\"],\n notin: [TYPE_OP, \"∉\"],\n subset: [TYPE_OP, \"⊂\"],\n supset: [TYPE_OP, \"⊃\"],\n subseteq: [TYPE_OP, \"⊆\"],\n supseteq: [TYPE_OP, \"⊇\"],\n cup: [TYPE_OP, \"∪\"],\n cap: [TYPE_OP, \"∩\"],\n emptyset: [TYPE_IDENT, \"∅\", ATTR_NORMAL],\n};\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 {\n ERR_EXTRA_END,\n ERR_MISSING_RIGHT,\n ERR_EXTRA_RIGHT,\n ERR_MISSING_BRACE,\n} from \"./const/ERR.js\";\nimport { ATTR_NORMAL, ATTR_STRETCHY_FALSE, ATTR_BAR } from \"./const/ATTR.js\";\nimport { ENV_NAMES } from \"./const/ENV.js\";\nimport { FUNC_NAMES } from \"./const/FUNC.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 TOK_LPAREN,\n TOK_RPAREN,\n} from \"./const/TOK.js\";\nimport { NOTATION_BOX, NOTATION_CANCEL, NOTATION_SOUT } from \"./const/NOTATION.js\";\nimport { LIMITS_DEFAULT, LIMITS_DISPLAY, LIMITS_INLINE } from \"./const/LIMITS.js\";\n\nconst LIMITS_MAP = {\n \"\\\\limits\": LIMITS_DISPLAY,\n \"\\\\nolimits\": LIMITS_INLINE,\n },\n MENCLOSE_MAP = {\n __proto__: null,\n boxed: NOTATION_BOX,\n cancel: NOTATION_CANCEL,\n sout: NOTATION_SOUT,\n },\n SPACE_MAP = {\n __proto__: null,\n quad: \"16px\",\n qquad: \"32px\",\n },\n CHAR_MAP = {\n \"-\": [TYPE_OP, \"−\"],\n \"*\": [TYPE_OP, \"∗\"],\n \"/\": [TYPE_OP, \"/\", ATTR_NORMAL],\n \"(\": [TYPE_OP, \"(\", ATTR_STRETCHY_FALSE],\n \")\": [TYPE_OP, \")\", ATTR_STRETCHY_FALSE],\n \"[\": [TYPE_OP, \"[\", ATTR_STRETCHY_FALSE],\n \"]\": [TYPE_OP, \"]\", ATTR_STRETCHY_FALSE],\n \"|\": [TYPE_OP, \"|\", ATTR_BAR],\n \".\": [TYPE_OP, \".\", ATTR_NORMAL],\n },\n DELIM_MAP = {\n __proto__: null,\n \"\\\\{\": \"{\",\n \"\\\\}\": \"}\",\n \"<\": \"⟨\",\n \">\": \"⟩\",\n },\n ident = (val) => [TYPE_IDENT, val],\n num = (val) => [TYPE_NUM, val],\n op = (val) => CHAR_MAP[val] ?? [TYPE_OP, val],\n lparen = () => CHAR_MAP[\"(\"],\n rparen = () => CHAR_MAP[\")\"],\n delim = (tokens, ref) => {\n const idx = ref[0],\n type = tokens[idx];\n if (type == 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, DELIM_MAP[val] ?? (val[0] === \"\\\\\" ? val.slice(1) : val)];\n },\n opt = (tokens, ref, check_num) => {\n let idx = ref[0];\n if (tokens[idx] === TOK_OP && tokens[idx + 1] === \"[\") {\n if (!check_num || tokens[idx + 2] === TOK_NUM) {\n idx += 2;\n while (tokens[idx] !== TOK_EOF && (tokens[idx] !== TOK_OP || tokens[idx + 1] !== \"]\")) {\n idx += 2;\n }\n if (tokens[idx] === TOK_OP) idx += 2;\n ref[0] = idx;\n }\n }\n },\n brace = (tokens, ref) => {\n let idx = ref[0];\n if (tokens[idx] === TOK_LBRACE) {\n idx += 2;\n let str = \"\";\n while (tokens[idx] !== TOK_EOF && tokens[idx] !== TOK_RBRACE) {\n str += tokens[idx + 1];\n idx += 2;\n }\n if (tokens[idx] === TOK_RBRACE) idx += 2;\n ref[0] = idx;\n return str;\n }\n return \"\";\n },\n rows = (tokens, ref, end_check, env) => {\n const rows = [];\n let row = [],\n cell = [];\n while (ref[0] < tokens.length) {\n const type = tokens[ref[0]],\n val = tokens[ref[0] + 1];\n if (type === TOK_EOF) break;\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 (type === TOK_OP && val === \"&\") {\n ref[0] += 2;\n row.push(cell);\n cell = [];\n continue;\n }\n if (type === TOK_CMD && val === \"\\\\\\\\\") {\n ref[0] += 2;\n opt(tokens, ref, 1);\n row.push(cell);\n cell = [];\n rows.push(row);\n row = [];\n continue;\n }\n const node = grab(tokens, ref);\n if (node) cell.push(node);\n }\n if (cell.length || row.length) {\n row.push(cell);\n rows.push(row);\n }\n if (rows.length) {\n const last = rows[rows.length - 1];\n if (!last[1] && !last[0][0]) {\n rows.pop();\n }\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 if (tokens[ref[0]] === TOK_RBRACE) 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 const nodes = [];\n parts.forEach((p, i) => {\n if (i > 0) nodes.push([TYPE_LINEBREAK]);\n if (p) nodes.push([TYPE_TEXT, p]);\n });\n return [TYPE_GROUP, nodes];\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) {\n brace(tokens, ref);\n } else if (tokens[ref[0]] !== TOK_EOF) {\n ref[0] += 2;\n }\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 (\n tokens[ref[0]] !== TOK_EOF &&\n (tokens[ref[0]] !== TOK_OP || tokens[ref[0] + 1] !== \"]\")\n ) {\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 over = (tokens, ref) => [TYPE_OVERLINE, read(tokens, ref, 1)],\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 [TYPE_OP, \"(\", ATTR_STRETCHY_FALSE],\n [TYPE_TEXT, \"mod\"],\n [TYPE_SPACE, \"4px\"],\n read(tokens, ref, 1),\n [TYPE_OP, \")\", ATTR_STRETCHY_FALSE],\n ],\n ],\n CMD_MAP = {\n __proto__: null,\n \"\\\\\": (tokens, ref) => {\n if (tokens[ref[0]] === TOK_OP && tokens[ref[0] + 1] === \"*\") {\n ref[0] += 2;\n }\n opt(tokens, ref, 1);\n return [TYPE_LINEBREAK];\n },\n text: txt,\n frac,\n overline: over,\n bar: over,\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]: ident,\n [TOK_OP]: op,\n [TOK_LPAREN]: lparen,\n [TOK_RPAREN]: rparen,\n [TOK_NUM]: num,\n [TOK_LBRACE]: (val, tokens, ref) => {\n const res = [TYPE_GROUP, parse(tokens, ref)];\n if (tokens[ref[0]] === TOK_RBRACE) 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 (ENV_NAMES[name]) return matrix(tokens, ref, name) ?? ident(val);\n const space = SPACE_MAP[name];\n if (space) return [TYPE_SPACE, space];\n const notation = MENCLOSE_MAP[name];\n return notation\n ? [TYPE_MENCLOSE, notation, read(tokens, ref, 1)]\n : FUNC_NAMES[name]\n ? [TYPE_FUNC, name]\n : (SYM_MAP[name] ?? ident(val));\n },\n },\n read = (tokens, ref, split_num) => {\n const idx = ref[0],\n type = tokens[idx];\n if (type == null) return null;\n ref[0] += 2;\n let val = tokens[idx + 1];\n if (split_num && type === TOK_NUM && val[1]) {\n tokens.splice(ref[0], 0, TOK_NUM, val.slice(1));\n val = val[0];\n }\n return TOK_MAP[type]?.(val, tokens, ref) ?? null;\n },\n grab = (tokens, ref) => {\n const base = read(tokens, ref);\n if (!base) return null;\n let limits = LIMITS_DEFAULT;\n const idx = ref[0];\n if (tokens[idx] === TOK_CMD) {\n const lim = LIMITS_MAP[tokens[idx + 1]];\n if (lim) {\n limits = lim;\n ref[0] += 2;\n }\n }\n let sub = null,\n sup = null,\n type;\n while ((type = tokens[ref[0]]) != null) {\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]]) != null) {\n if (type === TOK_EOF || 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\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 { NOTATION_BOX, NOTATION_CANCEL, NOTATION_SOUT } from \"./const/NOTATION.js\";\nimport { LIMITS_DISPLAY, LIMITS_INLINE } from \"./const/LIMITS.js\";\nimport lex from \"./lex.js\";\nimport parse from \"./parse.js\";\n\nconst ENV_DELIMS = {\n __proto__: null,\n pmatrix: [\"(\", \")\"],\n bmatrix: [\"[\", \"]\"],\n vmatrix: [\"|\", \"|\"],\n Vmatrix: [\"‖\", \"‖\"],\n cases: [\"{\", \"\"],\n },\n MROW = \"mrow\",\n NOTATION_STYLE_MAP = {\n [NOTATION_BOX]: STYLE_BOX,\n [NOTATION_CANCEL]: STYLE_CANCEL,\n [NOTATION_SOUT]: STYLE_SOUT,\n },\n LIMITS_FUNCS = {\n __proto__: null,\n lim: 1,\n max: 1,\n min: 1,\n sup: 1,\n inf: 1,\n },\n ESC_MAP = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n },\n esc = (str) => str.replace(/[&<>\"]/g, (m) => ESC_MAP[m]),\n wrap = (tag_name, inner, attr) =>\n \"<\" + tag_name + (attr ?? \"\") + \">\" + inner + \"</\" + tag_name + \">\",\n tag = (name, val, attr) => wrap(name, esc(val), attr),\n nest = (name, n1, n2, n3) => wrap(name, row(n1) + row(n2) + (n3 ? row(n3) : \"\")),\n row = (n) => {\n if (!n) return wrap(MROW, \"\");\n const [type, val] = n;\n return type === TYPE_GROUP\n ? val[1]\n ? wrap(MROW, val.map(show).join(\"\"))\n : row(val[0])\n : type === TYPE_FUNC\n ? wrap(MROW, show(n))\n : show(n);\n },\n script = (n1, limits, display, inline) =>\n limits === LIMITS_DISPLAY ||\n (limits !== LIMITS_INLINE && (n1[1] === \"∑\" || (n1[0] === TYPE_FUNC && LIMITS_FUNCS[n1[1]])))\n ? display\n : inline,\n SHOW_MAP = {\n [TYPE_IDENT]: (n) => tag(\"mi\", n[1], n[2]),\n [TYPE_NUM]: (n) => tag(\"mn\", n[1]),\n [TYPE_OP]: (n) => tag(\"mo\", n[1], n[2]),\n [TYPE_FUNC]: (n) => tag(\"mi\", n[1]) + \"<mo>\\u2061</mo>\",\n [TYPE_GROUP]: (n) => n[1].map(show).join(\"\"),\n [TYPE_FRAC]: (n) => nest(\"mfrac\", n[1], n[2]),\n [TYPE_SUP]: (n) => nest(script(n[1], n[3], \"mover\", \"msup\"), n[1], n[2]),\n [TYPE_SUB]: (n) => nest(script(n[1], n[3], \"munder\", \"msub\"), n[1], n[2]),\n [TYPE_SUPSUB]: (n) => nest(script(n[1], n[4], \"munderover\", \"msubsup\"), n[1], n[2], n[3]),\n [TYPE_TEXT]: (n) => tag(\"mtext\", n[1].replace(/ /g, \"\\u00A0\")),\n [TYPE_SPACE]: (n) => '<mspace width=\"' + n[1] + '\"></mspace>',\n [TYPE_MSQRT]: (n) => wrap(\"msqrt\", row(n[1])),\n [TYPE_MROOT]: (n) => nest(\"mroot\", n[1], n[2]),\n [TYPE_LEFT_RIGHT]: (n) => wrap(MROW, n[1].map(show).join(\"\")),\n [TYPE_OVERLINE]: (n) => nest(\"mover\", n[1], [TYPE_OP, \"¯\"]),\n [TYPE_MENCLOSE]: (n) => {\n const style = NOTATION_STYLE_MAP[n[1]];\n return style ? \"<mrow\" + style + \">\" + row(n[2]) + \"</mrow>\" : row(n[2]);\n },\n [TYPE_MPHANTOM]: (n) => wrap(\"mphantom\", row(n[1])),\n [TYPE_MATRIX]: (n) => {\n const inner = n[2]\n .map((r) =>\n wrap(\n \"mtr\",\n r\n .map((c) => {\n const html = c.map(show).join(\"\");\n return wrap(\"mtd\", c[1] ? wrap(MROW, html) : html);\n })\n .join(\"\"),\n ),\n )\n .join(\"\"),\n tbl = wrap(\"mtable\", inner),\n del = ENV_DELIMS[n[1]];\n if (del) {\n const [d0, d1] = del;\n return wrap(MROW, (d0 ? tag(\"mo\", d0) : \"\") + tbl + (d1 ? tag(\"mo\", d1) : \"\"));\n }\n return tbl;\n },\n [TYPE_LINEBREAK]: () => '<mspace linebreak=\"newline\"></mspace>',\n },\n show = (n) => (n ? SHOW_MAP[n[0]](n) : \"\");\n\nexport default (tex, block) => {\n const clean = tex.includes(\"\\n\") || tex.includes(\"\\r\") ? tex.replace(/[\\r\\n]+/g, \" \") : tex;\n return (\n '<math xmlns=\"http://www.w3.org/1998/Math/MathML\"' +\n (block ? ' display=\"block\"' : \"\") +\n \"><semantics><mrow>\" +\n parse(lex(clean), [0]).map(show).join(\"\") +\n '</mrow><annotation encoding=\"application/x-tex\">' +\n esc(clean) +\n \"</annotation></semantics></math>\"\n );\n};\n"],"mappings":"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"}
package/md.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"md.js","names":[],"sources":["../src/md.js"],"sourcesContent":["const DOLLAR = \"$\",\n STATE_TEXT = 0,\n STATE_INLINE_CODE = 1,\n STATE_BLOCK_CODE = 2,\n STATE_INLINE_MATH = 3,\n STATE_BLOCK_MATH = 4,\n REG_MD = /[\\$`\\\\]/g,\n REG_MATH = /[\\$\\\\]/g,\n find = (str, start, is_md) => {\n const reg = is_md ? REG_MD : REG_MATH;\n reg.lastIndex = start;\n return reg.exec(str)?.index ?? -1;\n };\n\nexport default (md, compile) => {\n const len = md.length;\n let res = \"\",\n idx = 0,\n state = STATE_TEXT,\n start = 0;\n\n while (idx < len) {\n if (state === STATE_TEXT) {\n const pos = find(md, idx, 1);\n if (pos === -1) {\n res += md.slice(idx);\n break;\n }\n res += md.slice(idx, pos);\n const char = md[pos];\n if (char === \"\\\\\") {\n const esc = md[pos + 1] === DOLLAR;\n res += esc ? DOLLAR : \"\\\\\";\n idx = pos + (esc ? 2 : 1);\n } else if (char === DOLLAR) {\n const block = md[pos + 1] === DOLLAR;\n state = block ? STATE_BLOCK_MATH : STATE_INLINE_MATH;\n idx = pos + (block ? 2 : 1);\n start = idx;\n } else {\n const block = md[pos + 1] === \"`\" && md[pos + 2] === \"`\";\n res += block ? \"```\" : \"`\";\n state = block ? STATE_BLOCK_CODE : STATE_INLINE_CODE;\n idx = pos + (block ? 3 : 1);\n }\n } else if (state >= STATE_INLINE_MATH) {\n const pos = find(md, idx, 0);\n if (pos === -1) {\n idx = len;\n break;\n }\n if (md[pos] === \"\\\\\") {\n idx = pos + (md[pos + 1] ? 2 : 1);\n } else {\n const inline = state === STATE_INLINE_MATH;\n if (inline || md[pos + 1] === DOLLAR) {\n const content = md.slice(start, pos),\n delim = inline ? DOLLAR : DOLLAR + DOLLAR;\n try {\n res += compile(content, !inline);\n } catch {\n res += delim + content + delim;\n }\n state = STATE_TEXT;\n idx = pos + (inline ? 1 : 2);\n } else {\n idx = pos + 1;\n }\n }\n } else {\n const inline = state === STATE_INLINE_CODE,\n delim = inline ? \"`\" : \"```\",\n pos = md.indexOf(delim, idx);\n if (pos === -1) {\n res += md.slice(idx);\n break;\n }\n res += md.slice(idx, pos) + delim;\n state = STATE_TEXT;\n idx = pos + delim.length;\n }\n }\n\n return state >= STATE_INLINE_MATH\n ? res + (state === STATE_INLINE_MATH ? DOLLAR : DOLLAR + DOLLAR) + md.slice(start)\n : res;\n};\n"],"mappings":"AAAA,MAME,EAAS,WACT,EAAW,UACX,GAAQ,EAAK,EAAO,IAAU,CAC5B,IAAM,EAAM,EAAQ,EAAS,EAE7B,MADA,GAAI,UAAY,EACT,EAAI,KAAK,CAAG,CAAC,EAAE,OAAS,EACjC,EAEF,IAAA,GAAgB,EAAI,IAAY,CAC9B,IAAM,EAAM,EAAG,OACX,EAAM,GACR,EAAM,EACN,EAAQ,EACR,EAAQ,EAEV,KAAO,EAAM,GACX,GAAI,IAAU,EAAY,CACxB,IAAM,EAAM,EAAK,EAAI,EAAK,CAAC,EAC3B,GAAI,IAAQ,GAAI,CACd,GAAO,EAAG,MAAM,CAAG,EACnB,KACF,CACA,GAAO,EAAG,MAAM,EAAK,CAAG,EACxB,IAAM,EAAO,EAAG,GAChB,GAAI,IAAS,KAAM,CACjB,IAAM,EAAM,EAAG,EAAM,KAAO,IAC5B,GAAO,EAAM,IAAS,KACtB,EAAM,GAAO,EAAM,EAAI,EACzB,MAAO,GAAI,IAAS,IAAQ,CAC1B,IAAM,EAAQ,EAAG,EAAM,KAAO,IAC9B,EAAQ,EAAQ,EAAmB,EACnC,EAAM,GAAO,EAAQ,EAAI,GACzB,EAAQ,CACV,KAAO,CACL,IAAM,EAAQ,EAAG,EAAM,KAAO,KAAO,EAAG,EAAM,KAAO,IACrD,GAAO,EAAQ,MAAQ,IACvB,EAAQ,EAAQ,EAAmB,EACnC,EAAM,GAAO,EAAQ,EAAI,EAC3B,CACF,MAAO,GAAI,GAAS,EAAmB,CACrC,IAAM,EAAM,EAAK,EAAI,EAAK,CAAC,EAC3B,GAAI,IAAQ,GAAI,CACd,EAAM,EACN,KACF,CACA,GAAI,EAAG,KAAS,KACd,EAAM,GAAO,EAAG,EAAM,GAAK,EAAI,OAC1B,CACL,IAAM,EAAS,IAAU,EACzB,GAAI,GAAU,EAAG,EAAM,KAAO,IAAQ,CACpC,IAAM,EAAU,EAAG,MAAM,EAAO,CAAG,EACjC,EAAQ,EAAS,IAAS,KAC5B,GAAI,CACF,GAAO,EAAQ,EAAS,CAAC,CAAM,CACjC,MAAQ,CACN,GAAO,EAAQ,EAAU,CAC3B,CACA,EAAQ,EACR,EAAM,GAAO,EAAS,EAAI,EAC5B,MACE,EAAM,EAAM,CAEhB,CACF,KAAO,CACL,IACE,EADa,IAAU,EACN,IAAM,MACvB,EAAM,EAAG,QAAQ,EAAO,CAAG,EAC7B,GAAI,IAAQ,GAAI,CACd,GAAO,EAAG,MAAM,CAAG,EACnB,KACF,CACA,GAAO,EAAG,MAAM,EAAK,CAAG,EAAI,EAC5B,EAAQ,EACR,EAAM,EAAM,EAAM,MACpB,CAGF,OAAO,GAAS,EACZ,GAAO,IAAU,EAAoB,IAAS,MAAmB,EAAG,MAAM,CAAK,EAC/E,CACN"}
1
+ {"version":3,"file":"md.js","names":[],"sources":["../src/md.js"],"sourcesContent":["const DOLLAR = \"$\",\n STATE_TEXT = 0,\n STATE_INLINE_CODE = 1,\n STATE_BLOCK_CODE = 2,\n STATE_INLINE_MATH = 3,\n STATE_BLOCK_MATH = 4,\n REG_MD = /[\\$`\\\\]/g,\n REG_MATH = /[\\$\\\\]/g,\n find = (str, start, is_md) => {\n const reg = is_md ? REG_MD : REG_MATH;\n reg.lastIndex = start;\n return reg.exec(str)?.index ?? -1;\n };\n\nexport default (md, compile) => {\n const len = md.length;\n let res = \"\",\n idx = 0,\n state = STATE_TEXT,\n start = 0;\n\n while (idx < len) {\n if (state === STATE_TEXT) {\n const pos = find(md, idx, 1);\n if (pos === -1) {\n res += md.slice(idx);\n break;\n }\n res += md.slice(idx, pos);\n const char = md[pos];\n if (char === \"\\\\\") {\n const esc = md[pos + 1] === DOLLAR;\n res += esc ? DOLLAR : \"\\\\\";\n idx = pos + (esc ? 2 : 1);\n } else if (char === DOLLAR) {\n const block = md[pos + 1] === DOLLAR;\n state = block ? STATE_BLOCK_MATH : STATE_INLINE_MATH;\n idx = pos + (block ? 2 : 1);\n start = idx;\n } else {\n const block = md[pos + 1] === \"`\" && md[pos + 2] === \"`\";\n res += block ? \"```\" : \"`\";\n state = block ? STATE_BLOCK_CODE : STATE_INLINE_CODE;\n idx = pos + (block ? 3 : 1);\n }\n } else if (state >= STATE_INLINE_MATH) {\n const pos = find(md, idx, 0);\n if (pos === -1) {\n idx = len;\n break;\n }\n if (md[pos] === \"\\\\\") {\n idx = pos + (md[pos + 1] ? 2 : 1);\n } else {\n const inline = state === STATE_INLINE_MATH;\n if (inline || md[pos + 1] === DOLLAR) {\n const content = md.slice(start, pos),\n delim = inline ? DOLLAR : DOLLAR + DOLLAR;\n try {\n res += compile(content, !inline);\n } catch {\n res += delim + content + delim;\n }\n state = STATE_TEXT;\n idx = pos + (inline ? 1 : 2);\n } else {\n idx = pos + 1;\n }\n }\n } else {\n const inline = state === STATE_INLINE_CODE,\n delim = inline ? \"`\" : \"```\",\n pos = md.indexOf(delim, idx);\n if (pos === -1) {\n res += md.slice(idx);\n break;\n }\n res += md.slice(idx, pos) + delim;\n state = STATE_TEXT;\n idx = pos + delim.length;\n }\n }\n\n return state >= STATE_INLINE_MATH\n ? res + (state === STATE_INLINE_MATH ? DOLLAR : DOLLAR + DOLLAR) + md.slice(start)\n : res;\n};\n"],"mappings":"AAAA,MAME,EAAS,WACT,EAAW,UACX,GAAQ,EAAK,EAAO,IAAU,CAC5B,IAAM,EAAM,EAAQ,EAAS,EAE7B,MADA,GAAI,UAAY,EACT,EAAI,KAAK,CAAG,CAAC,EAAE,OAAS,EACjC,EAEF,IAAA,GAAgB,EAAI,IAAY,CAC9B,IAAM,EAAM,EAAG,OACX,EAAM,GACR,EAAM,EACN,EAAQ,EACR,EAAQ,EAEV,KAAO,EAAM,GACX,GAAI,IAAU,EAAY,CACxB,IAAM,EAAM,EAAK,EAAI,EAAK,CAAC,EAC3B,GAAI,IAAQ,GAAI,CACd,GAAO,EAAG,MAAM,CAAG,EACnB,KACF,CACA,GAAO,EAAG,MAAM,EAAK,CAAG,EACxB,IAAM,EAAO,EAAG,GAChB,GAAI,IAAS,KAAM,CACjB,IAAM,EAAM,EAAG,EAAM,KAAO,IAC5B,GAAO,EAAM,IAAS,KACtB,EAAM,GAAO,EAAM,EAAI,EACzB,MAAO,GAAI,IAAS,IAAQ,CAC1B,IAAM,EAAQ,EAAG,EAAM,KAAO,IAC9B,EAAQ,EAAQ,EAAmB,EACnC,EAAM,GAAO,EAAQ,EAAI,GACzB,EAAQ,CACV,KAAO,CACL,IAAM,EAAQ,EAAG,EAAM,KAAO,KAAO,EAAG,EAAM,KAAO,IACrD,GAAO,EAAQ,MAAQ,IACvB,EAAQ,EAAQ,EAAmB,EACnC,EAAM,GAAO,EAAQ,EAAI,EAC3B,CACF,MAAO,GAAI,GAAS,EAAmB,CACrC,IAAM,EAAM,EAAK,EAAI,EAAK,CAAC,EAC3B,GAAI,IAAQ,GAAI,CACd,EAAM,EACN,KACF,CACA,GAAI,EAAG,KAAS,KACd,EAAM,GAAO,EAAG,EAAM,GAAK,EAAI,OAC1B,CACL,IAAM,EAAS,IAAU,EACzB,GAAI,GAAU,EAAG,EAAM,KAAO,IAAQ,CACpC,IAAM,EAAU,EAAG,MAAM,EAAO,CAAG,EACjC,EAAQ,EAAS,IAAS,KAC5B,GAAI,CACF,GAAO,EAAQ,EAAS,CAAC,CAAM,CACjC,MAAQ,CACN,GAAO,EAAQ,EAAU,CAC3B,CACA,EAAQ,EACR,EAAM,GAAO,EAAS,EAAI,EAC5B,KACE,GAAM,EAAM,CAEhB,CACF,KAAO,CACL,IACE,EADa,IAAU,EACN,IAAM,MACvB,EAAM,EAAG,QAAQ,EAAO,CAAG,EAC7B,GAAI,IAAQ,GAAI,CACd,GAAO,EAAG,MAAM,CAAG,EACnB,KACF,CACA,GAAO,EAAG,MAAM,EAAK,CAAG,EAAI,EAC5B,EAAQ,EACR,EAAM,EAAM,EAAM,MACpB,CAGF,OAAO,GAAS,EACZ,GAAO,IAAU,EAAoB,IAAS,MAAmB,EAAG,MAAM,CAAK,EAC/E,CACN"}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@webc.site/math","version":"0.1.22","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.23","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-/dist":"^0.1.18"}}