Mercurial > hg > isophonics-drupal-site
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 } |