From: Fabien Potencier Date: Sat, 5 Feb 2011 22:57:22 +0000 (+0100) Subject: fixed filter tag X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=4501984e5dedc64eb3b6c9828c1b2320f54b08cd;p=web%2Fkonrad%2Ftwig.git fixed filter tag --- diff --git a/lib/Twig/ExpressionParser.php b/lib/Twig/ExpressionParser.php index 774ff54..fbf927e 100644 --- a/lib/Twig/ExpressionParser.php +++ b/lib/Twig/ExpressionParser.php @@ -245,7 +245,7 @@ class Twig_ExpressionParser } if ('block' === $node->getAttribute('name')) { - return new Twig_Node_Expression_BlockReference($args->getNode(0), $node->getLine()); + return new Twig_Node_Expression_BlockReference($args->getNode(0), false, $node->getLine()); } if (null !== $alias = $this->parser->getImportedFunction($node->getAttribute('name'))) { diff --git a/lib/Twig/Node/Expression/BlockReference.php b/lib/Twig/Node/Expression/BlockReference.php index 259967c..592e72e 100644 --- a/lib/Twig/Node/Expression/BlockReference.php +++ b/lib/Twig/Node/Expression/BlockReference.php @@ -18,9 +18,9 @@ */ class Twig_Node_Expression_BlockReference extends Twig_Node_Expression { - public function __construct(Twig_NodeInterface $name, $lineno, $tag = null) + public function __construct(Twig_NodeInterface $name, $asString = false, $lineno, $tag = null) { - parent::__construct(array('name' => $name), array(), $lineno, $tag); + parent::__construct(array('name' => $name), array('as_string' => $asString), $lineno, $tag); } /** @@ -30,6 +30,10 @@ class Twig_Node_Expression_BlockReference extends Twig_Node_Expression */ public function compile(Twig_Compiler $compiler) { + if ($this->getAttribute('as_string')) { + $compiler->raw('(string) '); + } + $compiler ->raw("\$this->renderBlock(") ->subcompile($this->getNode('name')) diff --git a/lib/Twig/TokenParser/Filter.php b/lib/Twig/TokenParser/Filter.php index 4ef8023..f702154 100644 --- a/lib/Twig/TokenParser/Filter.php +++ b/lib/Twig/TokenParser/Filter.php @@ -20,7 +20,7 @@ class Twig_TokenParser_Filter extends Twig_TokenParser public function parse(Twig_Token $token) { $name = $this->parser->getVarName(); - $ref = new Twig_Node_Expression_BlockReference(new Twig_Node_Expression_Constant($name, $token->getLine()), $token->getLine(), $this->getTag()); + $ref = new Twig_Node_Expression_BlockReference(new Twig_Node_Expression_Constant($name, $token->getLine()), true, $token->getLine(), $this->getTag()); $filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag()); $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); diff --git a/test/Twig/Tests/Fixtures/tags/filter/json_encode.test b/test/Twig/Tests/Fixtures/tags/filter/json_encode.test new file mode 100644 index 0000000..3e7148b --- /dev/null +++ b/test/Twig/Tests/Fixtures/tags/filter/json_encode.test @@ -0,0 +1,8 @@ +--TEST-- +"filter" tag applies a filter on its children +--TEMPLATE-- +{% filter json_encode|raw %}test{% endfilter %} +--DATA-- +return array() +--EXPECT-- +"test"