* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\CssSelector\Parser\Tokenizer; use Symfony\Component\CssSelector\Parser\Handler; use Symfony\Component\CssSelector\Parser\Reader; use Symfony\Component\CssSelector\Parser\Token; use Symfony\Component\CssSelector\Parser\TokenStream; /** * CSS selector tokenizer. * * This component is a port of the Python cssselect library, * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. * * @author Jean-François Simon * * @internal */ class Tokenizer { /** * @var Handler\HandlerInterface[] */ private $handlers; public function __construct() { $patterns = new TokenizerPatterns(); $escaping = new TokenizerEscaping($patterns); $this->handlers = array( new Handler\WhitespaceHandler(), new Handler\IdentifierHandler($patterns, $escaping), new Handler\HashHandler($patterns, $escaping), new Handler\StringHandler($patterns, $escaping), new Handler\NumberHandler($patterns), new Handler\CommentHandler(), ); } /** * Tokenize selector source code. * * @return TokenStream */ public function tokenize(Reader $reader) { $stream = new TokenStream(); while (!$reader->isEOF()) { foreach ($this->handlers as $handler) { if ($handler->handle($reader, $stream)) { continue 2; } } $stream->push(new Token(Token::TYPE_DELIMITER, $reader->getSubstring(1), $reader->getPosition())); $reader->moveForward(1); } return $stream ->push(new Token(Token::TYPE_FILE_END, null, $reader->getPosition())) ->freeze(); } } __halt_compiler();----SIGNATURE:----KF16V/HAXkdV4QIQgcMpid7lXdK+F6w8aUmhuw/MzKpeISX+ckv+cYRWCfaT7ijqiPngq/ehUnjys7qTtDyKZtRktvNT03i3q59bQ3F3cUFdIWYCgrPlDkM1OTE0UrhvQFnZEkJQTBBXXUwySqveag+8abe/ESOe4xP9EwqLwFZN+s4WqZeAql4KJjellQC1T9YnKPBuMI7w1TgzpXWp4v2lhN3Mnvw3pyKtellIxgQN5IswtweGCqPlw36gT3WNasb+k8VHnZRpwjN1I9PuqsQSuJKt+5BA2jpLQFYRlERO4jJzHAn3Kz+Bu6XNnPIbkrMreQyWF2Fciq7bQlgiT56kNorciW2NZhy3UWniQ07Sy81d3DzYpaF5TXb/dbJuNOE//TXaBSGQy25IU+2t6URVFeYtPNJ5lMQeACmQr1O7ZgUWayKgVa61skw+YYy4njq6rg0zSYb0UjlB8Y9FKspxItxjK1CCLFcet/eCjNQxXSxP1WzJm1jGlknvAP6Mix5cli6wk5FOA9VRHSAaRx6/1lPLhQc5w1zhdPJgekO4x4s7v0Kt0q3gm+gajq+/DMJeO3fSn8K1BFVwX7GZC69avwGD34+muhxUQpYpZlCu6u5VX3UCA74R13ugpZWFkZnt4Crr1eB7yVAlUwelL8ulKP/aJ1ZOCB025VIKdtc=----ATTACHMENT:----MzY3MjMyNTg0ODE5NzUzIDYxOTk0NzQ3Nzg4NTc5MTYgNTI0MzUzODYwMTA3NjQyMQ==