diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index b766e672118ba7981c90a1f4a10128fd6722b49b..97d9b6f4fd27490118a4a0ff9550467c5f56300e 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1074,11 +1074,13 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) QString autoText; if (d->m_autoParenthesesEnabled && d->m_document->tabSettings().m_autoParentheses) { + QChar lookAhead = characterAt(cursor.position()); foreach (QChar c, text) { QChar close; - if (c == QLatin1Char('(')) - close = QLatin1Char(')'); - else if (c == QLatin1Char('[')) + if (c == QLatin1Char('(')) { + if (!lookAhead.isLetterOrNumber() && lookAhead != c) + close = QLatin1Char(')'); + } else if (c == QLatin1Char('[')) close = QLatin1Char(']'); else if (c == QLatin1Char('\"')) close = c; @@ -1088,15 +1090,24 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) autoText += close; } + bool skip = false; QChar first = text.at(0); - if (first == QLatin1Char(')') - || first == QLatin1Char(']')) { - if (first == characterAt(cursor.position())) { - int pos = cursor.position(); - cursor.setPosition(pos+1); - cursor.setPosition(pos, QTextCursor::KeepAnchor); + if (first == QLatin1Char(')')) { + skip = (first == lookAhead); + } else if (first == QLatin1Char(']')) { + skip = (first == lookAhead); + } else if (first == QLatin1Char('\"') || first == QLatin1Char('\'')) { + if (first == lookAhead) { + QChar lookBehind = characterAt(cursor.position()-1); + skip = (lookBehind != '\\'); } } + + if (skip) { + int pos = cursor.position(); + cursor.setPosition(pos+1); + cursor.setPosition(pos, QTextCursor::KeepAnchor); + } } QChar electricChar; if (d->m_document->tabSettings().m_autoIndent) {