source: pro-violet-viettel/sourcecode/application/third_party/Twig/TokenParser/Macro.php @ 345

Last change on this file since 345 was 345, checked in by quyenla, 11 years ago

collaborator page

File size: 1.7 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 */
11class Twig_TokenParser_Macro extends Twig_TokenParser
12{
13    /**
14     * Parses a token and returns a node.
15     *
16     * @param Twig_Token $token A Twig_Token instance
17     *
18     * @return Twig_NodeInterface A Twig_NodeInterface instance
19     */
20    public function parse(Twig_Token $token)
21    {
22        $lineno = $token->getLine();
23        $name = $this->parser->getStream()->expect(Twig_Token::NAME_TYPE)->getValue();
24
25        $arguments = $this->parser->getExpressionParser()->parseArguments();
26
27        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
28        $this->parser->pushLocalScope();
29        $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true);
30        if ($this->parser->getStream()->test(Twig_Token::NAME_TYPE)) {
31            $value = $this->parser->getStream()->next()->getValue();
32
33            if ($value != $name) {
34                throw new Twig_Error_Syntax(sprintf("Expected endmacro for macro '$name' (but %s given)", $value), $lineno);
35            }
36        }
37        $this->parser->popLocalScope();
38        $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
39
40        $this->parser->setMacro($name, new Twig_Node_Macro($name, $body, $arguments, $lineno, $this->getTag()));
41
42        return null;
43    }
44
45    public function decideBlockEnd(Twig_Token $token)
46    {
47        return $token->test('endmacro');
48    }
49
50    /**
51     * Gets the tag name associated with this token parser.
52     *
53     * @param string The tag name
54     */
55    public function getTag()
56    {
57        return 'macro';
58    }
59}
Note: See TracBrowser for help on using the repository browser.