Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 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 int $a;
33
    private int $b;
34
    private int $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
}