added a do tag (closes #446)

This commit is contained in:
Fabien Potencier
2011-12-22 22:32:27 +01:00
parent 5ae6e13aac
commit 4aba337cda
7 changed files with 131 additions and 1 deletions
+1
View File
@@ -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
+1 -1
View File
@@ -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:
+1
View File
@@ -19,3 +19,4 @@ Tags
autoescape
raw
flush
do
+1
View File
@@ -57,6 +57,7 @@ class Twig_Extension_Core extends Twig_Extension
new Twig_TokenParser_Set(),
new Twig_TokenParser_Spaceless(),
new Twig_TokenParser_Flush(),
new Twig_TokenParser_Do(),
);
}
+39
View File
@@ -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")
;
}
}
+42
View File
@@ -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';
}
}
+46
View File
@@ -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;
}
}