Remove all the synthesized characters when matching curly braces

This commit is contained in:
Roberto Raggi
2009-09-21 18:19:09 +02:00
parent 29f03c7526
commit b9ce92ec4d
3 changed files with 32 additions and 16 deletions

View File

@@ -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
{ {

View File

@@ -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;

View File

@@ -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);