aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexers/LexCPP.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'lexers/LexCPP.cxx')
-rw-r--r--lexers/LexCPP.cxx23
1 files changed, 19 insertions, 4 deletions
diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx
index edf415ca4..1d8d6e1de 100644
--- a/lexers/LexCPP.cxx
+++ b/lexers/LexCPP.cxx
@@ -633,12 +633,18 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,
break;
case SCE_C_NUMBER:
// We accept almost anything because of hex. and number suffixes
- if (!(setWord.Contains(sc.ch)
+ if (sc.ch == '_') {
+ sc.ChangeState(SCE_C_USERLITERAL|activitySet);
+ } else if (!(setWord.Contains(sc.ch)
|| ((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E' ||
sc.chPrev == 'p' || sc.chPrev == 'P')))) {
sc.SetState(SCE_C_DEFAULT|activitySet);
}
break;
+ case SCE_C_USERLITERAL:
+ if (!(setWord.Contains(sc.ch)))
+ sc.SetState(SCE_C_DEFAULT|activitySet);
+ break;
case SCE_C_IDENTIFIER:
if (sc.atLineStart || sc.atLineEnd || !setWord.Contains(sc.ch) || (sc.ch == '.')) {
char s[1000];
@@ -676,8 +682,9 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,
else
sc.ChangeState(SCE_C_CHARACTER|activitySet);
}
+ } else {
+ sc.SetState(SCE_C_DEFAULT|activitySet);
}
- sc.SetState(SCE_C_DEFAULT|activitySet);
}
break;
case SCE_C_PREPROCESSOR:
@@ -782,7 +789,11 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,
sc.Forward();
}
} else if (sc.ch == '\"') {
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
+ if (sc.chNext == '_') {
+ sc.ChangeState(SCE_C_USERLITERAL|activitySet);
+ } else {
+ sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
+ }
}
break;
case SCE_C_HASHQUOTEDSTRING:
@@ -810,7 +821,11 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,
sc.Forward();
}
} else if (sc.ch == '\'') {
- sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
+ if (sc.chNext == '_') {
+ sc.ChangeState(SCE_C_USERLITERAL|activitySet);
+ } else {
+ sc.ForwardSetState(SCE_C_DEFAULT|activitySet);
+ }
}
break;
case SCE_C_REGEX: