Twig templating engine for Rust

Build Status

Read twig-rs library docs

Flexible, fast, secure templating engine for Rust. The aim is to be 100% syntactically compatible with Twig for PHP. The secondary aim is to provide functionally equivalent ways to extend and customize templating with extensions.

Note that at this moment this is very much work in progress, and is not usable.

The goal of 1.0 version is to pass test suite functionally equivalent to Twig 2.0 (issue #1).

Motivation

Build Requirements

TODO list

Example of working lexer

Run example that iterates over template in templates/fos_login.html.twig:

bash cargo run --example lex_tokens

Will produce list of tokens in console:

Ok(Token { value: BlockStart, line_num: 1 }) Ok(Token { value: Name("extends"), line_num: 1 }) Ok(Token { value: String(FOSUserBundle::layout.html.twig), line_num: 1 }) Ok(Token { value: BlockEnd, line_num: 1 }) Ok(Token { value: Text("\n"), line_num: 2 }) Ok(Token { value: BlockStart, line_num: 3 }) ...

Example of working parser

Run example that parses this template:

twig test {{ var + 1 }}

bash cargo run --example parse_nodes

Will output parsed module in console:

Ok( Module { body: List { items: [ Text { value: "test ", line: 1 }, Print { expr: Expr { line: 1, value: BinaryOperator { value: "+", left: Expr { line: 1, value: Name( "var" ) }, right: Expr { line: 1, value: Constant( Int( 1 ) ) } } }, line: 1 } ] } } )