friendship ended with social-app. php is my new best friend
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Polyfill\Php80;
13
14/**
15 * @author Fedonyuk Anton <info@ensostudio.ru>
16 *
17 * @internal
18 */
19class PhpToken implements \Stringable
20{
21 /**
22 * @var int
23 */
24 public $id;
25
26 /**
27 * @var string
28 */
29 public $text;
30
31 /**
32 * @var -1|positive-int
33 */
34 public $line;
35
36 /**
37 * @var int
38 */
39 public $pos;
40
41 /**
42 * @param -1|positive-int $line
43 */
44 public function __construct(int $id, string $text, int $line = -1, int $position = -1)
45 {
46 $this->id = $id;
47 $this->text = $text;
48 $this->line = $line;
49 $this->pos = $position;
50 }
51
52 public function getTokenName(): ?string
53 {
54 if ('UNKNOWN' === $name = token_name($this->id)) {
55 $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text;
56 }
57
58 return $name;
59 }
60
61 /**
62 * @param int|string|array $kind
63 */
64 public function is($kind): bool
65 {
66 foreach ((array) $kind as $value) {
67 if (\in_array($value, [$this->id, $this->text], true)) {
68 return true;
69 }
70 }
71
72 return false;
73 }
74
75 public function isIgnorable(): bool
76 {
77 return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true);
78 }
79
80 public function __toString(): string
81 {
82 return (string) $this->text;
83 }
84
85 /**
86 * @return list<static>
87 */
88 public static function tokenize(string $code, int $flags = 0): array
89 {
90 $line = 1;
91 $position = 0;
92 $tokens = token_get_all($code, $flags);
93 foreach ($tokens as $index => $token) {
94 if (\is_string($token)) {
95 $id = \ord($token);
96 $text = $token;
97 } else {
98 [$id, $text, $line] = $token;
99 }
100 $tokens[$index] = new static($id, $text, $line, $position);
101 $position += \strlen($text);
102 }
103
104 return $tokens;
105 }
106}