annotate vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\CssSelector\XPath\Extension;
Chris@0 13
Chris@0 14 use Symfony\Component\CssSelector\XPath\XPathExpr;
Chris@0 15
Chris@0 16 /**
Chris@0 17 * XPath expression translator combination extension.
Chris@0 18 *
Chris@0 19 * This component is a port of the Python cssselect library,
Chris@0 20 * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect.
Chris@0 21 *
Chris@0 22 * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
Chris@0 23 *
Chris@0 24 * @internal
Chris@0 25 */
Chris@0 26 class CombinationExtension extends AbstractExtension
Chris@0 27 {
Chris@0 28 /**
Chris@0 29 * {@inheritdoc}
Chris@0 30 */
Chris@0 31 public function getCombinationTranslators()
Chris@0 32 {
Chris@0 33 return array(
Chris@0 34 ' ' => array($this, 'translateDescendant'),
Chris@0 35 '>' => array($this, 'translateChild'),
Chris@0 36 '+' => array($this, 'translateDirectAdjacent'),
Chris@0 37 '~' => array($this, 'translateIndirectAdjacent'),
Chris@0 38 );
Chris@0 39 }
Chris@0 40
Chris@0 41 /**
Chris@0 42 * @param XPathExpr $xpath
Chris@0 43 * @param XPathExpr $combinedXpath
Chris@0 44 *
Chris@0 45 * @return XPathExpr
Chris@0 46 */
Chris@0 47 public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath)
Chris@0 48 {
Chris@0 49 return $xpath->join('/descendant-or-self::*/', $combinedXpath);
Chris@0 50 }
Chris@0 51
Chris@0 52 /**
Chris@0 53 * @param XPathExpr $xpath
Chris@0 54 * @param XPathExpr $combinedXpath
Chris@0 55 *
Chris@0 56 * @return XPathExpr
Chris@0 57 */
Chris@0 58 public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath)
Chris@0 59 {
Chris@0 60 return $xpath->join('/', $combinedXpath);
Chris@0 61 }
Chris@0 62
Chris@0 63 /**
Chris@0 64 * @param XPathExpr $xpath
Chris@0 65 * @param XPathExpr $combinedXpath
Chris@0 66 *
Chris@0 67 * @return XPathExpr
Chris@0 68 */
Chris@0 69 public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)
Chris@0 70 {
Chris@0 71 return $xpath
Chris@0 72 ->join('/following-sibling::', $combinedXpath)
Chris@0 73 ->addNameTest()
Chris@0 74 ->addCondition('position() = 1');
Chris@0 75 }
Chris@0 76
Chris@0 77 /**
Chris@0 78 * @param XPathExpr $xpath
Chris@0 79 * @param XPathExpr $combinedXpath
Chris@0 80 *
Chris@0 81 * @return XPathExpr
Chris@0 82 */
Chris@0 83 public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)
Chris@0 84 {
Chris@0 85 return $xpath->join('/following-sibling::', $combinedXpath);
Chris@0 86 }
Chris@0 87
Chris@0 88 /**
Chris@0 89 * {@inheritdoc}
Chris@0 90 */
Chris@0 91 public function getName()
Chris@0 92 {
Chris@0 93 return 'combination';
Chris@0 94 }
Chris@0 95 }