summaryrefslogtreecommitdiffstats
path: root/src/namereplace.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/namereplace.cpp')
-rw-r--r--src/namereplace.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/namereplace.cpp b/src/namereplace.cpp
new file mode 100644
index 0000000..36d834d
--- /dev/null
+++ b/src/namereplace.cpp
@@ -0,0 +1,69 @@
+#include "namereplace.h"
+#include <QString>
+#include <QRegularExpression>
+#include <QFile>
+#include <QTextStream>
+#include <QDebug>
+
+#define SOURCE_FILE "/opt/openslx/lightdm/login-regexp"
+
+static QList< QPair< QRegularExpression, QString > > list;
+
+static inline int find(QChar c, int start, const QString& line)
+{
+ do {
+ int next = line.indexOf(c, start);
+ if (next == -1)
+ return -1;
+ if (line.at(next - 1) != '\\')
+ return next;
+ start = next + 1;
+ } while (true);
+}
+
+void NameReplace::loadSubs()
+{
+ int idx = 0;
+ QFile inputFile(SOURCE_FILE);
+ if (!inputFile.open(QIODevice::ReadOnly))
+ return;
+ QTextStream in(&inputFile);
+ in.setCodec("UTF-8");
+ while (!in.atEnd()) {
+ QString line = in.readLine();
+ idx++;
+ if (line.isEmpty())
+ continue;
+ QChar delim = line.at(0);
+ int first = find(delim, 1, line);
+ if (first == -1)
+ continue;
+ int second = find(delim, first + 1, line);
+ if (second == -1)
+ continue;
+ QString regex = line.mid(1, first - 1).replace(QString("\\") + delim, QString(delim));
+ QString replace = line.mid(first + 1, second - first - 1).replace(QString("\\") + delim, QString(delim));
+ QString flags = line.mid(second + 1);
+ // ...
+ QRegularExpression::PatternOptions opts = 0;
+ if (flags.contains("i")) {
+ opts |= QRegularExpression::CaseInsensitiveOption;
+ }
+ QRegularExpression re(regex, opts);
+ if (!re.isValid()) {
+ qWarning() << "Invalid regex:" << regex << "on line" << idx;
+ continue;
+ }
+ list.append(QPair<QRegularExpression, QString>(re, replace));
+ }
+ inputFile.close();
+}
+
+void NameReplace::replace(QString& input)
+{
+ if (list.isEmpty())
+ return;
+ for (auto &brumm : list) {
+ input = input.replace(brumm.first, brumm.second);
+ }
+}