]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Fix content overtaking expressions
authorKevin Brown <kevin@kevin-brown.com>
Fri, 8 May 2020 09:33:28 +0000 (05:33 -0400)
committerKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 01:50:06 +0000 (21:50 -0400)
This fixes a issue where content would try to overtake everything
following it, even if there was a better expression to match after
the content. This was fixed by telling content to match everything
but the start of different expressions, which appears to solve a
bunch of issues.

tatsu_grammar.txt
test_template.jinja

index 56703ea1ee68688af2d3f35eefb8136cfbe06e73..e0e4912a19a258dfb882df0f9d78913b67546717 100644 (file)
@@ -1,17 +1,17 @@
 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
@@ -28,8 +28,8 @@ raw_block_end
 \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
@@ -80,14 +80,14 @@ variable_filter
     ;\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
index d78588775627ce2c506ef3ed97fb4e2cebcebda6..17a4894e738c1d83f0af0fa3044f35ca8115382a 100644 (file)
@@ -1,8 +1,8 @@
+{% 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