#editor #node-tree #expression #glyph #framework #draw

nightly rbop

Rust 编写数学表达式编辑器的框架

2 个不稳定版本

0.2.0 2022年6月5日
0.1.0 2021年7月26日

#994 in 数学

MIT 协议

180KB
4K SLoC

rbop

Crates.io

rbop (Rust Binary Operations) 是一个实现直观数学表达式编辑器的框架。

rbop 是 no_std,所以你几乎可以在任何地方使用它。要为特定用例创建编辑器,你需要提供简单的绘图核心数学符号的方法实现。rbop 将使用这些实现来计算二维布局并在你选择的画布上绘制!

试用

rbop 附带一个简单的 ASCII 渲染器,用于示例代码 ascii_calc 中。如果你运行以下命令,将能够运行此示例并获得 rbop 编辑器的自然感觉:cargo build --examples --features examples

文档

目前还没有太多的正式文档。两个示例 ascii_calcwindow_calc 有大量的注释,并且设计成按顺序阅读,以查看 rbop 的实际用法。

实现渲染器

参考 AsciiRenderer 以获得一个很好的示例。你需要实现 Renderer 特性,这将允许 rbop

  • 使用 init 重置并准备你的图形表面
  • 使用 size 确定特定符号绘制到画布上时的大小,以计算布局
  • 使用 draw 在特定位置将符号绘制到画布上

不要覆盖 Renderer 中任何其他方法的默认实现。

节点树

有两种可用的节点类型。

一个 UnstructuredNode 树通过用户输入非常容易构建。水平输入保留为标记流,因此不需要考虑运算符优先级。

1+2*3             Fraction
-----             /      \
  5           1,+,2,*,3   5

一个 StructuredNode 树不包含原始的标记流,树结构完全表达了正确的运算符优先级。

1+2*3             Fraction
-----             /      \
  5             Add       5
               /   \
              1    Mult
                  /    \
                 2      3

可以通过 升级 将非结构化节点树转换为结构化节点树。某些功能,如评估,只能在结构化节点树上执行。

依赖项

~0.6–3.5MB
~69K SLoC