12 releases

0.6.0 Nov 8, 2024
0.5.3 Mar 1, 2024
0.5.2 Feb 10, 2024
0.5.0 Sep 13, 2023
0.2.1 Jan 31, 2021

#2433 in Parser implementations

Download history 4/week @ 2024-08-05 8/week @ 2024-08-12 4/week @ 2024-08-19 17/week @ 2024-08-26 12/week @ 2024-09-09 9/week @ 2024-09-16 70/week @ 2024-09-23 31/week @ 2024-09-30 24/week @ 2024-10-07 20/week @ 2024-10-14 4/week @ 2024-10-21 101/week @ 2024-11-04 16/week @ 2024-11-11 20/week @ 2024-11-18

137 downloads per month
Used in ludtwig

MIT license

635KB
15K SLoC

Ludtwig-Parser

GitHub Crates.io Crates.io

Rust crate that parses Twig / HTML templating syntax into a lossless syntax tree. It does not conform to the official HTML spec and the input is required to be as idiomatic as possible (but the parser still tries to recover from errors / parse as much as possible). For example missing closing tags in HTML result in a parsing error (even if browsers can interpret the HTML and reconstruct the closing tag). This makes it possible to represent the template in a hierarchical untyped tree which is easy to navigate and contains both Twig and HTML syntax.

Accepted syntax example

{% block my_component %}
    {% set isActive = true %}
    <div id="my-component"
         class="my-component {% if isLarge %}large{% endif %}"
         {{ dataAttribute }}="data"
         {# Single word attributes don't strictly require quotes #}
         data-active={{ isActive }}
    >
        {% block my_component_inner %}
            <span id="my-span"
                  {% if isActive %}
                      style="color: red"
                  {% endif %}
            >
                hello {{ name }}
            </span>
        {% endblock %}
    </div>
{% endblock %}

Disclaimer

It is developed together with the ludtwig CLI application for formatting and analyzing Twig template files.

License

MIT - see LICENSE file.

License notices

For testing purposes this repository also may include code from the following sources:

Dependencies

~5.5MB
~69K SLoC