]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Add support for line statements
authorKevin Brown <kevin@kevin-brown.com>
Fri, 8 May 2020 22:09:09 +0000 (18:09 -0400)
committerKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 01:50:06 +0000 (21:50 -0400)
These are block expresions but the start/end tags take up an entire
line and are marked by a leading symbol.

tatsu_grammar.txt
test_template.jinja

index 1f5da0f851523ffd11ca93f1c4f1ef011ce382cd..73cce50d1027374ec33d4a6fb7bc38d2a120c074 100644 (file)
@@ -11,7 +11,7 @@ expressions
 \r
 expression\r
     =\r
-    content | raw_block_expression | block_expression | variable_expression | comment_expression\r
+    content | raw_block_expression | block_expression | line_block_expression | variable_expression | comment_expression\r
     ;\r
 \r
 raw_block_expression\r
@@ -56,6 +56,28 @@ block_close
     {SP}* @:"%}"\r
     ;\r
 \r
+line_block_expression\r
+    =\r
+    line_block_start\r
+    expressions\r
+    line_block_end\r
+    ;\r
+\r
+line_block_start\r
+    =\r
+    line_block_open type:`blockstart` name:IDENTIFIER parameters:[ { block_parameter }* ] ":\n"\r
+    ;\r
+\r
+line_block_end\r
+    =\r
+    line_block_open type:`blockend` name:IDENTIFIER "\n"\r
+    ;\r
+\r
+line_block_open\r
+    =\r
+    "\n" @:"# " {SP}*\r
+    ;\r
+\r
 implicit_identifier_tuple\r
     =\r
     {SP}* tuple+:IDENTIFIER {SP}* { "," {SP}* tuple+:IDENTIFIER {SP}* }+\r
@@ -200,7 +222,7 @@ comment_open            = "{#" ;
 comment_close           = "#}" ;\r
 comment_content         = {!comment_close CHAR}* ;\r
 \r
-content                 = !(block_open | variable_open | comment_open) CHAR ;\r
+content                 = !(line_block_open | block_open | variable_open | comment_open) CHAR ;\r
 \r
 LITERAL\r
     =\r
index d3b16cbc7e4d344587e3348332cfc1543d455f2b..57a6b6c856f069533af57d4130187fb2fe8e9e5a 100644 (file)
@@ -34,4 +34,10 @@ across lines #}
 {% macro textarea(name, value='', rows=10, cols=40) %}\r
     <textarea name="{{ name }}" rows="{{ rows }}" cols="{{ cols\r
         }}">{{ value|e }}</textarea>\r
-{% endmacro %}
\ No newline at end of file
+{% endmacro %}\r
+<ul>\r
+# for href, caption in [('index.html', 'Index'),\r
+                        ('about.html', 'About')]:\r
+    <li><a href="{{ href }}">{{ caption }}</a></li>\r
+# endfor\r
+</ul>
\ No newline at end of file