aboutsummaryrefslogtreecommitdiff
path: root/libraries/qdcss/src
diff options
context:
space:
mode:
authorTheKodeToad <TheKodeToad@proton.me>2023-03-18 14:02:05 +0000
committerGitHub <noreply@github.com>2023-03-18 14:02:05 +0000
commit1893871a99d26955e411b0b5dba4d2fe4368d96e (patch)
tree998873a40d3da6622854b3fb84d973f7b29d70a3 /libraries/qdcss/src
parent8837f06e4e97ed966662b52db206facd7f91a489 (diff)
parent45b0367d14f38d40af5cc8603f7daab05d83af5f (diff)
downloadPrismLauncher-1893871a99d26955e411b0b5dba4d2fe4368d96e.tar.gz
PrismLauncher-1893871a99d26955e411b0b5dba4d2fe4368d96e.tar.bz2
PrismLauncher-1893871a99d26955e411b0b5dba4d2fe4368d96e.zip
Merge branch 'PrismLauncher:develop' into mrpack-export
Diffstat (limited to 'libraries/qdcss/src')
-rw-r--r--libraries/qdcss/src/qdcss.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/libraries/qdcss/src/qdcss.cpp b/libraries/qdcss/src/qdcss.cpp
new file mode 100644
index 00000000..c531fb63
--- /dev/null
+++ b/libraries/qdcss/src/qdcss.cpp
@@ -0,0 +1,53 @@
+// SPDX-FileCopyrightText: 2023 kumquat-ir 66188216+kumquat-ir@users.noreply.github.com
+//
+// SPDX-License-Identifier: LGPL-3.0-only
+
+#include "qdcss.h"
+
+#include <QRegularExpression>
+#include <QRegularExpressionMatch>
+#include <QRegularExpressionMatchIterator>
+
+QRegularExpression ruleset_re = QRegularExpression(R"([#.]?(@?\w+?)\s*\{(.*?)\})", QRegularExpression::DotMatchesEverythingOption);
+QRegularExpression rule_re = QRegularExpression(R"((\S+?)\s*:\s*(?:\"(.*?)(?<!\\)\"|'(.*?)(?<!\\)'|(\S+?))\s*(?:;|$))");
+
+QDCSS::QDCSS(QString s)
+{
+ // not much error handling over here...
+ // the original java code used indeces returned by the matcher for them, but QRE does not expose those
+ QRegularExpressionMatchIterator ruleset_i = ruleset_re.globalMatch(s);
+ while (ruleset_i.hasNext()) {
+ QRegularExpressionMatch ruleset = ruleset_i.next();
+ QString selector = ruleset.captured(1);
+ QString rules = ruleset.captured(2);
+ QRegularExpressionMatchIterator rule_i = rule_re.globalMatch(rules);
+ while (rule_i.hasNext()) {
+ QRegularExpressionMatch rule = rule_i.next();
+ QString property = rule.captured(1);
+ QString value;
+ if (!rule.captured(2).isNull()) {
+ value = rule.captured(2);
+ } else if (!rule.captured(3).isNull()) {
+ value = rule.captured(3);
+ } else {
+ value = rule.captured(4);
+ }
+ QString key = selector + "." + property;
+ if (!m_data.contains(key)) {
+ m_data.insert(key, QStringList());
+ }
+ m_data.find(key)->append(value);
+ }
+ }
+}
+
+std::optional<QString>* QDCSS::get(QString key)
+{
+ auto found = m_data.find(key);
+
+ if (found == m_data.end() || found->empty()) {
+ return new std::optional<QString>;
+ }
+
+ return new std::optional<QString>(found->back());
+}