class PseudoClassExtension in Zircon Profile 8.0
Same name and namespace in other branches
- 8 vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php \Symfony\Component\CssSelector\XPath\Extension\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>
Hierarchy
- class \Symfony\Component\CssSelector\XPath\Extension\AbstractExtension implements ExtensionInterface
- class \Symfony\Component\CssSelector\XPath\Extension\PseudoClassExtension
Expanded class hierarchy of PseudoClassExtension
See also
https://github.com/SimonSapin/cssselect.
File
- vendor/
symfony/ css-selector/ XPath/ Extension/ PseudoClassExtension.php, line 25
Namespace
Symfony\Component\CssSelector\XPath\ExtensionView source
class PseudoClassExtension extends AbstractExtension {
/**
* {@inheritdoc}
*/
public function getPseudoClassTranslators() {
return array(
'root' => array(
$this,
'translateRoot',
),
'first-child' => array(
$this,
'translateFirstChild',
),
'last-child' => array(
$this,
'translateLastChild',
),
'first-of-type' => array(
$this,
'translateFirstOfType',
),
'last-of-type' => array(
$this,
'translateLastOfType',
),
'only-child' => array(
$this,
'translateOnlyChild',
),
'only-of-type' => array(
$this,
'translateOnlyOfType',
),
'empty' => array(
$this,
'translateEmpty',
),
);
}
/**
* @param XPathExpr $xpath
*
* @return XPathExpr
*/
public function translateRoot(XPathExpr $xpath) {
return $xpath
->addCondition('not(parent::*)');
}
/**
* @param XPathExpr $xpath
*
* @return XPathExpr
*/
public function translateFirstChild(XPathExpr $xpath) {
return $xpath
->addStarPrefix()
->addNameTest()
->addCondition('position() = 1');
}
/**
* @param XPathExpr $xpath
*
* @return XPathExpr
*/
public function translateLastChild(XPathExpr $xpath) {
return $xpath
->addStarPrefix()
->addNameTest()
->addCondition('position() = last()');
}
/**
* @param XPathExpr $xpath
*
* @return XPathExpr
*
* @throws ExpressionErrorException
*/
public function translateFirstOfType(XPathExpr $xpath) {
if ('*' === $xpath
->getElement()) {
throw new ExpressionErrorException('"*:first-of-type" is not implemented.');
}
return $xpath
->addStarPrefix()
->addCondition('position() = 1');
}
/**
* @param XPathExpr $xpath
*
* @return XPathExpr
*
* @throws ExpressionErrorException
*/
public function translateLastOfType(XPathExpr $xpath) {
if ('*' === $xpath
->getElement()) {
throw new ExpressionErrorException('"*:last-of-type" is not implemented.');
}
return $xpath
->addStarPrefix()
->addCondition('position() = last()');
}
/**
* @param XPathExpr $xpath
*
* @return XPathExpr
*/
public function translateOnlyChild(XPathExpr $xpath) {
return $xpath
->addStarPrefix()
->addNameTest()
->addCondition('last() = 1');
}
/**
* @param XPathExpr $xpath
*
* @return XPathExpr
*
* @throws ExpressionErrorException
*/
public function translateOnlyOfType(XPathExpr $xpath) {
if ('*' === $xpath
->getElement()) {
throw new ExpressionErrorException('"*:only-of-type" is not implemented.');
}
return $xpath
->addCondition('last() = 1');
}
/**
* @param XPathExpr $xpath
*
* @return XPathExpr
*/
public function translateEmpty(XPathExpr $xpath) {
return $xpath
->addCondition('not(*) and not(string-length())');
}
/**
* {@inheritdoc}
*/
public function getName() {
return 'pseudo-class';
}
}