Revision 1862
Added by darkviper over 12 years ago
| branches/2.8.x/wb/include/Twig/Node/Print.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* (c) 2009 Armin Ronacher |
|
| 8 |
* |
|
| 9 |
* For the full copyright and license information, please view the LICENSE |
|
| 10 |
* file that was distributed with this source code. |
|
| 11 |
*/ |
|
| 12 |
|
|
| 13 |
/** |
|
| 14 |
* Represents a node that outputs an expression. |
|
| 15 |
* |
|
| 16 |
* @package twig |
|
| 17 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 18 |
*/ |
|
| 19 |
class Twig_Node_Print extends Twig_Node implements Twig_NodeOutputInterface |
|
| 20 |
{
|
|
| 21 |
public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null) |
|
| 22 |
{
|
|
| 23 |
parent::__construct(array('expr' => $expr), array(), $lineno, $tag);
|
|
| 24 |
} |
|
| 25 |
|
|
| 26 |
/** |
|
| 27 |
* Compiles the node to PHP. |
|
| 28 |
* |
|
| 29 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 30 |
*/ |
|
| 31 |
public function compile(Twig_Compiler $compiler) |
|
| 32 |
{
|
|
| 33 |
$compiler |
|
| 34 |
->addDebugInfo($this) |
|
| 35 |
->write('echo ')
|
|
| 36 |
->subcompile($this->getNode('expr'))
|
|
| 37 |
->raw(";\n")
|
|
| 38 |
; |
|
| 39 |
} |
|
| 40 |
} |
|
| 41 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/SandboxedPrint.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2010 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Twig_Node_SandboxedPrint adds a check for the __toString() method |
|
| 14 |
* when the variable is an object and the sandbox is activated. |
|
| 15 |
* |
|
| 16 |
* When there is a simple Print statement, like {{ article }},
|
|
| 17 |
* and if the sandbox is enabled, we need to check that the __toString() |
|
| 18 |
* method is allowed if 'article' is an object. |
|
| 19 |
* |
|
| 20 |
* @package twig |
|
| 21 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 22 |
*/ |
|
| 23 |
class Twig_Node_SandboxedPrint extends Twig_Node_Print |
|
| 24 |
{
|
|
| 25 |
public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null) |
|
| 26 |
{
|
|
| 27 |
parent::__construct($expr, $lineno, $tag); |
|
| 28 |
} |
|
| 29 |
|
|
| 30 |
/** |
|
| 31 |
* Compiles the node to PHP. |
|
| 32 |
* |
|
| 33 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 34 |
*/ |
|
| 35 |
public function compile(Twig_Compiler $compiler) |
|
| 36 |
{
|
|
| 37 |
$compiler |
|
| 38 |
->addDebugInfo($this) |
|
| 39 |
->write('echo $this->env->getExtension(\'sandbox\')->ensureToStringAllowed(')
|
|
| 40 |
->subcompile($this->getNode('expr'))
|
|
| 41 |
->raw(");\n")
|
|
| 42 |
; |
|
| 43 |
} |
|
| 44 |
|
|
| 45 |
/** |
|
| 46 |
* Removes node filters. |
|
| 47 |
* |
|
| 48 |
* This is mostly needed when another visitor adds filters (like the escaper one). |
|
| 49 |
* |
|
| 50 |
* @param Twig_Node $node A Node |
|
| 51 |
*/ |
|
| 52 |
protected function removeNodeFilter($node) |
|
| 53 |
{
|
|
| 54 |
if ($node instanceof Twig_Node_Expression_Filter) {
|
|
| 55 |
return $this->removeNodeFilter($node->getNode('node'));
|
|
| 56 |
} |
|
| 57 |
|
|
| 58 |
return $node; |
|
| 59 |
} |
|
| 60 |
} |
|
| 61 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Embed.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2012 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents an embed node. |
|
| 14 |
* |
|
| 15 |
* @package twig |
|
| 16 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 17 |
*/ |
|
| 18 |
class Twig_Node_Embed extends Twig_Node_Include |
|
| 19 |
{
|
|
| 20 |
// we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module) |
|
| 21 |
public function __construct($filename, $index, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) |
|
| 22 |
{
|
|
| 23 |
parent::__construct(new Twig_Node_Expression_Constant('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag);
|
|
| 24 |
|
|
| 25 |
$this->setAttribute('filename', $filename);
|
|
| 26 |
$this->setAttribute('index', $index);
|
|
| 27 |
} |
|
| 28 |
|
|
| 29 |
protected function addGetTemplate(Twig_Compiler $compiler) |
|
| 30 |
{
|
|
| 31 |
$compiler |
|
| 32 |
->write("\$this->env->loadTemplate(")
|
|
| 33 |
->string($this->getAttribute('filename'))
|
|
| 34 |
->raw(', ')
|
|
| 35 |
->string($this->getAttribute('index'))
|
|
| 36 |
->raw(")")
|
|
| 37 |
; |
|
| 38 |
} |
|
| 39 |
} |
|
| 40 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Import.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents an import node. |
|
| 14 |
* |
|
| 15 |
* @package twig |
|
| 16 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 17 |
*/ |
|
| 18 |
class Twig_Node_Import extends Twig_Node |
|
| 19 |
{
|
|
| 20 |
public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $var, $lineno, $tag = null) |
|
| 21 |
{
|
|
| 22 |
parent::__construct(array('expr' => $expr, 'var' => $var), array(), $lineno, $tag);
|
|
| 23 |
} |
|
| 24 |
|
|
| 25 |
/** |
|
| 26 |
* Compiles the node to PHP. |
|
| 27 |
* |
|
| 28 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 29 |
*/ |
|
| 30 |
public function compile(Twig_Compiler $compiler) |
|
| 31 |
{
|
|
| 32 |
$compiler |
|
| 33 |
->addDebugInfo($this) |
|
| 34 |
->write('')
|
|
| 35 |
->subcompile($this->getNode('var'))
|
|
| 36 |
->raw(' = ')
|
|
| 37 |
; |
|
| 38 |
|
|
| 39 |
if ($this->getNode('expr') instanceof Twig_Node_Expression_Name && '_self' === $this->getNode('expr')->getAttribute('name')) {
|
|
| 40 |
$compiler->raw("\$this");
|
|
| 41 |
} else {
|
|
| 42 |
$compiler |
|
| 43 |
->raw('$this->env->loadTemplate(')
|
|
| 44 |
->subcompile($this->getNode('expr'))
|
|
| 45 |
->raw(")")
|
|
| 46 |
; |
|
| 47 |
} |
|
| 48 |
|
|
| 49 |
$compiler->raw(";\n");
|
|
| 50 |
} |
|
| 51 |
} |
|
| 52 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/For.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* (c) 2009 Armin Ronacher |
|
| 8 |
* |
|
| 9 |
* For the full copyright and license information, please view the LICENSE |
|
| 10 |
* file that was distributed with this source code. |
|
| 11 |
*/ |
|
| 12 |
|
|
| 13 |
/** |
|
| 14 |
* Represents a for node. |
|
| 15 |
* |
|
| 16 |
* @package twig |
|
| 17 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 18 |
*/ |
|
| 19 |
class Twig_Node_For extends Twig_Node |
|
| 20 |
{
|
|
| 21 |
protected $loop; |
|
| 22 |
|
|
| 23 |
public function __construct(Twig_Node_Expression_AssignName $keyTarget, Twig_Node_Expression_AssignName $valueTarget, Twig_Node_Expression $seq, Twig_Node_Expression $ifexpr = null, Twig_NodeInterface $body, Twig_NodeInterface $else = null, $lineno, $tag = null) |
|
| 24 |
{
|
|
| 25 |
$body = new Twig_Node(array($body, $this->loop = new Twig_Node_ForLoop($lineno, $tag))); |
|
| 26 |
|
|
| 27 |
if (null !== $ifexpr) {
|
|
| 28 |
$body = new Twig_Node_If(new Twig_Node(array($ifexpr, $body)), null, $lineno, $tag); |
|
| 29 |
} |
|
| 30 |
|
|
| 31 |
parent::__construct(array('key_target' => $keyTarget, 'value_target' => $valueTarget, 'seq' => $seq, 'body' => $body, 'else' => $else), array('with_loop' => true, 'ifexpr' => null !== $ifexpr), $lineno, $tag);
|
|
| 32 |
} |
|
| 33 |
|
|
| 34 |
/** |
|
| 35 |
* Compiles the node to PHP. |
|
| 36 |
* |
|
| 37 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 38 |
*/ |
|
| 39 |
public function compile(Twig_Compiler $compiler) |
|
| 40 |
{
|
|
| 41 |
$compiler |
|
| 42 |
->addDebugInfo($this) |
|
| 43 |
// the (array) cast bypasses a PHP 5.2.6 bug |
|
| 44 |
->write("\$context['_parent'] = (array) \$context;\n")
|
|
| 45 |
->write("\$context['_seq'] = twig_ensure_traversable(")
|
|
| 46 |
->subcompile($this->getNode('seq'))
|
|
| 47 |
->raw(");\n")
|
|
| 48 |
; |
|
| 49 |
|
|
| 50 |
if (null !== $this->getNode('else')) {
|
|
| 51 |
$compiler->write("\$context['_iterated'] = false;\n");
|
|
| 52 |
} |
|
| 53 |
|
|
| 54 |
if ($this->getAttribute('with_loop')) {
|
|
| 55 |
$compiler |
|
| 56 |
->write("\$context['loop'] = array(\n")
|
|
| 57 |
->write(" 'parent' => \$context['_parent'],\n")
|
|
| 58 |
->write(" 'index0' => 0,\n")
|
|
| 59 |
->write(" 'index' => 1,\n")
|
|
| 60 |
->write(" 'first' => true,\n")
|
|
| 61 |
->write(");\n")
|
|
| 62 |
; |
|
| 63 |
|
|
| 64 |
if (!$this->getAttribute('ifexpr')) {
|
|
| 65 |
$compiler |
|
| 66 |
->write("if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof Countable)) {\n")
|
|
| 67 |
->indent() |
|
| 68 |
->write("\$length = count(\$context['_seq']);\n")
|
|
| 69 |
->write("\$context['loop']['revindex0'] = \$length - 1;\n")
|
|
| 70 |
->write("\$context['loop']['revindex'] = \$length;\n")
|
|
| 71 |
->write("\$context['loop']['length'] = \$length;\n")
|
|
| 72 |
->write("\$context['loop']['last'] = 1 === \$length;\n")
|
|
| 73 |
->outdent() |
|
| 74 |
->write("}\n")
|
|
| 75 |
; |
|
| 76 |
} |
|
| 77 |
} |
|
| 78 |
|
|
| 79 |
$this->loop->setAttribute('else', null !== $this->getNode('else'));
|
|
| 80 |
$this->loop->setAttribute('with_loop', $this->getAttribute('with_loop'));
|
|
| 81 |
$this->loop->setAttribute('ifexpr', $this->getAttribute('ifexpr'));
|
|
| 82 |
|
|
| 83 |
$compiler |
|
| 84 |
->write("foreach (\$context['_seq'] as ")
|
|
| 85 |
->subcompile($this->getNode('key_target'))
|
|
| 86 |
->raw(" => ")
|
|
| 87 |
->subcompile($this->getNode('value_target'))
|
|
| 88 |
->raw(") {\n")
|
|
| 89 |
->indent() |
|
| 90 |
->subcompile($this->getNode('body'))
|
|
| 91 |
->outdent() |
|
| 92 |
->write("}\n")
|
|
| 93 |
; |
|
| 94 |
|
|
| 95 |
if (null !== $this->getNode('else')) {
|
|
| 96 |
$compiler |
|
| 97 |
->write("if (!\$context['_iterated']) {\n")
|
|
| 98 |
->indent() |
|
| 99 |
->subcompile($this->getNode('else'))
|
|
| 100 |
->outdent() |
|
| 101 |
->write("}\n")
|
|
| 102 |
; |
|
| 103 |
} |
|
| 104 |
|
|
| 105 |
$compiler->write("\$_parent = \$context['_parent'];\n");
|
|
| 106 |
|
|
| 107 |
// remove some "private" loop variables (needed for nested loops) |
|
| 108 |
$compiler->write('unset($context[\'_seq\'], $context[\'_iterated\'], $context[\''.$this->getNode('key_target')->getAttribute('name').'\'], $context[\''.$this->getNode('value_target')->getAttribute('name').'\'], $context[\'_parent\'], $context[\'loop\']);'."\n");
|
|
| 109 |
|
|
| 110 |
// keep the values set in the inner context for variables defined in the outer context |
|
| 111 |
$compiler->write("\$context = array_merge(\$_parent, array_intersect_key(\$context, \$_parent));\n");
|
|
| 112 |
} |
|
| 113 |
} |
|
| 114 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Include.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* (c) 2009 Armin Ronacher |
|
| 8 |
* |
|
| 9 |
* For the full copyright and license information, please view the LICENSE |
|
| 10 |
* file that was distributed with this source code. |
|
| 11 |
*/ |
|
| 12 |
|
|
| 13 |
/** |
|
| 14 |
* Represents an include node. |
|
| 15 |
* |
|
| 16 |
* @package twig |
|
| 17 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 18 |
*/ |
|
| 19 |
class Twig_Node_Include extends Twig_Node implements Twig_NodeOutputInterface |
|
| 20 |
{
|
|
| 21 |
public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) |
|
| 22 |
{
|
|
| 23 |
parent::__construct(array('expr' => $expr, 'variables' => $variables), array('only' => (Boolean) $only, 'ignore_missing' => (Boolean) $ignoreMissing), $lineno, $tag);
|
|
| 24 |
} |
|
| 25 |
|
|
| 26 |
/** |
|
| 27 |
* Compiles the node to PHP. |
|
| 28 |
* |
|
| 29 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 30 |
*/ |
|
| 31 |
public function compile(Twig_Compiler $compiler) |
|
| 32 |
{
|
|
| 33 |
$compiler->addDebugInfo($this); |
|
| 34 |
|
|
| 35 |
if ($this->getAttribute('ignore_missing')) {
|
|
| 36 |
$compiler |
|
| 37 |
->write("try {\n")
|
|
| 38 |
->indent() |
|
| 39 |
; |
|
| 40 |
} |
|
| 41 |
|
|
| 42 |
$this->addGetTemplate($compiler); |
|
| 43 |
|
|
| 44 |
$compiler->raw('->display(');
|
|
| 45 |
|
|
| 46 |
$this->addTemplateArguments($compiler); |
|
| 47 |
|
|
| 48 |
$compiler->raw(");\n");
|
|
| 49 |
|
|
| 50 |
if ($this->getAttribute('ignore_missing')) {
|
|
| 51 |
$compiler |
|
| 52 |
->outdent() |
|
| 53 |
->write("} catch (Twig_Error_Loader \$e) {\n")
|
|
| 54 |
->indent() |
|
| 55 |
->write("// ignore missing template\n")
|
|
| 56 |
->outdent() |
|
| 57 |
->write("}\n\n")
|
|
| 58 |
; |
|
| 59 |
} |
|
| 60 |
} |
|
| 61 |
|
|
| 62 |
protected function addGetTemplate(Twig_Compiler $compiler) |
|
| 63 |
{
|
|
| 64 |
if ($this->getNode('expr') instanceof Twig_Node_Expression_Constant) {
|
|
| 65 |
$compiler |
|
| 66 |
->write("\$this->env->loadTemplate(")
|
|
| 67 |
->subcompile($this->getNode('expr'))
|
|
| 68 |
->raw(")")
|
|
| 69 |
; |
|
| 70 |
} else {
|
|
| 71 |
$compiler |
|
| 72 |
->write("\$template = \$this->env->resolveTemplate(")
|
|
| 73 |
->subcompile($this->getNode('expr'))
|
|
| 74 |
->raw(");\n")
|
|
| 75 |
->write('$template')
|
|
| 76 |
; |
|
| 77 |
} |
|
| 78 |
} |
|
| 79 |
|
|
| 80 |
protected function addTemplateArguments(Twig_Compiler $compiler) |
|
| 81 |
{
|
|
| 82 |
if (false === $this->getAttribute('only')) {
|
|
| 83 |
if (null === $this->getNode('variables')) {
|
|
| 84 |
$compiler->raw('$context');
|
|
| 85 |
} else {
|
|
| 86 |
$compiler |
|
| 87 |
->raw('array_merge($context, ')
|
|
| 88 |
->subcompile($this->getNode('variables'))
|
|
| 89 |
->raw(')')
|
|
| 90 |
; |
|
| 91 |
} |
|
| 92 |
} else {
|
|
| 93 |
if (null === $this->getNode('variables')) {
|
|
| 94 |
$compiler->raw('array()');
|
|
| 95 |
} else {
|
|
| 96 |
$compiler->subcompile($this->getNode('variables'));
|
|
| 97 |
} |
|
| 98 |
} |
|
| 99 |
} |
|
| 100 |
} |
|
| 101 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Block.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* (c) 2009 Armin Ronacher |
|
| 8 |
* |
|
| 9 |
* For the full copyright and license information, please view the LICENSE |
|
| 10 |
* file that was distributed with this source code. |
|
| 11 |
*/ |
|
| 12 |
|
|
| 13 |
/** |
|
| 14 |
* Represents a block node. |
|
| 15 |
* |
|
| 16 |
* @package twig |
|
| 17 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 18 |
*/ |
|
| 19 |
class Twig_Node_Block extends Twig_Node |
|
| 20 |
{
|
|
| 21 |
public function __construct($name, Twig_NodeInterface $body, $lineno, $tag = null) |
|
| 22 |
{
|
|
| 23 |
parent::__construct(array('body' => $body), array('name' => $name), $lineno, $tag);
|
|
| 24 |
} |
|
| 25 |
|
|
| 26 |
/** |
|
| 27 |
* Compiles the node to PHP. |
|
| 28 |
* |
|
| 29 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 30 |
*/ |
|
| 31 |
public function compile(Twig_Compiler $compiler) |
|
| 32 |
{
|
|
| 33 |
$compiler |
|
| 34 |
->addDebugInfo($this) |
|
| 35 |
->write(sprintf("public function block_%s(\$context, array \$blocks = array())\n", $this->getAttribute('name')), "{\n")
|
|
| 36 |
->indent() |
|
| 37 |
; |
|
| 38 |
|
|
| 39 |
$compiler |
|
| 40 |
->subcompile($this->getNode('body'))
|
|
| 41 |
->outdent() |
|
| 42 |
->write("}\n\n")
|
|
| 43 |
; |
|
| 44 |
} |
|
| 45 |
} |
|
| 46 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/ForLoop.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2011 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Internal node used by the for node. |
|
| 14 |
* |
|
| 15 |
* @package twig |
|
| 16 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 17 |
*/ |
|
| 18 |
class Twig_Node_ForLoop extends Twig_Node |
|
| 19 |
{
|
|
| 20 |
public function __construct($lineno, $tag = null) |
|
| 21 |
{
|
|
| 22 |
parent::__construct(array(), array('with_loop' => false, 'ifexpr' => false, 'else' => false), $lineno, $tag);
|
|
| 23 |
} |
|
| 24 |
|
|
| 25 |
/** |
|
| 26 |
* Compiles the node to PHP. |
|
| 27 |
* |
|
| 28 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 29 |
*/ |
|
| 30 |
public function compile(Twig_Compiler $compiler) |
|
| 31 |
{
|
|
| 32 |
if ($this->getAttribute('else')) {
|
|
| 33 |
$compiler->write("\$context['_iterated'] = true;\n");
|
|
| 34 |
} |
|
| 35 |
|
|
| 36 |
if ($this->getAttribute('with_loop')) {
|
|
| 37 |
$compiler |
|
| 38 |
->write("++\$context['loop']['index0'];\n")
|
|
| 39 |
->write("++\$context['loop']['index'];\n")
|
|
| 40 |
->write("\$context['loop']['first'] = false;\n")
|
|
| 41 |
; |
|
| 42 |
|
|
| 43 |
if (!$this->getAttribute('ifexpr')) {
|
|
| 44 |
$compiler |
|
| 45 |
->write("if (isset(\$context['loop']['length'])) {\n")
|
|
| 46 |
->indent() |
|
| 47 |
->write("--\$context['loop']['revindex0'];\n")
|
|
| 48 |
->write("--\$context['loop']['revindex'];\n")
|
|
| 49 |
->write("\$context['loop']['last'] = 0 === \$context['loop']['revindex0'];\n")
|
|
| 50 |
->outdent() |
|
| 51 |
->write("}\n")
|
|
| 52 |
; |
|
| 53 |
} |
|
| 54 |
} |
|
| 55 |
} |
|
| 56 |
} |
|
| 57 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Sandbox.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2010 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents a sandbox node. |
|
| 14 |
* |
|
| 15 |
* @package twig |
|
| 16 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 17 |
*/ |
|
| 18 |
class Twig_Node_Sandbox extends Twig_Node |
|
| 19 |
{
|
|
| 20 |
public function __construct(Twig_NodeInterface $body, $lineno, $tag = null) |
|
| 21 |
{
|
|
| 22 |
parent::__construct(array('body' => $body), array(), $lineno, $tag);
|
|
| 23 |
} |
|
| 24 |
|
|
| 25 |
/** |
|
| 26 |
* Compiles the node to PHP. |
|
| 27 |
* |
|
| 28 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 29 |
*/ |
|
| 30 |
public function compile(Twig_Compiler $compiler) |
|
| 31 |
{
|
|
| 32 |
$compiler |
|
| 33 |
->addDebugInfo($this) |
|
| 34 |
->write("\$sandbox = \$this->env->getExtension('sandbox');\n")
|
|
| 35 |
->write("if (!\$alreadySandboxed = \$sandbox->isSandboxed()) {\n")
|
|
| 36 |
->indent() |
|
| 37 |
->write("\$sandbox->enableSandbox();\n")
|
|
| 38 |
->outdent() |
|
| 39 |
->write("}\n")
|
|
| 40 |
->subcompile($this->getNode('body'))
|
|
| 41 |
->write("if (!\$alreadySandboxed) {\n")
|
|
| 42 |
->indent() |
|
| 43 |
->write("\$sandbox->disableSandbox();\n")
|
|
| 44 |
->outdent() |
|
| 45 |
->write("}\n")
|
|
| 46 |
; |
|
| 47 |
} |
|
| 48 |
} |
|
| 49 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/AutoEscape.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents an autoescape node. |
|
| 14 |
* |
|
| 15 |
* The value is the escaping strategy (can be html, js, ...) |
|
| 16 |
* |
|
| 17 |
* The true value is equivalent to html. |
|
| 18 |
* |
|
| 19 |
* If autoescaping is disabled, then the value is false. |
|
| 20 |
* |
|
| 21 |
* @package twig |
|
| 22 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 23 |
*/ |
|
| 24 |
class Twig_Node_AutoEscape extends Twig_Node |
|
| 25 |
{
|
|
| 26 |
public function __construct($value, Twig_NodeInterface $body, $lineno, $tag = 'autoescape') |
|
| 27 |
{
|
|
| 28 |
parent::__construct(array('body' => $body), array('value' => $value), $lineno, $tag);
|
|
| 29 |
} |
|
| 30 |
|
|
| 31 |
/** |
|
| 32 |
* Compiles the node to PHP. |
|
| 33 |
* |
|
| 34 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 35 |
*/ |
|
| 36 |
public function compile(Twig_Compiler $compiler) |
|
| 37 |
{
|
|
| 38 |
$compiler->subcompile($this->getNode('body'));
|
|
| 39 |
} |
|
| 40 |
} |
|
| 41 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Flush.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2011 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents a flush node. |
|
| 14 |
* |
|
| 15 |
* @package twig |
|
| 16 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 17 |
*/ |
|
| 18 |
class Twig_Node_Flush extends Twig_Node |
|
| 19 |
{
|
|
| 20 |
public function __construct($lineno, $tag) |
|
| 21 |
{
|
|
| 22 |
parent::__construct(array(), array(), $lineno, $tag); |
|
| 23 |
} |
|
| 24 |
|
|
| 25 |
/** |
|
| 26 |
* Compiles the node to PHP. |
|
| 27 |
* |
|
| 28 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 29 |
*/ |
|
| 30 |
public function compile(Twig_Compiler $compiler) |
|
| 31 |
{
|
|
| 32 |
$compiler |
|
| 33 |
->addDebugInfo($this) |
|
| 34 |
->write("flush();\n")
|
|
| 35 |
; |
|
| 36 |
} |
|
| 37 |
} |
|
| 38 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Text.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* (c) 2009 Armin Ronacher |
|
| 8 |
* |
|
| 9 |
* For the full copyright and license information, please view the LICENSE |
|
| 10 |
* file that was distributed with this source code. |
|
| 11 |
*/ |
|
| 12 |
|
|
| 13 |
/** |
|
| 14 |
* Represents a text node. |
|
| 15 |
* |
|
| 16 |
* @package twig |
|
| 17 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 18 |
*/ |
|
| 19 |
class Twig_Node_Text extends Twig_Node implements Twig_NodeOutputInterface |
|
| 20 |
{
|
|
| 21 |
public function __construct($data, $lineno) |
|
| 22 |
{
|
|
| 23 |
parent::__construct(array(), array('data' => $data), $lineno);
|
|
| 24 |
} |
|
| 25 |
|
|
| 26 |
/** |
|
| 27 |
* Compiles the node to PHP. |
|
| 28 |
* |
|
| 29 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 30 |
*/ |
|
| 31 |
public function compile(Twig_Compiler $compiler) |
|
| 32 |
{
|
|
| 33 |
$compiler |
|
| 34 |
->addDebugInfo($this) |
|
| 35 |
->write('echo ')
|
|
| 36 |
->string($this->getAttribute('data'))
|
|
| 37 |
->raw(";\n")
|
|
| 38 |
; |
|
| 39 |
} |
|
| 40 |
} |
|
| 41 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/SetTemp.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2011 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
class Twig_Node_SetTemp extends Twig_Node |
|
| 13 |
{
|
|
| 14 |
public function __construct($name, $lineno) |
|
| 15 |
{
|
|
| 16 |
parent::__construct(array(), array('name' => $name), $lineno);
|
|
| 17 |
} |
|
| 18 |
|
|
| 19 |
public function compile(Twig_Compiler $compiler) |
|
| 20 |
{
|
|
| 21 |
$name = $this->getAttribute('name');
|
|
| 22 |
$compiler |
|
| 23 |
->addDebugInfo($this) |
|
| 24 |
->write('if (isset($context[')
|
|
| 25 |
->string($name) |
|
| 26 |
->raw('])) { $_')
|
|
| 27 |
->raw($name) |
|
| 28 |
->raw('_ = $context[')
|
|
| 29 |
->repr($name) |
|
| 30 |
->raw(']; } else { $_')
|
|
| 31 |
->raw($name) |
|
| 32 |
->raw("_ = null; }\n")
|
|
| 33 |
; |
|
| 34 |
} |
|
| 35 |
} |
|
| 36 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/SandboxedModule.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* (c) 2009 Armin Ronacher |
|
| 8 |
* |
|
| 9 |
* For the full copyright and license information, please view the LICENSE |
|
| 10 |
* file that was distributed with this source code. |
|
| 11 |
*/ |
|
| 12 |
|
|
| 13 |
/** |
|
| 14 |
* Represents a module node. |
|
| 15 |
* |
|
| 16 |
* @package twig |
|
| 17 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 18 |
*/ |
|
| 19 |
class Twig_Node_SandboxedModule extends Twig_Node_Module |
|
| 20 |
{
|
|
| 21 |
protected $usedFilters; |
|
| 22 |
protected $usedTags; |
|
| 23 |
protected $usedFunctions; |
|
| 24 |
|
|
| 25 |
public function __construct(Twig_Node_Module $node, array $usedFilters, array $usedTags, array $usedFunctions) |
|
| 26 |
{
|
|
| 27 |
parent::__construct($node->getNode('body'), $node->getNode('parent'), $node->getNode('blocks'), $node->getNode('macros'), $node->getNode('traits'), $node->getAttribute('embedded_templates'), $node->getAttribute('filename'), $node->getLine(), $node->getNodeTag());
|
|
| 28 |
|
|
| 29 |
$this->setAttribute('index', $node->getAttribute('index'));
|
|
| 30 |
|
|
| 31 |
$this->usedFilters = $usedFilters; |
|
| 32 |
$this->usedTags = $usedTags; |
|
| 33 |
$this->usedFunctions = $usedFunctions; |
|
| 34 |
} |
|
| 35 |
|
|
| 36 |
protected function compileDisplayBody(Twig_Compiler $compiler) |
|
| 37 |
{
|
|
| 38 |
$compiler->write("\$this->checkSecurity();\n");
|
|
| 39 |
|
|
| 40 |
parent::compileDisplayBody($compiler); |
|
| 41 |
} |
|
| 42 |
|
|
| 43 |
protected function compileDisplayFooter(Twig_Compiler $compiler) |
|
| 44 |
{
|
|
| 45 |
parent::compileDisplayFooter($compiler); |
|
| 46 |
|
|
| 47 |
$compiler |
|
| 48 |
->write("protected function checkSecurity()\n", "{\n")
|
|
| 49 |
->indent() |
|
| 50 |
->write("\$this->env->getExtension('sandbox')->checkSecurity(\n")
|
|
| 51 |
->indent() |
|
| 52 |
->write(!$this->usedTags ? "array(),\n" : "array('".implode('\', \'', $this->usedTags)."'),\n")
|
|
| 53 |
->write(!$this->usedFilters ? "array(),\n" : "array('".implode('\', \'', $this->usedFilters)."'),\n")
|
|
| 54 |
->write(!$this->usedFunctions ? "array()\n" : "array('".implode('\', \'', $this->usedFunctions)."')\n")
|
|
| 55 |
->outdent() |
|
| 56 |
->write(");\n")
|
|
| 57 |
->outdent() |
|
| 58 |
->write("}\n\n")
|
|
| 59 |
; |
|
| 60 |
} |
|
| 61 |
} |
|
| 62 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Do.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2011 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents a do node. |
|
| 14 |
* |
|
| 15 |
* @package twig |
|
| 16 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 17 |
*/ |
|
| 18 |
class Twig_Node_Do extends Twig_Node |
|
| 19 |
{
|
|
| 20 |
public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null) |
|
| 21 |
{
|
|
| 22 |
parent::__construct(array('expr' => $expr), array(), $lineno, $tag);
|
|
| 23 |
} |
|
| 24 |
|
|
| 25 |
/** |
|
| 26 |
* Compiles the node to PHP. |
|
| 27 |
* |
|
| 28 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 29 |
*/ |
|
| 30 |
public function compile(Twig_Compiler $compiler) |
|
| 31 |
{
|
|
| 32 |
$compiler |
|
| 33 |
->addDebugInfo($this) |
|
| 34 |
->write('')
|
|
| 35 |
->subcompile($this->getNode('expr'))
|
|
| 36 |
->raw(";\n")
|
|
| 37 |
; |
|
| 38 |
} |
|
| 39 |
} |
|
| 40 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Macro.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents a macro node. |
|
| 14 |
* |
|
| 15 |
* @package twig |
|
| 16 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 17 |
*/ |
|
| 18 |
class Twig_Node_Macro extends Twig_Node |
|
| 19 |
{
|
|
| 20 |
public function __construct($name, Twig_NodeInterface $body, Twig_NodeInterface $arguments, $lineno, $tag = null) |
|
| 21 |
{
|
|
| 22 |
parent::__construct(array('body' => $body, 'arguments' => $arguments), array('name' => $name), $lineno, $tag);
|
|
| 23 |
} |
|
| 24 |
|
|
| 25 |
/** |
|
| 26 |
* Compiles the node to PHP. |
|
| 27 |
* |
|
| 28 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 29 |
*/ |
|
| 30 |
public function compile(Twig_Compiler $compiler) |
|
| 31 |
{
|
|
| 32 |
$arguments = array(); |
|
| 33 |
foreach ($this->getNode('arguments') as $argument) {
|
|
| 34 |
$arguments[] = '$_'.$argument->getAttribute('name').' = null';
|
|
| 35 |
} |
|
| 36 |
|
|
| 37 |
$compiler |
|
| 38 |
->addDebugInfo($this) |
|
| 39 |
->write(sprintf("public function get%s(%s)\n", $this->getAttribute('name'), implode(', ', $arguments)), "{\n")
|
|
| 40 |
->indent() |
|
| 41 |
; |
|
| 42 |
|
|
| 43 |
if (!count($this->getNode('arguments'))) {
|
|
| 44 |
$compiler->write("\$context = \$this->env->getGlobals();\n\n");
|
|
| 45 |
} else {
|
|
| 46 |
$compiler |
|
| 47 |
->write("\$context = \$this->env->mergeGlobals(array(\n")
|
|
| 48 |
->indent() |
|
| 49 |
; |
|
| 50 |
|
|
| 51 |
foreach ($this->getNode('arguments') as $argument) {
|
|
| 52 |
$compiler |
|
| 53 |
->write('')
|
|
| 54 |
->string($argument->getAttribute('name'))
|
|
| 55 |
->raw(' => $_'.$argument->getAttribute('name'))
|
|
| 56 |
->raw(",\n")
|
|
| 57 |
; |
|
| 58 |
} |
|
| 59 |
|
|
| 60 |
$compiler |
|
| 61 |
->outdent() |
|
| 62 |
->write("));\n\n")
|
|
| 63 |
; |
|
| 64 |
} |
|
| 65 |
|
|
| 66 |
$compiler |
|
| 67 |
->write("\$blocks = array();\n\n")
|
|
| 68 |
->write("ob_start();\n")
|
|
| 69 |
->write("try {\n")
|
|
| 70 |
->indent() |
|
| 71 |
->subcompile($this->getNode('body'))
|
|
| 72 |
->outdent() |
|
| 73 |
->write("} catch (Exception \$e) {\n")
|
|
| 74 |
->indent() |
|
| 75 |
->write("ob_end_clean();\n\n")
|
|
| 76 |
->write("throw \$e;\n")
|
|
| 77 |
->outdent() |
|
| 78 |
->write("}\n\n")
|
|
| 79 |
->write("return ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset());\n")
|
|
| 80 |
->outdent() |
|
| 81 |
->write("}\n\n")
|
|
| 82 |
; |
|
| 83 |
} |
|
| 84 |
} |
|
| 85 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Set.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2010 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents a set node. |
|
| 14 |
* |
|
| 15 |
* @package twig |
|
| 16 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 17 |
*/ |
|
| 18 |
class Twig_Node_Set extends Twig_Node |
|
| 19 |
{
|
|
| 20 |
public function __construct($capture, Twig_NodeInterface $names, Twig_NodeInterface $values, $lineno, $tag = null) |
|
| 21 |
{
|
|
| 22 |
parent::__construct(array('names' => $names, 'values' => $values), array('capture' => $capture, 'safe' => false), $lineno, $tag);
|
|
| 23 |
|
|
| 24 |
/* |
|
| 25 |
* Optimizes the node when capture is used for a large block of text. |
|
| 26 |
* |
|
| 27 |
* {% set foo %}foo{% endset %} is compiled to $context['foo'] = new Twig_Markup("foo");
|
|
| 28 |
*/ |
|
| 29 |
if ($this->getAttribute('capture')) {
|
|
| 30 |
$this->setAttribute('safe', true);
|
|
| 31 |
|
|
| 32 |
$values = $this->getNode('values');
|
|
| 33 |
if ($values instanceof Twig_Node_Text) {
|
|
| 34 |
$this->setNode('values', new Twig_Node_Expression_Constant($values->getAttribute('data'), $values->getLine()));
|
|
| 35 |
$this->setAttribute('capture', false);
|
|
| 36 |
} |
|
| 37 |
} |
|
| 38 |
} |
|
| 39 |
|
|
| 40 |
/** |
|
| 41 |
* Compiles the node to PHP. |
|
| 42 |
* |
|
| 43 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 44 |
*/ |
|
| 45 |
public function compile(Twig_Compiler $compiler) |
|
| 46 |
{
|
|
| 47 |
$compiler->addDebugInfo($this); |
|
| 48 |
|
|
| 49 |
if (count($this->getNode('names')) > 1) {
|
|
| 50 |
$compiler->write('list(');
|
|
| 51 |
foreach ($this->getNode('names') as $idx => $node) {
|
|
| 52 |
if ($idx) {
|
|
| 53 |
$compiler->raw(', ');
|
|
| 54 |
} |
|
| 55 |
|
|
| 56 |
$compiler->subcompile($node); |
|
| 57 |
} |
|
| 58 |
$compiler->raw(')');
|
|
| 59 |
} else {
|
|
| 60 |
if ($this->getAttribute('capture')) {
|
|
| 61 |
$compiler |
|
| 62 |
->write("ob_start();\n")
|
|
| 63 |
->subcompile($this->getNode('values'))
|
|
| 64 |
; |
|
| 65 |
} |
|
| 66 |
|
|
| 67 |
$compiler->subcompile($this->getNode('names'), false);
|
|
| 68 |
|
|
| 69 |
if ($this->getAttribute('capture')) {
|
|
| 70 |
$compiler->raw(" = ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())");
|
|
| 71 |
} |
|
| 72 |
} |
|
| 73 |
|
|
| 74 |
if (!$this->getAttribute('capture')) {
|
|
| 75 |
$compiler->raw(' = ');
|
|
| 76 |
|
|
| 77 |
if (count($this->getNode('names')) > 1) {
|
|
| 78 |
$compiler->write('array(');
|
|
| 79 |
foreach ($this->getNode('values') as $idx => $value) {
|
|
| 80 |
if ($idx) {
|
|
| 81 |
$compiler->raw(', ');
|
|
| 82 |
} |
|
| 83 |
|
|
| 84 |
$compiler->subcompile($value); |
|
| 85 |
} |
|
| 86 |
$compiler->raw(')');
|
|
| 87 |
} else {
|
|
| 88 |
if ($this->getAttribute('safe')) {
|
|
| 89 |
$compiler |
|
| 90 |
->raw("('' === \$tmp = ")
|
|
| 91 |
->subcompile($this->getNode('values'))
|
|
| 92 |
->raw(") ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())")
|
|
| 93 |
; |
|
| 94 |
} else {
|
|
| 95 |
$compiler->subcompile($this->getNode('values'));
|
|
| 96 |
} |
|
| 97 |
} |
|
| 98 |
} |
|
| 99 |
|
|
| 100 |
$compiler->raw(";\n");
|
|
| 101 |
} |
|
| 102 |
} |
|
| 103 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Spaceless.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2010 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents a spaceless node. |
|
| 14 |
* |
|
| 15 |
* It removes spaces between HTML tags. |
|
| 16 |
* |
|
| 17 |
* @package twig |
|
| 18 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 19 |
*/ |
|
| 20 |
class Twig_Node_Spaceless extends Twig_Node |
|
| 21 |
{
|
|
| 22 |
public function __construct(Twig_NodeInterface $body, $lineno, $tag = 'spaceless') |
|
| 23 |
{
|
|
| 24 |
parent::__construct(array('body' => $body), array(), $lineno, $tag);
|
|
| 25 |
} |
|
| 26 |
|
|
| 27 |
/** |
|
| 28 |
* Compiles the node to PHP. |
|
| 29 |
* |
|
| 30 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 31 |
*/ |
|
| 32 |
public function compile(Twig_Compiler $compiler) |
|
| 33 |
{
|
|
| 34 |
$compiler |
|
| 35 |
->addDebugInfo($this) |
|
| 36 |
->write("ob_start();\n")
|
|
| 37 |
->subcompile($this->getNode('body'))
|
|
| 38 |
->write("echo trim(preg_replace('/>\s+</', '><', ob_get_clean()));\n")
|
|
| 39 |
; |
|
| 40 |
} |
|
| 41 |
} |
|
| 42 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Body.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2011 Fabien Potencier |
|
| 7 |
* |
|
| 8 |
* For the full copyright and license information, please view the LICENSE |
|
| 9 |
* file that was distributed with this source code. |
|
| 10 |
*/ |
|
| 11 |
|
|
| 12 |
/** |
|
| 13 |
* Represents a body node. |
|
| 14 |
* |
|
| 15 |
* @package twig |
|
| 16 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 17 |
*/ |
|
| 18 |
class Twig_Node_Body extends Twig_Node |
|
| 19 |
{
|
|
| 20 |
} |
|
| 21 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/If.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* (c) 2009 Armin Ronacher |
|
| 8 |
* |
|
| 9 |
* For the full copyright and license information, please view the LICENSE |
|
| 10 |
* file that was distributed with this source code. |
|
| 11 |
*/ |
|
| 12 |
|
|
| 13 |
/** |
|
| 14 |
* Represents an if node. |
|
| 15 |
* |
|
| 16 |
* @package twig |
|
| 17 |
* @author Fabien Potencier <fabien@symfony.com> |
|
| 18 |
*/ |
|
| 19 |
class Twig_Node_If extends Twig_Node |
|
| 20 |
{
|
|
| 21 |
public function __construct(Twig_NodeInterface $tests, Twig_NodeInterface $else = null, $lineno, $tag = null) |
|
| 22 |
{
|
|
| 23 |
parent::__construct(array('tests' => $tests, 'else' => $else), array(), $lineno, $tag);
|
|
| 24 |
} |
|
| 25 |
|
|
| 26 |
/** |
|
| 27 |
* Compiles the node to PHP. |
|
| 28 |
* |
|
| 29 |
* @param Twig_Compiler A Twig_Compiler instance |
|
| 30 |
*/ |
|
| 31 |
public function compile(Twig_Compiler $compiler) |
|
| 32 |
{
|
|
| 33 |
$compiler->addDebugInfo($this); |
|
| 34 |
for ($i = 0; $i < count($this->getNode('tests')); $i += 2) {
|
|
| 35 |
if ($i > 0) {
|
|
| 36 |
$compiler |
|
| 37 |
->outdent() |
|
| 38 |
->write("} elseif (")
|
|
| 39 |
; |
|
| 40 |
} else {
|
|
| 41 |
$compiler |
|
| 42 |
->write('if (')
|
|
| 43 |
; |
|
| 44 |
} |
|
| 45 |
|
|
| 46 |
$compiler |
|
| 47 |
->subcompile($this->getNode('tests')->getNode($i))
|
|
| 48 |
->raw(") {\n")
|
|
| 49 |
->indent() |
|
| 50 |
->subcompile($this->getNode('tests')->getNode($i + 1))
|
|
| 51 |
; |
|
| 52 |
} |
|
| 53 |
|
|
| 54 |
if ($this->hasNode('else') && null !== $this->getNode('else')) {
|
|
| 55 |
$compiler |
|
| 56 |
->outdent() |
|
| 57 |
->write("} else {\n")
|
|
| 58 |
->indent() |
|
| 59 |
->subcompile($this->getNode('else'))
|
|
| 60 |
; |
|
| 61 |
} |
|
| 62 |
|
|
| 63 |
$compiler |
|
| 64 |
->outdent() |
|
| 65 |
->write("}\n");
|
|
| 66 |
} |
|
| 67 |
} |
|
| 68 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Expression/Conditional.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* (c) 2009 Armin Ronacher |
|
| 8 |
* |
|
| 9 |
* For the full copyright and license information, please view the LICENSE |
|
| 10 |
* file that was distributed with this source code. |
|
| 11 |
*/ |
|
| 12 |
class Twig_Node_Expression_Conditional extends Twig_Node_Expression |
|
| 13 |
{
|
|
| 14 |
public function __construct(Twig_Node_Expression $expr1, Twig_Node_Expression $expr2, Twig_Node_Expression $expr3, $lineno) |
|
| 15 |
{
|
|
| 16 |
parent::__construct(array('expr1' => $expr1, 'expr2' => $expr2, 'expr3' => $expr3), array(), $lineno);
|
|
| 17 |
} |
|
| 18 |
|
|
| 19 |
public function compile(Twig_Compiler $compiler) |
|
| 20 |
{
|
|
| 21 |
$compiler |
|
| 22 |
->raw('((')
|
|
| 23 |
->subcompile($this->getNode('expr1'))
|
|
| 24 |
->raw(') ? (')
|
|
| 25 |
->subcompile($this->getNode('expr2'))
|
|
| 26 |
->raw(') : (')
|
|
| 27 |
->subcompile($this->getNode('expr3'))
|
|
| 28 |
->raw('))')
|
|
| 29 |
; |
|
| 30 |
} |
|
| 31 |
} |
|
| 32 | 0 | |
| branches/2.8.x/wb/include/Twig/Node/Expression/AssignName.php | ||
|---|---|---|
| 1 |
<?php |
|
| 2 |
|
|
| 3 |
/* |
|
| 4 |
* This file is part of Twig. |
|
| 5 |
* |
|
| 6 |
* (c) 2009 Fabien Potencier |
|
| 7 |
* (c) 2009 Armin Ronacher |
|
| 8 |
* |
|
| 9 |
* For the full copyright and license information, please view the LICENSE |
|
| 10 |
* file that was distributed with this source code. |
|
| 11 |
*/ |
|
Also available in: Unified diff
updated Twig template engine to stable version 1.12.2