forked from qt-creator/qt-creator
fakevim: Fix search for [a-z]* and other character ranges
Correctly convert Vim regular expression with braces to QRegExp. E.g. [a-z] in case insensitive mode should be [a-zA-Z]. Change-Id: Iea4e0220ef7d82041884f61b3ee0fed9f912e7b0 Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
@@ -373,6 +373,8 @@ static QRegExp vimPatternToQtPattern(QString needle, bool smartcase)
|
|||||||
|
|
||||||
bool escape = false;
|
bool escape = false;
|
||||||
bool brace = false;
|
bool brace = false;
|
||||||
|
bool embraced = false;
|
||||||
|
bool range = false;
|
||||||
bool curly = false;
|
bool curly = false;
|
||||||
foreach (const QChar &c, needle) {
|
foreach (const QChar &c, needle) {
|
||||||
if (brace) {
|
if (brace) {
|
||||||
@@ -380,11 +382,35 @@ static QRegExp vimPatternToQtPattern(QString needle, bool smartcase)
|
|||||||
if (c == ']') {
|
if (c == ']') {
|
||||||
pattern.append(_("\\[\\]"));
|
pattern.append(_("\\[\\]"));
|
||||||
continue;
|
continue;
|
||||||
} else {
|
|
||||||
pattern.append('[');
|
|
||||||
}
|
}
|
||||||
|
pattern.append('[');
|
||||||
|
escape = true;
|
||||||
|
embraced = true;
|
||||||
}
|
}
|
||||||
if (QString("(){}+|?").indexOf(c) != -1) {
|
if (embraced) {
|
||||||
|
if (range) {
|
||||||
|
QChar c2 = pattern[pattern.size() - 2];
|
||||||
|
pattern.remove(pattern.size() - 2, 2);
|
||||||
|
pattern.append(c2.toUpper() + '-' + c.toUpper());
|
||||||
|
pattern.append(c2.toLower() + '-' + c.toLower());
|
||||||
|
range = false;
|
||||||
|
} else if (escape) {
|
||||||
|
escape = false;
|
||||||
|
pattern.append(c);
|
||||||
|
} else if (c == '\\') {
|
||||||
|
escape = true;
|
||||||
|
} else if (c == ']') {
|
||||||
|
pattern.append(']');
|
||||||
|
embraced = false;
|
||||||
|
} else if (c == '-') {
|
||||||
|
range = ignorecase && pattern[pattern.size() - 1].isLetter();
|
||||||
|
pattern.append('-');
|
||||||
|
} else if (c.isLetter() && ignorecase) {
|
||||||
|
pattern.append(c.toLower() + c.toUpper());
|
||||||
|
} else {
|
||||||
|
pattern.append(c);
|
||||||
|
}
|
||||||
|
} else if (QString("(){}+|?").indexOf(c) != -1) {
|
||||||
if (c == '{') {
|
if (c == '{') {
|
||||||
curly = escape;
|
curly = escape;
|
||||||
} else if (c == '}' && curly) {
|
} else if (c == '}' && curly) {
|
||||||
@@ -2299,9 +2325,8 @@ void FakeVimHandler::Private::updateFind(bool isComplete)
|
|||||||
|
|
||||||
g.currentMessage.clear();
|
g.currentMessage.clear();
|
||||||
|
|
||||||
const QString &needle = g.searchBuffer.contents();
|
|
||||||
SearchData sd;
|
SearchData sd;
|
||||||
sd.needle = needle;
|
sd.needle = g.searchBuffer.contents();
|
||||||
sd.forward = g.lastSearchForward;
|
sd.forward = g.lastSearchForward;
|
||||||
sd.highlightMatches = isComplete;
|
sd.highlightMatches = isComplete;
|
||||||
if (isComplete) {
|
if (isComplete) {
|
||||||
|
|||||||
Reference in New Issue
Block a user