[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/_test/vendor/symfony/css-selector/Node/ -> Specificity.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\Node;
  13  
  14  /**
  15   * Represents a node specificity.
  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   * @see http://www.w3.org/TR/selectors/#specificity
  21   *
  22   * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
  23   *
  24   * @internal
  25   */
  26  class Specificity
  27  {
  28      public const A_FACTOR = 100;
  29      public const B_FACTOR = 10;
  30      public const C_FACTOR = 1;
  31  
  32      private $a;
  33      private $b;
  34      private $c;
  35  
  36      public function __construct(int $a, int $b, int $c)
  37      {
  38          $this->a = $a;
  39          $this->b = $b;
  40          $this->c = $c;
  41      }
  42  
  43      public function plus(self $specificity): self
  44      {
  45          return new self($this->a + $specificity->a, $this->b + $specificity->b, $this->c + $specificity->c);
  46      }
  47  
  48      public function getValue(): int
  49      {
  50          return $this->a * self::A_FACTOR + $this->b * self::B_FACTOR + $this->c * self::C_FACTOR;
  51      }
  52  
  53      /**
  54       * Returns -1 if the object specificity is lower than the argument,
  55       * 0 if they are equal, and 1 if the argument is lower.
  56       */
  57      public function compareTo(self $specificity): int
  58      {
  59          if ($this->a !== $specificity->a) {
  60              return $this->a > $specificity->a ? 1 : -1;
  61          }
  62  
  63          if ($this->b !== $specificity->b) {
  64              return $this->b > $specificity->b ? 1 : -1;
  65          }
  66  
  67          if ($this->c !== $specificity->c) {
  68              return $this->c > $specificity->c ? 1 : -1;
  69          }
  70  
  71          return 0;
  72      }
  73  }