rbop (Rust Binary Operations) is a framework for implementing intuitive mathematical expression editors.
rbop is no_std
, so you can use it pretty much anywhere. To create an editor for your particular
use-case, all you need to do is provide simple method implementations to draw core mathematical
glyphs. rbop will use these to calculate a two-dimensional layout and draw to your chosen canvas!
rbop comes with a simple ASCII renderer, which is used in an example named ascii_calc
. If you
cargo build --examples
, you'll be able to run this example and get a feel for how natural rbop's
editor feels!
Refer to AsciiRenderer
for a pretty good example of this. You'll need to implement the Renderer
trait, which will allow rbop to:
init
size
, to
calculate a layoutdraw
Do not override the default implementations of any other methods in Renderer
.
Though only one Node
enum is used, rbop uses it to provide two different kinds of node trees.
An unstructured node tree is really easy to build through user inputs. Horizontal inputs are left as token streams, so operator precedence does not need to be considered.
1+2*3 Fraction
----- / \
5 1,+,2,*,3 5
A structured node tree contains no raw token streams, and the tree structure fully expresses the correct operator precedence.
1+2*3 Fraction
----- / \
5 Add 5
/ \
1 Mult
/ \
2 3
An unstructured node tree can be converted to a structured node tree by upgrading it. Some functionality, such as evaluation, can only be performed on a structured node tree.