1
/****************************************************************************
3
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/
6
** This file is part of the QtCore module of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:LGPL$
9
** GNU Lesser General Public License Usage
10
** This file may be used under the terms of the GNU Lesser General Public
11
** License version 2.1 as published by the Free Software Foundation and
12
** appearing in the file LICENSE.LGPL included in the packaging of this
13
** file. Please review the following information to ensure the GNU Lesser
14
** General Public License version 2.1 requirements will be met:
15
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17
** In addition, as a special exception, Nokia gives you certain additional
18
** rights. These rights are described in the Nokia Qt LGPL Exception
19
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21
** GNU General Public License Usage
22
** Alternatively, this file may be used under the terms of the GNU General
23
** Public License version 3.0 as published by the Free Software Foundation
24
** and appearing in the file LICENSE.GPL included in the packaging of this
25
** file. Please review the following information to ensure the GNU General
26
** Public License version 3.0 requirements will be met:
27
** http://www.gnu.org/copyleft/gpl.html.
30
** Alternatively, this file may be used in accordance with the terms and
31
** conditions contained in a signed written agreement between you and Nokia.
40
****************************************************************************/
42
#ifndef QMIMEGLOBPATTERN_P_H
43
#define QMIMEGLOBPATTERN_P_H
45
#include <QtCore/qstringlist.h>
46
#include <QtCore/qhash.h>
50
struct QMimeGlobMatchResult
52
QMimeGlobMatchResult()
53
: m_weight(0), m_matchingPatternLength(0)
56
void addMatch(const QString &mimeType, int weight, const QString &pattern);
58
QStringList m_matchingMimeTypes;
60
int m_matchingPatternLength;
61
QString m_foundSuffix;
64
class QMimeGlobPattern
67
static const unsigned MaxWeight = 100;
68
static const unsigned DefaultWeight = 50;
69
static const unsigned MinWeight = 1;
71
explicit QMimeGlobPattern(const QString &thePattern, const QString &theMimeType, unsigned theWeight = DefaultWeight, Qt::CaseSensitivity s = Qt::CaseInsensitive) :
72
m_pattern(thePattern), m_mimeType(theMimeType), m_weight(theWeight), m_caseSensitivity(s)
74
if (s == Qt::CaseInsensitive) {
75
m_pattern = m_pattern.toLower();
78
~QMimeGlobPattern() {}
80
bool matchFileName(const QString &filename) const;
82
inline const QString &pattern() const { return m_pattern; }
83
inline unsigned weight() const { return m_weight; }
84
inline const QString &mimeType() const { return m_mimeType; }
85
inline bool isCaseSensitive() const { return m_caseSensitivity == Qt::CaseSensitive; }
91
Qt::CaseSensitivity m_caseSensitivity;
94
class QMimeGlobPatternList : public QList<QMimeGlobPattern>
97
bool hasPattern(const QString &mimeType, const QString &pattern) const
99
const_iterator it = begin();
100
const const_iterator myend = end();
101
for (; it != myend; ++it)
102
if ((*it).pattern() == pattern && (*it).mimeType() == mimeType)
108
"noglobs" is very rare occurrence, so it's ok if it's slow
110
void removeMimeType(const QString &mimeType)
112
QMutableListIterator<QMimeGlobPattern> it(*this);
113
while (it.hasNext()) {
114
if (it.next().mimeType() == mimeType)
119
void match(QMimeGlobMatchResult &result, const QString &fileName) const;
123
Result of the globs parsing, as data structures ready for efficient MIME type matching.
125
1) a map of fast regular patterns (e.g. *.txt is stored as "txt" in a qhash's key)
126
2) a linear list of high-weight globs
127
3) a linear list of low-weight globs
129
class QMimeAllGlobPatterns
132
typedef QHash<QString, QStringList> PatternsMap; // MIME type -> patterns
134
void addGlob(const QMimeGlobPattern &glob);
135
void removeMimeType(const QString &mimeType);
136
QStringList matchingGlobs(const QString &fileName, QString *foundSuffix) const;
139
PatternsMap m_fastPatterns; // example: "doc" -> "application/msword", "text/plain"
140
QMimeGlobPatternList m_highWeightGlobs;
141
QMimeGlobPatternList m_lowWeightGlobs; // <= 50, including the non-fast 50 patterns
146
#endif // QMIMEGLOBPATTERN_P_H