code cleaning, add condition operators
3 files changed
tree: 4ffd0e15abf7dd6a8676b14ae4509d57dfb87604
  1. src/
  2. test/
  3. .gitignore
  4. .travis.yml
  5. CMakeLists.txt
  6. LICENSE
  7. README.md
README.md

Inja

Build Status Coverage Status Codacy Status Github Issues GitHub License

Design

json data;
data["name"] = "world";

inja::render("Hello {{ name }}!", data); // "Hello World!"

Integration

Inja is headers only. Just one dependency: json by nlohmann.

#include "json.hpp"
#include "inja.hpp"

// For convenience
using namespace inja;
using json = nlohmann::json;

Tutorial

Template Rendering

json data;
data["name"] = "world";

render("Hello {{ name }}!", data); // "Hello World!"

// For more advanced usage, an environment is recommended
Environment env = Environment();

// Render a string with json data
std::string result = env.render("Hello {{ name }}!", data);

// Or directly read a template file
std::string result_template = env.render_temlate("template.txt", data);

// And read a json file for data
std::string result_template_2 = env.render_temlate_with_json_file("template.txt", "data.json");

The environment class can be configured.

// With default settings
Environment env_default = Environment();

// With global path to template files
Environment env_default = Environment("../path/templates/"); 

Variables

Variables can be rendered with the {{ ... }} syntax.

json data;
data["name"] = "world";
data["guests"] = {"Jeff", "Pierre", "Tom"};
data["time"]["start"]["hour"] = 16;
data["time"]["end"]["hour"] = 21;

string template = """
    {{ guests/0 }}
    
    {{ time/start/hour }} to {{ time/end/hour }} or {{ 24 }}
""";

Valid Json -> Printed. Json Pointer.

Statements

Statements can be written with the (% ... %) syntax. The most important statements are loops, conditions and file includes.All statements can be nested.

Loops

In the loop, some special variables are available:

  • int index, index1
  • bool is_first
  • bool is_last

Conditions

If, else if, else. Nested. conditions:

  • not
  • ==, >, <, >=, <=, !=
  • in

Includes

Include other files like (% include "footer.html" %). Relative from file.

Comments

Comments can be rendered with the {# ... #} syntax.

render("Hello{# Todo #}!", data); // "Hello!"

Supported compilers

Currently, the following compilers are tested:

  • GCC 4.9 - 7.1 (and possibly later)
  • Clang 3.6 - 3.8 (and possibly later)

License

The class is licensed under the MIT License.