]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Add concat expression support to grammar and parser
authorKevin <kevin@kevin-brown.com>
Tue, 12 May 2020 01:25:29 +0000 (21:25 -0400)
committerKevin <kevin@kevin-brown.com>
Tue, 12 May 2020 01:25:29 +0000 (21:25 -0400)
This is probably going to be reclassified in the grammar and parser
as something different from the conditional expressions once more
support for math operators is added in.

grammar.ebnf
new_parser.py
test_template.jinja

index 8d37f80983f4242d47d47d2a257f5b830ed23b51..edcb02f6a5c97fc7062aae6d624aec2130ba2836 100644 (file)
@@ -222,6 +222,7 @@ conditional_expression
     | conditional_expression_logical\r
     | conditional_expression_comparator\r
     | conditional_expression_test\r
+    | concatenate_expression\r
     | variable_identifier\r
     ;\r
 \r
@@ -275,6 +276,12 @@ variable_tests_logical_operator
     | "or"\r
     ;\r
 \r
+concatenate_expression\r
+    =\r
+    concatenate+:variable_identifier\r
+    { {SP}* "~" {SP}* concatenate+:variable_identifier }+\r
+    ;\r
+\r
 variable_filter\r
     =\r
     "|" {SP}* @:filter\r
index c55d91d9a659576d94e63e269aa8e9df0888b633..8e13c1e44dab7442f116f3896bedeaf1b7d97a4f 100644 (file)
@@ -280,6 +280,16 @@ def parse_block_with(ast):
 def parse_comment(ast):\r
     return\r
 \r
+def parse_concatenate_expression(ast):\r
+    vars = [\r
+        parse_variable(var) for var in ast['concatenate']\r
+    ]\r
+\r
+    return nodes.Concat(\r
+        vars,\r
+        lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+    )\r
+\r
 def parse_conditional_expression(ast):\r
     if 'variable' in ast:\r
         return parse_variable(ast)\r
@@ -287,6 +297,9 @@ def parse_conditional_expression(ast):
     if 'comparator' in ast:\r
         return parse_conditional_expression_comparator(ast)\r
 \r
+    if 'concatenate' in ast:\r
+        return parse_concatenate_expression(ast)\r
+\r
     if 'test_expression' in ast:\r
         return parse_conditional_expression_if(ast)\r
 \r
index ad3035c904f54b07986a9e41774564ee7cd1b962..4c7beea6b5c07b2f5cd5cc25c650e07252184abd 100644 (file)
@@ -65,4 +65,5 @@ across lines #}
 ...\r
 </ul>\r
 {{ "[{}]".format(page.title) if page.title }}\r
-{% extends layout_template if layout_template is defined else 'master.html' %}
\ No newline at end of file
+{% extends layout_template if layout_template is defined else 'master.html' %}\r
+{{ "Hello " ~ name ~ "!" }}
\ No newline at end of file