[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/_test/vendor/symfony/css-selector/Parser/ -> Reader.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;
  13  
  14  /**
  15   * CSS selector reader.
  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 Reader
  25  {
  26      private $source;
  27      private $length;
  28      private $position = 0;
  29  
  30      public function __construct(string $source)
  31      {
  32          $this->source = $source;
  33          $this->length = \strlen($source);
  34      }
  35  
  36      public function isEOF(): bool
  37      {
  38          return $this->position >= $this->length;
  39      }
  40  
  41      public function getPosition(): int
  42      {
  43          return $this->position;
  44      }
  45  
  46      public function getRemainingLength(): int
  47      {
  48          return $this->length - $this->position;
  49      }
  50  
  51      public function getSubstring(int $length, int $offset = 0): string
  52      {
  53          return substr($this->source, $this->position + $offset, $length);
  54      }
  55  
  56      public function getOffset(string $string)
  57      {
  58          $position = strpos($this->source, $string, $this->position);
  59  
  60          return false === $position ? false : $position - $this->position;
  61      }
  62  
  63      /**
  64       * @return array|false
  65       */
  66      public function findPattern(string $pattern)
  67      {
  68          $source = substr($this->source, $this->position);
  69  
  70          if (preg_match($pattern, $source, $matches)) {
  71              return $matches;
  72          }
  73  
  74          return false;
  75      }
  76  
  77      public function moveForward(int $length)
  78      {
  79          $this->position += $length;
  80      }
  81  
  82      public function moveToEnd()
  83      {
  84          $this->position = $this->length;
  85      }
  86  }