diff options
Diffstat (limited to 'src/LexCPP.cxx')
| -rw-r--r-- | src/LexCPP.cxx | 22 | 
1 files changed, 22 insertions, 0 deletions
| diff --git a/src/LexCPP.cxx b/src/LexCPP.cxx index b6358ab33..bf70b0c81 100644 --- a/src/LexCPP.cxx +++ b/src/LexCPP.cxx @@ -37,6 +37,10 @@ static bool classifyWordCpp(unsigned int start, unsigned int end, WordList &keyw  	return wordIsUUID;  } +static bool isOKBeforeRE(char ch) { +	return (ch == '(') || (ch == '=') || (ch == ','); +} +  static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[],   	Accessor &styler) { @@ -55,6 +59,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo  		state = SCE_C_DEFAULT;  	char chPrev = ' ';  	char chNext = styler[startPos]; +	char chPrevNonWhite = ' ';  	unsigned int lengthDoc = startPos + length;  	int visibleChars = 0;  	styler.StartSegment(startPos); @@ -117,6 +122,9 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo  			} else if (ch == '/' && chNext == '/') {  				styler.ColourTo(i-1, state);  				state = SCE_C_COMMENTLINE; +			} else if (ch == '/' && isOKBeforeRE(chPrevNonWhite)) { +				styler.ColourTo(i-1, state); +				state = SCE_C_REGEX;  			} else if (ch == '\"') {  				styler.ColourTo(i-1, state);  				state = SCE_C_STRING; @@ -226,6 +234,18 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo  					styler.ColourTo(i, state);  					state = SCE_C_DEFAULT;  				} +			} else if (state == SCE_C_REGEX) { +				if (ch == '\r' || ch == '\n' || ch == '/') { +					styler.ColourTo(i, state); +					state = SCE_C_DEFAULT; +				} else if (ch == '\\') { +					// Gobble up the quoted character +					if (chNext == '\\' || chNext == '/') { +						i++; +						ch = chNext; +						chNext = styler.SafeGetCharAt(i + 1); +					} +				}  			} else if (state == SCE_C_VERBATIM) {  				if (ch == '\"') {  					if (chNext == '\"') { @@ -247,6 +267,8 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo  			}  		}  		chPrev = ch; +		if (ch != ' ' && ch != '\t') +			chPrevNonWhite = ch;  	}  	styler.ColourTo(lengthDoc - 1, state); | 
