diff options
author | nyamatongwe <unknown> | 2002-09-27 00:00:17 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2002-09-27 00:00:17 +0000 |
commit | cdfba32efc5ccebea5e9952c383a82ef8ed64d2c (patch) | |
tree | d0193858585a1be656fc933fa9936cb7d09db26d | |
parent | a0cfed60d8c3d4309a67cffa4de3a4b9dbd69a96 (diff) | |
download | scintilla-mirror-cdfba32efc5ccebea5e9952c383a82ef8ed64d2c.tar.gz |
Added case insensitive keywords version of C++ lexer, cppnocase.
-rw-r--r-- | include/SciLexer.h | 1 | ||||
-rw-r--r-- | include/Scintilla.iface | 1 | ||||
-rw-r--r-- | src/KeyWords.cxx | 1 | ||||
-rw-r--r-- | src/LexCPP.cxx | 37 |
4 files changed, 31 insertions, 9 deletions
diff --git a/include/SciLexer.h b/include/SciLexer.h index 1fca795ae..26d559902 100644 --- a/include/SciLexer.h +++ b/include/SciLexer.h @@ -49,6 +49,7 @@ #define SCLEX_MATLAB 32 #define SCLEX_SCRIPTOL 33 #define SCLEX_ASM 34 +#define SCLEX_CPPNOCASE 35 #define SCLEX_AUTOMATIC 1000 #define SCE_P_DEFAULT 0 #define SCE_P_COMMENTLINE 1 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index 06ef8e7cd..364e1d3a0 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -1452,6 +1452,7 @@ val SCLEX_BAAN=31 val SCLEX_MATLAB=32 val SCLEX_SCRIPTOL=33 val SCLEX_ASM=34 +val SCLEX_CPPNOCASE=35 # When a lexer specifies its language as SCLEX_AUTOMATIC it receives a # value assigned in sequence from SCLEX_AUTOMATIC+1. diff --git a/src/KeyWords.cxx b/src/KeyWords.cxx index 2cb2df25f..7f77f2fad 100644 --- a/src/KeyWords.cxx +++ b/src/KeyWords.cxx @@ -148,6 +148,7 @@ int Scintilla_LinkLexers() { LINK_LEXER(lmBullant); LINK_LEXER(lmConf); LINK_LEXER(lmCPP); + LINK_LEXER(lmCPPNoCase); LINK_LEXER(lmTCL); LINK_LEXER(lmNncrontab); LINK_LEXER(lmEiffel); diff --git a/src/LexCPP.cxx b/src/LexCPP.cxx index 39f458da7..411f33d10 100644 --- a/src/LexCPP.cxx +++ b/src/LexCPP.cxx @@ -52,7 +52,7 @@ static inline bool IsStateString(const int state) { } static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { + Accessor &styler, bool caseSensitive) { WordList &keywords = *keywordlists[0]; WordList &keywords2 = *keywordlists[1]; @@ -71,7 +71,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo StyleContext sc(startPos, length, initStyle, styler); for (; sc.More(); sc.Forward()) { - + if (sc.atLineStart && (sc.state == SCE_C_STRING)) { // Prevent SCE_C_STRINGEOL from leaking back to previous line sc.SetState(SCE_C_STRING); @@ -98,7 +98,11 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo } else if (sc.state == SCE_C_IDENTIFIER) { if (!IsAWordChar(sc.ch) || (sc.ch == '.')) { char s[100]; - sc.GetCurrent(s, sizeof(s)); + if (caseSensitive) { + sc.GetCurrent(s, sizeof(s)); + } else { + sc.GetCurrentLowered(s, sizeof(s)); + } if (keywords.InList(s)) { lastWordWasUUID = strcmp(s, "uuid") == 0; sc.ChangeState(SCE_C_WORD); @@ -141,7 +145,11 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo sc.ForwardSetState(SCE_C_DEFAULT); } else if (!IsADoxygenChar(sc.ch)) { char s[100]; - sc.GetCurrent(s, sizeof(s)); + if (caseSensitive) { + sc.GetCurrent(s, sizeof(s)); + } else { + sc.GetCurrentLowered(s, sizeof(s)); + } if (!isspace(sc.ch) || !keywords3.InList(s+1)) { sc.ChangeState(SCE_C_COMMENTDOCKEYWORDERROR); } @@ -245,9 +253,9 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo sc.SetState(SCE_C_OPERATOR); } } - + if (sc.atLineEnd) { - // Reset states to begining of colourise so no surprises + // Reset states to begining of colourise so no surprises // if different sets of lines lexed. chPrevNonWhite = ' '; visibleChars = 0; @@ -262,7 +270,7 @@ static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, Wo } static bool IsStreamCommentStyle(int style) { - return style == SCE_C_COMMENT || + return style == SCE_C_COMMENT || style == SCE_C_COMMENTDOC || style == SCE_C_COMMENTDOCKEYWORD || style == SCE_C_COMMENTDOCKEYWORDERROR; @@ -354,5 +362,16 @@ static const char * const cppWordLists[] = { 0, }; -LexerModule lmCPP(SCLEX_CPP, ColouriseCppDoc, "cpp", FoldCppDoc, cppWordLists); -LexerModule lmTCL(SCLEX_TCL, ColouriseCppDoc, "tcl", FoldCppDoc, cppWordLists); +static void ColouriseCppDocSensitive(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], + Accessor &styler) { + ColouriseCppDoc(startPos, length, initStyle, keywordlists, styler, true); +} + +static void ColouriseCppDocInsensitive(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], + Accessor &styler) { + ColouriseCppDoc(startPos, length, initStyle, keywordlists, styler, false); +} + +LexerModule lmCPP(SCLEX_CPP, ColouriseCppDocSensitive, "cpp", FoldCppDoc, cppWordLists); +LexerModule lmCPPNoCase(SCLEX_CPPNOCASE, ColouriseCppDocInsensitive, "cppnocase", FoldCppDoc, cppWordLists); +LexerModule lmTCL(SCLEX_TCL, ColouriseCppDocSensitive, "tcl", FoldCppDoc, cppWordLists); |