summaryrefslogtreecommitdiffstats
path: root/api/logic/pathmatcher/RegexpMatcher.h
blob: 825d488c3e39159908aae48cada36f07364ed02c (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
37
38
39
40
41
42
#include "IPathMatcher.h"
#include <QRegularExpression>

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;
};