protected static function convertPseudo($pseudo, $parameters = [], &$tagName)
{
switch ($pseudo) {
case 'first-child':
return 'position() = 1';
break;
case 'last-child':
return 'position() = last()';
break;
case 'nth-child':
$xpath = sprintf('(name()="%s") and (%s)', $tagName, self::convertNthExpression($parameters[0]));
$tagName = '*';
return $xpath;
break;
case 'contains':
$string = trim($parameters[0], ' \'"');
$caseSensetive = isset($parameters[1]) and trim($parameters[1]) === 'true';
return self::convertContains($string, $caseSensetive);
break;
case 'has':
return self::cssToXpath($parameters[0], './/');
break;
case 'not':
return sprintf('not(self::%s)', self::cssToXpath($parameters[0], ''));
break;
case 'nth-of-type':
return self::convertNthExpression($parameters[0]);
break;
case 'empty':
return 'count(descendant::*) = 0';
break;
case 'not-empty':
return 'count(descendant::*) > 0';
break;
}
throw new RuntimeException('Invalid selector: unknown pseudo-class');
}