start\r
=\r
- expression\r
+ expressions\r
$\r
;\r
\r
-expression\r
+expressions\r
=\r
- { !matching_expression CHAR }* &matching_expression\r
+ {expression}*\r
;\r
\r
-matching_expression\r
+expression\r
=\r
- raw_block_expression | block_expression | variable_expression | comment_expression\r
+ content | raw_block_expression | block_expression | variable_expression | comment_expression\r
;\r
\r
raw_block_expression\r
\r
block_expression\r
=\r
- block_start {SP}* expression {SP}* block_end\r
- #| block_start\r
+ block_start {SP}* expressions {SP}* block_end\r
+ | block_start\r
;\r
\r
block_start\r
;\r
filter = @+:IDENTIFIER [@+:filter_parameters];\r
filter_parameters = "(" [@+:filter_parameter {"," {SP}* @+:filter_parameter}*] ")";\r
-filter_parameter = {CHAR}* ;\r
+filter_parameter = {!"," !")" CHAR}* ;\r
\r
comment_expression = comment_open comment comment_close ;\r
comment_open = "{#" ;\r
comment_close = "#}" ;\r
comment = {!comment_close CHAR}* ;\r
\r
-content = {CHAR}* ;\r
+content = !("{%" | "{{" | "{#") CHAR ;\r
\r
IDENTIFIER\r
=\r
+{% with key=val %}\r
+{{ kkk |test(first,second, third)|filter}}\r
{%block single key=val param=value %}\r
test {{var}}\r
{%endblock%}\r
{# comment contents\r
across lines #}\r
-{% raw %}\r
-{% block %}fake content{{ fake vars }}\r
-{% endraw %}
\ No newline at end of file
+{% raw %}{% block %}fake content{{ fake vars }}{% endraw %}
\ No newline at end of file