if block_name == 'call':\r
return parse_block_call(ast)\r
\r
+ if block_name == 'filter':\r
+ return parse_block_filter(ast)\r
+\r
if block_name == 'for':\r
return parse_block_for(ast)\r
\r
parse_conditional_expression(ast['block']['parameters'][0]['value'])\r
)\r
\r
+def parse_block_filter(ast):\r
+ body = parse(ast['contents'])\r
+ filter_parameter = ast['start']['parameters'][0]['value']\r
+\r
+ filter_base = parse_variable(filter_parameter)\r
+\r
+ if isinstance(filter_base, nodes.Filter):\r
+ filter = filter_base\r
+ while isinstance(filter.node, nodes.Filter):\r
+ filter = filter.node\r
+\r
+ args = []\r
+ kwargs = []\r
+ dynamic_args = None\r
+ dynamic_kwargs = None\r
+\r
+ inner_filter = filter.node\r
+\r
+ if isinstance(inner_filter, nodes.Call):\r
+ args = inner_filter.args\r
+ kwargs = inner_filter.kwargs\r
+ dynamic_args = inner_filter.dyn_args\r
+ dynamic_kwargs = inner_filter.dyn_kwargs\r
+\r
+ inner_filter = inner_filter.node\r
+\r
+ inner_filter = nodes.Filter(\r
+ None,\r
+ inner_filter.name,\r
+ args,\r
+ kwargs,\r
+ dynamic_args,\r
+ dynamic_kwargs,\r
+ lineno=inner_filter.lineno\r
+ )\r
+ filter.node = inner_filter\r
+\r
+ return nodes.FilterBlock(\r
+ body,\r
+ filter_base,\r
+ lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+ )\r
+\r
def parse_block_for(ast):\r
target = None\r
iter = None\r