Jinja2-TT2
view release on metacpan or search on metacpan
# From stdin
echo '{{ name|upper }}' | ./bin/jinja2tt2
# Debug mode (shows tokens and AST)
./bin/jinja2tt2 --debug template.j2
```
### Programmatic Usage
```perl
use Jinja2::TT2;
my $transpiler = Jinja2::TT2->new();
# From string
my $tt2 = $transpiler->transpile('{{ user.name|upper }}');
# Result: [% user.name.upper %]
# From file
my $tt2 = $transpiler->transpile_file('template.j2');
```
## Supported Constructs
### Variables
```jinja2
{{ foo }} â [% foo %]
{{ user.name }} â [% user.name %]
{{ items[0] }} â [% items.0 %]
```
### Filters
```jinja2
{{ name|upper }} â [% name.upper %]
{{ name|lower|trim }} â [% name.lower.trim %]
{{ items|join(", ") }} â [% items.join(', ') %]
{{ name|default("Guest") }} â [% (name || 'Guest') %]
```
### Conditionals
```jinja2
{% if user %} â [% IF user %]
{% elif admin %} â [% ELSIF admin %]
{% else %} â [% ELSE %]
{% endif %} â [% END %]
```
### Loops
```jinja2
{% for item in items %} â [% FOREACH item IN items %]
{{ loop.index }} â [% loop.count %]
{{ loop.first }} â [% loop.first %]
{{ loop.last }} â [% loop.last %]
{% endfor %} â [% END %]
```
### Blocks and Macros
```jinja2
{% block content %} â [% BLOCK content %]
{% endblock %} â [% END %]
{% macro btn(text) %} â [% MACRO btn(text) BLOCK %]
{% endmacro %} â [% END %]
```
### Comments
```jinja2
{# This is a comment #} â [%# This is a comment %]
```
### Whitespace Control
```jinja2
{{- name -}} â [%- name -%]
{%- if x -%} â [%- IF x -%]
```
### Other Constructs
- `{% include "file.html" %}` â `[% INCLUDE file.html %]`
- `{% set x = 42 %}` â `[% x = 42 %]`
- Ternary: `{{ x if cond else y }}` â `[% (cond ? x : y) %]`
- Boolean literals: `true`/`false` â `1`/`0`
## Filter Mapping
| Jinja2 | TT2 Equivalent |
|--------|----------------|
| `upper` | `.upper` |
| `lower` | `.lower` |
| `trim` | `.trim` |
| `first` | `.first` |
| `last` | `.last` |
| `length` | `.size` |
| `join` | `.join` |
| `reverse` | `.reverse` |
| `sort` | `.sort` |
| `escape` / `e` | `\| html_entity` |
| `default` | `\|\|` operator |
| `replace` | `.replace` |
Some filters require TT2 plugins (e.g., `tojson` needs `Template::Plugin::JSON`).
## Loop Variable Mapping
| Jinja2 | TT2 |
|--------|-----|
| `loop.index` | `loop.count` |
| `loop.index0` | `loop.index` |
| `loop.first` | `loop.first` |
| `loop.last` | `loop.last` |
| `loop.length` | `loop.size` |
## Limitations
( run in 0.950 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )