PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / trunk
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress vtrunk
4.17.2 4.17.1 4.17.0 4.16.19 4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / third-party / vendor / symfony / css-selector / XPath / Extension / NodeExtension.php
wp-user-avatar / third-party / vendor / symfony / css-selector / XPath / Extension Last commit date
AbstractExtension.php 2 months ago AttributeMatchingExtension.php 2 months ago CombinationExtension.php 2 months ago ExtensionInterface.php 2 months ago FunctionExtension.php 2 months ago HtmlExtension.php 2 months ago NodeExtension.php 2 months ago PseudoClassExtension.php 2 months ago
NodeExtension.php
151 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace ProfilePressVendor\Symfony\Component\CssSelector\XPath\Extension;
12
13 use ProfilePressVendor\Symfony\Component\CssSelector\Node;
14 use ProfilePressVendor\Symfony\Component\CssSelector\XPath\Translator;
15 use ProfilePressVendor\Symfony\Component\CssSelector\XPath\XPathExpr;
16 /**
17 * XPath expression translator node extension.
18 *
19 * This component is a port of the Python cssselect library,
20 * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect.
21 *
22 * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
23 *
24 * @internal
25 */
26 class NodeExtension extends AbstractExtension
27 {
28 public const ELEMENT_NAME_IN_LOWER_CASE = 1;
29 public const ATTRIBUTE_NAME_IN_LOWER_CASE = 2;
30 public const ATTRIBUTE_VALUE_IN_LOWER_CASE = 4;
31 private $flags;
32 public function __construct(int $flags = 0)
33 {
34 $this->flags = $flags;
35 }
36 /**
37 * @return $this
38 */
39 public function setFlag(int $flag, bool $on): self
40 {
41 if ($on && !$this->hasFlag($flag)) {
42 $this->flags += $flag;
43 }
44 if (!$on && $this->hasFlag($flag)) {
45 $this->flags -= $flag;
46 }
47 return $this;
48 }
49 public function hasFlag(int $flag): bool
50 {
51 return (bool) ($this->flags & $flag);
52 }
53 /**
54 * {@inheritdoc}
55 */
56 public function getNodeTranslators(): array
57 {
58 return ['Selector' => [$this, 'translateSelector'], 'CombinedSelector' => [$this, 'translateCombinedSelector'], 'Negation' => [$this, 'translateNegation'], 'Function' => [$this, 'translateFunction'], 'Pseudo' => [$this, 'translatePseudo'], 'Attribute' => [$this, 'translateAttribute'], 'Class' => [$this, 'translateClass'], 'Hash' => [$this, 'translateHash'], 'Element' => [$this, 'translateElement']];
59 }
60 public function translateSelector(Node\SelectorNode $node, Translator $translator): XPathExpr
61 {
62 return $translator->nodeToXPath($node->getTree());
63 }
64 public function translateCombinedSelector(Node\CombinedSelectorNode $node, Translator $translator): XPathExpr
65 {
66 return $translator->addCombination($node->getCombinator(), $node->getSelector(), $node->getSubSelector());
67 }
68 public function translateNegation(Node\NegationNode $node, Translator $translator): XPathExpr
69 {
70 $xpath = $translator->nodeToXPath($node->getSelector());
71 $subXpath = $translator->nodeToXPath($node->getSubSelector());
72 $subXpath->addNameTest();
73 if ($subXpath->getCondition()) {
74 return $xpath->addCondition(sprintf('not(%s)', $subXpath->getCondition()));
75 }
76 return $xpath->addCondition('0');
77 }
78 public function translateFunction(Node\FunctionNode $node, Translator $translator): XPathExpr
79 {
80 $xpath = $translator->nodeToXPath($node->getSelector());
81 return $translator->addFunction($xpath, $node);
82 }
83 public function translatePseudo(Node\PseudoNode $node, Translator $translator): XPathExpr
84 {
85 $xpath = $translator->nodeToXPath($node->getSelector());
86 return $translator->addPseudoClass($xpath, $node->getIdentifier());
87 }
88 public function translateAttribute(Node\AttributeNode $node, Translator $translator): XPathExpr
89 {
90 $name = $node->getAttribute();
91 $safe = $this->isSafeName($name);
92 if ($this->hasFlag(self::ATTRIBUTE_NAME_IN_LOWER_CASE)) {
93 $name = strtolower($name);
94 }
95 if ($node->getNamespace()) {
96 $name = sprintf('%s:%s', $node->getNamespace(), $name);
97 $safe = $safe && $this->isSafeName($node->getNamespace());
98 }
99 $attribute = $safe ? '@' . $name : sprintf('attribute::*[name() = %s]', Translator::getXpathLiteral($name));
100 $value = $node->getValue();
101 $xpath = $translator->nodeToXPath($node->getSelector());
102 if ($this->hasFlag(self::ATTRIBUTE_VALUE_IN_LOWER_CASE)) {
103 $value = strtolower($value);
104 }
105 return $translator->addAttributeMatching($xpath, $node->getOperator(), $attribute, $value);
106 }
107 public function translateClass(Node\ClassNode $node, Translator $translator): XPathExpr
108 {
109 $xpath = $translator->nodeToXPath($node->getSelector());
110 return $translator->addAttributeMatching($xpath, '~=', '@class', $node->getName());
111 }
112 public function translateHash(Node\HashNode $node, Translator $translator): XPathExpr
113 {
114 $xpath = $translator->nodeToXPath($node->getSelector());
115 return $translator->addAttributeMatching($xpath, '=', '@id', $node->getId());
116 }
117 public function translateElement(Node\ElementNode $node): XPathExpr
118 {
119 $element = $node->getElement();
120 if ($element && $this->hasFlag(self::ELEMENT_NAME_IN_LOWER_CASE)) {
121 $element = strtolower($element);
122 }
123 if ($element) {
124 $safe = $this->isSafeName($element);
125 } else {
126 $element = '*';
127 $safe = \true;
128 }
129 if ($node->getNamespace()) {
130 $element = sprintf('%s:%s', $node->getNamespace(), $element);
131 $safe = $safe && $this->isSafeName($node->getNamespace());
132 }
133 $xpath = new XPathExpr('', $element);
134 if (!$safe) {
135 $xpath->addNameTest();
136 }
137 return $xpath;
138 }
139 /**
140 * {@inheritdoc}
141 */
142 public function getName(): string
143 {
144 return 'node';
145 }
146 private function isSafeName(string $name): bool
147 {
148 return 0 < preg_match('~^[a-zA-Z_][a-zA-Z0-9_.-]*$~', $name);
149 }
150 }
151