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\XPath\Extension;
13
 
14
use Symfony\Component\CssSelector\XPath\XPathExpr;
15
 
16
/**
17
 * XPath expression translator combination extension.
18
 *
19
 * This component is a port of the Python cssselect library,
20
 * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect.
21
 *
22
 * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
23
 *
24
 * @internal
25
 */
26
class CombinationExtension extends AbstractExtension
27
{
28
    public function getCombinationTranslators(): array
29
    {
30
        return [
31
            ' ' => $this->translateDescendant(...),
32
            '>' => $this->translateChild(...),
33
            '+' => $this->translateDirectAdjacent(...),
34
            '~' => $this->translateIndirectAdjacent(...),
35
        ];
36
    }
37
 
38
    public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
39
    {
40
        return $xpath->join('/descendant-or-self::*/', $combinedXpath);
41
    }
42
 
43
    public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
44
    {
45
        return $xpath->join('/', $combinedXpath);
46
    }
47
 
48
    public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
49
    {
50
        return $xpath
51
            ->join('/following-sibling::', $combinedXpath)
52
            ->addNameTest()
53
            ->addCondition('position() = 1');
54
    }
55
 
56
    public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
57
    {
58
        return $xpath->join('/following-sibling::', $combinedXpath);
59
    }
60
 
61
    public function getName(): string
62
    {
63
        return 'combination';
64
    }
65
}