From e40cd82f8c12ca3d0a3b0e9c89737acf940def44 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Tue, 29 Sep 2009 11:34:11 +0200 Subject: [PATCH] Introduced T_CPP_COMMENT and T_CPP_DOXY_COMMENT to handle C++-style comments and improved CPPEditor::isInComment to handle the newly introduced tokens. As side effect,this change should fix the regression we introduced in the "automagically" quote/brace insertion. --- src/libs/cplusplus/SimpleLexer.cpp | 3 ++- src/plugins/cppeditor/cppeditor.cpp | 11 ++++++++++- src/plugins/cppeditor/cpphighlighter.cpp | 2 +- src/shared/cplusplus/Lexer.cpp | 2 +- src/shared/cplusplus/Token.cpp | 1 + src/shared/cplusplus/Token.h | 5 ++++- 6 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/libs/cplusplus/SimpleLexer.cpp b/src/libs/cplusplus/SimpleLexer.cpp index 59475bc4a4e..2934804f093 100644 --- a/src/libs/cplusplus/SimpleLexer.cpp +++ b/src/libs/cplusplus/SimpleLexer.cpp @@ -63,7 +63,8 @@ bool SimpleToken::isKeyword() const bool SimpleToken::isComment() const { - return _kind == T_COMMENT || _kind == T_DOXY_COMMENT; + return _kind == T_COMMENT || _kind == T_DOXY_COMMENT || + _kind == T_CPP_COMMENT || _kind == T_CPP_DOXY_COMMENT; } bool SimpleToken::isObjCAtKeyword() const diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index e16c9008fed..07c892db197 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1543,7 +1543,16 @@ bool CPPEditor::isInComment(const QTextCursor &cursor) const const SimpleToken tk = tokenUnderCursor(cursor); if (tk.isComment()) { - const int pos = cursor.selectionEnd(); + const int pos = cursor.selectionEnd() - cursor.block().position(); + + if (pos == tk.end()) { + if (tk.is(T_CPP_COMMENT) || tk.is(T_CPP_DOXY_COMMENT)) + return true; + + const int state = cursor.block().userState() & 0xFF; + if (state > 0) + return true; + } if (pos < tk.end()) return true; diff --git a/src/plugins/cppeditor/cpphighlighter.cpp b/src/plugins/cppeditor/cpphighlighter.cpp index ed5d82d2796..1e1a200b8c8 100644 --- a/src/plugins/cppeditor/cpphighlighter.cpp +++ b/src/plugins/cppeditor/cpphighlighter.cpp @@ -138,7 +138,7 @@ void CppHighlighter::highlightBlock(const QString &text) else if (tk.isComment()) { - if (tk.is(T_COMMENT)) + if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT)) setFormat(tk.position(), tk.length(), m_formats[CppCommentFormat]); else // a doxygen comment diff --git a/src/shared/cplusplus/Lexer.cpp b/src/shared/cplusplus/Lexer.cpp index a9ef6cce3ff..79c9bf4af1c 100644 --- a/src/shared/cplusplus/Lexer.cpp +++ b/src/shared/cplusplus/Lexer.cpp @@ -428,7 +428,7 @@ void Lexer::scan_helper(Token *tok) if (! f._scanCommentTokens) goto _Lagain; - tok->f.kind = doxy ? T_DOXY_COMMENT : T_COMMENT; + tok->f.kind = doxy ? T_CPP_DOXY_COMMENT : T_CPP_COMMENT; } else if (_yychar == '*') { yyinp(); diff --git a/src/shared/cplusplus/Token.cpp b/src/shared/cplusplus/Token.cpp index 14a62f3db3a..547849b1ccb 100644 --- a/src/shared/cplusplus/Token.cpp +++ b/src/shared/cplusplus/Token.cpp @@ -54,6 +54,7 @@ CPLUSPLUS_BEGIN_NAMESPACE static const char *token_names[] = { (""), ("<error>"), + ("<C++ comment>"), ("<C++ doxy comment>"), ("<comment>"), ("<doxy comment>"), ("<identifier>"), ("<numeric literal>"), ("<char literal>"), diff --git a/src/shared/cplusplus/Token.h b/src/shared/cplusplus/Token.h index 861c21da27b..00d42b7f89c 100644 --- a/src/shared/cplusplus/Token.h +++ b/src/shared/cplusplus/Token.h @@ -59,6 +59,8 @@ enum Kind { T_EOF_SYMBOL = 0, T_ERROR, + T_CPP_COMMENT, + T_CPP_DOXY_COMMENT, T_COMMENT, T_DOXY_COMMENT, T_IDENTIFIER, @@ -297,7 +299,8 @@ public: { return f.kind >= T_FIRST_KEYWORD && f.kind < T_FIRST_QT_KEYWORD; } inline bool isComment() const - { return f.kind == T_COMMENT || f.kind == T_DOXY_COMMENT; } + { return f.kind == T_COMMENT || f.kind == T_DOXY_COMMENT || + f.kind == T_CPP_COMMENT || f.kind == T_CPP_DOXY_COMMENT; } inline bool isObjCAtKeyword() const { return f.kind >= T_FIRST_OBJC_AT_KEYWORD && f.kind <= T_LAST_OBJC_AT_KEYWORD; } -- GitLab