<?php /* * This file is part of Twig. * * (c) Fabien Potencier * (c) Armin Ronacher * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Twig\Node; use Twig\Compiler; /** * Represents a node in the AST. * * @author Fabien Potencier <fabien@symfony.com> */ class Node implements \Countable, \IteratorAggregate { protected $nodes; protected $attributes; protected $lineno; protected $tag; private $name; /** * Constructor. * * The nodes are automatically made available as properties ($this->node). * The attributes are automatically made available as array items ($this['name']). * * @param array $nodes An array of named nodes * @param array $attributes An array of attributes (should not be nodes) * @param int $lineno The line number * @param string $tag The tag name associated with the Node */ public function __construct(array $nodes = [], array $attributes = [], $lineno = 0, $tag = null) { foreach ($nodes as $name => $node) { if (!$node instanceof self) { throw new \InvalidArgumentException(sprintf('Using "%s" for the value of node "%s" of "%s" is not supported. You must pass a \Twig\Node\Node instance.', \is_object($node) ? \get_class($node) : null === $node ? 'null' : \gettype($node), $name, \get_class($this))); } } $this->nodes = $nodes; $this->attributes = $attributes; $this->lineno = $lineno; $this->tag = $tag; } public function __toString() { $attributes = []; foreach ($this->attributes as $name => $value) { $attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true))); } $repr = [\get_class($this).'('.implode(', ', $attributes)]; if (\count($this->nodes)) { foreach ($this->nodes as $name => $node) { $len = \strlen($name) + 4; $noderepr = []; foreach (explode("\n", (string) $node) as $line) { $noderepr[] = str_repeat(' ', $len).$line; } $repr[] = sprintf(' %s: %s', $name, ltrim(implode("\n", $noderepr))); } $repr[] = ')'; } else { $repr[0] .= ')'; } return implode("\n", $repr); } public function compile(Compiler $compiler) { foreach ($this->nodes as $node) { $node->compile($compiler); } } public function getTemplateLine() { return $this->lineno; } public function getNodeTag() { return $this->tag; } /** * @return bool */ public function hasAttribute($name) { return \array_key_exists($name, $this->attributes); } /** * @return mixed */ public function getAttribute($name) { if (!\array_key_exists($name, $this->attributes)) { throw new \LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, \get_class($this))); } return $this->attributes[$name]; } /** * @param string $name * @param mixed $value */ public function setAttribute($name, $value) { $this->attributes[$name] = $value; } public function removeAttribute($name) { unset($this->attributes[$name]); } /** * @return bool */ public function hasNode($name) { return isset($this->nodes[$name]); } /** * @return Node */ public function getNode($name) { if (!isset($this->nodes[$name])) { throw new \LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, \get_class($this))); } return $this->nodes[$name]; } public function setNode($name, self $node) { $this->nodes[$name] = $node; } public function removeNode($name) { unset($this->nodes[$name]); } public function count() { return \count($this->nodes); } public function getIterator() { return new \ArrayIterator($this->nodes); } public function setTemplateName($name) { $this->name = $name; foreach ($this->nodes as $node) { $node->setTemplateName($name); } } public function getTemplateName() { return $this->name; } } class_alias('Twig\Node\Node', 'Twig_Node'); // Ensure that the aliased name is loaded to keep BC for classes implementing the typehint with the old aliased name. class_exists('Twig\Compiler');
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Expression | Folder | 0755 |
|
|
AutoEscapeNode.php | File | 904 B | 0644 |
|
BlockNode.php | File | 1014 B | 0644 |
|
BlockReferenceNode.php | File | 881 B | 0644 |
|
BodyNode.php | File | 397 B | 0644 |
|
CheckSecurityNode.php | File | 3 KB | 0644 |
|
CheckToStringNode.php | File | 1.1 KB | 0644 |
|
DeprecatedNode.php | File | 1.4 KB | 0644 |
|
DoNode.php | File | 834 B | 0644 |
|
EmbedNode.php | File | 1.42 KB | 0644 |
|
FlushNode.php | File | 689 B | 0644 |
|
ForLoopNode.php | File | 1.55 KB | 0644 |
|
ForNode.php | File | 4.21 KB | 0644 |
|
IfNode.php | File | 1.65 KB | 0644 |
|
ImportNode.php | File | 1.43 KB | 0644 |
|
IncludeNode.php | File | 2.53 KB | 0644 |
|
MacroNode.php | File | 2.97 KB | 0644 |
|
ModuleNode.php | File | 14.84 KB | 0644 |
|
Node.php | File | 4.66 KB | 0644 |
|
NodeCaptureInterface.php | File | 461 B | 0644 |
|
NodeOutputInterface.php | File | 438 B | 0644 |
|
PrintNode.php | File | 925 B | 0644 |
|
SandboxNode.php | File | 1.12 KB | 0644 |
|
SandboxedPrintNode.php | File | 1.36 KB | 0644 |
|
SetNode.php | File | 3.13 KB | 0644 |
|
SpacelessNode.php | File | 1010 B | 0644 |
|
TextNode.php | File | 818 B | 0644 |
|
WithNode.php | File | 2 KB | 0644 |
|