aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/LexCPP.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/LexCPP.cxx')
-rw-r--r--src/LexCPP.cxx28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/LexCPP.cxx b/src/LexCPP.cxx
index 917ac55c8..24888a6df 100644
--- a/src/LexCPP.cxx
+++ b/src/LexCPP.cxx
@@ -56,7 +56,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
WordList &keywords = *keywordlists[0];
WordList &keywords2 = *keywordlists[1];
-// WordList &keywords3 = *keywordlists[2];
+ WordList &keywords3 = *keywordlists[2];
bool stylingWithinPreprocessor = styler.GetPropertyInt("styling.within.preprocessor");
@@ -126,12 +126,31 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
if (sc.Match('*', '/')) {
sc.Forward();
sc.ForwardSetState(SCE_C_DEFAULT);
+ } else if ((sc.ch == '@' || sc.ch == '\\') && (noDocChars == 0)) {
+ sc.SetState(SCE_C_COMMENTDOCKEYWORD);
+ } else if (sc.atLineEnd) {
+ noDocChars = 0;
+ } else if (!isspace(sc.ch)) {
+ noDocChars++;
}
} else if (sc.state == SCE_C_COMMENTLINE || sc.state == SCE_C_COMMENTLINEDOC) {
if (sc.atLineEnd) {
sc.SetState(SCE_C_DEFAULT);
visibleChars = 0;
}
+ } else if (sc.state == SCE_C_COMMENTDOCKEYWORD) {
+ if (sc.Match('*', '/')) {
+ sc.ChangeState(SCE_C_COMMENTDOCKEYWORDERROR);
+ sc.Forward();
+ sc.ForwardSetState(SCE_C_DEFAULT);
+ } else if (!IsADoxygenChar(sc.ch)) {
+ char s[100];
+ sc.GetCurrent(s, sizeof(s));
+ if (!isspace(sc.ch) || !keywords3.InList(s+1)) {
+ sc.ChangeState(SCE_C_COMMENTDOCKEYWORDERROR);
+ }
+ sc.SetState(SCE_C_COMMENTDOC);
+ }
} else if (sc.state == SCE_C_STRING) {
if (sc.ch == '\\') {
if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') {
@@ -199,11 +218,12 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo
sc.SetState(SCE_C_IDENTIFIER);
}
} else if (sc.Match('/', '*')) {
- noDocChars = 0;
- if (sc.Match("/**") || sc.Match("/*!")) // Support of Qt/Doxygen doc. style
+ if (sc.Match("/**") || sc.Match("/*!")) { // Support of Qt/Doxygen doc. style
+ noDocChars = -1;
sc.SetState(SCE_C_COMMENTDOC);
- else
+ } else {
sc.SetState(SCE_C_COMMENT);
+ }
sc.Forward(); // Eat the * so it isn't used for the end of the comment
} else if (sc.Match('/', '/')) {
if (sc.Match("///") || sc.Match("//!")) // Support of Qt/Doxygen doc. style