aboutsummaryrefslogtreecommitdiff
path: root/launcher/pathmatcher/RegexpMatcher.h
blob: a6a3e616d4bc4ab8057c1e1aaf9cbf83208b6608 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <QRegularExpression>
#include "IPathMatcher.h"

class RegexpMatcher : public IPathMatcher {
   public:
    virtual ~RegexpMatcher() {}
    RegexpMatcher(const QString& regexp)
    {
        m_regexp.setPattern(regexp);
        m_onlyFilenamePart = !regexp.contains('/');
    }

    RegexpMatcher& caseSensitive(bool cs = true)
    {
        if (cs) {
            m_regexp.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
        } else {
            m_regexp.setPatternOptions(QRegularExpression::NoPatternOption);
        }
        return *this;
    }

    virtual bool matches(const QString& string) const override
    {
        if (m_onlyFilenamePart) {
            auto slash = string.lastIndexOf('/');
            if (slash != -1) {
                auto part = string.mid(slash + 1);
                return m_regexp.match(part).hasMatch();
            }
        }
        return m_regexp.match(string).hasMatch();
    }
    QRegularExpression m_regexp;
    bool m_onlyFilenamePart = false;
};