Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / symfony / css-selector / Node / Specificity.php
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     const A_FACTOR = 100;
29     const B_FACTOR = 10;
30     const C_FACTOR = 1;
31
32     private $a;
33     private $b;
34     private $c;
35
36     /**
37      * @param int $a
38      * @param int $b
39      * @param int $c
40      */
41     public function __construct($a, $b, $c)
42     {
43         $this->a = $a;
44         $this->b = $b;
45         $this->c = $c;
46     }
47
48     /**
49      * @return self
50      */
51     public function plus(Specificity $specificity)
52     {
53         return new self($this->a + $specificity->a, $this->b + $specificity->b, $this->c + $specificity->c);
54     }
55
56     /**
57      * Returns global specificity value.
58      *
59      * @return int
60      */
61     public function getValue()
62     {
63         return $this->a * self::A_FACTOR + $this->b * self::B_FACTOR + $this->c * self::C_FACTOR;
64     }
65
66     /**
67      * Returns -1 if the object specificity is lower than the argument,
68      * 0 if they are equal, and 1 if the argument is lower.
69      *
70      * @return int
71      */
72     public function compareTo(Specificity $specificity)
73     {
74         if ($this->a !== $specificity->a) {
75             return $this->a > $specificity->a ? 1 : -1;
76         }
77
78         if ($this->b !== $specificity->b) {
79             return $this->b > $specificity->b ? 1 : -1;
80         }
81
82         if ($this->c !== $specificity->c) {
83             return $this->c > $specificity->c ? 1 : -1;
84         }
85
86         return 0;
87     }
88 }