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)
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()) {
case '{': case '}':
......@@ -91,9 +100,6 @@ static bool shouldInsertMatchingText(const QChar &lookAhead)
} // switch
}
MatchingText::MatchingText()
{ }
QString MatchingText::insertMatchingBrace(const QTextCursor &cursor, const QString &textToProcess,
const QChar &la, int *skippedChars) const
{
......
......@@ -41,6 +41,9 @@ class CPLUSPLUS_EXPORT MatchingText
public:
MatchingText();
static bool shouldInsertMatchingText(const QTextCursor &tc);
static bool shouldInsertMatchingText(const QChar &lookAhead);
QString insertMatchingBrace(const QTextCursor &tc, const QString &text,
const QChar &la, int *skippedChars) 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
{
bool checkBlockEnd = m_allowSkippingOfBlockEnd;
m_allowSkippingOfBlockEnd = false;
const bool checkBlockEnd = m_allowSkippingOfBlockEnd;
m_allowSkippingOfBlockEnd = false; // consume blockEnd.
if (!contextAllowsAutoParentheses(cursor))
return QString();
......@@ -1282,16 +1282,21 @@ QString CPPEditor::autoComplete(QTextCursor &cursor, const QString &textToInsert
QString text = textToInsert;
const QChar lookAhead = characterAt(cursor.selectionEnd());
QString autoText;
MatchingText matchingText;
int skippedChars = 0;
const QString autoText = matchingText.insertMatchingBrace(cursor, text, lookAhead, &skippedChars);
if (checkBlockEnd && (lookAhead == QChar::ParagraphSeparator && (! text.isEmpty() && text.at(0) == QLatin1Char('}')))) {
skippedChars = 2;
text = text.mid(1);
}
if (checkBlockEnd && textToInsert.at(0) == QLatin1Char('}')) {
if (textToInsert.length() > 1)
qWarning() << "*** handle event compression";
MatchingText matchingText;
autoText = matchingText.insertMatchingBrace(cursor, text, lookAhead, &skippedChars);
int startPos = cursor.selectionEnd(), pos = startPos;
while (characterAt(pos).isSpace())
++pos;
if (characterAt(pos) == QLatin1Char('}'))
skippedChars += (pos - startPos) + 1;
}
if (skippedChars) {
const int pos = cursor.position();
......@@ -1338,7 +1343,6 @@ int CPPEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor)
if (!contextAllowsAutoParentheses(cursor))
return 0;
// verify that we indeed do have an extra opening brace in the document
int braceDepth = document()->lastBlock().userState();
if (braceDepth >= 0)
......@@ -1372,6 +1376,9 @@ int CPPEditor::paragraphSeparatorAboutToBeInserted(QTextCursor &cursor)
bool CPPEditor::contextAllowsAutoParentheses(const QTextCursor &cursor) const
{
if (! MatchingText::shouldInsertMatchingText(cursor))
return false;
CPlusPlus::TokenUnderCursor tokenUnderCursor;
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