Jinja2-TT2

 view release on metacpan or  search on metacpan

README.md  view on Meta::CPAN

# 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 )