* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\CssSelector\Parser\Handler; use Symfony\Component\CssSelector\Exception\InternalErrorException; use Symfony\Component\CssSelector\Exception\SyntaxErrorException; use Symfony\Component\CssSelector\Parser\Reader; use Symfony\Component\CssSelector\Parser\Token; use Symfony\Component\CssSelector\Parser\TokenStream; use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping; use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns; /** * CSS selector comment handler. * * 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 StringHandler implements HandlerInterface { private $patterns; private $escaping; public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $escaping) { $this->patterns = $patterns; $this->escaping = $escaping; } /** * {@inheritdoc} */ public function handle(Reader $reader, TokenStream $stream) { $quote = $reader->getSubstring(1); if (!in_array($quote, array("'", '"'))) { return false; } $reader->moveForward(1); $match = $reader->findPattern($this->patterns->getQuotedStringPattern($quote)); if (!$match) { throw new InternalErrorException(sprintf('Should have found at least an empty match at %s.', $reader->getPosition())); } // check unclosed strings if (strlen($match[0]) === $reader->getRemainingLength()) { throw SyntaxErrorException::unclosedString($reader->getPosition() - 1); } // check quotes pairs validity if ($quote !== $reader->getSubstring(1, strlen($match[0]))) { throw SyntaxErrorException::unclosedString($reader->getPosition() - 1); } $string = $this->escaping->escapeUnicodeAndNewLine($match[0]); $stream->push(new Token(Token::TYPE_STRING, $string, $reader->getPosition())); $reader->moveForward(strlen($match[0]) + 1); return true; } } __halt_compiler();----SIGNATURE:----fMsZmhlc1XSQ2T1+k3u58HCrcUMnfK5z6COSCoN3V6pOaHBPRzXMy50KDMy2I6HTKkbLlnmPcakW8k/rQna5zn7l2k4/adyPWvEDqy85ifaBqZA5mFiwzqtzAQYfQmRjxTfdFZn7eRe/A3+ynR+BBUTi/tGe62etfBKWokNRrR/RDV3IEIkD+D2oVTtQW+CRmNgbJN/CuySt6NsTMnsn/bxp7W1nJjIpC3q3WM58SpbEp+RAWwMrVWbL+EcZZXDbCe6+xRqcJkQM523xLVUyE0p8yKvPz170S4FkIwBqQEDDTUcDszGj/JeUoOgscRVPMKzv5V3Iwb3iTmNCQoYyQHwQdupMt4ogaB7oRqhrd8aKL1/LffxUmEON0UF+fW61GO8NTdPgsMZ71qXAWbldL3HMgb0h34OapmsA8S8bcT2cqrGCWv5G6xbBkE7kO7XpzIe5vEq+Ceo6I1Kfyv4XY1ekFau6rpa98cWk+xhTL6h08j78YjQhh+Cp6QqXkT+lOsZIi/13a4aGroVz9IDtcHE7MgCPH4uhlYik4UZrg6GzA18osqILWEpUndze1jMXohvfog/uCLGr2FOtnJ+0+laU+Gz9+DXjt06cDD7Djym+0P33LR4vRQli8rjr3TNFvMCgLt+omRuJk7nzEy4eKH8gms7j/NZMQ7wP0zTMsAg=----ATTACHMENT:----NzQzNTU3Mjc3NTk3MzQwNSAzODAyOTcxODcyMDg3Mzg3IDQ3NDY2NDQxNzIwNjQyNTI=