5 个版本 (3 个重大更新)
0.4.0 | 2023 年 12 月 27 日 |
---|---|
0.3.1 | 2023 年 12 月 22 日 |
0.3.0 | 2023 年 12 月 22 日 |
0.2.0 | 2023 年 12 月 15 日 |
0.1.0 | 2023 年 8 月 19 日 |
#184 in 图形 API
105KB
2.5K SLoC
mathemascii - AsciiMath 解析器
这是一个用 Rust 编写的 AsciiMath 解析器。
使用方法
这个 crate 的 API 被设计得尽可能直观。以下是一个示例
let input = "sum_(i=0)^(k * 2) a^k";
// Creates an iterator over the input that yields expressions
let ascii_math = mathemascii::parse(&input);
// renders the expressions into a single `<math>` block with the default renderer
let math_ml = mathemascii::render_mathml(ascii_math);
println!("{math_ml}");
mathemascii
使用 alemat
作为生成 MathMl 输出的底层 crate。
还有一个 API,您可以使用自定义的 alemat::Writer
进行渲染
let input = "sum_(i=0)^(k * 2) a^k";
// Creates an iterator over the input that yields expressions
let ascii_math = mathemascii::parse(&input);
// create a writer, here we use the default writer.
let mut writer = BufMathMlWriter::default();
// renders the expressions into a single `<math>` block and writes it into the buffer of the writer.
let _ = mathemascii::write_mathml(ascii_math, &mut writer);
// get the inner buffer of the writer
let math_ml = writer.into_inner();
println!("{math_ml}");
为了方便起见,mathemascii::write_mathml
函数返回包含作为第二个参数传入的 Writer
可变引用的 Result
。这允许就地初始化 Writer
并对其进行操作
let input = "sum_(i=0)^(k * 2) a^k";
// Creates an iterator over the input that yields expressions
let ascii_math = mathemascii::parse(&input);
// Write the expressions into a single `<math>` block with the given writer
let math_ml = mathemascii::write_mathml(ascii_math, &mut BufMathMlWriter::default())
.map(|w| w.finish()) // finish writing and output the buffer
.unwrap(); // unwrap the result
默认使用的 writer 是来自 alemat 的 BufMathMlWriter
。此 writer 使用 String
作为其缓冲区,写入它是无错误的。因此,它使用 Infallible
,因此总是安全地展开结果。如果您使用自定义的 Writer
实现,您可能需要处理错误情况。
示例
使用方法部分中显示的代码产生以下输出
<math>
<munderover>
<mo>∑</mo>
<mrow>
<mphantom><mo>{</mo></mphantom>
<mi>i</mi><mo>=</mo><mn>0</mn>
<mphantom><mo>}</mo></mphantom></mrow>
<mrow>
<mphantom><mo>{</mo></mphantom>
<mi>k</mi><mo>⋅</mo><mn>2</mn>
<mphantom><mo>}</mo></mphantom>
</mrow>
</munderover>
<msup>
<mi>a</mi>
<mi>k</mi>
</msup>
</math>
在浏览器中产生以下渲染效果
$$\sum_{n = 0}^{k * 2}{a^k}$$
依赖项
~165KB