aboutsummaryrefslogtreecommitdiff
path: root/src/filter/regexp.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2017-05-25 20:59:43 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2017-05-25 20:59:43 +0200
commit1143429887f61d8b3c74a4c3a1fafca632eb4b87 (patch)
tree87e03b38241afb33c1e7dc70c299bfb824533429 /src/filter/regexp.cpp
parentMerged FilterRule into FilterNode (diff)
downloadsmolbote-1143429887f61d8b3c74a4c3a1fafca632eb4b87.tar.xz
Filter code refactoring
Diffstat (limited to 'src/filter/regexp.cpp')
-rw-r--r--src/filter/regexp.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/filter/regexp.cpp b/src/filter/regexp.cpp
new file mode 100644
index 0000000..1f3c449
--- /dev/null
+++ b/src/filter/regexp.cpp
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ **
+ ** smolbote: yet another qute browser
+ ** Copyright (C) 2017 Xian Nox
+ **
+ ** This program is free software: you can redistribute it and/or modify
+ ** it under the terms of the GNU General Public License as published by
+ ** the Free Software Foundation, either version 3 of the License, or
+ ** (at your option) any later version.
+ **
+ ** This program is distributed in the hope that it will be useful,
+ ** but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ** GNU General Public License for more details.
+ **
+ ** You should have received a copy of the GNU General Public License
+ ** along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **
+ ******************************************************************************/
+
+#include "regexp.h"
+
+RegExp::RegExp(const QString &pattern, PatternOptions options) :
+ QRegularExpression()
+{
+ setPattern(pattern);
+ setPatternOptions(options);
+}
+
+bool RegExp::hasMatch(const QString &subject, int offset, MatchType matchType, MatchOptions matchOptions) const
+{
+ // Empty matches all
+ if(pattern().isEmpty()) {
+ return true;
+ }
+
+ return QRegularExpression::match(subject, offset, matchType, matchOptions).hasMatch();
+}
+
+void RegExp::setWildcardPattern(const QString &pattern)
+{
+ QString parsed;
+
+ for(int i=0; i<pattern.length(); i++) {
+ const QChar c = pattern.at(i);
+ switch (c.toLatin1()) {
+ case '*':
+ // remove * at the start and end
+ if(i != 0 && i != pattern.length()-1) {
+ parsed.append(".*");
+ }
+ break;
+ case '^':
+ parsed.append("(?:[^\\w\\d\\_\\-\\.\\%]|$)");
+ break;
+ case '|':
+ if(i == 0) {
+ // beginning of string
+ parsed.append('^');
+ } else {
+ // end of string
+ parsed.append('$');
+ }
+ break;
+ default:
+ parsed.append(c);
+ break;
+ }
+ }
+
+ setPattern(parsed);
+}