Merge branch '2.0'

Conflicts:
	src/plugins/cppeditor/cppquickfix.cpp
	src/plugins/mercurial/mercurialjobrunner.cpp
	src/plugins/subversion/subversionplugin.cpp
This commit is contained in:
Thorbjørn Lindeijer
2010-06-15 13:20:47 +02:00
13 changed files with 109 additions and 53 deletions

View File

@@ -102,7 +102,7 @@ public:
_cursor = cursor;
QTextBlock block = _cursor.block();
const QString blockText = block.text().left(cursor.columnNumber());
const QString blockText = block.text().left(cursor.positionInBlock());
scanner.setScanComments(false);
const QList<Token> tokens = scanner(blockText, startState(block));

View File

@@ -523,7 +523,7 @@ bool CodeCompletion::triggersCompletion(TextEditor::ITextEditable *editor)
QTextCursor tc = ed->textCursor();
QTextBlock block = tc.block();
const int column = tc.columnNumber();
const int column = tc.positionInBlock();
const int blockState = qMax(0, block.previous().userState()) & 0xff;
const QString blockText = block.text();

View File

@@ -1103,6 +1103,34 @@ static bool isCompleteStringLiteral(const QStringRef &text)
return false;
}
static Token tokenUnderCursor(const QTextCursor &cursor)
{
const QString blockText = cursor.block().text();
const int blockState = blockStartState(cursor.block());
Scanner tokenize;
const QList<Token> tokens = tokenize(blockText, blockState);
const int pos = cursor.positionInBlock();
int tokenIndex = 0;
for (; tokenIndex < tokens.size(); ++tokenIndex) {
const Token &token = tokens.at(tokenIndex);
if (token.is(Token::Comment) || token.is(Token::String)) {
if (pos > token.begin() && pos <= token.end())
break;
} else {
if (pos >= token.begin() && pos < token.end())
break;
}
}
if (tokenIndex != tokens.size())
return tokens.at(tokenIndex);
return Token();
}
bool QmlJSTextEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, const QString &textToInsert) const
{
QChar ch;
@@ -1132,56 +1160,45 @@ bool QmlJSTextEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, co
return false;
} // end of switch
const QString blockText = cursor.block().text();
const int blockState = blockStartState(cursor.block());
const Token token = tokenUnderCursor(cursor);
switch (token.kind) {
case Token::Comment:
return false;
Scanner tokenize;
const QList<Token> tokens = tokenize(blockText, blockState);
const int pos = cursor.columnNumber();
case Token::String: {
const QString blockText = cursor.block().text();
const QStringRef tokenText = blockText.midRef(token.offset, token.length);
const QChar quote = tokenText.at(0);
int tokenIndex = 0;
for (; tokenIndex < tokens.size(); ++tokenIndex) {
const Token &token = tokens.at(tokenIndex);
if (pos >= token.begin()) {
if (pos < token.end())
break;
else if (pos == token.end() && (token.is(Token::Comment) ||
token.is(Token::String)))
break;
}
}
if (tokenIndex != tokens.size()) {
const Token &token = tokens.at(tokenIndex);
switch (token.kind) {
case Token::Comment:
return false;
case Token::String: {
const QStringRef tokenText = blockText.midRef(token.offset, token.length);
const QChar quote = tokenText.at(0);
if (ch != quote || isCompleteStringLiteral(tokenText))
break;
return false;
}
default:
if (ch != quote || isCompleteStringLiteral(tokenText))
break;
} // end of switch
return false;
}
default:
break;
} // end of switch
return true;
}
bool QmlJSTextEditor::isInComment(const QTextCursor &) const
bool QmlJSTextEditor::contextAllowsElectricCharacters(const QTextCursor &cursor) const
{
// ### implement me
return false;
Token token = tokenUnderCursor(cursor);
qDebug() << cursor.positionInBlock() << token.begin() << token.end();
switch (token.kind) {
case Token::Comment:
case Token::String:
return false;
default:
return true;
}
}
bool QmlJSTextEditor::isInComment(const QTextCursor &cursor) const
{
return tokenUnderCursor(cursor).is(Token::Comment);
}
QString QmlJSTextEditor::insertMatchingBrace(const QTextCursor &tc, const QString &text, QChar, int *skippedChars) const

View File

@@ -248,6 +248,7 @@ protected:
//// brace matching
virtual bool contextAllowsAutoParentheses(const QTextCursor &cursor, const QString &textToInsert = QString()) const;
virtual bool contextAllowsElectricCharacters(const QTextCursor &cursor) const;
virtual bool isInComment(const QTextCursor &cursor) const;
virtual QString insertMatchingBrace(const QTextCursor &tc, const QString &text, QChar la, int *skippedChars) const;
virtual QString insertParagraphSeparator(const QTextCursor &tc) const;