]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Support assignment expressions in generic blocks
authorKevin Brown <kevin@kevin-brown.com>
Fri, 8 May 2020 14:01:10 +0000 (10:01 -0400)
committerKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 01:50:06 +0000 (21:50 -0400)
Because of the way assignment expressions handle implicit tuples,
it's now possible to support the complex for loops within the
standard generic block grammar.

tatsu_grammar.txt

index e974a080db5dc89607a5a11d7c369c4e8f48a92f..6a50d4b65d433184989d0dc6bebffa58ce769cc7 100644 (file)
@@ -11,7 +11,7 @@ expressions
 \r
 expression\r
     =\r
-    content | raw_block_expression | functional_block_expression | variable_expression | comment_expression\r
+    content | raw_block_expression | block_expression | variable_expression | comment_expression\r
     ;\r
 \r
 raw_block_expression\r
@@ -31,32 +31,6 @@ raw_block_end
     block_open "endraw" block_close\r
     ;\r
 \r
-functional_block_expression\r
-    =\r
-    for_block_expression | block_expression\r
-    ;\r
-\r
-for_block_expression\r
-    =\r
-    for_block_start {SP}* expressions {SP}* for_block_end\r
-    ;\r
-\r
-for_block_start\r
-    =\r
-    block_open type:`blockstart` name:"for" {SP}* target:assignment_target {SP}* "in" {SP}* iter:variable_accessor_call_parameter_value [ {SP}* recursive:`True` "recursive" ] block_close\r
-    ;\r
-\r
-for_block_end\r
-    =\r
-    block_open "endfor" block_close\r
-    ;\r
-\r
-assignment_target\r
-    =\r
-    tuple+:block_parameter {"," {SP}* tuple+:block_parameter}+\r
-    | block_parameter\r
-    ;\r
-\r
 block_expression\r
     =\r
     block_start {SP}* expressions {SP}* block_end\r
@@ -65,7 +39,7 @@ block_expression
 \r
 block_start\r
     =\r
-    block_open type:`blockstart` !("end") name:IDENTIFIER parameters:[ { block_parameter }* ] block_close\r
+    block_open type:`blockstart` !("end") name:IDENTIFIER parameters:[ { assignment_target }* ] block_close\r
     ;\r
 \r
 block_end\r
@@ -82,6 +56,12 @@ block_close
     {SP}* @:"%}"\r
     ;\r
 \r
+assignment_target\r
+    =\r
+    tuple+:block_parameter {"," {SP}* tuple+:block_parameter}+\r
+    | block_parameter\r
+    ;\r
+\r
 block_parameter\r
     =\r
     variable_accessor_call_parameter\r