# roscha A jinja inspired template engine written in C11. Why would I do something like this? Because I needed a template engine I could use in C programs, and for the lulz, of course. Probably not the best in terms of performance and especially features, but it gets the job done. ## How to use All the functions and structures that are needed to use roscha are in `include/roscha.h`, `include/object.h`, `include/hmap.h`, `include/vector.h`, and `include/slice.h`. Basically you initialize roscha with `roscha_init()`, then create a new environment where all the templates and variables will be with `roscha_env_new()` add some templates, e.g. you can load them from a dir with the `roscha_env_load_dir(env, dir)` function, add some variables to `env->vars` hashmap and render a template running `roscha_env_render(env, template_name)`. All variables used inside roscha are wrapped around a reference counted structure called `roscha_object` that also contains the type information needed by roscha. You should increment and decrement the reference count appropriately using the functions `roscha_object_ref(object)` and `roscha_object_unref(object)` accordingly. After using roscha you should free everything related to roscha by decrementing the reference counts, destroying the `struct roscha_env *` environment, and calling `roscha_deinit()`. ## TODO * Better document this... or not if nobody else uses? * Probably fix some bugs that are currently hidden. * k, v arguments in for...in loops over hashmaps * make hashmaps grow in capacity over a certain load threshold. * Other stuff like space trimming