Commit b9ce92ec authored by Roberto Raggi's avatar Roberto Raggi

Remove all the synthesized characters when matching curly braces

parent 29f03c75
...@@ -75,7 +75,16 @@ static bool isCompleteCharLiteral(const BackwardsScanner &tk, int index) ...@@ -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) ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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; MatchingText matchingText;
int skippedChars = 0; int skippedChars = 0;
const QString autoText = matchingText.insertMatchingBrace(cursor, text, lookAhead, &skippedChars);
if (checkBlockEnd && (lookAhead == QChar::ParagraphSeparator && (! text.isEmpty() && text.at(0) == QLatin1Char('}')))) { if (checkBlockEnd && textToInsert.at(0) == QLatin1Char('}')) {
skippedChars = 2; if (textToInsert.length() > 1)
text = text.mid(1); qWarning() << "*** handle event compression";
}
MatchingText matchingText; int startPos = cursor.selectionEnd(), pos = startPos;
autoText = matchingText.insertMatchingBrace(cursor, text, lookAhead, &skippedChars); 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) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment