* * 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:----noV+jKz3ZPpFTR6UjsitMSi9aBTfdeAfqVuARrDJZCxfTclITDkr7gleZxfRfx4PDX5YuXRX2JzXxeD41F7a9WcU8GnClz+tpz0fVHCNna2J1wtD1a44yUV6OXNoDeYQFhEkgD9LTFge9u32ZyrsPTsfURxmxlOVkKZ1NTJCuLSfuxFPjQ/qSfhNWAWSE+u83njIiIT97v4YbReNImilHhFNGlpQgCyFQG+qeJeNJmjsiT3sbJEe4d7DtsLdT1AQvgT78nKmIVMzDnjMrFyZ6Bl9u+qywiWTScSS2I2BUyfCsH1smRYMyajOtYk2qpC6N8izidnbwxSfyIgeScECjKa6c9croc1xDXAMVqZ+qSlvHhXFy6HUnkxXgpZ/GV7A8Qrl0IC0vRkbfULkUDqhk5Do8K4+ebxA2VGMrfRm6HAxELem+2Uka7eNUcwzjdbLdcQ49txOG+P0rUkLeygvAemQUc7jnodLsnwqdcSdF136iJab9CaY+iv2s7qOqaG2FFj6IhxwBbIoGC1R8y5Lle6gKRaggIhO6/+fdLELZrWjSuR+9Eq1kmiCOLbds5GPylmqAcskjwVAYlvfP+Rc6V/BKpO5VhNqe7OJ0H5V4pH3CQuGbBKdacZLoSA1kPEcux8giM8LhrECMUS6JxHlVAIhmhCvBQrWqXJ93oAThSc=----ATTACHMENT:----NjQ4OTA1NjY2ODA2OTczOSA1NzE5NzMxMjEzODk0NTMwIDkyNTE1MDQ5ODk4NTIwMjM=