You are here

public function StringHandler::handle in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/css-selector/Parser/Handler/StringHandler.php \Symfony\Component\CssSelector\Parser\Handler\StringHandler::handle()

Parameters

Reader $reader:

TokenStream $stream:

Return value

bool

Overrides HandlerInterface::handle

File

vendor/symfony/css-selector/Parser/Handler/StringHandler.php, line 55

Class

StringHandler
CSS selector comment handler.

Namespace

Symfony\Component\CssSelector\Parser\Handler

Code

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;
}