diff options
author | Giuseppe D'Angelo <dangelog@gmail.com> | 2012-03-13 07:24:27 +0000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-21 11:43:30 +0100 |
commit | 865949520252d7c0e5a78f4bb2c195f090f1f601 (patch) | |
tree | 90287a059c44fbccedfd86d7feec927d7f1b08cb /src/corelib | |
parent | 054b69c963990f4e62a1eee8a475b228944369c9 (diff) |
QRegularExpression: support for QStringList overloads
Change-Id: Ia9017348742e41187684185d04b56d27edd383b5
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/tools/qstringlist.cpp | 117 | ||||
-rw-r--r-- | src/corelib/tools/qstringlist.h | 44 |
2 files changed, 161 insertions, 0 deletions
diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp index b4ec0c6498..50e155db81 100644 --- a/src/corelib/tools/qstringlist.cpp +++ b/src/corelib/tools/qstringlist.cpp @@ -41,6 +41,7 @@ #include <qstringlist.h> #include <qset.h> +#include <qregularexpression.h> QT_BEGIN_NAMESPACE @@ -304,6 +305,28 @@ QStringList QtPrivate::QStringList_filter(const QStringList *that, const QRegExp } #endif +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP +/*! + \fn QStringList QStringList::filter(const QRegularExpression &re) const + \overload + \since 5.0 + + Returns a list of all the strings that match the regular + expression \a re. +*/ +QStringList QtPrivate::QStringList_filter(const QStringList *that, const QRegularExpression &re) +{ + QStringList res; + for (int i = 0; i < that->size(); ++i) { + if (that->at(i).contains(re)) + res << that->at(i); + } + return res; +} +#endif // QT_NO_REGEXP +#endif // QT_BOOTSTRAPPED + /*! \fn QStringList &QStringList::replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs) @@ -357,6 +380,39 @@ void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegExp &r } #endif +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP +/*! + \fn QStringList &QStringList::replaceInStrings(const QRegularExpression &re, const QString &after) + \overload + \since 5.0 + + Replaces every occurrence of the regular expression \a re, in each of the + string lists's strings, with \a after. Returns a reference to the string + list. + + For example: + + \snippet doc/src/snippets/qstringlist/main.cpp 5 + \snippet doc/src/snippets/qstringlist/main.cpp 16 + + For regular expressions that contain capturing groups, + occurrences of \b{\\1}, \b{\\2}, ..., in \a after are + replaced with the string captured by the corresponding capturing group. + + For example: + + \snippet doc/src/snippets/qstringlist/main.cpp 5 + \snippet doc/src/snippets/qstringlist/main.cpp 17 +*/ +void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegularExpression &re, const QString &after) +{ + for (int i = 0; i < that->size(); ++i) + (*that)[i].replace(re, after); +} +#endif // QT_NO_REGEXP +#endif // QT_BOOTSTRAPPED + /*! \fn QString QStringList::join(const QString &separator) const @@ -542,6 +598,67 @@ int QtPrivate::QStringList_lastIndexOf(const QStringList *that, QRegExp &rx, int } #endif +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP +/*! + \fn int QStringList::indexOf(const QRegularExpression &re, int from) const + \overload + \since 5.0 + + Returns the index position of the first match of \a re in + the list, searching forward from index position \a from. Returns + -1 if no item matched. + + \sa lastIndexOf() +*/ +int QtPrivate::QStringList_indexOf(const QStringList *that, const QRegularExpression &re, int from) +{ + if (from < 0) + from = qMax(from + that->size(), 0); + + QString exactPattern = QLatin1String("\\A(?:") + re.pattern() + QLatin1String(")\\z"); + QRegularExpression exactRe(exactPattern, re.patternOptions()); + + for (int i = from; i < that->size(); ++i) { + QRegularExpressionMatch m = exactRe.match(that->at(i)); + if (m.hasMatch()) + return i; + } + return -1; +} + +/*! + \fn int QStringList::lastIndexOf(const QRegularExpression &re, int from) const + \overload + \since 5.0 + + Returns the index position of the last exact match of \a re in + the list, searching backward from index position \a from. If \a + from is -1 (the default), the search starts at the last item. + Returns -1 if no item matched. + + \sa indexOf() +*/ +int QtPrivate::QStringList_lastIndexOf(const QStringList *that, const QRegularExpression &re, int from) +{ + if (from < 0) + from += that->size(); + else if (from >= that->size()) + from = that->size() - 1; + + QString exactPattern = QLatin1String("\\A(?:") + re.pattern() + QLatin1String(")\\z"); + QRegularExpression exactRe(exactPattern, re.patternOptions()); + + for (int i = from; i >= 0; --i) { + QRegularExpressionMatch m = exactRe.match(that->at(i)); + if (m.hasMatch()) + return i; + } + return -1; +} +#endif // QT_NO_REGEXP +#endif // QT_BOOTSTRAPPED + /*! \fn int QStringList::indexOf(const QString &value, int from = 0) const diff --git a/src/corelib/tools/qstringlist.h b/src/corelib/tools/qstringlist.h index 260008f183..bf9c2e14bb 100644 --- a/src/corelib/tools/qstringlist.h +++ b/src/corelib/tools/qstringlist.h @@ -55,6 +55,7 @@ QT_BEGIN_NAMESPACE class QRegExp; +class QRegularExpression; typedef QListIterator<QString> QStringListIterator; typedef QMutableListIterator<QString> QMutableStringListIterator; @@ -95,6 +96,16 @@ public: inline int indexOf(QRegExp &rx, int from = 0) const; inline int lastIndexOf(QRegExp &rx, int from = -1) const; #endif + +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP + inline QStringList filter(const QRegularExpression &re) const; + inline QStringList &replaceInStrings(const QRegularExpression &re, const QString &after); + inline int indexOf(const QRegularExpression &re, int from = 0) const; + inline int lastIndexOf(const QRegularExpression &re, int from = -1) const; +#endif // QT_NO_REGEXP +#endif // QT_BOOTSTRAPPED + #if !defined(Q_NO_USING_KEYWORD) using QList<QString>::indexOf; using QList<QString>::lastIndexOf; @@ -127,6 +138,15 @@ namespace QtPrivate { int Q_CORE_EXPORT QStringList_indexOf(const QStringList *that, QRegExp &rx, int from); int Q_CORE_EXPORT QStringList_lastIndexOf(const QStringList *that, QRegExp &rx, int from); #endif + +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP + void Q_CORE_EXPORT QStringList_replaceInStrings(QStringList *that, const QRegularExpression &rx, const QString &after); + QStringList Q_CORE_EXPORT QStringList_filter(const QStringList *that, const QRegularExpression &re); + int Q_CORE_EXPORT QStringList_indexOf(const QStringList *that, const QRegularExpression &re, int from); + int Q_CORE_EXPORT QStringList_lastIndexOf(const QStringList *that, const QRegularExpression &re, int from); +#endif // QT_NO_REGEXP +#endif // QT_BOOTSTRAPPED } inline void QStringList::sort() @@ -193,6 +213,30 @@ inline int QStringList::lastIndexOf(QRegExp &rx, int from) const } #endif +#ifndef QT_BOOTSTRAPPED +#ifndef QT_NO_REGEXP +inline QStringList &QStringList::replaceInStrings(const QRegularExpression &rx, const QString &after) +{ + QtPrivate::QStringList_replaceInStrings(this, rx, after); + return *this; +} + +inline QStringList QStringList::filter(const QRegularExpression &rx) const +{ + return QtPrivate::QStringList_filter(this, rx); +} + +inline int QStringList::indexOf(const QRegularExpression &rx, int from) const +{ + return QtPrivate::QStringList_indexOf(this, rx, from); +} + +inline int QStringList::lastIndexOf(const QRegularExpression &rx, int from) const +{ + return QtPrivate::QStringList_lastIndexOf(this, rx, from); +} +#endif // QT_NO_REGEXP +#endif // QT_BOOTSTRAPPED #ifndef QT_NO_DATASTREAM inline QDataStream &operator>>(QDataStream &in, QStringList &list) |