aboutsummaryrefslogtreecommitdiff

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