- Mustache implementation for modern C++ (requires C++11)
- Header only
- Zero dependencies
- Templated string type for compatibility with any STL-like string (std::string, std::wstring, etc)
- Boost license
All examples assume using namespace kainjow::mustache
. Additional examples and usage can be found in the tests.cpp
file.
mustache tmpl{"Hello {{what}}!"};
std::cout << tmpl.render({"what", "World"}) << std::endl;
// Hello World!
mustache tmpl{"{{#employees}}{{name}}, {{/employees}}"};
data employees{data::type::list};
employees << data{"name", "Steve"} << data{"name", "Bill"};
tmpl.render({"employees", employees}, std::cout);
// Steve, Bill,
mustache tmpl("Hello {{what}}!");
std::stringstream ss;
tmpl.render({"what", "World"}, [&ss](const std::string& str) {
ss << str;
});
// ss.str() == "Hello World!"
This library supports all current Mustache features:
- Variables
- HTML escaping
- Sections
- Inverted Sections
- True/False
- Lists
- Lambdas
- Partials
- Comments
- Set Delimiter
Additional features:
- Custom escape function for use outside of HTML
For *nix:
make
For macOS:
make mac
For Visual Studio 2013 (CMake 2.8+ required):
build.bat
For Visual Studio 2015 (CMake 3.1+ required):
build.bat 14
- Lines with sections that result in an empty line are removed, per the Mustache spec.
- Add an overload to render() that accepts a context and a stream (thanks Kitsune Ral)
- Added checks for empty objects (thanks Snafuuz)
- Refactored parser in preparation for future changes
- Added ability to provide a custom escape function (thanks to Kitsune Ral)
- Allow
data.set()
to override an existing value
- Added a new lambda type (innovatively called
lambda2
) that takes an additional render function. It will not render its result but allows the user to call therender
argument to render the section text, or any other text.
- Performance improvements - about 45% faster than version 2
- Even simpler API. Not backwards compatible but upgrading should be straightforward:
- Namespace, classes, and methods are now in snake case to match the STL. For example,
Kainjow::Mustache
is nowkainjow::mustache
- Classes and aliases are now under a
mustache
namespace, instead of being under the mustache class - Removed
Data::List()
- usedata{data::type::list}
instead - Removed
Data::type()
- use the variousis_xxx
methods to identity the type
- Namespace, classes, and methods are now in snake case to match the STL. For example,
- New simpler API (not backwards compatible)
- std::wstring support
- Bug fixes (thanks to Shen-Ta Hsieh)
- Automated tests on OS X
- 100% test coverage
- All current Mustache features are implemented.