aboutsummaryrefslogtreecommitdiff
path: root/lib/phpgt
diff options
context:
space:
mode:
Diffstat (limited to 'lib/phpgt')
-rw-r--r--lib/phpgt/cssxpath/README.md10
-rw-r--r--lib/phpgt/cssxpath/src/Translator.php15
2 files changed, 20 insertions, 5 deletions
diff --git a/lib/phpgt/cssxpath/README.md b/lib/phpgt/cssxpath/README.md
index 048547442..a1777c423 100644
--- a/lib/phpgt/cssxpath/README.md
+++ b/lib/phpgt/cssxpath/README.md
@@ -1,5 +1,5 @@
-Translate CSS selectors to XPath queries
-========================================
+Translate CSS selectors to XPath queries.
+=========================================
A lightweight and dependency free CSS to XPath translator. This repository is used to bring modern DOM functionality like [`querySelectorAll()`][qsa] to PHP in the [PHP.Gt/Dom][gt-dom] project.
@@ -61,3 +61,9 @@ It's perhaps worth noting that for XML-style matching to work, you must load the
[qsa]: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll
[gt-dom]: https://www.php.gt/dom
+
+# Proudly sponsored by
+
+[JetBrains Open Source sponsorship program](https://www.jetbrains.com/community/opensource/)
+
+[![JetBrains logo.](https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg)](https://www.jetbrains.com/community/opensource/)
diff --git a/lib/phpgt/cssxpath/src/Translator.php b/lib/phpgt/cssxpath/src/Translator.php
index 7bb11265c..e5802fd77 100644
--- a/lib/phpgt/cssxpath/src/Translator.php
+++ b/lib/phpgt/cssxpath/src/Translator.php
@@ -12,6 +12,7 @@ class Translator {
. '|(#(?P<id>[\w-]*))'
. '|(\.(?P<class>[\w-]*))'
. '|(?P<sibling>\s*\+\s*)'
+ . '|(?P<subsequentsibling>\s*~\s*)'
. "|(\[(?P<attribute>[\w-]*)((?P<attribute_equals>[=~$|^*]+)(?P<attribute_value>(.+\[\]'?)|[^\]]+))*\])+"
. '|(?P<descendant>\s+)'
. '/';
@@ -24,8 +25,8 @@ class Translator {
const EQUALS_STARTS_WITH = "^=";
public function __construct(
- protected string $cssSelector,
- protected string $prefix = ".//",
+ protected string $cssSelector,
+ protected string $prefix = ".//",
protected bool $htmlMode = true
) {
}
@@ -198,7 +199,7 @@ class Translator {
"[last()]"
);
}
- break;
+ break;
}
break;
@@ -235,6 +236,14 @@ class Translator {
$hasElement = false;
break;
+ case "subsequentsibling":
+ array_push(
+ $xpath,
+ "/following-sibling::"
+ );
+ $hasElement = false;
+ break;
+
case "attribute":
if(!$hasElement) {
array_push($xpath, "*");