diff options
Diffstat (limited to '')
-rw-r--r-- | third-party/mustach/README.md | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/third-party/mustach/README.md b/third-party/mustach/README.md new file mode 100644 index 0000000..026fc87 --- /dev/null +++ b/third-party/mustach/README.md @@ -0,0 +1,117 @@ +Introduction to Mustach +======================= + +`mustach` is a C implementation of the [mustache](http://mustache.github.io "main site for mustache") template library. + +The main site for `mustach` is on [gitlab](https://gitlab.com/jobol/mustach). + +The best way to use mustach is to copy the files **mustach.h** and **mustach.c** +directly into your project and use it. + +The current source files are: + +- **mustach.c** core implementation of mustache in C +- **mustach.h** header file for core definitions +- **mustach-json-c.c** tiny json wrapper of mustach using [json-c](https://github.com/json-c/json-c) +- **mustach-json-c.h** header file for using the tiny JSON wrapper +- **mustach-tool.c** simple tool for applying template files to a JSON file + +The file **mustach-json-c.c** is the main example of use of **mustach** core +and it is also a practical implementation that can be used. It uses the library +json-c. (NOTE for Mac OS: available through homebrew). + +HELP REQUESTED TO GIVE EXAMPLE BASED ON OTHER LIBRARIES (ex: janson, ...). + +The tool **mustach** is build using `make`, its usage is: + + mustach json template [template]... + +It then outputs the result of applying the templates files to the JSON file. + +Portability +=========== + +Some system does not provide *open_memstream*. In that case, tell your +prefered compiler to declare the preprocessor symbol **NO_OPEN_MEMSTREAM**. +Example: + + gcc -DNO_OPEN_MEMSTREAM + +Extensions +========== + +By default, the current implementation provides the following extensions: + +Explicit Substitution +--------------------- + +This is a core extension implemented in file **mustach.c**. + +In somecases the name of the key used for substition begins with a +character reserved for mustach: one of '#', '^', '/', '&', '{', '>' and '='. +This extension introduces the special character ':' to explicitly +tell mustach to just substitute the value. So ':' becomes a new special +character. + +Value Testing +------------- + +This is a tool extension implmented in file **mustach-json-c.c**. + +This extension allows you to test the value of the selected key. +It is allowed to write key=value (matching test) or key=!value +(not matching test) in any query. + +Removing Extensions +------------------- + +When compiling mustach.c or mustach-json-c.c, +extensions can be removed by defining macros +using option -D. + +The possible macros are: + +- `NO_COLON_EXTENSION_FOR_MUSTACH` + + This macro remove the ability to use colon (:) + as explicit command for variable substituion. + This extension allows to have name starting + with one of the mustach character :#^/&{=< + +- `NO_EQUAL_VALUE_EXTENSION_FOR_MUSTACH` + + This macro allows the program to check the whether + the actual value is equal to an expected value. + This is useful in `{{#key=val}}` or `{{^key=val}}` + with the corresponding `{{/key=val}}`. + It can also be used in `{{key=val}}` but this + doesn't seem to be useful. + +- `NO_JSON_POINTER_EXTENSION_FOR_MUSTACH` + + This macro removes the possible use of JSON pointers. + JSON pointers are defined in IETF RFC 6901. + If not set, any key starting with "/" is a JSON pointer. + This implies to use the colon to introduce keys. + So `NO_COLON_EXTENSION_FOR_MUSTACH` implies + `NO_JSON_POINTER_EXTENSION_FOR_MUSTACH`. + A special escaping is used for "=" signs when + values comparison is enabled: "~=" leaves "=" in the key. + +- `NO_ALLOW_EMPTY_TAG` + + Generate the error MUSTACH_ERROR_EMPTY_TAG automatically. + +- NO_OBJECT_ITERATION_FOR_MUSTACH + + Disable the object iteration extension. That extension allows + to iterate over the keys of an object. The iteration on object + is selected by using the selector `{{#key.*}}`. In the context + of iterating over object keys, the single key `{{*}}` returns the + key and `{{.}}` returns the value. + +- `NO_EXTENSION_FOR_MUSTACH` + + This macro disables any current or future + extensions. + |