diff options
Diffstat (limited to 'src/LexOthers.cxx')
-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); |