source: pro-violet-viettel/www/deploy/20150304/application/third_party/Twig/Node/Macro.php @ 780

Last change on this file since 780 was 780, checked in by dungnv, 10 years ago
File size: 1.8 KB
Line 
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.potencier@symfony-project.com>
17 */
18class 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            ->write("\$context = array_merge(\$this->env->getGlobals(), array(\n")
42            ->indent()
43        ;
44
45        foreach ($this->getNode('arguments') as $argument) {
46            $compiler
47                ->write('')
48                ->string($argument->getAttribute('name'))
49                ->raw(' => $'.$argument->getAttribute('name'))
50                ->raw(",\n")
51            ;
52        }
53
54        $compiler
55            ->outdent()
56            ->write("));\n\n")
57            ->write("ob_start();\n")
58            ->subcompile($this->getNode('body'))
59            ->raw("\n")
60            ->write("return ob_get_clean();\n")
61            ->outdent()
62            ->write("}\n\n")
63        ;
64    }
65}
Note: See TracBrowser for help on using the repository browser.