platform/api/symfony/Component/CssSelector/XPath/Translator.yaml
2024-09-02 10:44:11 -07:00

118 lines
5.2 KiB
YAML

name: Translator
class_comment: "# * XPath expression translator interface.\n# *\n# * This component\
\ is a port of the Python cssselect library,\n# * which is copyright Ian Bicking,\
\ @see https://github.com/SimonSapin/cssselect.\n# *\n# * @author Jean-Fran\xE7\
ois Simon <jeanfrancois.simon@sensiolabs.com>\n# *\n# * @internal"
dependencies:
- name: ExpressionErrorException
type: class
source: Symfony\Component\CssSelector\Exception\ExpressionErrorException
- name: FunctionNode
type: class
source: Symfony\Component\CssSelector\Node\FunctionNode
- name: NodeInterface
type: class
source: Symfony\Component\CssSelector\Node\NodeInterface
- name: SelectorNode
type: class
source: Symfony\Component\CssSelector\Node\SelectorNode
- name: Parser
type: class
source: Symfony\Component\CssSelector\Parser\Parser
- name: ParserInterface
type: class
source: Symfony\Component\CssSelector\Parser\ParserInterface
properties: []
methods:
- name: registerExtension
visibility: public
parameters:
- name: extension
comment: "# * XPath expression translator interface.\n# *\n# * This component is\
\ a port of the Python cssselect library,\n# * which is copyright Ian Bicking,\
\ @see https://github.com/SimonSapin/cssselect.\n# *\n# * @author Jean-Fran\xE7\
ois Simon <jeanfrancois.simon@sensiolabs.com>\n# *\n# * @internal\n# */\n# class\
\ Translator implements TranslatorInterface\n# {\n# private ParserInterface $mainParser;\n\
# \n# /**\n# * @var ParserInterface[]\n# */\n# private array $shortcutParsers\
\ = [];\n# \n# /**\n# * @var Extension\\ExtensionInterface[]\n# */\n# private\
\ array $extensions = [];\n# \n# private array $nodeTranslators = [];\n# private\
\ array $combinationTranslators = [];\n# private array $functionTranslators =\
\ [];\n# private array $pseudoClassTranslators = [];\n# private array $attributeMatchingTranslators\
\ = [];\n# \n# public function __construct(?ParserInterface $parser = null)\n\
# {\n# $this->mainParser = $parser ?? new Parser();\n# \n# $this\n# ->registerExtension(new\
\ Extension\\NodeExtension())\n# ->registerExtension(new Extension\\CombinationExtension())\n\
# ->registerExtension(new Extension\\FunctionExtension())\n# ->registerExtension(new\
\ Extension\\PseudoClassExtension())\n# ->registerExtension(new Extension\\AttributeMatchingExtension())\n\
# ;\n# }\n# \n# public static function getXpathLiteral(string $element): string\n\
# {\n# if (!str_contains($element, \"'\")) {\n# return \"'\".$element.\"'\";\n\
# }\n# \n# if (!str_contains($element, '\"')) {\n# return '\"'.$element.'\"';\n\
# }\n# \n# $string = $element;\n# $parts = [];\n# while (true) {\n# if (false\
\ !== $pos = strpos($string, \"'\")) {\n# $parts[] = \\sprintf(\"'%s'\", substr($string,\
\ 0, $pos));\n# $parts[] = \"\\\"'\\\"\";\n# $string = substr($string, $pos +\
\ 1);\n# } else {\n# $parts[] = \"'$string'\";\n# break;\n# }\n# }\n# \n# return\
\ \\sprintf('concat(%s)', implode(', ', $parts));\n# }\n# \n# public function\
\ cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string\n\
# {\n# $selectors = $this->parseSelectors($cssExpr);\n# \n# /** @var SelectorNode\
\ $selector */\n# foreach ($selectors as $index => $selector) {\n# if (null !==\
\ $selector->getPseudoElement()) {\n# throw new ExpressionErrorException('Pseudo-elements\
\ are not supported.');\n# }\n# \n# $selectors[$index] = $this->selectorToXPath($selector,\
\ $prefix);\n# }\n# \n# return implode(' | ', $selectors);\n# }\n# \n# public\
\ function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'):\
\ string\n# {\n# return ($prefix ?: '').$this->nodeToXPath($selector);\n# }\n\
# \n# /**\n# * @return $this"
- name: getExtension
visibility: public
parameters:
- name: name
comment: '# * @throws ExpressionErrorException'
- name: registerParserShortcut
visibility: public
parameters:
- name: shortcut
comment: '# * @return $this'
- name: nodeToXPath
visibility: public
parameters:
- name: node
comment: '# * @throws ExpressionErrorException'
- name: addCombination
visibility: public
parameters:
- name: combiner
- name: xpath
- name: combinedXpath
comment: '# * @throws ExpressionErrorException'
- name: addFunction
visibility: public
parameters:
- name: xpath
- name: function
comment: '# * @throws ExpressionErrorException'
- name: addPseudoClass
visibility: public
parameters:
- name: xpath
- name: pseudoClass
comment: '# * @throws ExpressionErrorException'
- name: addAttributeMatching
visibility: public
parameters:
- name: xpath
- name: operator
- name: attribute
- name: value
comment: '# * @throws ExpressionErrorException'
- name: parseSelectors
visibility: private
parameters:
- name: css
comment: '# * @return SelectorNode[]'
traits:
- Symfony\Component\CssSelector\Exception\ExpressionErrorException
- Symfony\Component\CssSelector\Node\FunctionNode
- Symfony\Component\CssSelector\Node\NodeInterface
- Symfony\Component\CssSelector\Node\SelectorNode
- Symfony\Component\CssSelector\Parser\Parser
- Symfony\Component\CssSelector\Parser\ParserInterface
interfaces:
- TranslatorInterface