aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/LexOthers.cxx
diff options
context:
space:
mode:
authornyamatongwe <devnull@localhost>2000-03-16 11:43:39 +0000
committernyamatongwe <devnull@localhost>2000-03-16 11:43:39 +0000
commit01cd695dc8d693c39500f24adf689d08d77d39da (patch)
tree3837357cf607234f40e4b4705c24da1e40ba0758 /src/LexOthers.cxx
parent8c214e65f503275192e2f3f9dea97fbb65a38254 (diff)
downloadscintilla-mirror-01cd695dc8d693c39500f24adf689d08d77d39da.tar.gz
Split up KeyWords.cxx into 7 individual lexer files Lex*.cxx.
Fixed setting up of second view to get right document length. Changed Python lexer to handle empty lines immediately after fold line and last line of document.
Diffstat (limited to 'src/LexOthers.cxx')
-rw-r--r--src/LexOthers.cxx200
1 files changed, 200 insertions, 0 deletions
diff --git a/src/LexOthers.cxx b/src/LexOthers.cxx
new file mode 100644
index 000000000..d2a0d563b
--- /dev/null
+++ b/src/LexOthers.cxx
@@ -0,0 +1,200 @@
+// SciTE - Scintilla based Text Editor
+// LexOthers.cxx - lexers for properties files, batch files, make files and error lists
+// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+static void ColouriseBatchLine(char *lineBuffer, int endLine, StylingContext &styler) {
+ if (0 == strncmp(lineBuffer, "REM", 3)) {
+ styler.ColourTo(endLine, 1);
+ } else if (0 == strncmp(lineBuffer, "rem", 3)) {
+ styler.ColourTo(endLine, 1);
+ } else if (0 == strncmp(lineBuffer, "SET", 3)) {
+ styler.ColourTo(endLine, 2);
+ } else if (0 == strncmp(lineBuffer, "set", 3)) {
+ styler.ColourTo(endLine, 2);
+ } else if (lineBuffer[0] == ':') {
+ styler.ColourTo(endLine, 3);
+ } else {
+ styler.ColourTo(endLine, 0);
+ }
+}
+
+static void ColouriseBatchDoc(unsigned int startPos, int length, int, WordList *[], StylingContext &styler) {
+ char lineBuffer[1024];
+ styler.StartAt(startPos);
+ styler.StartSegment(startPos);
+ unsigned int linePos = 0;
+ for (unsigned int i = startPos; i < startPos + length; i++) {
+ lineBuffer[linePos++] = styler[i];
+ if (styler[i] == '\r' || styler[i] == '\n' || (linePos >= sizeof(lineBuffer) - 1)) {
+ ColouriseBatchLine(lineBuffer, i, styler);
+ linePos = 0;
+ }
+ }
+ if (linePos > 0)
+ ColouriseBatchLine(lineBuffer, startPos + length, styler);
+}
+
+static void ColourisePropsLine(char *lineBuffer, int lengthLine, int startLine, int endPos, StylingContext &styler) {
+ int i = 0;
+ while (isspace(lineBuffer[i]) && (i < lengthLine)) // Skip initial spaces
+ i++;
+ if (lineBuffer[i] == '#' || lineBuffer[i] == '!' || lineBuffer[i] == ';') {
+ styler.ColourTo(endPos, 1);
+ } else if (lineBuffer[i] == '[') {
+ styler.ColourTo(endPos, 2);
+ } else if (lineBuffer[i] == '@') {
+ styler.ColourTo(startLine+i, 4);
+ if (lineBuffer[++i] == '=')
+ styler.ColourTo(startLine+i, 3);
+ styler.ColourTo(endPos, 0);
+ } else {
+ while (lineBuffer[i] != '=' && (i < lengthLine)) // Search the '=' character
+ i++;
+ if (lineBuffer[i] == '=') {
+ styler.ColourTo(startLine+i-1, 0);
+ styler.ColourTo(startLine+i, 3);
+ styler.ColourTo(endPos, 0);
+ } else {
+ styler.ColourTo(endPos, 0);
+ }
+ }
+}
+
+static void ColourisePropsDoc(unsigned int startPos, int length, int, WordList *[], StylingContext &styler) {
+ char lineBuffer[1024];
+ styler.StartAt(startPos);
+ styler.StartSegment(startPos);
+ unsigned int linePos = 0;
+ int 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 (linePos > 0)
+ ColourisePropsLine(lineBuffer, linePos, startLine, startPos + length, styler);
+}
+
+static void ColouriseMakeLine(char *lineBuffer, int lengthLine, int endPos, StylingContext &styler) {
+ int i = 0;
+ while (isspace(lineBuffer[i]) && (i < lengthLine))
+ i++;
+ if (lineBuffer[i] == '#' || lineBuffer[i] == '!') {
+ styler.ColourTo(endPos, 1);
+ } else {
+ styler.ColourTo(endPos, 0);
+ }
+}
+
+static void ColouriseMakeDoc(unsigned int startPos, int length, int, WordList *[], StylingContext &styler) {
+ char lineBuffer[1024];
+ styler.StartAt(startPos);
+ styler.StartSegment(startPos);
+ unsigned int linePos = 0;
+ for (unsigned int i = startPos; i <= startPos + length; i++) {
+ lineBuffer[linePos++] = styler[i];
+ if (styler[i] == '\r' || styler[i] == '\n' || (linePos >= sizeof(lineBuffer) - 1)) {
+ ColouriseMakeLine(lineBuffer, linePos, i, styler);
+ linePos = 0;
+ }
+ }
+ if (linePos > 0)
+ ColouriseMakeLine(lineBuffer, linePos, startPos + length, styler);
+}
+
+static void ColouriseErrorListLine(char *lineBuffer, int lengthLine, int endPos, StylingContext &styler) {
+ if (lineBuffer[0] == '>') {
+ // Command or return status
+ styler.ColourTo(endPos, 4);
+ } else if (strstr(lineBuffer, "File \"") && strstr(lineBuffer, ", line ")) {
+ styler.ColourTo(endPos, 1);
+ } else if (0 == strncmp(lineBuffer, "Error ", strlen("Error "))) {
+ // Borland error message
+ styler.ColourTo(endPos, 5);
+ } else if (0 == strncmp(lineBuffer, "Warning ", strlen("Warning "))) {
+ // Borland warning message
+ styler.ColourTo(endPos, 5);
+ } else {
+ // Look for <filename>:<line>:message
+ // Look for <filename>(line)message
+ // Look for <filename>(line,pos)message
+ int state = 0;
+ for (int i = 0; i < lengthLine; i++) {
+ if (state == 0 && lineBuffer[i] == ':' && isdigit(lineBuffer[i + 1])) {
+ state = 1;
+ } else if (state == 0 && lineBuffer[i] == '(') {
+ state = 10;
+ } else if (state == 1 && isdigit(lineBuffer[i])) {
+ state = 2;
+ } else if (state == 2 && lineBuffer[i] == ':') {
+ state = 3;
+ break;
+ } else if (state == 2 && !isdigit(lineBuffer[i])) {
+ state = 99;
+ } else if (state == 10 && isdigit(lineBuffer[i])) {
+ state = 11;
+ } else if (state == 11 && lineBuffer[i] == ',') {
+ state = 14;
+ } else if (state == 11 && lineBuffer[i] == ')') {
+ state = 12;
+ break;
+ } else if (state == 12 && lineBuffer[i] == ':') {
+ state = 13;
+ } else if (state == 14 && lineBuffer[i] == ')') {
+ state = 15;
+ break;
+ } else if (((state == 11) || (state == 14)) && !((lineBuffer[i] == ' ') || isdigit(lineBuffer[i]))) {
+ state = 99;
+ }
+ }
+ if (state == 3) {
+ styler.ColourTo(endPos, 2);
+ } else if ((state == 14) || (state == 15)) {
+ styler.ColourTo(endPos, 3);
+ } else {
+ styler.ColourTo(endPos, 0);
+ }
+ }
+}
+
+static void ColouriseErrorListDoc(unsigned int startPos, int length, int, WordList *[], StylingContext &styler) {
+ char lineBuffer[1024];
+ styler.StartAt(startPos);
+ styler.StartSegment(startPos);
+ unsigned int linePos = 0;
+ for (unsigned int i = startPos; i <= startPos + length; i++) {
+ lineBuffer[linePos++] = styler[i];
+ if (styler[i] == '\r' || styler[i] == '\n' || (linePos >= sizeof(lineBuffer) - 1)) {
+ ColouriseErrorListLine(lineBuffer, linePos, i, styler);
+ linePos = 0;
+ }
+ }
+ if (linePos > 0)
+ ColouriseErrorListLine(lineBuffer, linePos, startPos + length, styler);
+}
+
+static LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc);
+static LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc);
+static LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc);
+static LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc);