diff options
| author | Michael Save <savetheinternet@tinyboard.org> | 2012-04-09 20:52:26 +1000 |
|---|---|---|
| committer | Michael Save <savetheinternet@tinyboard.org> | 2012-04-09 20:52:26 +1000 |
| commit | 874b8cbf002e9d8bf0ff39671e1501165016320a (patch) | |
| tree | 1428acec23fef6c607e10fd355d88af31c2029ed /inc/lib/Twig/Node/Include.php | |
| parent | 69c9a9dd452299e0e8f7335966a1d0b4036df583 (diff) | |
inc/contrib -> inc/lib
Diffstat (limited to 'inc/lib/Twig/Node/Include.php')
| -rw-r--r-- | inc/lib/Twig/Node/Include.php | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/inc/lib/Twig/Node/Include.php b/inc/lib/Twig/Node/Include.php new file mode 100644 index 00000000..467749b5 --- /dev/null +++ b/inc/lib/Twig/Node/Include.php @@ -0,0 +1,88 @@ +<?php + +/* + * This file is part of Twig. + * + * (c) 2009 Fabien Potencier + * (c) 2009 Armin Ronacher + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Represents an include node. + * + * @package twig + * @author Fabien Potencier <fabien@symfony.com> + */ +class Twig_Node_Include extends Twig_Node implements Twig_NodeOutputInterface +{ + public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) + { + parent::__construct(array('expr' => $expr, 'variables' => $variables), array('only' => (Boolean) $only, 'ignore_missing' => (Boolean) $ignoreMissing), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler->addDebugInfo($this); + + if ($this->getAttribute('ignore_missing')) { + $compiler + ->write("try {\n") + ->indent() + ; + } + + if ($this->getNode('expr') instanceof Twig_Node_Expression_Constant) { + $compiler + ->write("\$this->env->loadTemplate(") + ->subcompile($this->getNode('expr')) + ->raw(")->display(") + ; + } else { + $compiler + ->write("\$template = \$this->env->resolveTemplate(") + ->subcompile($this->getNode('expr')) + ->raw(");\n") + ->write('$template->display(') + ; + } + + if (false === $this->getAttribute('only')) { + if (null === $this->getNode('variables')) { + $compiler->raw('$context'); + } else { + $compiler + ->raw('array_merge($context, ') + ->subcompile($this->getNode('variables')) + ->raw(')') + ; + } + } else { + if (null === $this->getNode('variables')) { + $compiler->raw('array()'); + } else { + $compiler->subcompile($this->getNode('variables')); + } + } + + $compiler->raw(");\n"); + + if ($this->getAttribute('ignore_missing')) { + $compiler + ->outdent() + ->write("} catch (Twig_Error_Loader \$e) {\n") + ->indent() + ->write("// ignore missing template\n") + ->outdent() + ->write("}\n\n") + ; + } + } +} |
