diff options
Diffstat (limited to 'src/LexAVE.cxx')
-rw-r--r-- | src/LexAVE.cxx | 136 |
1 files changed, 79 insertions, 57 deletions
diff --git a/src/LexAVE.cxx b/src/LexAVE.cxx index e9290ad1b..6bfced6e4 100644 --- a/src/LexAVE.cxx +++ b/src/LexAVE.cxx @@ -17,11 +17,6 @@ #include "Scintilla.h" #include "SciLexer.h" -/* -static bool isOKBeforeRE(char ch) { - return (ch == '(') || (ch == '=') || (ch == ','); -} -*/ static void ColouriseAveDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], Accessor &styler) { @@ -30,17 +25,15 @@ static void ColouriseAveDoc(unsigned int startPos, int length, int initStyle, Wo styler.StartAt(startPos); bool fold = styler.GetPropertyInt("fold"); -// bool stylingWithinPreprocessor = styler.GetPropertyInt("styling.within.preprocessor"); int lineCurrent = styler.GetLine(startPos); int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; int levelCurrent = levelPrev; int state = initStyle; - if (state == SCE_C_STRINGEOL) // Does not leak onto next line - state = SCE_C_DEFAULT; + if (state == SCE_AVE_STRINGEOL) // Does not leak onto next line + state = SCE_AVE_DEFAULT; char chPrev = ' '; char chNext = styler[startPos]; -// char chPrevNonWhite = ' '; unsigned int lengthDoc = startPos + length; int visibleChars = 0; styler.StartSegment(startPos); @@ -52,9 +45,9 @@ static void ColouriseAveDoc(unsigned int startPos, int length, int initStyle, Wo // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix) // Avoid triggering two times on Dos/Win // End of line - if (state == SCE_C_STRINGEOL) { + if (state == SCE_AVE_STRINGEOL) { styler.ColourTo(i, state); - state = SCE_C_DEFAULT; + state = SCE_AVE_DEFAULT; } if (fold) { int lev = levelPrev; @@ -77,87 +70,116 @@ static void ColouriseAveDoc(unsigned int startPos, int length, int initStyle, Wo continue; } - if (state == SCE_C_DEFAULT) { - if (iswordstart(ch) || (ch == '.')) { + if (state == SCE_AVE_DEFAULT) { + if (iswordstart(ch) || (ch == '.') ) { styler.ColourTo(i-1, state); - state = SCE_C_IDENTIFIER; + state = SCE_AVE_IDENTIFIER; } else if (ch == '\'') { styler.ColourTo(i-1, state); - state = SCE_C_COMMENTLINE; + state = SCE_AVE_COMMENT; } else if (ch == '\"') { styler.ColourTo(i-1, state); - state = SCE_C_STRING; + state = SCE_AVE_STRING; + } else if (ch == '#') { + styler.ColourTo(i-1, state); + state = SCE_AVE_ENUM; } else if (isoperator(ch) ) { styler.ColourTo(i-1, state); - styler.ColourTo(i, SCE_C_OPERATOR); + styler.ColourTo(i, SCE_AVE_OPERATOR); + } + } + else if (state == SCE_AVE_COMMENT) { + if (ch == '\r' || ch == '\n') { + styler.ColourTo(i-1, state); + state = SCE_AVE_DEFAULT; + } + } + else if (state == SCE_AVE_ENUM) { + if (isoperator(ch) || ch == ' ' || ch == '\'' || ch == '\r' || ch == '\n') { + styler.ColourTo(i-1, state); + state = SCE_AVE_DEFAULT; + } + } + else if (state == SCE_AVE_STRING) { + if (ch == '\"') { + if (chNext == '\"') { + i++; + ch = chNext; + chNext = styler.SafeGetCharAt(i + 1); + } else + { + styler.ColourTo(i, state); + state = SCE_AVE_DEFAULT; + } + } else if (chNext == '\r' || chNext == '\n') { + styler.ColourTo(i-1, SCE_AVE_STRINGEOL); + state = SCE_AVE_STRINGEOL; } } - else if (state == SCE_C_IDENTIFIER) { + if ((state == SCE_AVE_IDENTIFIER)) { if (!iswordchar(ch) || ch == '.' ) { char s[100]; unsigned int start = styler.GetStartSegment(); unsigned int end = i - 1; for (unsigned int ii = 0; ii < end - start + 1 && ii < 30; ii++) { - s[ii] = styler[start + ii]; + s[ii] = static_cast<char>(tolower(styler[start + ii])); s[ii + 1] = '\0'; } - char chAttr = SCE_C_IDENTIFIER; - if (isdigit(s[0]) || (s[0] == '.')) - chAttr = SCE_C_NUMBER; + + char chAttr = SCE_AVE_IDENTIFIER; + + if (isdigit(s[0])) + chAttr = SCE_AVE_NUMBER; else { + if ((strcmp(s, "for") == 0) || (strcmp(s, "if") == 0) || (strcmp(s, "while") == 0)) + { + levelCurrent +=1; + chAttr = SCE_AVE_STATEMENT; + } + + if (strcmp(s, "end") == 0) + { + levelCurrent -=1; + chAttr = SCE_AVE_STATEMENT; + } + + if ( (strcmp(s, "then") == 0) || (strcmp(s, "else") == 0) || (strcmp(s, "break") == 0) || + (strcmp(s, "each") == 0) || + (strcmp(s, "exit") == 0) || (strcmp(s, "continue") == 0) || (strcmp(s, "return") == 0) || + (strcmp(s, "by") == 0) || (strcmp(s, "in") == 0) || (strcmp(s, "elseif") == 0)) + { + chAttr = SCE_AVE_STATEMENT; + } + + if ((strcmp(s, "av") == 0) || (strcmp(s, "self") == 0)) + { + chAttr = SCE_AVE_KEYWORD; + } + if (keywords.InList(s)) { - chAttr = SCE_C_WORD; - if (strcmp(s, "for") == 0) levelCurrent +=1; - if (strcmp(s, "if") == 0) levelCurrent +=1; - //if (strcmp(s, "elseif") == 0) levelCurrent +=1; - if (strcmp(s, "while") == 0) levelCurrent +=1; - if (strcmp(s, "end") == 0) { - levelCurrent -=1; - } + chAttr = SCE_AVE_WORD; } } styler.ColourTo(end, chAttr); - state = SCE_C_DEFAULT; + state = SCE_AVE_DEFAULT; if (ch == '\'') { - state = SCE_C_COMMENTLINE; + state = SCE_AVE_COMMENT; } else if (ch == '\"') { - state = SCE_C_STRING; + state = SCE_AVE_STRING; } else if (isoperator(ch)) { - styler.ColourTo(i, SCE_C_OPERATOR); + styler.ColourTo(i, SCE_AVE_OPERATOR); } } } - else if (state == SCE_C_COMMENTLINE) { - if (ch == '\r' || ch == '\n') { - styler.ColourTo(i-1, state); - state = SCE_C_DEFAULT; - } - } - else if (state == SCE_C_STRING) { - if (ch == '\"') { - if (chNext == '\"') { - i++; - ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - } else - { - styler.ColourTo(i, state); - state = SCE_C_DEFAULT; - } - } else if (chNext == '\r' || chNext == '\n') { - styler.ColourTo(i-1, SCE_C_STRINGEOL); - state = SCE_C_STRINGEOL; - } - } + } styler.ColourTo(lengthDoc - 1, state); // Fill in the real level of the next line, keeping the current flags as they will be filled in later if (fold) { int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - //styler.SetLevel(lineCurrent, levelCurrent | flagsNext); styler.SetLevel(lineCurrent, levelPrev | flagsNext); } |