[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/_test/vendor/symfony/css-selector/Parser/Tokenizer/ -> TokenizerPatterns.php (source)

   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  
  12  namespace Symfony\Component\CssSelector\Parser\Tokenizer;
  13  
  14  /**
  15   * CSS selector tokenizer patterns builder.
  16   *
  17   * This component is a port of the Python cssselect library,
  18   * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect.
  19   *
  20   * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
  21   *
  22   * @internal
  23   */
  24  class TokenizerPatterns
  25  {
  26      private $unicodeEscapePattern;
  27      private $simpleEscapePattern;
  28      private $newLineEscapePattern;
  29      private $escapePattern;
  30      private $stringEscapePattern;
  31      private $nonAsciiPattern;
  32      private $nmCharPattern;
  33      private $nmStartPattern;
  34      private $identifierPattern;
  35      private $hashPattern;
  36      private $numberPattern;
  37      private $quotedStringPattern;
  38  
  39      public function __construct()
  40      {
  41          $this->unicodeEscapePattern = '\\\\([0-9a-f]{1,6})(?:\r\n|[ \n\r\t\f])?';
  42          $this->simpleEscapePattern = '\\\\(.)';
  43          $this->newLineEscapePattern = '\\\\(?:\n|\r\n|\r|\f)';
  44          $this->escapePattern = $this->unicodeEscapePattern.'|\\\\[^\n\r\f0-9a-f]';
  45          $this->stringEscapePattern = $this->newLineEscapePattern.'|'.$this->escapePattern;
  46          $this->nonAsciiPattern = '[^\x00-\x7F]';
  47          $this->nmCharPattern = '[_a-z0-9-]|'.$this->escapePattern.'|'.$this->nonAsciiPattern;
  48          $this->nmStartPattern = '[_a-z]|'.$this->escapePattern.'|'.$this->nonAsciiPattern;
  49          $this->identifierPattern = '-?(?:'.$this->nmStartPattern.')(?:'.$this->nmCharPattern.')*';
  50          $this->hashPattern = '#((?:'.$this->nmCharPattern.')+)';
  51          $this->numberPattern = '[+-]?(?:[0-9]*\.[0-9]+|[0-9]+)';
  52          $this->quotedStringPattern = '([^\n\r\f%s]|'.$this->stringEscapePattern.')*';
  53      }
  54  
  55      public function getNewLineEscapePattern(): string
  56      {
  57          return '~^'.$this->newLineEscapePattern.'~';
  58      }
  59  
  60      public function getSimpleEscapePattern(): string
  61      {
  62          return '~^'.$this->simpleEscapePattern.'~';
  63      }
  64  
  65      public function getUnicodeEscapePattern(): string
  66      {
  67          return '~^'.$this->unicodeEscapePattern.'~i';
  68      }
  69  
  70      public function getIdentifierPattern(): string
  71      {
  72          return '~^'.$this->identifierPattern.'~i';
  73      }
  74  
  75      public function getHashPattern(): string
  76      {
  77          return '~^'.$this->hashPattern.'~i';
  78      }
  79  
  80      public function getNumberPattern(): string
  81      {
  82          return '~^'.$this->numberPattern.'~';
  83      }
  84  
  85      public function getQuotedStringPattern(string $quote): string
  86      {
  87          return '~^'.sprintf($this->quotedStringPattern, $quote).'~i';
  88      }
  89  }