Lephenixnoir
af424d1baa

2 years ago  

config  2 years ago  
include/TeX  2 years ago  
src  2 years ago  
.gitignore  2 years ago  
Makefile  2 years ago  
README.md  2 years ago  
TODO.md  2 years ago  
configure  2 years ago  
font5x7.bmp  2 years ago  
font8x9.bmp  2 years ago  
font10x12.bmp  2 years ago 
README.md
Natural display engine with TeX syntax for fx9860G and fxCG 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.
\frac{x^7 \left[X,Y\right] + 3\left\frac{A}{B}\right>}
{\left\{\frac{a_k+b_k}{k!}\right\}^5}
+ \int_a^b \frac{\left(bt\right)^{n+1}}{n!} dt
+ \left(\begin{matrix} \frac{1}{2} & 5 \\ 1 & a+b \end{matrix}\right)
Features
 Build formulae from TeX syntax or using the structural API
 Highlycustomizable graphical and layout parameters
 Drawing uses only a few user 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
)  Grouping angle brackets, vertical lines, and dots (invisible)
 Sums, products and integrals (
\sum
,\prod
and\int
)  Vectors (
\vec
) and limits (\lim
)  Square roots (
\sqrt
)  Matrices (
\begin{matrix} ... \end{matrix}
)
Features that are partially implemented (and what is left to finish them):
 Support for inline style and display style (expose a parameter)
 Theme that can decently port to fxCG 50 (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 commandline tests, with no visualization (PC)sdl2
is an SDL interface with visualization (PC)fx9860g
builds the library for fx9860G targets (calculator)fxcg50
builds the library for fxCG 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:
% ./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.
% 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_Env
. To parse and compute the size of a formula, use the TeX_parse()
function, which returns a new formula object (or NULL
if a critical error occurs). The second parameter display
is set to nonzero to use display mode (similar to \[ .. \]
in LaTeX) or zero to use inline mode (similar to $ .. $
in LaTeX).
char *code = "\\frac{x_7}{\\left\\{\\frac{\\frac{2}{3}}{27}\\right\\}^2}";
struct TeX_Env *formula = TeX_parse(code, 1);
The size of the formula can be queried through formula>width
and formula>height
. To render, specify the location of the topleft corner and the drawing color (which will be passed to all primitives):
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()
:
TeX_free(formula);