aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2025-10-25 11:22:09 +0200
committerGravatar GitHub <noreply@github.com> 2025-10-25 11:22:09 +0200
commit1abb261ceaaa30ca2ad8ed14b0162ed81bb4724a (patch)
tree40e5e130abe8458cbcc11738f0fd3c4264791ed4 /lib
parentf1c91c84ddee0a9f3ef6d0775f630822c184963f (diff)
CssXPath: Implement ~ subsequent-sibling (#8154)
* CssXPath: Implement ~ Subsequent-sibling fix https://github.com/FreshRSS/FreshRSS/issues/8143 Upstream PR https://github.com/phpgt/CssXPath/pull/231 * Use CssXPath release v1.4.0 https://github.com/phpgt/CssXPath/releases/tag/v1.4.0
Diffstat (limited to 'lib')
-rw-r--r--lib/.gitignore2
-rw-r--r--lib/composer.json7
-rw-r--r--lib/phpgt/cssxpath/README.md10
-rw-r--r--lib/phpgt/cssxpath/src/Translator.php15
4 files changed, 27 insertions, 7 deletions
diff --git a/lib/.gitignore b/lib/.gitignore
index d5a49d735..8a1f98bf6 100644
--- a/lib/.gitignore
+++ b/lib/.gitignore
@@ -12,6 +12,8 @@ marienfressinaud/lib_opml/tests/
phpgt/cssxpath/.*
phpgt/cssxpath/composer.json
phpgt/cssxpath/CONTRIBUTING.md
+phpgt/cssxpath/phpunit.xml
+phpgt/cssxpath/SECURITY*
phpgt/cssxpath/test/
phpmailer/phpmailer/*oauth*
phpmailer/phpmailer/COMMITMENT*
diff --git a/lib/composer.json b/lib/composer.json
index ee422ccf3..a893c1cdc 100644
--- a/lib/composer.json
+++ b/lib/composer.json
@@ -12,7 +12,7 @@
],
"require": {
"marienfressinaud/lib_opml": "0.5.1",
- "phpgt/cssxpath": "v1.3.0",
+ "phpgt/cssxpath": "v1.4.0",
"phpmailer/phpmailer": "6.11.1",
"simplepie/simplepie": "dev-freshrss#24cfb0c6d81f81ef110c8257d3464b2649476c77"
},
@@ -21,6 +21,9 @@
"vendor-dir": "./"
},
"scripts": {
- "post-update-cmd": "git clean -d -f -X ."
+ "post-update-cmd": [
+ "git clean -d -ff -X .",
+ "find . -name '.git' -type d -exec rm -rf {} + || true"
+ ]
}
}
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, "*");