diff options
-rw-r--r-- | lexers/LexCoffeeScript.cxx | 175 |
1 files changed, 9 insertions, 166 deletions
diff --git a/lexers/LexCoffeeScript.cxx b/lexers/LexCoffeeScript.cxx index c52a5a42b..d0a5e3c48 100644 --- a/lexers/LexCoffeeScript.cxx +++ b/lexers/LexCoffeeScript.cxx @@ -31,11 +31,8 @@ using namespace Scintilla; #endif static bool IsSpaceEquiv(int state) { - return (state <= SCE_COFFEESCRIPT_COMMENTDOC - // including SCE_COFFEESCRIPT_DEFAULT, SCE_COFFEESCRIPT_COMMENT, SCE_COFFEESCRIPT_COMMENTLINE - || state == SCE_COFFEESCRIPT_COMMENTLINEDOC - || state == SCE_COFFEESCRIPT_COMMENTDOCKEYWORD - || state == SCE_COFFEESCRIPT_COMMENTDOCKEYWORDERROR + return (state == SCE_COFFEESCRIPT_DEFAULT + || state == SCE_COFFEESCRIPT_COMMENTLINE || state == SCE_COFFEESCRIPT_COMMENTBLOCK || state == SCE_COFFEESCRIPT_VERBOSE_REGEX || state == SCE_COFFEESCRIPT_VERBOSE_REGEX_COMMENT @@ -88,51 +85,16 @@ static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int init WordList &keywords = *keywordlists[0]; WordList &keywords2 = *keywordlists[1]; - WordList &keywords3 = *keywordlists[2]; WordList &keywords4 = *keywordlists[3]; - // property styling.within.preprocessor - // For C++ code, determines whether all preprocessor code is styled in the preprocessor style (0, the default) - // or only from the initial # to the end of the command word(1). - bool stylingWithinPreprocessor = styler.GetPropertyInt("styling.within.preprocessor") != 0; - CharacterSet setOKBeforeRE(CharacterSet::setNone, "([{=,:;!%^&*|?~+-"); CharacterSet setCouldBePostOp(CharacterSet::setNone, "+-"); - CharacterSet setDoxygen(CharacterSet::setAlpha, "$@\\&<>#{}[]"); - - CharacterSet setWordStart(CharacterSet::setAlpha, "_", 0x80, true); - CharacterSet setWord(CharacterSet::setAlphaNum, "._", 0x80, true); - - // property lexer.cpp.allow.dollars - // Set to 0 to disallow the '$' character in identifiers with the cpp lexer. - if (styler.GetPropertyInt("lexer.cpp.allow.dollars", 1) != 0) { - setWordStart.Add('$'); - setWord.Add('$'); - } + CharacterSet setWordStart(CharacterSet::setAlpha, "_$@", 0x80, true); + CharacterSet setWord(CharacterSet::setAlphaNum, "._$", 0x80, true); int chPrevNonWhite = ' '; int visibleChars = 0; - bool lastWordWasUUID = false; - int styleBeforeDCKeyword = SCE_COFFEESCRIPT_DEFAULT; - bool continuationLine = false; - bool isIncludePreprocessor = false; - - if (initStyle == SCE_COFFEESCRIPT_PREPROCESSOR) { - // Set continuationLine if last character of previous line is '\' - int lineCurrent = styler.GetLine(startPos); - if (lineCurrent > 0) { - int chBack = styler.SafeGetCharAt(startPos-1, 0); - int chBack2 = styler.SafeGetCharAt(startPos-2, 0); - int lineEndChar = '!'; - if (chBack2 == '\r' && chBack == '\n') { - lineEndChar = styler.SafeGetCharAt(startPos-3, 0); - } else if (chBack == '\n' || chBack == '\r') { - lineEndChar = chBack2; - } - continuationLine = lineEndChar == '\\'; - } - } // look back to set chPrevNonWhite properly for better regex colouring int endPos = startPos + length; @@ -161,20 +123,6 @@ static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int init // Reset states to beginning of colourise so no surprises // if different sets of lines lexed. visibleChars = 0; - lastWordWasUUID = false; - isIncludePreprocessor = false; - } - - // Handle line continuation generically. - if (sc.ch == '\\') { - if (sc.chNext == '\n' || sc.chNext == '\r') { - sc.Forward(); - if (sc.ch == '\r' && sc.chNext == '\n') { - sc.Forward(); - } - continuationLine = true; - continue; - } } // Determine if the current state should terminate. @@ -193,7 +141,6 @@ static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int init char s[1000]; sc.GetCurrent(s, sizeof(s)); if (keywords.InList(s)) { - lastWordWasUUID = strcmp(s, "uuid") == 0; sc.ChangeState(SCE_COFFEESCRIPT_WORD); } else if (keywords2.InList(s)) { sc.ChangeState(SCE_COFFEESCRIPT_WORD2); @@ -210,74 +157,13 @@ static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int init sc.SetState(SCE_COFFEESCRIPT_DEFAULT); } break; - case SCE_COFFEESCRIPT_PREPROCESSOR: - if (sc.atLineStart && !continuationLine) { - sc.SetState(SCE_COFFEESCRIPT_DEFAULT); - } else if (stylingWithinPreprocessor) { - if (IsASpace(sc.ch)) { - sc.SetState(SCE_COFFEESCRIPT_DEFAULT); - } - } else { - if (sc.Match('/', '*') || sc.Match('/', '/')) { - sc.SetState(SCE_COFFEESCRIPT_DEFAULT); - } - } - break; - case SCE_COFFEESCRIPT_COMMENT: - if (sc.Match('*', '/')) { - sc.Forward(); - sc.ForwardSetState(SCE_COFFEESCRIPT_DEFAULT); - } - break; - case SCE_COFFEESCRIPT_COMMENTDOC: - if (sc.Match('*', '/')) { - sc.Forward(); - sc.ForwardSetState(SCE_COFFEESCRIPT_DEFAULT); - } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support - // Verify that we have the conditions to mark a comment-doc-keyword - if ((IsASpace(sc.chPrev) || sc.chPrev == '*') && (!IsASpace(sc.chNext))) { - styleBeforeDCKeyword = SCE_COFFEESCRIPT_COMMENTDOC; - sc.SetState(SCE_COFFEESCRIPT_COMMENTDOCKEYWORD); - } - } - break; case SCE_COFFEESCRIPT_COMMENTLINE: if (sc.atLineStart) { sc.SetState(SCE_COFFEESCRIPT_DEFAULT); } break; - case SCE_COFFEESCRIPT_COMMENTLINEDOC: - if (sc.atLineStart) { - sc.SetState(SCE_COFFEESCRIPT_DEFAULT); - } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support - // Verify that we have the conditions to mark a comment-doc-keyword - if ((IsASpace(sc.chPrev) || sc.chPrev == '/' || sc.chPrev == '!') && (!IsASpace(sc.chNext))) { - styleBeforeDCKeyword = SCE_COFFEESCRIPT_COMMENTLINEDOC; - sc.SetState(SCE_COFFEESCRIPT_COMMENTDOCKEYWORD); - } - } - break; - case SCE_COFFEESCRIPT_COMMENTDOCKEYWORD: - if ((styleBeforeDCKeyword == SCE_COFFEESCRIPT_COMMENTDOC) && sc.Match('*', '/')) { - sc.ChangeState(SCE_COFFEESCRIPT_COMMENTDOCKEYWORDERROR); - sc.Forward(); - sc.ForwardSetState(SCE_COFFEESCRIPT_DEFAULT); - } else if (!setDoxygen.Contains(sc.ch)) { - char s[100]; - sc.GetCurrent(s, sizeof(s)); - if (!IsASpace(sc.ch) || !keywords3.InList(s + 1)) { - sc.ChangeState(SCE_COFFEESCRIPT_COMMENTDOCKEYWORDERROR); - } - sc.SetState(styleBeforeDCKeyword); - } - break; case SCE_COFFEESCRIPT_STRING: - if (isIncludePreprocessor) { - if (sc.ch == '>') { - sc.ForwardSetState(SCE_COFFEESCRIPT_DEFAULT); - isIncludePreprocessor = false; - } - } else if (sc.ch == '\\') { + if (sc.ch == '\\') { if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') { sc.Forward(); } @@ -314,20 +200,6 @@ static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int init sc.SetState(SCE_COFFEESCRIPT_DEFAULT); } break; - case SCE_COFFEESCRIPT_VERBATIM: - if (sc.ch == '\"') { - if (sc.chNext == '\"') { - sc.Forward(); - } else { - sc.ForwardSetState(SCE_COFFEESCRIPT_DEFAULT); - } - } - break; - case SCE_COFFEESCRIPT_UUID: - if (sc.ch == '\r' || sc.ch == '\n' || sc.ch == ')') { - sc.SetState(SCE_COFFEESCRIPT_DEFAULT); - } - break; case SCE_COFFEESCRIPT_COMMENTBLOCK: if (sc.Match("###")) { sc.Forward(); @@ -357,30 +229,10 @@ static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int init // Determine if a new state should be entered. if (sc.state == SCE_COFFEESCRIPT_DEFAULT) { - if (sc.Match('@', '\"')) { - sc.SetState(SCE_COFFEESCRIPT_VERBATIM); - sc.Forward(); - } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { - if (lastWordWasUUID) { - sc.SetState(SCE_COFFEESCRIPT_UUID); - lastWordWasUUID = false; - } else { - sc.SetState(SCE_COFFEESCRIPT_NUMBER); - } - } else if (setWordStart.Contains(sc.ch) || (sc.ch == '@') || (sc.ch == '$')) { - if (lastWordWasUUID) { - sc.SetState(SCE_COFFEESCRIPT_UUID); - lastWordWasUUID = false; - } else { - sc.SetState(SCE_COFFEESCRIPT_IDENTIFIER); - } - } else if (sc.Match('/', '*')) { - if (sc.Match("/**") || sc.Match("/*!")) { // Support of Qt/Doxygen doc. style - sc.SetState(SCE_COFFEESCRIPT_COMMENTDOC); - } else { - sc.SetState(SCE_COFFEESCRIPT_COMMENT); - } - sc.Forward(); // Eat the * so it isn't used for the end of the comment + if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { + sc.SetState(SCE_COFFEESCRIPT_NUMBER); + } else if (setWordStart.Contains(sc.ch)) { + sc.SetState(SCE_COFFEESCRIPT_IDENTIFIER); } else if (sc.Match("///")) { sc.SetState(SCE_COFFEESCRIPT_VERBOSE_REGEX); sc.Forward(); @@ -393,9 +245,6 @@ static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int init sc.SetState(SCE_COFFEESCRIPT_REGEX); // JavaScript's RegEx } else if (sc.ch == '\"') { sc.SetState(SCE_COFFEESCRIPT_STRING); - isIncludePreprocessor = false; // ensure that '>' won't end the string - } else if (isIncludePreprocessor && sc.ch == '<') { - sc.SetState(SCE_COFFEESCRIPT_STRING); } else if (sc.ch == '\'') { sc.SetState(SCE_COFFEESCRIPT_CHARACTER); } else if (sc.ch == '#') { @@ -403,7 +252,6 @@ static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int init sc.SetState(SCE_COFFEESCRIPT_COMMENTBLOCK); sc.Forward(); sc.Forward(); - } else { sc.SetState(SCE_COFFEESCRIPT_COMMENTLINE); } @@ -416,7 +264,6 @@ static void ColouriseCoffeeScriptDoc(unsigned int startPos, int length, int init chPrevNonWhite = sc.ch; visibleChars++; } - continuationLine = false; } sc.Complete(); } @@ -428,10 +275,6 @@ static bool IsCommentLine(int line, Accessor &styler) { char ch = styler[i]; if (ch == '#') return true; - else if (ch == '/' - && i < eol_pos - 1 - && styler[i + 1] == '*') - return true; else if (ch != ' ' && ch != '\t') return false; } |