diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2017-10-30 20:50:11 +0200 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2017-11-02 21:35:03 +0000 |
commit | e9b4d3a48a654702c4b7317ebd12a0b5bda6cc5f (patch) | |
tree | 4ac5b213216c3ce2f37b8549a4ae908317f2ed26 /src/libs/utils/camelhumpmatcher.cpp | |
parent | fc2bb852fdc370257ad646443fe2cf1171efeaff (diff) | |
download | qt-creator-e9b4d3a48a654702c4b7317ebd12a0b5bda6cc5f.tar.gz |
Rename CamelHumpMatcher -> FuzzyMatcher
Change-Id: Ia8a2eeb985bcdd500b4faf9605e5092a52dad372
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'src/libs/utils/camelhumpmatcher.cpp')
-rw-r--r-- | src/libs/utils/camelhumpmatcher.cpp | 155 |
1 files changed, 0 insertions, 155 deletions
diff --git a/src/libs/utils/camelhumpmatcher.cpp b/src/libs/utils/camelhumpmatcher.cpp deleted file mode 100644 index 2c81f197d7..0000000000 --- a/src/libs/utils/camelhumpmatcher.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Copyright (C) 2017 BlackBerry Limited <qt@blackberry.com> -** Copyright (C) 2017 Andre Hartmann <aha_1980@gmx.de> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "camelhumpmatcher.h" - -#include <QRegularExpression> -#include <QString> - -/** - * \brief Creates a regexp that represents a specified camel hump pattern, - * underscores are not included. - * - * \param pattern the camel hump pattern - * \param caseSensitivity case sensitivity used for camel hump matching; - * does not affect wildcard style matching - * \return the regexp - */ -QRegularExpression CamelHumpMatcher::createCamelHumpRegExp( - const QString &pattern, CamelHumpMatcher::CaseSensitivity caseSensitivity) -{ - if (pattern.isEmpty()) - return QRegularExpression(); - - /* - * This code builds a regular expression in order to more intelligently match - * camel-case and underscore names. - * - * For any but the first letter, the following replacements are made: - * A => [a-z0-9_]*A - * a => (?:[a-zA-Z0-9]*_)?a - * - * That means any sequence of lower-case or underscore characters can preceed an - * upper-case character. And any sequence of lower-case or upper case characters - - * followed by an underscore can preceed a lower-case character. - * - * Examples: (case sensitive mode) - * gAC matches getActionController - * gac matches get_action_controller - * - * It also implements the fully and first-letter-only case sensitivity. - */ - - QString keyRegExp; - QString plainRegExp; - bool first = true; - const QChar asterisk = '*'; - const QChar question = '?'; - const QLatin1String uppercaseWordFirst("(?<=\\b|[a-z0-9_])"); - const QLatin1String lowercaseWordFirst("(?<=\\b|[A-Z0-9_])"); - const QLatin1String uppercaseWordContinuation("[a-z0-9_]*"); - const QLatin1String lowercaseWordContinuation("(?:[a-zA-Z0-9]*_)?"); - const QLatin1String upperSnakeWordContinuation("[A-Z0-9]*_"); - keyRegExp += "(?:"; - for (const QChar &c : pattern) { - if (!c.isLetter()) { - if (c == question) { - keyRegExp += '.'; - plainRegExp += '.'; - } else if (c == asterisk) { - keyRegExp += ".*"; - plainRegExp += ".*"; - } else { - const QString escaped = QRegularExpression::escape(c); - keyRegExp += '(' + escaped + ')'; - plainRegExp += escaped; - } - } else if (caseSensitivity == CaseSensitivity::CaseInsensitive || - (caseSensitivity == CaseSensitivity::FirstLetterCaseSensitive && !first)) { - - const QString upper = QRegularExpression::escape(c.toUpper()); - const QString lower = QRegularExpression::escape(c.toLower()); - keyRegExp += "(?:"; - keyRegExp += first ? uppercaseWordFirst : uppercaseWordContinuation; - keyRegExp += '(' + upper + ')'; - if (first) { - keyRegExp += '|' + lowercaseWordFirst + '(' + lower + ')'; - } else { - keyRegExp += '|' + lowercaseWordContinuation + '(' + lower + ')'; - keyRegExp += '|' + upperSnakeWordContinuation + '(' + upper + ')'; - } - keyRegExp += ')'; - plainRegExp += '[' + upper + lower + ']'; - } else { - if (!first) { - if (c.isUpper()) - keyRegExp += uppercaseWordContinuation; - else - keyRegExp += lowercaseWordContinuation; - } - const QString escaped = QRegularExpression::escape(c); - keyRegExp += escaped; - plainRegExp += escaped; - } - - first = false; - } - keyRegExp += ')'; - - return QRegularExpression('(' + plainRegExp + ")|" + keyRegExp); -} - -/*! - * \brief Returns a list of matched character positions and their matched lengths for the - * given regular expression \a match. - * - * The list is minimized by combining adjacent highlighting positions to a single position. - */ -CamelHumpMatcher::HighlightingPositions CamelHumpMatcher::highlightingPositions( - const QRegularExpressionMatch &match) -{ - HighlightingPositions result; - - for (int i = 1, size = match.capturedTexts().size(); i < size; ++i) { - // skip unused positions, they can appear because upper- and lowercase - // checks for one character are done using two capture groups - if (match.capturedStart(i) < 0) - continue; - - // check for possible highlighting continuation to keep the list minimal - if (!result.starts.isEmpty() - && (result.starts.last() + result.lengths.last() == match.capturedStart(i))) { - result.lengths.last() += match.capturedLength(i); - } else { - // no continuation, append as different chunk - result.starts.append(match.capturedStart(i)); - result.lengths.append(match.capturedLength(i)); - } - } - - return result; -} |