Permalink
Browse files

added a do tag (closes #446)

  • Loading branch information...
1 parent 5ae6e13 commit 4aba337cda03b0170cbf30b43cd82cb83146f2b4 @fabpot committed Dec 22, 2011
Showing with 131 additions and 1 deletion.
  1. +1 −0 CHANGELOG
  2. +1 −1 doc/tags/flush.rst
  3. +1 −0 doc/tags/index.rst
  4. +1 −0 lib/Twig/Extension/Core.php
  5. +39 −0 lib/Twig/Node/Do.php
  6. +42 −0 lib/Twig/TokenParser/Do.php
  7. +46 −0 test/Twig/Tests/Node/DoTest.php
View
@@ -1,5 +1,6 @@
* 1.5.0
+ * added a do tag
* added a flush tag
* added support for dynamically named filters and functions
* added a dump function to help debugging templates
View
@@ -2,7 +2,7 @@
=========
.. versionadded:: 1.5
- The use tag was added in Twig 1.5.
+ The flush tag was added in Twig 1.5.
The ``flush`` tag tells Twig to flush the output buffer:
View
@@ -19,3 +19,4 @@ Tags
autoescape
raw
flush
+ do
@@ -57,6 +57,7 @@ public function getTokenParsers()
new Twig_TokenParser_Set(),
new Twig_TokenParser_Spaceless(),
new Twig_TokenParser_Flush(),
+ new Twig_TokenParser_Do(),
);
}
View
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a do node.
+ *
+ * @package twig
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class Twig_Node_Do extends Twig_Node
+{
+ public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null)
+ {
+ parent::__construct(array('expr' => $expr), array(), $lineno, $tag);
+ }
+
+ /**
+ * Compiles the node to PHP.
+ *
+ * @param Twig_Compiler A Twig_Compiler instance
+ */
+ public function compile(Twig_Compiler $compiler)
+ {
+ $compiler
+ ->addDebugInfo($this)
+ ->write('')
+ ->subcompile($this->getNode('expr'))
+ ->raw(";\n")
+ ;
+ }
+}
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2011 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Evaluates an expression, disgarding the returned value.
+ */
+class Twig_TokenParser_Do extends Twig_TokenParser
+{
+ /**
+ * Parses a token and returns a node.
+ *
+ * @param Twig_Token $token A Twig_Token instance
+ *
+ * @return Twig_NodeInterface A Twig_NodeInterface instance
+ */
+ public function parse(Twig_Token $token)
+ {
+ $expr = $this->parser->getExpressionParser()->parseExpression();
+
+ $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
+
+ return new Twig_Node_Do($expr, $token->getLine(), $this->getTag());
+ }
+
+ /**
+ * Gets the tag name associated with this token parser.
+ *
+ * @param string The tag name
+ */
+ public function getTag()
+ {
+ return 'do';
+ }
+}
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+require_once dirname(__FILE__).'/TestCase.php';
+
+class Twig_Tests_Node_DoTest extends Twig_Tests_Node_TestCase
+{
+ /**
+ * @covers Twig_Node_Do::__construct
+ */
+ public function testConstructor()
+ {
+ $expr = new Twig_Node_Expression_Constant('foo', 0);
+ $node = new Twig_Node_Do($expr, 0);
+
+ $this->assertEquals($expr, $node->getNode('expr'));
+ }
+
+ /**
+ * @covers Twig_Node_Do::compile
+ * @dataProvider getTests
+ */
+ public function testCompile($node, $source, $environment = null)
+ {
+ parent::testCompile($node, $source, $environment);
+ }
+
+ public function getTests()
+ {
+ $tests = array();
+
+ $expr = new Twig_Node_Expression_Constant('foo', 0);
+ $node = new Twig_Node_Do($expr, 0);
+ $tests[] = array($node, '"foo";');
+
+ return $tests;
+ }
+}

0 comments on commit 4aba337

Please sign in to comment.