1# CHARTER 2A simple markdown **DSL** and **C Library** to generate *svg* and *pgfplot* (*LaTeX*) plot from a minimal syntax. 3 4 5 6## Example 7 8Few examples are available in the [gallery](https://github.com/Mandarancio/charter/wiki/Gallery) page of the wiki. 9 10Simple syntax example: 11 12``` 13title: reconstruction error vs compression 14x-axis: 15 label: compression 16 mode: log 17y-axis: 18 label: mse 19plot: 20 x: 1 10 100 21 y: 0 0.01 0.05 22 label: f_avg 23 marker: s 24 ls: -- 25``` 26 27Resutls in: 28 29![result](test/test.svg) 30 31**Note:** as the image is an svg the rendering of it is browser dependent. 32 33## DSL Syntax 34 35| syntax | description | 36| :----- | :------ | 37|```plot```| create a new line plot| 38|```scatter```| create a new scatter plot| 39|```scatter```| create a new bar plot | 40|```x-axis```| parameters for the x axis | 41|```y-axis```| parameters for the y axis | 42|```label``` | label for axis or plot | 43|```x```| x values of a plot | 44|```y```| y values of a plot | 45|```color```| colour of a plot | 46|```line-width``` or ```lw```| plot line width | 47|```line-style``` or ```ls```| plot line style ('--' or 'dashed', '-' or 'normal', ':' or dotted, '/' or 'none')| 48|```bar-width``` or ```bw``` | bar plot width| 49|```line-color```| bar plot line color | 50|```marker```| marker style of a plot ('o', 'x', '+', 's', ' ')| 51|```range```| min and max value for an axis | 52|```mode``` | axis mode ('linear' or 'log') | 53|```title```| plot title | 54|```width```| plot width | 55|```height```| plot height | 56|```csv://file_path#tag```| load a csv and use column ```tag``` as values | 57|```range: min max nstep```| linear range to use as values | 58|```logrange: min max nstep```| log range to use as values | 59|```math: f(x)```| math expression based on x to use as y value | 60 61**commas** and **spaces** are valid separator for arrays and the sytax in general. 62For the definitions **spaces**, **tabs** and **:** are equivalents. So ```x: 1 2 3``` is equal to ```x 1,2,3```. 63 64## Use as a library 65if you want to include charter as a library here a simple example 66 67```c 68#include "charter/parser.h" 69#include "charter/renderer.h" 70 71\*** 72 * YOUR CODE 73 ***\ 74 chart * parsed = parse_chart(string_to_parse); 75 /* chart is the structure you can also create it programmatically in your code 76 and render it to svg using chart_to_svg */ 77 char * svg = chart_to_svg(parsed); 78 chart_free(parsed); 79\***\ 80``` 81 82## Use as SVG generator 83 84The build process generate as well an executable: ```charter```. It is capable of generate an svg plot from a charter dsl file: 85 86``` 87charter your_dsl_file > output.svg 88``` 89 90## Build and install 91 92Use ```meson``` and ```ninja```: 93 94```bash 95mkdir build 96cd build 97meson .. 98ninja 99sudo ninja install 100``` 101## Future improvements 102 103In the next future I will improve the svg quality, the memory performance, and the look and feel of the output plus the following features: 104 105 - more options on grid 106 - more styling options 107 - better typesettings 108 109## Marker integration 110At the moment _charter_ is integrated in [Marker](https://github.com/fabiocolacio/Marker/)! 111 112![marker and charter](marker_charter_support.png) 113 114## Credits 115 116 - [csv_parser](https://github.com/JamesRamm/csv_parserhttps://github.com/JamesRamm/csv_parser) 117 - [tinyexpr](https://github.com/codeplea/tinyexpr) 118