Coder Social home page Coder Social logo

sebbekarlsson / jinja2cpplight Goto Github PK

View Code? Open in Web Editor NEW

This project forked from hughperkins/jinja2cpplight

0.0 2.0 0.0 561 KB

(very) lightweight version of Jinja2 for C++

License: Mozilla Public License 2.0

CMake 5.60% Python 23.77% C++ 70.63%

jinja2cpplight's Introduction

Table of Contents generated with DocToc

Jinja2CppLight

(very) lightweight version of Jinja2 for C++

Lightweight templating engine for C++, based on Jinja2

  • no dependencies, everything you need to build is included
  • templates follow Jinja2 syntax
  • supports:
    • variable substitution
    • for loops
    • including nested for loops

How to use?

overview

  • variable substitution: {{somevar}} will be replaced by the value of somevar
  • for loops: {% for somevar in range(5) %}...{% endfor %} will be expanded, assigning somevar the values of 0, 1, 2, 3 and 4, accessible as normal template variables, ie in this case {{somevar}}

examples

Simple example of using variable substitution:

    Template mytemplate( R"d(
        This is my {{avalue}} template.  It's {{secondvalue}}...
        Today's weather is {{weather}}.
    )d" );
    mytemplate.setValue( "avalue", 3 );
    mytemplate.setValue( "secondvalue", 12.123f );
    mytemplate.setValue( "weather", "rain" );
    string result = mytemplate.render();
    cout << result << endl;
    string expectedResult = R"d(
        This is my 3 template.  It's 12.123...
        Today's weather is rain.
    )d";
    EXPECT_EQ( expectedResult, result );

eg, example of using loops, eg to unroll some loops, maybe in an OpenCL kernel:

    Template mytemplate( R"d(
{% for i in range(its) %}a[{{i}}] = image[{{i}}];
{% for j in range(2) %}b[{{j}}] = image[{{j}}];
{% endfor %}{% endfor %}
)d" );
    mytemplate.setValue( "its", 3 );
    string result = mytemplate.render();
    string expectedResult = R"d(
a[0] = image[0];
b[0] = image[0];
b[1] = image[1];
a[1] = image[1];
b[0] = image[0];
b[1] = image[1];
a[2] = image[2];
b[0] = image[0];
b[1] = image[1];

)d";
    EXPECT_EQ( expectedResult, result );

Building

Building on linux

Pre-requisites

  • cmake
  • g++
  • make

Method

git clone [email protected]:hughperkins/Jinja2CppLight.git
cd Jinja2CppLight
mkdir build
cd build
cmake ..
make

Building on Windows

Pre-requisites:

  • Visual Studio 2013 Community, or similar
  • cmake
  • git (eg msys-git)

Procedure

  • use git to clone [email protected]:hughperkins/Jinja2CppLight.git
  • open cmake, and use it to generate visual studio project files, from the checked out repository
  • open visual studio, and build the generate visual studio project files, as Release

Running unittests

After building, as above, on linux:

./jinja2cpplight_unittests

on Windows, from the Release directory folder:

jinja2cpplight_unittests

Related projects

For an alternative approach, using lua as a templating scripting language, see luacpptemplater

License

Mozilla Public License

jinja2cpplight's People

Contributors

0x7f avatar hughperkins avatar sosterwalder avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.