1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12: namespace Nette\Latte;
13:
14: use Nette;
15:
16:
17:
18: 19: 20: 21: 22:
23: class MacroTokenizer extends Nette\Utils\Tokenizer
24: {
25: const T_WHITESPACE = 1,
26: T_COMMENT = 2,
27: T_SYMBOL = 3,
28: T_NUMBER = 4,
29: T_VARIABLE = 5,
30: T_STRING = 6,
31: T_CAST = 7,
32: T_KEYWORD = 8,
33: T_CHAR = 9;
34:
35:
36:
37: public function __construct($input)
38: {
39: parent::__construct(array(
40: self::T_WHITESPACE => '\s+',
41: self::T_COMMENT => '(?s)/\*.*?\*/',
42: self::T_STRING => Parser::RE_STRING,
43: self::T_KEYWORD => '(?:true|false|null|and|or|xor|clone|new|instanceof|return|continue|break|[A-Z_][A-Z0-9_]{2,})(?![\w\pL_])',
44: self::T_CAST => '\((?:expand|string|array|int|integer|float|bool|boolean|object)\)',
45: self::T_VARIABLE => '\$[\w\pL_]+',
46: self::T_NUMBER => '[+-]?[0-9]+(?:\.[0-9]+)?(?:e[0-9]+)?',
47: self::T_SYMBOL => '[\w\pL_]+(?:-[\w\pL_]+)*',
48: self::T_CHAR => '::|=>|[^"\']',
49: ), 'u');
50: $this->ignored = array(self::T_COMMENT, self::T_WHITESPACE);
51: $this->tokenize($input);
52: }
53:
54:
55:
56: 57: 58: 59: 60:
61: public function fetchWord()
62: {
63: $word = $this->fetchUntil(self::T_WHITESPACE, ',');
64: $this->fetch(',');
65: $this->fetchAll(self::T_WHITESPACE, self::T_COMMENT);
66: return $word;
67: }
68:
69: }
70: