aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2001-04-11 01:48:54 +0000
committernyamatongwe <unknown>2001-04-11 01:48:54 +0000
commit7a28c364fd8f4028b2aeef1cb12a37cad7ff3d7a (patch)
tree58da9f60f1645f2c115c50c352c651db9de9039c
parentaf8495c3f8d7c575e9bece7a4dd7e69f70b764dd (diff)
downloadscintilla-mirror-7a28c364fd8f4028b2aeef1cb12a37cad7ff3d7a.tar.gz
Patch from Philippe to make 'rem' work in batch files.
Moved lex class values from LexOthers.cxx to Scintilla.iface. Added recognition of diff output to errorlist lexer so can see in output pane of SciTE.
-rw-r--r--include/SciLexer.h18
-rw-r--r--include/Scintilla.iface21
-rw-r--r--src/LexOthers.cxx264
3 files changed, 170 insertions, 133 deletions
diff --git a/include/SciLexer.h b/include/SciLexer.h
index 75af63f58..88e8b954b 100644
--- a/include/SciLexer.h
+++ b/include/SciLexer.h
@@ -217,6 +217,24 @@
#define SCE_ERR_CMD 4
#define SCE_ERR_BORLAND 5
#define SCE_ERR_PERL 6
+#define SCE_ERR_DIFF_CHANGED 10
+#define SCE_ERR_DIFF_ADDITION 11
+#define SCE_ERR_DIFF_DELETION 12
+#define SCE_ERR_DIFF_MESSAGE 13
+#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
#define SCE_CONF_DEFAULT 0
#define SCE_CONF_COMMENT 1
#define SCE_CONF_NUMBER 2
diff --git a/include/Scintilla.iface b/include/Scintilla.iface
index 3a595156d..97f183ffc 100644
--- a/include/Scintilla.iface
+++ b/include/Scintilla.iface
@@ -1364,6 +1364,7 @@ val SCE_LUA_PREPROCESSOR=9
val SCE_LUA_OPERATOR=10
val SCE_LUA_IDENTIFIER=11
val SCE_LUA_STRINGEOL=12
+# Lexical states for SCLEX_ERRORLIST
val SCE_ERR_DEFAULT=0
val SCE_ERR_PYTHON=1
val SCE_ERR_GCC=2
@@ -1371,6 +1372,26 @@ val SCE_ERR_MS=3
val SCE_ERR_CMD=4
val SCE_ERR_BORLAND=5
val SCE_ERR_PERL=6
+val SCE_ERR_DIFF_CHANGED=10
+val SCE_ERR_DIFF_ADDITION=11
+val SCE_ERR_DIFF_DELETION=12
+val SCE_ERR_DIFF_MESSAGE=13
+# Lexical states for SCLEX_BATCH
+val SCE_BAT_DEFAULT=0
+val SCE_BAT_COMMENT=1
+val SCE_BAT_WORD=2
+val SCE_BAT_LABEL=3
+val SCE_BAT_HIDE=4
+val SCE_BAT_COMMAND=5
+val SCE_BAT_IDENTIFIER=6
+val SCE_BAT_OPERATOR=7
+# Lexical states for SCLEX_MAKEFILE
+val SCE_MAKE_DEFAULT=0
+val SCE_MAKE_COMMENT=1
+val SCE_MAKE_PREPROCESSOR=2
+val SCE_MAKE_IDENTIFIER=3
+val SCE_MAKE_OPERATOR=4
+val SCE_MAKE_IDEOL=9
# Lexical states for the SCLEX_CONF (Apache Configuration Files Lexer)
val SCE_CONF_DEFAULT=0
val SCE_CONF_COMMENT=1
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);