Speed up contextAllowsAutoParentheses().

Look at the token under cursor only if the current character is a brace or a quote.
This commit is contained in:
Roberto Raggi
2010-01-12 15:59:22 +01:00
parent e3188417c3
commit 547912af2a
2 changed files with 63 additions and 47 deletions

View File

@@ -726,6 +726,28 @@ bool QmlTextEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, cons
if (! textToInsert.isEmpty())
ch = textToInsert.at(0);
switch (ch.unicode()) {
case '\'':
case '"':
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':
case ';':
break;
default:
if (ch.isNull())
break;
return false;
} // end of switch
const QString blockText = cursor.block().text();
const int blockState = blockStartState(cursor.block());
@@ -736,8 +758,12 @@ bool QmlTextEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, cons
int tokenIndex = tokens.size() - 1;
for (; tokenIndex != -1; --tokenIndex) {
const QScriptIncrementalScanner::Token &token = tokens.at(tokenIndex);
if (pos >= token.begin() && pos <= token.end())
if (pos >= token.begin()) {
if (pos < token.end())
break;
else if (pos == token.end() && token.is(QScriptIncrementalScanner::Token::Comment))
break;
}
}
if (tokenIndex != -1) {
@@ -760,27 +786,7 @@ bool QmlTextEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, cons
} // end of switch
}
switch (ch.unicode()) {
case '\'':
case '"':
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':
case ';':
return true;
default:
if (ch.isNull())
return true;
} // end of switch
return false;
}
bool QmlTextEditor::isInComment(const QTextCursor &) const

View File

@@ -409,8 +409,34 @@ bool ScriptEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, const
if (! textToInsert.isEmpty())
ch = textToInsert.at(0);
switch (ch.unicode()) {
case '\'':
case '"':
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':
case ';':
break;
default:
if (ch.isNull())
break;
return false;
} // end of switch
const QString blockText = cursor.block().text();
const int blockState = cursor.block().userState() & 0xFF;
int blockState = cursor.block().userState();
if (blockState == -1)
blockState = 0;
else
blockState = blockState & 0xFF;
QScriptIncrementalScanner tokenize;
const QList<QScriptIncrementalScanner::Token> tokens = tokenize(blockText, blockState);
@@ -419,8 +445,12 @@ bool ScriptEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, const
int tokenIndex = tokens.size() - 1;
for (; tokenIndex != -1; --tokenIndex) {
const QScriptIncrementalScanner::Token &token = tokens.at(tokenIndex);
if (pos >= token.begin() && pos <= token.end())
if (pos >= token.begin()) {
if (pos < token.end())
break;
else if (pos == token.end() && token.is(QScriptIncrementalScanner::Token::Comment))
break;
}
}
if (tokenIndex != -1) {
@@ -443,27 +473,7 @@ bool ScriptEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, const
} // end of switch
}
switch (ch.unicode()) {
case '\'':
case '"':
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':
case ';':
return true;
default:
if (ch.isNull())
return true;
} // end of switch
return false;
}
bool ScriptEditor::isInComment(const QTextCursor &) const