forked from qt-creator/qt-creator
Remove all the synthesized characters when matching curly braces
This commit is contained in:
@@ -75,7 +75,16 @@ static bool isCompleteCharLiteral(const BackwardsScanner &tk, int index)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool shouldInsertMatchingText(const QChar &lookAhead)
|
MatchingText::MatchingText()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
bool MatchingText::shouldInsertMatchingText(const QTextCursor &tc)
|
||||||
|
{
|
||||||
|
QTextDocument *doc = tc.document();
|
||||||
|
return shouldInsertMatchingText(doc->characterAt(tc.selectionEnd()));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MatchingText::shouldInsertMatchingText(const QChar &lookAhead)
|
||||||
{
|
{
|
||||||
switch (lookAhead.unicode()) {
|
switch (lookAhead.unicode()) {
|
||||||
case '{': case '}':
|
case '{': case '}':
|
||||||
@@ -91,9 +100,6 @@ static bool shouldInsertMatchingText(const QChar &lookAhead)
|
|||||||
} // switch
|
} // switch
|
||||||
}
|
}
|
||||||
|
|
||||||
MatchingText::MatchingText()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
QString MatchingText::insertMatchingBrace(const QTextCursor &cursor, const QString &textToProcess,
|
QString MatchingText::insertMatchingBrace(const QTextCursor &cursor, const QString &textToProcess,
|
||||||
const QChar &la, int *skippedChars) const
|
const QChar &la, int *skippedChars) const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ class CPLUSPLUS_EXPORT MatchingText
|
|||||||
public:
|
public:
|
||||||
MatchingText();
|
MatchingText();
|
||||||
|
|
||||||
|
static bool shouldInsertMatchingText(const QTextCursor &tc);
|
||||||
|
static bool shouldInsertMatchingText(const QChar &lookAhead);
|
||||||
|
|
||||||
QString insertMatchingBrace(const QTextCursor &tc, const QString &text,
|
QString insertMatchingBrace(const QTextCursor &tc, const QString &text,
|
||||||
const QChar &la, int *skippedChars) const;
|
const QChar &la, int *skippedChars) const;
|
||||||
QString insertParagraphSeparator(const QTextCursor &tc) const;
|
QString insertParagraphSeparator(const QTextCursor &tc) const;
|
||||||
|
|||||||
@@ -1273,8 +1273,8 @@ bool CPPEditor::isElectricCharacter(const QChar &ch) const
|
|||||||
|
|
||||||
QString CPPEditor::autoComplete(QTextCursor &cursor, const QString &textToInsert) const
|
QString CPPEditor::autoComplete(QTextCursor &cursor, const QString &textToInsert) const
|
||||||
{
|
{
|
||||||
bool checkBlockEnd = m_allowSkippingOfBlockEnd;
|
const bool checkBlockEnd = m_allowSkippingOfBlockEnd;
|
||||||
m_allowSkippingOfBlockEnd = false;
|
m_allowSkippingOfBlockEnd = false; // consume blockEnd.
|
||||||
|
|
||||||
if (!contextAllowsAutoParentheses(cursor))
|
if (!contextAllowsAutoParentheses(cursor))
|
||||||
return QString();
|
return QString();
|
||||||
@@ -1282,16 +1282,21 @@ QString CPPEditor::autoComplete(QTextCursor &cursor, const QString &textToInsert
|
|||||||
QString text = textToInsert;
|
QString text = textToInsert;
|
||||||
const QChar lookAhead = characterAt(cursor.selectionEnd());
|
const QChar lookAhead = characterAt(cursor.selectionEnd());
|
||||||
|
|
||||||
QString autoText;
|
|
||||||
int skippedChars = 0;
|
|
||||||
|
|
||||||
if (checkBlockEnd && (lookAhead == QChar::ParagraphSeparator && (! text.isEmpty() && text.at(0) == QLatin1Char('}')))) {
|
|
||||||
skippedChars = 2;
|
|
||||||
text = text.mid(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
MatchingText matchingText;
|
MatchingText matchingText;
|
||||||
autoText = matchingText.insertMatchingBrace(cursor, text, lookAhead, &skippedChars);
|
int skippedChars = 0;
|
||||||
|
const QString autoText = matchingText.insertMatchingBrace(cursor, text, lookAhead, &skippedChars);
|
||||||
|
|
||||||
|
if (checkBlockEnd && textToInsert.at(0) == QLatin1Char('}')) {
|
||||||
|
if (textToInsert.length() > 1)
|
||||||
|
qWarning() << "*** handle event compression";
|
||||||
|
|
||||||
|
int startPos = cursor.selectionEnd(), pos = startPos;
|
||||||
|
while (characterAt(pos).isSpace())
|
||||||
|
++pos;
|
||||||
|
|
||||||
|
if (characterAt(pos) == QLatin1Char('}'))
|
||||||
|
skippedChars += (pos - startPos) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (skippedChars) {
|
if (skippedChars) {
|
||||||
const int pos = cursor.position();
|
const int pos = cursor.position();
|
||||||
@@ -1338,7 +1343,6 @@ int CPPEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor)
|
|||||||
if (!contextAllowsAutoParentheses(cursor))
|
if (!contextAllowsAutoParentheses(cursor))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
// verify that we indeed do have an extra opening brace in the document
|
// verify that we indeed do have an extra opening brace in the document
|
||||||
int braceDepth = document()->lastBlock().userState();
|
int braceDepth = document()->lastBlock().userState();
|
||||||
if (braceDepth >= 0)
|
if (braceDepth >= 0)
|
||||||
@@ -1372,6 +1376,9 @@ int CPPEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor)
|
|||||||
|
|
||||||
bool CPPEditor::contextAllowsAutoParentheses(const QTextCursor &cursor) const
|
bool CPPEditor::contextAllowsAutoParentheses(const QTextCursor &cursor) const
|
||||||
{
|
{
|
||||||
|
if (! MatchingText::shouldInsertMatchingText(cursor))
|
||||||
|
return false;
|
||||||
|
|
||||||
CPlusPlus::TokenUnderCursor tokenUnderCursor;
|
CPlusPlus::TokenUnderCursor tokenUnderCursor;
|
||||||
const SimpleToken tk = tokenUnderCursor(cursor);
|
const SimpleToken tk = tokenUnderCursor(cursor);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user