diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/LexOthers.cxx | 264 | 
1 files changed, 131 insertions, 133 deletions
| diff --git a/src/LexOthers.cxx b/src/LexOthers.cxx index 2f0520f1f..da0f70040 100644 --- a/src/LexOthers.cxx +++ b/src/LexOthers.cxx @@ -20,30 +20,13 @@  #include "Scintilla.h"  #include "SciLexer.h" -// Temporary patch, we should put this in SciLexer.h, I suppose -#define SCE_BAT_DEFAULT 0 -#define SCE_BAT_COMMENT 1 -#define SCE_BAT_WORD 2 -#define SCE_BAT_LABEL 3 -#define SCE_BAT_HIDE 4 -#define SCE_BAT_COMMAND 5 -#define SCE_BAT_IDENTIFIER 6 -#define SCE_BAT_OPERATOR 7 - -#define SCE_MAKE_DEFAULT 0 -#define SCE_MAKE_COMMENT 1 -#define SCE_MAKE_PREPROCESSOR 2 -#define SCE_MAKE_IDENTIFIER 3 -#define SCE_MAKE_OPERATOR 4 -#define SCE_MAKE_IDEOL 9 -  static void ColouriseBatchLine( -		char *lineBuffer, -		unsigned int lengthLine, -		unsigned int startLine, -		unsigned int endPos, -		WordList &keywords, -		Accessor &styler) { +    char *lineBuffer, +    unsigned int lengthLine, +    unsigned int startLine, +    unsigned int endPos, +    WordList &keywords, +    Accessor &styler) {  	unsigned int i = 0;  	unsigned int state = SCE_BAT_DEFAULT; @@ -76,18 +59,24 @@ static void ColouriseBatchLine(  			wordBuffer[wbl] = static_cast<char>(tolower(lineBuffer[offset]));  		}  		wordBuffer[wbl] = '\0'; +		// Check if it is a comment +		if (CompareCaseInsensitive(wordBuffer, "rem") == 0) { +			styler.ColourTo(endPos, SCE_BAT_COMMENT); +			return ; +		}  		// Check if it is in the list  		if (keywords.InList(wordBuffer)) {  			styler.ColourTo(startLine + offset - 1, SCE_BAT_WORD);	// Regular keyword  		} else {  			// Search end of word (can be a long path)  			while (offset < lengthLine && -					!isspacechar(lineBuffer[offset])) { +			        !isspacechar(lineBuffer[offset])) {  				offset++;  			}  			styler.ColourTo(startLine + offset - 1, SCE_BAT_COMMAND);	// External command / program  		}  		// Remainder of the line: colourise the variables. +  		while (offset < lengthLine) {  			if (state == SCE_BAT_DEFAULT && lineBuffer[offset] == '%') {  				styler.ColourTo(startLine + offset - 1, state); @@ -95,7 +84,7 @@ static void ColouriseBatchLine(  					styler.ColourTo(startLine + offset + 1, SCE_BAT_IDENTIFIER);  					offset += 2;  				} else if (lineBuffer[offset + 1] == '%' && -						!isspacechar(lineBuffer[offset + 2])) { +				           !isspacechar(lineBuffer[offset + 2])) {  					// Should be safe, as there is CRLF at the end of the line...  					styler.ColourTo(startLine + offset + 2, SCE_BAT_IDENTIFIER);  					offset += 3; @@ -106,21 +95,22 @@ static void ColouriseBatchLine(  				styler.ColourTo(startLine + offset, state);  				state = SCE_BAT_DEFAULT;  			} else if (state == SCE_BAT_DEFAULT && -					(lineBuffer[offset] == '*' || -					lineBuffer[offset] == '?' || -					lineBuffer[offset] == '=' || -					lineBuffer[offset] == '<' || -					lineBuffer[offset] == '>' || -					lineBuffer[offset] == '|')) { +			           (lineBuffer[offset] == '*' || +			            lineBuffer[offset] == '?' || +			            lineBuffer[offset] == '=' || +			            lineBuffer[offset] == '<' || +			            lineBuffer[offset] == '>' || +			            lineBuffer[offset] == '|')) {  				styler.ColourTo(startLine + offset - 1, state);  				styler.ColourTo(startLine + offset, SCE_BAT_OPERATOR);  			}  			offset++;  		} -//		if (endPos > startLine + offset - 1) { -			styler.ColourTo(endPos, SCE_BAT_DEFAULT);		// Remainder of line, currently not lexed -//		} +		//		if (endPos > startLine + offset - 1) { +		styler.ColourTo(endPos, SCE_BAT_DEFAULT);		// Remainder of line, currently not lexed +		//		}  	} +  }  // ToDo: (not necessarily at beginning of line) GOTO, [IF] NOT, ERRORLEVEL  // IF [NO] (test) (command) -- test is EXIST (filename) | (string1)==(string2) | ERRORLEVEL (number) @@ -129,14 +119,14 @@ static void ColouriseBatchLine(  // ToDo: Colourise = > >> < | "  static void ColouriseBatchDoc( -		unsigned int startPos, -		int length, -		int /*initStyle*/, -		WordList *keywordlists[], -		Accessor &styler) { +    unsigned int startPos, +    int length, +    int /*initStyle*/, +    WordList *keywordlists[], +    Accessor &styler) {  	char lineBuffer[1024]; -    WordList &keywords = *keywordlists[0]; +	WordList &keywords = *keywordlists[0];  	styler.StartAt(startPos);  	styler.StartSegment(startPos); @@ -202,11 +192,11 @@ static void ColouriseDiffDoc(unsigned int startPos, int length, int, WordList *[  }  static void ColourisePropsLine( -		char *lineBuffer, -		unsigned int lengthLine, -		unsigned int startLine, -		unsigned int endPos, -		Accessor &styler) { +    char *lineBuffer, +    unsigned int lengthLine, +    unsigned int startLine, +    unsigned int endPos, +    Accessor &styler) {  	unsigned int i = 0;  	while (isspacechar(lineBuffer[i]) && (i < lengthLine))	// Skip initial spaces @@ -216,17 +206,17 @@ static void ColourisePropsLine(  	} else if (lineBuffer[i] == '[') {  		styler.ColourTo(endPos, 2);  	} else if (lineBuffer[i] == '@') { -		styler.ColourTo(startLine+i, 4); +		styler.ColourTo(startLine + i, 4);  		if (lineBuffer[++i] == '=') -			styler.ColourTo(startLine+i, 3); +			styler.ColourTo(startLine + i, 3);  		styler.ColourTo(endPos, 0);  	} else {  		// Search for the '=' character -		while (lineBuffer[i] != '=' && (i < lengthLine-1))	 +		while (lineBuffer[i] != '=' && (i < lengthLine - 1))  			i++;  		if (lineBuffer[i] == '=') { -			styler.ColourTo(startLine+i-1, 0); -			styler.ColourTo(startLine+i, 3); +			styler.ColourTo(startLine + i - 1, 0); +			styler.ColourTo(startLine + i, 3);  			styler.ColourTo(endPos, 0);  		} else {  			styler.ColourTo(endPos, 0); @@ -241,13 +231,13 @@ static void ColourisePropsDoc(unsigned int startPos, int length, int, WordList *  	unsigned int linePos = 0, startLine = startPos;  	for (unsigned int i = startPos; i <= startPos + length; i++) {  		lineBuffer[linePos++] = styler[i]; -		if ((styler[i] == '\r' && styler.SafeGetCharAt(i+1) != '\n') || -			styler[i] == '\n' || -			(linePos >= sizeof(lineBuffer) - 1)) { -				lineBuffer[linePos] = '\0'; -				ColourisePropsLine(lineBuffer, linePos, startLine, i, styler); -				linePos = 0; -				startLine = i+1; +		if ((styler[i] == '\r' && styler.SafeGetCharAt(i + 1) != '\n') || +		        styler[i] == '\n' || +		        (linePos >= sizeof(lineBuffer) - 1)) { +			lineBuffer[linePos] = '\0'; +			ColourisePropsLine(lineBuffer, linePos, startLine, i, styler); +			linePos = 0; +			startLine = i + 1;  		}  	}  	if (linePos > 0) @@ -255,11 +245,11 @@ static void ColourisePropsDoc(unsigned int startPos, int length, int, WordList *  }  static void ColouriseMakeLine( -		char *lineBuffer, -		unsigned int lengthLine, -		unsigned int startLine, -		unsigned int endPos, -		Accessor &styler) { +    char *lineBuffer, +    unsigned int lengthLine, +    unsigned int startLine, +    unsigned int endPos, +    Accessor &styler) {  	unsigned int i = 0;  	unsigned int state = SCE_MAKE_DEFAULT; @@ -270,14 +260,14 @@ static void ColouriseMakeLine(  	}  	if (lineBuffer[i] == '#') {	// Comment  		styler.ColourTo(endPos, SCE_MAKE_COMMENT); -		return; +		return ;  	}  	if (lineBuffer[i] == '!') {	// Special directive  		styler.ColourTo(endPos, SCE_MAKE_PREPROCESSOR); -		return; +		return ;  	}  	while (i < lengthLine) { -		if (lineBuffer[i] == '$' && lineBuffer[i+1] == '(') { +		if (lineBuffer[i] == '$' && lineBuffer[i + 1] == '(') {  			styler.ColourTo(startLine + i - 1, state);  			state = SCE_MAKE_IDENTIFIER;  		} else if (state == SCE_MAKE_IDENTIFIER && lineBuffer[i] == ')') { @@ -285,16 +275,18 @@ static void ColouriseMakeLine(  			state = SCE_MAKE_DEFAULT;  		}  		if (!bSpecial && state == SCE_MAKE_DEFAULT && -				(lineBuffer[i] == ':' || lineBuffer[i] == '=')) { +		        (lineBuffer[i] == ':' || lineBuffer[i] == '=')) {  			styler.ColourTo(startLine + i - 1, state);  			styler.ColourTo(startLine + i, SCE_MAKE_OPERATOR);  			bSpecial = true;	// Only react to the first '=' or ':' of the line  		} +  		i++;  	}  	if (state == SCE_MAKE_IDENTIFIER) {  		styler.ColourTo(endPos, SCE_MAKE_IDEOL);	// Error, variable reference not ended -	} else { +	} +	else {  		styler.ColourTo(endPos, SCE_MAKE_DEFAULT);  	}  } @@ -310,7 +302,7 @@ static void ColouriseMakeDoc(unsigned int startPos, int length, int, WordList *[  			lineBuffer[linePos] = '\0';  			ColouriseMakeLine(lineBuffer, linePos, startLine, i, styler);  			linePos = 0; -			startLine = i+1; +			startLine = i + 1;  		}  	}  	if (linePos > 0) { @@ -319,15 +311,22 @@ static void ColouriseMakeDoc(unsigned int startPos, int length, int, WordList *[  }  static void ColouriseErrorListLine( -		char *lineBuffer, -		unsigned int lengthLine, -//		unsigned int startLine, -		unsigned int endPos, -		Accessor &styler) { - +    char *lineBuffer, +    unsigned int lengthLine, +    //		unsigned int startLine, +    unsigned int endPos, +    Accessor &styler) {  	if (lineBuffer[0] == '>') {  		// Command or return status  		styler.ColourTo(endPos, SCE_ERR_CMD); +	} else if (lineBuffer[0] == '!') { +		styler.ColourTo(endPos, SCE_ERR_DIFF_CHANGED); +	} else if (lineBuffer[0] == '+') { +		styler.ColourTo(endPos, SCE_ERR_DIFF_ADDITION); +	} else if (lineBuffer[0] == '-' && lineBuffer[1] == '-' && lineBuffer[2] == '-') { +		styler.ColourTo(endPos, SCE_ERR_DIFF_MESSAGE); +	} else if (lineBuffer[0] == '-') { +		styler.ColourTo(endPos, SCE_ERR_DIFF_DELETION);  	} else if (strstr(lineBuffer, "File \"") && strstr(lineBuffer, ", line ")) {  		styler.ColourTo(endPos, SCE_ERR_PYTHON);  	} else if (0 == strncmp(lineBuffer, "Error ", strlen("Error "))) { @@ -336,10 +335,10 @@ static void ColouriseErrorListLine(  	} else if (0 == strncmp(lineBuffer, "Warning ", strlen("Warning "))) {  		// Borland warning message  		styler.ColourTo(endPos, SCE_ERR_BORLAND); -	} else if (strstr(lineBuffer, " at "  ) && -		strstr(lineBuffer, " at "  ) < lineBuffer+lengthLine && -		strstr(lineBuffer, " line ") && -		strstr(lineBuffer, " line ") < lineBuffer+lengthLine) { +	} else if (strstr(lineBuffer, " at " ) && +	           strstr(lineBuffer, " at " ) < lineBuffer + lengthLine && +	           strstr(lineBuffer, " line ") && +	           strstr(lineBuffer, " line ") < lineBuffer + lengthLine) {  		// perl error message  		styler.ColourTo(endPos, SCE_ERR_PERL);  	} else { @@ -407,7 +406,7 @@ static int isSpecial(char s) {  static int isTag(int start, Accessor &styler) {  	char s[6]; -	unsigned int i = 0, e=1; +	unsigned int i = 0, e = 1;  	while (i < 5 && e) {  		s[i] = styler[start + i];  		i++; @@ -418,7 +417,7 @@ static int isTag(int start, Accessor &styler) {  }  static void ColouriseLatexDoc(unsigned int startPos, int length, int initStyle, -		WordList *[], Accessor &styler) { +                              WordList *[], Accessor &styler) {  	styler.StartAt(startPos); @@ -436,67 +435,66 @@ static void ColouriseLatexDoc(unsigned int startPos, int length, int initStyle,  			i++;  			continue;  		} -		switch(state) { -			case SCE_L_DEFAULT : -				switch(ch) { -					case '\\' : -						styler.ColourTo(i - 1, state); -						if (isSpecial(styler[i + 1])) { -							styler.ColourTo(i + 1, SCE_L_COMMAND); -							i++; -							chNext = styler.SafeGetCharAt(i + 1); -						} -						else { -						    if (isTag(i+1, styler)) -							state = SCE_L_TAG; -						    else -						    	state = SCE_L_COMMAND; -						} -						break; -					case '$' : -						styler.ColourTo(i - 1, state); -						state = SCE_L_MATH; -						if (chNext == '$') { -							i++; -							chNext = styler.SafeGetCharAt(i + 1); -						} -						break; -					case '%' : -						styler.ColourTo(i - 1, state); -						state = SCE_L_COMMENT; -						break; -				} -				break; -			case SCE_L_COMMAND : -				if (chNext == '[' || chNext == '{' || chNext == '}' || -				    chNext == ' ' || chNext == '\r' || chNext == '\n') { -					styler.ColourTo(i, state); -					state = SCE_L_DEFAULT; +		switch (state) { +		case SCE_L_DEFAULT : +			switch (ch) { +			case '\\' : +				styler.ColourTo(i - 1, state); +				if (isSpecial(styler[i + 1])) { +					styler.ColourTo(i + 1, SCE_L_COMMAND);  					i++;  					chNext = styler.SafeGetCharAt(i + 1); +				} else { +					if (isTag(i + 1, styler)) +						state = SCE_L_TAG; +					else +						state = SCE_L_COMMAND;  				}  				break; -			case SCE_L_TAG : -				if (ch == '}') { -					styler.ColourTo(i, state); -					state = SCE_L_DEFAULT; +			case '$' : +				styler.ColourTo(i - 1, state); +				state = SCE_L_MATH; +				if (chNext == '$') { +					i++; +					chNext = styler.SafeGetCharAt(i + 1);  				}  				break; -			case SCE_L_MATH : -				if (ch == '$') { -					if (chNext == '$') { -						i++; -						chNext = styler.SafeGetCharAt(i + 1); -					} -					styler.ColourTo(i, state); -					state = SCE_L_DEFAULT; -				} +			case '%' : +				styler.ColourTo(i - 1, state); +				state = SCE_L_COMMENT;  				break; -			case SCE_L_COMMENT : -				if (ch == '\r' || ch == '\n') { -					styler.ColourTo(i - 1, state); -					state = SCE_L_DEFAULT; +			} +			break; +		case SCE_L_COMMAND : +			if (chNext == '[' || chNext == '{' || chNext == '}' || +			        chNext == ' ' || chNext == '\r' || chNext == '\n') { +				styler.ColourTo(i, state); +				state = SCE_L_DEFAULT; +				i++; +				chNext = styler.SafeGetCharAt(i + 1); +			} +			break; +		case SCE_L_TAG : +			if (ch == '}') { +				styler.ColourTo(i, state); +				state = SCE_L_DEFAULT; +			} +			break; +		case SCE_L_MATH : +			if (ch == '$') { +				if (chNext == '$') { +					i++; +					chNext = styler.SafeGetCharAt(i + 1);  				} +				styler.ColourTo(i, state); +				state = SCE_L_DEFAULT; +			} +			break; +		case SCE_L_COMMENT : +			if (ch == '\r' || ch == '\n') { +				styler.ColourTo(i - 1, state); +				state = SCE_L_DEFAULT; +			}  		}  	}  	styler.ColourTo(lengthDoc, state); | 
