From 14b081f700ff760d08e40b0ba4615211e44036a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com> Date: Wed, 16 Sep 2009 13:56:34 +0200 Subject: [PATCH] Don't insert automatic parenthesis in comments and strings --- src/plugins/cppeditor/cppeditor.cpp | 7 +++++++ src/plugins/cppeditor/cppeditor.h | 5 +++-- src/plugins/texteditor/basetexteditor.cpp | 15 +++++++++++---- src/plugins/texteditor/basetexteditor.h | 2 ++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 3ba2967a9b0..8f9b4075db3 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1268,6 +1268,13 @@ bool CPPEditor::isElectricCharacter(const QChar &ch) const return false; } +bool CPPEditor::contextAllowsAutoParenthesis(const QTextCursor &cursor) const +{ + CPlusPlus::TokenUnderCursor tokenUnderCursor; + const SimpleToken tk = tokenUnderCursor(cursor); + return !(tk.isComment() || tk.isLiteral()); +} + void CPPEditor::indentInsertedText(const QTextCursor &tc) { indent(tc.document(), tc, QChar::Null); diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h index 40e2e71972f..224033d182e 100644 --- a/src/plugins/cppeditor/cppeditor.h +++ b/src/plugins/cppeditor/cppeditor.h @@ -211,8 +211,9 @@ protected: TextEditor::BaseTextEditorEditable *createEditableInterface(); - // Rertuns true if key triggers anindent. - virtual bool isElectricCharacter(const QChar &ch) const; + // These override BaseTextEditor + bool isElectricCharacter(const QChar &ch) const; + bool contextAllowsAutoParenthesis(const QTextCursor &cursor) const; private Q_SLOTS: void updateFileName(); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index d5d6e2d5261..b766e672118 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1073,9 +1073,8 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) QString text = e->text(); QString autoText; - // TODO disable this inside string or character literals if (d->m_autoParenthesesEnabled && d->m_document->tabSettings().m_autoParentheses) { - foreach(QChar c, text) { + foreach (QChar c, text) { QChar close; if (c == QLatin1Char('(')) close = QLatin1Char(')'); @@ -1101,7 +1100,7 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) } QChar electricChar; if (d->m_document->tabSettings().m_autoIndent) { - foreach(QChar c, text) { + foreach (QChar c, text) { if (isElectricCharacter(c)) { electricChar = c; break; @@ -1110,8 +1109,11 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) } if (!electricChar.isNull()) cursor.beginEditBlock(); + + bool insertAutoParenthesis = !autoText.isEmpty() && contextAllowsAutoParenthesis(cursor); cursor.insertText(text); - if (!autoText.isEmpty()) { + + if (insertAutoParenthesis) { int pos = cursor.position(); cursor.insertText(autoText); cursor.setPosition(pos); @@ -3316,6 +3318,11 @@ bool BaseTextEditor::isElectricCharacter(const QChar &) const return false; } +bool BaseTextEditor::contextAllowsAutoParenthesis(const QTextCursor &) const +{ + return true; +} + void BaseTextEditor::indentBlock(QTextDocument *, QTextBlock, QChar) { } diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 691365cecd2..6477ab71e1d 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -508,6 +508,8 @@ protected: // Returns true if key triggers an indent. virtual bool isElectricCharacter(const QChar &ch) const; + // Returns true if automatic brace matching should be enabled in the context of the given cursor + virtual bool contextAllowsAutoParenthesis(const QTextCursor &cursor) const; // Indent a text block based on previous line. Default does nothing virtual void indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar); // Indent at cursor. Calls indentBlock for selection or current line. -- GitLab