An open API service indexing awesome lists of open source software.

https://github.com/devinus/walrus

Walrus - Mustache-like Templating
https://github.com/devinus/walrus

Last synced: about 1 year ago
JSON representation

Walrus - Mustache-like Templating

Awesome Lists containing this project

README

          

Walrus - Mustache-like Templating
=================================

Walrus is 50% Mustache and 50% large flippered marine mammal.

Lexing is done with Leex and parsing is done with Yecc, both
of which are included in newer versions of Erlang.

Most Mustache constructs work, such as variables, unescaped
variables, blocks, and inverse blocks. However, The Walrus is
an opinionated animal, and partials will never be supported.
Also, functions passed into the context are simply evaluated
and are not passed the raw template.

You can skip lexing and parsing templates every time you want
to render them by using `compile/1`, which returns a renderer
you can then pass a context that renders the template.

Examples
--------

### Simple Render

1> Tmpl = "Hello {{{name}}}.
1>
1> Drinks:
1>
1> {{#drinks}}
1> - {{name}}, {{tastiness}}
1> {{/drinks}}".
"Hello {{{name}}}.\n\nDrinks:\n\n{{#drinks}}\n - {{name}}, {{tastiness}}\n{{/drinks}}"
2>
2> Ctx = [{name, "Devin & Jane"},
2> {drinks, [[{name, "Beer"},
2> {tastiness, 5}],
2> [{name, "Juice"},
2> {tastiness, 8}]]}].
[{name,"Devin & Jane"},
{drinks,[[{name,"Beer"},{tastiness,5}],
[{name,"Juice"},{tastiness,8}]]}]
3>
3> walrus:render(Tmpl, Ctx).
<<"Hello Devin & Jane.\n\nDrinks:\n\n\n - Beer, 5\n\n - Juice, 8\n">>

### Compiled Renderer

1> Renderer = walrus:compile("Hello {{{name}}}.\n\nDrinks:\n\n{{#drinks}}\n - {{name}}, {{tastiness}}\n{{/drinks}}").
#Fun
2> Ctx = [{name, "Devin & Jane"},
2> {drinks, [[{name, "Beer"},
2> {tastiness, 5}],
2> [{name, "Juice"},
2> {tastiness, 8}]]}].
[{name,"Devin & Jane"},
{drinks,[[{name,"Beer"},{tastiness,5}],
[{name,"Juice"},{tastiness,8}]]}]
3>
3> Renderer(Ctx).
<<"Hello Devin & Jane.\n\nDrinks:\n\n\n - Beer, 5\n\n - Juice, 8\n">>

Acknowledgments
---------------
Robert Virding helped me tremendously when I struggled to
understand Leex. He's also responsible for
`([^{}]|({[^{])|(}[^}]))+`.

License
-------

All code released into the public domain (see `UNLICENSE`)
except for the file `walrus_mochinum.erl`, which has it's own
license (see `LICENSE`).