119 lines
5.2 KiB
YAML
119 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
|