@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 +228 -60
- package/mathml.js +1 -1
- package/mathml.js.map +1 -1
- package/md.js.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
14
|
-
- **
|
|
15
|
-
- **Zero Runtime
|
|
16
|
-
- **Robust Fault Tolerance**:
|
|
17
|
-
- **
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
76
|
+
### 3.1 markdown-it
|
|
55
77
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+

|
|
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
|
-
##
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
211
|
+
本项目将 LaTeX 数学公式编译为浏览器原生支持的 MathML Core 标记。通过编译期转换,无需客户端排版引擎,实现零运行时开销的公式渲染。
|
|
110
212
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
303
|
+
```bash
|
|
304
|
+
npm install @webc.site/math-remark
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
使用示例:
|
|
153
308
|
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
+

|
|
331
|
+
|
|
332
|
+
## 5. 技术栈
|
|
168
333
|
|
|
169
334
|
- **运行环境**:Bun, Node.js
|
|
170
335
|
- **语法检查与格式化**:oxlint, oxfmt
|
|
171
336
|
- **构建工具**:Vite, Rolldown, Lightning CSS
|
|
172
337
|
|
|
173
|
-
##
|
|
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
|
|
350
|
+
│ ├── parse.js # LaTeX 语法分析器
|
|
186
351
|
│ ├── mathml.js # TeX 至 MathML 核心编译器
|
|
187
352
|
│ └── md.js # Markdown 公式解析入口
|
|
188
353
|
├── sh/ # 脚本目录
|
|
189
|
-
|
|
190
|
-
└── test.sh # 代码规范检查与测试运行脚本
|
|
354
|
+
└── test.sh # 代码规范与测试运行脚本
|
|
191
355
|
```
|
|
192
356
|
|
|
193
|
-
##
|
|
357
|
+
## 7. 历史故事
|
|
358
|
+
|
|
359
|
+
1998 年,W3C 发布 MathML 1.0 规范,旨在提供万维网数学公式的标准排版方案。由于早期规范复杂,给浏览器排版引擎带来维护负担。
|
|
360
|
+
|
|
361
|
+
2013 年,Chromium 团队因维护成本与安全漏洞考量,移除了 Blink 引擎中的 MathML 渲染代码。网页公式排版转为依赖第三方 JavaScript 库(如 MathJax、KaTeX)模拟公式布局。这增加了网页资源体积,并消耗客户端 CPU 资源,影响页面加载与渲染速度。
|
|
194
362
|
|
|
195
|
-
|
|
363
|
+
为了解决该困境,Igalia、Mozilla 等团队推动了规范的重构,形成聚焦核心、易于实现的 MathML Core 标准,并进行了 Web 平台测试。
|
|
196
364
|
|
|
197
|
-
|
|
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
|
|
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={"&":`&`,"<":`<`,">":`>`,'"':`"`},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 \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\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 \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\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,
|
|
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.
|
|
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"}}
|