Dotclear

source: inc/libs/twig/Token.php @ 991:e42f791e0975

Revision 991:e42f791e0975, 6.2 KB checked in by Dsls <dsls@…>, 13 years ago (diff)

New twig branch. 1st step : add twig 1.11.1

Line 
1<?php
2
3/*
4 * This file is part of Twig.
5 *
6 * (c) 2009 Fabien Potencier
7 * (c) 2009 Armin Ronacher
8 *
9 * For the full copyright and license information, please view the LICENSE
10 * file that was distributed with this source code.
11 */
12
13/**
14 * Represents a Token.
15 *
16 * @package twig
17 * @author  Fabien Potencier <fabien@symfony.com>
18 */
19class Twig_Token
20{
21    protected $value;
22    protected $type;
23    protected $lineno;
24
25    const EOF_TYPE                  = -1;
26    const TEXT_TYPE                 = 0;
27    const BLOCK_START_TYPE          = 1;
28    const VAR_START_TYPE            = 2;
29    const BLOCK_END_TYPE            = 3;
30    const VAR_END_TYPE              = 4;
31    const NAME_TYPE                 = 5;
32    const NUMBER_TYPE               = 6;
33    const STRING_TYPE               = 7;
34    const OPERATOR_TYPE             = 8;
35    const PUNCTUATION_TYPE          = 9;
36    const INTERPOLATION_START_TYPE  = 10;
37    const INTERPOLATION_END_TYPE    = 11;
38
39    /**
40     * Constructor.
41     *
42     * @param integer $type   The type of the token
43     * @param string  $value  The token value
44     * @param integer $lineno The line position in the source
45     */
46    public function __construct($type, $value, $lineno)
47    {
48        $this->type   = $type;
49        $this->value  = $value;
50        $this->lineno = $lineno;
51    }
52
53    /**
54     * Returns a string representation of the token.
55     *
56     * @return string A string representation of the token
57     */
58    public function __toString()
59    {
60        return sprintf('%s(%s)', self::typeToString($this->type, true, $this->lineno), $this->value);
61    }
62
63    /**
64     * Tests the current token for a type and/or a value.
65     *
66     * Parameters may be:
67     * * just type
68     * * type and value (or array of possible values)
69     * * just value (or array of possible values) (NAME_TYPE is used as type)
70     *
71     * @param array|integer     $type   The type to test
72     * @param array|string|null $values The token value
73     *
74     * @return Boolean
75     */
76    public function test($type, $values = null)
77    {
78        if (null === $values && !is_int($type)) {
79            $values = $type;
80            $type = self::NAME_TYPE;
81        }
82
83        return ($this->type === $type) && (
84            null === $values ||
85            (is_array($values) && in_array($this->value, $values)) ||
86            $this->value == $values
87        );
88    }
89
90    /**
91     * Gets the line.
92     *
93     * @return integer The source line
94     */
95    public function getLine()
96    {
97        return $this->lineno;
98    }
99
100    /**
101     * Gets the token type.
102     *
103     * @return integer The token type
104     */
105    public function getType()
106    {
107        return $this->type;
108    }
109
110    /**
111     * Gets the token value.
112     *
113     * @return string The token value
114     */
115    public function getValue()
116    {
117        return $this->value;
118    }
119
120    /**
121     * Returns the constant representation (internal) of a given type.
122     *
123     * @param integer $type  The type as an integer
124     * @param Boolean $short Whether to return a short representation or not
125     * @param integer $line  The code line
126     *
127     * @return string The string representation
128     */
129    public static function typeToString($type, $short = false, $line = -1)
130    {
131        switch ($type) {
132            case self::EOF_TYPE:
133                $name = 'EOF_TYPE';
134                break;
135            case self::TEXT_TYPE:
136                $name = 'TEXT_TYPE';
137                break;
138            case self::BLOCK_START_TYPE:
139                $name = 'BLOCK_START_TYPE';
140                break;
141            case self::VAR_START_TYPE:
142                $name = 'VAR_START_TYPE';
143                break;
144            case self::BLOCK_END_TYPE:
145                $name = 'BLOCK_END_TYPE';
146                break;
147            case self::VAR_END_TYPE:
148                $name = 'VAR_END_TYPE';
149                break;
150            case self::NAME_TYPE:
151                $name = 'NAME_TYPE';
152                break;
153            case self::NUMBER_TYPE:
154                $name = 'NUMBER_TYPE';
155                break;
156            case self::STRING_TYPE:
157                $name = 'STRING_TYPE';
158                break;
159            case self::OPERATOR_TYPE:
160                $name = 'OPERATOR_TYPE';
161                break;
162            case self::PUNCTUATION_TYPE:
163                $name = 'PUNCTUATION_TYPE';
164                break;
165            case self::INTERPOLATION_START_TYPE:
166                $name = 'INTERPOLATION_START_TYPE';
167                break;
168            case self::INTERPOLATION_END_TYPE:
169                $name = 'INTERPOLATION_END_TYPE';
170                break;
171            default:
172                throw new LogicException(sprintf('Token of type "%s" does not exist.', $type));
173        }
174
175        return $short ? $name : 'Twig_Token::'.$name;
176    }
177
178    /**
179     * Returns the english representation of a given type.
180     *
181     * @param integer $type The type as an integer
182     * @param integer $line The code line
183     *
184     * @return string The string representation
185     */
186    public static function typeToEnglish($type, $line = -1)
187    {
188        switch ($type) {
189            case self::EOF_TYPE:
190                return 'end of template';
191            case self::TEXT_TYPE:
192                return 'text';
193            case self::BLOCK_START_TYPE:
194                return 'begin of statement block';
195            case self::VAR_START_TYPE:
196                return 'begin of print statement';
197            case self::BLOCK_END_TYPE:
198                return 'end of statement block';
199            case self::VAR_END_TYPE:
200                return 'end of print statement';
201            case self::NAME_TYPE:
202                return 'name';
203            case self::NUMBER_TYPE:
204                return 'number';
205            case self::STRING_TYPE:
206                return 'string';
207            case self::OPERATOR_TYPE:
208                return 'operator';
209            case self::PUNCTUATION_TYPE:
210                return 'punctuation';
211            case self::INTERPOLATION_START_TYPE:
212                return 'begin of string interpolation';
213            case self::INTERPOLATION_END_TYPE:
214                return 'end of string interpolation';
215            default:
216                throw new LogicException(sprintf('Token of type "%s" does not exist.', $type));
217        }
218    }
219}
Note: See TracBrowser for help on using the repository browser.

Sites map