Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. PseudoClassExtension.php

class PseudoClassExtension

XPath expression translator pseudo-class extension.

This component is a port of the Python cssselect library, which is copyright Ian Bicking, @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>

@internal

Hierarchy

  • class \Symfony\Component\CssSelector\XPath\Extension\AbstractExtension implements \Symfony\Component\CssSelector\XPath\Extension\ExtensionInterface
    • class \Symfony\Component\CssSelector\XPath\Extension\PseudoClassExtension extends \Symfony\Component\CssSelector\XPath\Extension\AbstractExtension

Expanded class hierarchy of PseudoClassExtension

See also

https://github.com/SimonSapin/cssselect.

File

vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php, line 27

Namespace

Symfony\Component\CssSelector\XPath\Extension
View source
class PseudoClassExtension extends AbstractExtension {
    public function getPseudoClassTranslators() : array {
        return [
            'root' => $this->translateRoot(...),
            'scope' => $this->translateScopePseudo(...),
            'first-child' => $this->translateFirstChild(...),
            'last-child' => $this->translateLastChild(...),
            'first-of-type' => $this->translateFirstOfType(...),
            'last-of-type' => $this->translateLastOfType(...),
            'only-child' => $this->translateOnlyChild(...),
            'only-of-type' => $this->translateOnlyOfType(...),
            'empty' => $this->translateEmpty(...),
        ];
    }
    public function translateRoot(XPathExpr $xpath) : XPathExpr {
        return $xpath->addCondition('not(parent::*)');
    }
    public function translateScopePseudo(XPathExpr $xpath) : XPathExpr {
        return $xpath->addCondition('1');
    }
    public function translateFirstChild(XPathExpr $xpath) : XPathExpr {
        return $xpath->addStarPrefix()
            ->addNameTest()
            ->addCondition('position() = 1');
    }
    public function translateLastChild(XPathExpr $xpath) : XPathExpr {
        return $xpath->addStarPrefix()
            ->addNameTest()
            ->addCondition('position() = last()');
    }
    
    /**
     * @throws ExpressionErrorException
     */
    public function translateFirstOfType(XPathExpr $xpath) : XPathExpr {
        if ('*' === $xpath->getElement()) {
            throw new ExpressionErrorException('"*:first-of-type" is not implemented.');
        }
        return $xpath->addStarPrefix()
            ->addCondition('position() = 1');
    }
    
    /**
     * @throws ExpressionErrorException
     */
    public function translateLastOfType(XPathExpr $xpath) : XPathExpr {
        if ('*' === $xpath->getElement()) {
            throw new ExpressionErrorException('"*:last-of-type" is not implemented.');
        }
        return $xpath->addStarPrefix()
            ->addCondition('position() = last()');
    }
    public function translateOnlyChild(XPathExpr $xpath) : XPathExpr {
        return $xpath->addStarPrefix()
            ->addNameTest()
            ->addCondition('last() = 1');
    }
    public function translateOnlyOfType(XPathExpr $xpath) : XPathExpr {
        $element = $xpath->getElement();
        return $xpath->addCondition(\sprintf('count(preceding-sibling::%s)=0 and count(following-sibling::%s)=0', $element, $element));
    }
    public function translateEmpty(XPathExpr $xpath) : XPathExpr {
        return $xpath->addCondition('not(*) and not(string-length())');
    }
    public function getName() : string {
        return 'pseudo-class';
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
AbstractExtension::getAttributeMatchingTranslators public function Returns attribute operation translators. Overrides ExtensionInterface::getAttributeMatchingTranslators 1
AbstractExtension::getCombinationTranslators public function Returns combination translators. Overrides ExtensionInterface::getCombinationTranslators 1
AbstractExtension::getFunctionTranslators public function Returns function translators. Overrides ExtensionInterface::getFunctionTranslators 2
AbstractExtension::getNodeTranslators public function Returns node translators. Overrides ExtensionInterface::getNodeTranslators 1
PseudoClassExtension::getName public function Returns extension name. Overrides ExtensionInterface::getName
PseudoClassExtension::getPseudoClassTranslators public function Returns pseudo-class translators. Overrides AbstractExtension::getPseudoClassTranslators
PseudoClassExtension::translateEmpty public function
PseudoClassExtension::translateFirstChild public function
PseudoClassExtension::translateFirstOfType public function
PseudoClassExtension::translateLastChild public function
PseudoClassExtension::translateLastOfType public function
PseudoClassExtension::translateOnlyChild public function
PseudoClassExtension::translateOnlyOfType public function
PseudoClassExtension::translateRoot public function
PseudoClassExtension::translateScopePseudo public function
RSS feed
Powered by Drupal