From cfddd24cb98d9fefdfb88460b8be11d983c60343 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Wed, 29 May 2019 10:52:52 -0400 Subject: [PATCH] readme: add some basic description and instructions --- README.md | 87 +++++++++++++++++++++++++++++++++++++++++++++ TODO => TODO.md | 1 + src/platform/sdl2.c | 1 - 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 README.md rename TODO => TODO.md (87%) diff --git a/README.md b/README.md new file mode 100644 index 0000000..6364cc7 --- /dev/null +++ b/README.md @@ -0,0 +1,87 @@ +# Natural display engine with TeX syntax for fx-9860G and fx-CG 50 + +This library is a customizable 2D math rendering tool for calculators. It can be used to render 2D formulae, either from an existing structure or TeX syntax. + +```latex +\frac{x_7}{\left\{\frac{\frac{2}{3}}{27}\right\}^2} +``` + +![Sample on a Graph 35+E II](https://framapic.org/CkFr4ab3FjcZ/bXQg9LyozGqg.jpg) + +## Features + +* Build formulae from TeX syntax +* Highly-customizable graphical and layout parameters +* Drawing is based on a few user-provided primitives (point, line, text size, + text) +* Compatible with fxlib and gint + +List of currently supported elements: + +* Fractions (`\frac`) +* Subscripts and superscripts (`_` and `^`) +* Grouping parentheses, brackets and braces (`\left` and `\right`) + +Features that are partially implemented (and what is left to finish them): + +* Support for inline style and display style (compute display-style subscript + and superscript layout, and expose a parameter) +* API functions to build TeX objects without a TeX formula (expose functions + which are currently in the parser) +* Full fx-CG 50 support (suitable parenthesis styles) + +See the `TODO.md` file for more features to come. + +## Building + +First specify the platform you want to use : + +* `cli` is for command-line tests, with no visualization (PC) +* `sdl2` is an SDL interface with visualization (font support coming) (PC) +* `fx9860g` builds the library for fx-9860G targets (calculator) +* `fxcg50` builds the library for fx-CG 50 targets (calculator) + +For calculator platforms, you can use `--toolchain` to specify a different toolchain than the default `sh3eb` and `sh4eb`. The install directory of the library is guessed by asking the compiler, you can override it with `--prefix`. + +Example for an SDL setup: + +```sh +% ./configure --platform=sdl2 +``` + +Then you can make the program, and if it's a calculator library, install it. You can later delete `Makefile.cfg` to reset the configuration, or just reconfigure as needed. + +```sh +% make +% make install # fx9860g and fxcg50 only +``` + +## Using in a program + +Before using the library in a program, a configuration step is needed. The library does not have drawing functions and instead requires that you provide some, namely: + +* Draw a pixel (`TeX_intf_pixel`) +* Draw a line (`TeX_intf_line`) +* Compute the size occupied by a string (`TeX_intf_size`) +* Render a string (`TeX_intf_text`) + +The three rendering functions are available in fxlib; for monospaced fonts the fourth can be implemented trivially. In gint, the four can be defined as wrappers for `dpixel()`, `dline()`, `dsize()` and `dtext()`. + +The type of formulae is `TeX_Flow`. To parse and compute the size of a formula, use the `TeX_parse()` functions, which returns a new formula object (or `NULL` if a critical error occurs). + +```c +char *code = "\\frac{x_7}{\\left\\{\\frac{\\frac{2}{3}}{27}\\right\\}^2}"; +struct TeX_Flow *formula = TeX_parse(code); +``` + +The size of the formula can be queried through `formula->width` and `formula->height`. To render, specify the location of the top-left corner and the drawing color (which will be passed to all primitives): + +```c +TeX_draw(formula, 0, 0, BLACK); +``` + +The same formula can be drawn several times. When it is no longer needed, free it with `TeX_free()`: + +```c +TeX_free(formula); +``` diff --git a/TODO b/TODO.md similarity index 87% rename from TODO rename to TODO.md index 70823f0..4b7f87f 100644 --- a/TODO +++ b/TODO.md @@ -2,6 +2,7 @@ * Write real error messages * Support Unicode symbols (probably requires help from the font side, urgh) * Don't use TEX_LAYOUT_SPACING for everything, just make it the default +* Add a parameter to resolve as inline style or display style * Add sum and products * Add square roots, and honor TEX_SQRT_SLANTED and TEX_SQRT_BAR_LENGTH diff --git a/src/platform/sdl2.c b/src/platform/sdl2.c index d95894a..a43a073 100644 --- a/src/platform/sdl2.c +++ b/src/platform/sdl2.c @@ -121,7 +121,6 @@ int main(void) struct TeX_Flow *flow = TeX_parse(formula); if(!flow) { puts("parsing error!"); return 1; } - size_flow(flow); TeX_debug_flow(flow, 0); SDL_SetRenderDrawColor(r, 0xff, 0xff, 0xff, 0xff);