~ubuntu-branches/ubuntu/oneiric/kde4libs/oneiric-proposed

« back to all changes in this revision

Viewing changes to kate/mode/katewildcardmatcher.cpp

  • Committer: Package Import Robot
  • Author(s): Philip Muškovac
  • Date: 2011-07-08 00:08:34 UTC
  • mto: This revision was merged to the branch mainline in revision 247.
  • Revision ID: package-import@ubuntu.com-20110708000834-dr9a8my4iml90qe5
Tags: upstream-4.6.90
Import upstream version 4.6.90

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* This file is part of the KDE libraries
2
 
   Copyright (C) 2007 Sebastian Pipping <webmaster@hartwork.org>
3
 
 
4
 
   This library is free software; you can redistribute it and/or
5
 
   modify it under the terms of the GNU Library General Public
6
 
   License version 2 as published by the Free Software Foundation.
7
 
 
8
 
   This library is distributed in the hope that it will be useful,
9
 
   but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11
 
   Library General Public License for more details.
12
 
 
13
 
   You should have received a copy of the GNU Library General Public License
14
 
   along with this library; see the file COPYING.LIB.  If not, write to
15
 
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16
 
   Boston, MA 02110-1301, USA.
17
 
*/
18
 
 
19
 
#include "katewildcardmatcher.h"
20
 
#include <QString>
21
 
#include <QChar>
22
 
 
23
 
 
24
 
 
25
 
namespace KateWildcardMatcher {
26
 
 
27
 
 
28
 
 
29
 
bool exactMatch(const QString & candidate, const QString & wildcard, int candidatePosFromRight,
30
 
        int wildcardPosFromRight, bool caseSensitive = true) {
31
 
        for (; wildcardPosFromRight >= 0; wildcardPosFromRight--) {
32
 
                const ushort ch = wildcard[wildcardPosFromRight].unicode();
33
 
                switch (ch) {
34
 
                case L'*':
35
 
                    if (candidatePosFromRight == -1) {
36
 
                        break;
37
 
                    }
38
 
 
39
 
                        if (wildcardPosFromRight == 0) {
40
 
                                return true;
41
 
                        }
42
 
 
43
 
                        // Eat all we can and go back as far as we have to
44
 
                        for (int j = -1; j <= candidatePosFromRight; j++) {
45
 
                                if (exactMatch(candidate, wildcard, j, wildcardPosFromRight - 1)) {
46
 
                                        return true;
47
 
                                }
48
 
                        }
49
 
                        return false;
50
 
 
51
 
                case L'?':
52
 
                    if (candidatePosFromRight == -1) {
53
 
                        return false;
54
 
                    }
55
 
 
56
 
                        candidatePosFromRight--;
57
 
                        break;
58
 
 
59
 
                default:
60
 
                    if (candidatePosFromRight == -1) {
61
 
                        return false;
62
 
                    }
63
 
 
64
 
                const ushort candidateCh = candidate[candidatePosFromRight].unicode();
65
 
                    const bool match = caseSensitive
66
 
                            ? (candidateCh == ch)
67
 
                            : (QChar::toLower(candidateCh) == QChar::toLower(ch));
68
 
                        if (match) {
69
 
                                candidatePosFromRight--;
70
 
                        } else {
71
 
                return false;
72
 
                        }
73
 
                }
74
 
        }
75
 
        return true;
76
 
}
77
 
 
78
 
 
79
 
 
80
 
bool exactMatch(const QString & candidate, const QString & wildcard,
81
 
        bool caseSensitive) {
82
 
    return exactMatch(candidate, wildcard, candidate.length() - 1,
83
 
            wildcard.length() - 1, caseSensitive);
84
 
}
85
 
 
86
 
 
87
 
 
88
 
}
89