]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Parse macro blocks
authorKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 18:29:54 +0000 (14:29 -0400)
committerKevin <kevin@kevin-brown.com>
Sun, 10 May 2020 18:29:54 +0000 (14:29 -0400)
new_parser.py

index 040636d363aca180db3c20a1472814d00de479ff..5e034fbc013fa7daeac322ecdb10455126be046a 100644 (file)
@@ -51,6 +51,9 @@ def parse_block_pair(ast):
     if block_name == 'if':\r
         return parse_block_if(ast)\r
 \r
+    if block_name == 'macro':\r
+        return parse_block_macro(ast)\r
+\r
     if block_name == 'set':\r
         return parse_block_set(ast)\r
 \r
@@ -123,6 +126,30 @@ def parse_block_if(ast):
         lineno=lineno_from_parseinfo(ast['parseinfo'])\r
     )\r
 \r
+def parse_block_macro(ast):\r
+    definition = parse_variable(ast['start']['parameters'][0]['value'])\r
+    name = definition.node.name\r
+    params = []\r
+    defaults = []\r
+    body = parse(ast['contents'])\r
+\r
+    for arg in definition.args:\r
+        params.append(arg)\r
+\r
+    for kwarg in definition.kwargs:\r
+        params.append(\r
+            nodes.Name(kwarg.key, "load")\r
+        )\r
+        defaults.append(kwarg.value)\r
+\r
+    return nodes.Macro(\r
+        name,\r
+        params,\r
+        defaults,\r
+        body,\r
+        lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+    )\r
+\r
 def parse_block_set(ast):\r
     if 'block' in ast:\r
         assignment = ast['block']['parameters'][0]\r