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}