6c6743eeb3f5c142518f47d3a88aaabbd412a74f
[yaffs-website] / vendor / twig / twig / lib / Twig / Node / Set.php
1 <?php
2
3 /*
4  * This file is part of Twig.
5  *
6  * (c) 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  * @author Fabien Potencier <fabien@symfony.com>
16  */
17 class Twig_Node_Set extends Twig_Node implements Twig_NodeCaptureInterface
18 {
19     public function __construct($capture, Twig_NodeInterface $names, Twig_NodeInterface $values, $lineno, $tag = null)
20     {
21         parent::__construct(array('names' => $names, 'values' => $values), array('capture' => $capture, 'safe' => false), $lineno, $tag);
22
23         /*
24          * Optimizes the node when capture is used for a large block of text.
25          *
26          * {% set foo %}foo{% endset %} is compiled to $context['foo'] = new Twig_Markup("foo");
27          */
28         if ($this->getAttribute('capture')) {
29             $this->setAttribute('safe', true);
30
31             $values = $this->getNode('values');
32             if ($values instanceof Twig_Node_Text) {
33                 $this->setNode('values', new Twig_Node_Expression_Constant($values->getAttribute('data'), $values->getTemplateLine()));
34                 $this->setAttribute('capture', false);
35             }
36         }
37     }
38
39     public function compile(Twig_Compiler $compiler)
40     {
41         $compiler->addDebugInfo($this);
42
43         if (count($this->getNode('names')) > 1) {
44             $compiler->write('list(');
45             foreach ($this->getNode('names') as $idx => $node) {
46                 if ($idx) {
47                     $compiler->raw(', ');
48                 }
49
50                 $compiler->subcompile($node);
51             }
52             $compiler->raw(')');
53         } else {
54             if ($this->getAttribute('capture')) {
55                 $compiler
56                     ->write("ob_start();\n")
57                     ->subcompile($this->getNode('values'))
58                 ;
59             }
60
61             $compiler->subcompile($this->getNode('names'), false);
62
63             if ($this->getAttribute('capture')) {
64                 $compiler->raw(" = ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())");
65             }
66         }
67
68         if (!$this->getAttribute('capture')) {
69             $compiler->raw(' = ');
70
71             if (count($this->getNode('names')) > 1) {
72                 $compiler->write('array(');
73                 foreach ($this->getNode('values') as $idx => $value) {
74                     if ($idx) {
75                         $compiler->raw(', ');
76                     }
77
78                     $compiler->subcompile($value);
79                 }
80                 $compiler->raw(')');
81             } else {
82                 if ($this->getAttribute('safe')) {
83                     $compiler
84                         ->raw("('' === \$tmp = ")
85                         ->subcompile($this->getNode('values'))
86                         ->raw(") ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())")
87                     ;
88                 } else {
89                     $compiler->subcompile($this->getNode('values'));
90                 }
91             }
92         }
93
94         $compiler->raw(";\n");
95     }
96 }
97
98 class_alias('Twig_Node_Set', 'Twig\Node\SetNode', false);