comparison vendor/theseer/tokenizer/src/Tokenizer.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents
children af1871eacc83
comparison
equal deleted inserted replaced
13:5fb285c0d0e3 14:1fec387a4317
1 <?php declare(strict_types = 1);
2 namespace TheSeer\Tokenizer;
3
4 class Tokenizer {
5
6 /**
7 * Token Map for "non-tokens"
8 *
9 * @var array
10 */
11 private $map = [
12 '(' => 'T_OPEN_BRACKET',
13 ')' => 'T_CLOSE_BRACKET',
14 '[' => 'T_OPEN_SQUARE',
15 ']' => 'T_CLOSE_SQUARE',
16 '{' => 'T_OPEN_CURLY',
17 '}' => 'T_CLOSE_CURLY',
18 ';' => 'T_SEMICOLON',
19 '.' => 'T_DOT',
20 ',' => 'T_COMMA',
21 '=' => 'T_EQUAL',
22 '<' => 'T_LT',
23 '>' => 'T_GT',
24 '+' => 'T_PLUS',
25 '-' => 'T_MINUS',
26 '*' => 'T_MULT',
27 '/' => 'T_DIV',
28 '?' => 'T_QUESTION_MARK',
29 '!' => 'T_EXCLAMATION_MARK',
30 ':' => 'T_COLON',
31 '"' => 'T_DOUBLE_QUOTES',
32 '@' => 'T_AT',
33 '&' => 'T_AMPERSAND',
34 '%' => 'T_PERCENT',
35 '|' => 'T_PIPE',
36 '$' => 'T_DOLLAR',
37 '^' => 'T_CARET',
38 '~' => 'T_TILDE',
39 '`' => 'T_BACKTICK'
40 ];
41
42 public function parse(string $source): TokenCollection {
43 $result = new TokenCollection();
44 $tokens = token_get_all($source);
45
46 $lastToken = new Token(
47 $tokens[0][2],
48 'Placeholder',
49 ''
50 );
51
52 foreach ($tokens as $pos => $tok) {
53 if (is_string($tok)) {
54 $token = new Token(
55 $lastToken->getLine(),
56 $this->map[$tok],
57 $tok
58 );
59 $result->addToken($token);
60 $lastToken = $token;
61 continue;
62 }
63
64 $line = $tok[2];
65 $values = preg_split('/\R+/Uu', $tok[1]);
66
67 foreach ($values as $v) {
68 $token = new Token(
69 $line,
70 token_name($tok[0]),
71 $v
72 );
73 $result->addToken($token);
74 $line++;
75 $lastToken = $token;
76 }
77 }
78
79 return $result;
80 }
81
82 }