diff options
| -rw-r--r-- | include/SciLexer.h | 1 | ||||
| -rw-r--r-- | include/Scintilla.iface | 1 | ||||
| -rw-r--r-- | lexers/LexCPP.cxx | 13 | 
3 files changed, 14 insertions, 1 deletions
| diff --git a/include/SciLexer.h b/include/SciLexer.h index 627e6014e..1d5b69ede 100644 --- a/include/SciLexer.h +++ b/include/SciLexer.h @@ -152,6 +152,7 @@  #define SCE_C_COMMENTDOCKEYWORDERROR 18  #define SCE_C_GLOBALCLASS 19  #define SCE_C_STRINGRAW 20 +#define SCE_C_TRIPLEVERBATIM 21  #define SCE_D_DEFAULT 0  #define SCE_D_COMMENT 1  #define SCE_D_COMMENTLINE 2 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index d4cf22770..0d3644d65 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -2398,6 +2398,7 @@ val SCE_C_COMMENTDOCKEYWORD=17  val SCE_C_COMMENTDOCKEYWORDERROR=18  val SCE_C_GLOBALCLASS=19  val SCE_C_STRINGRAW=20 +val SCE_C_TRIPLEVERBATIM=21  # Lexical states for SCLEX_D  lex D=SCLEX_D SCE_D_  val SCE_D_DEFAULT=0 diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx index 2e5fdd0d1..5331e33a4 100644 --- a/lexers/LexCPP.cxx +++ b/lexers/LexCPP.cxx @@ -591,7 +591,7 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,  						const bool raw = literalString && sc.chPrev == 'R';  						if (raw)  							s[lenS--] = '\0'; -						bool valid =  +						bool valid =  							(lenS == 0) ||  							((lenS == 1) && ((s[0] == 'L') || (s[0] == 'u') || (s[0] == 'U'))) ||  							((lenS == 2) && literalString && (s[0] == 'u') && (s[1] == '8')); @@ -734,6 +734,14 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,  					}  				}  				break; +			case SCE_C_TRIPLEVERBATIM: +				if (sc.Match ("\"\"\"")) { +					while (sc.Match('"')) { +						sc.Forward(); +					} +					sc.SetState(SCE_C_DEFAULT|activitySet); +				} +				break;  			case SCE_C_UUID:  				if (sc.ch == '\r' || sc.ch == '\n' || sc.ch == ')') {  					sc.SetState(SCE_C_DEFAULT|activitySet); @@ -751,6 +759,9 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,  			if (sc.Match('@', '\"')) {  				sc.SetState(SCE_C_VERBATIM|activitySet);  				sc.Forward(); +			} else if (sc.Match("\"\"\"")) { +				sc.SetState(SCE_C_TRIPLEVERBATIM|activitySet); +				sc.Forward(2);  			} else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {  				if (lastWordWasUUID) {  					sc.SetState(SCE_C_UUID|activitySet); | 
