]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/stc/scintilla/include/KeyWords.h
No longer a need for changing the names to protect against multiple definitions.
[wxWidgets.git] / contrib / src / stc / scintilla / include / KeyWords.h
index 1b42ecdd93e9a4c049e1e57e365e0497a6d92b5c..df4e870c580f507203f57f61f2cc58a7af04a2fe 100644 (file)
@@ -1,32 +1,66 @@
-// SciTE - Scintilla based Text Editor
-// KeyWords.h - colourise for particular languages
-// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
+// Scintilla source code edit control
+/** @file KeyWords.h
+ ** Colourise for particular languages.
+ **/
+// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
 // The License.txt file describes the conditions under which this software may be distributed.
 
 typedef void (*LexerFunction)(unsigned int startPos, int lengthDoc, int initStyle,
-                  WordList *keywordlists[], StylingContext &styler);
+                  WordList *keywordlists[], Accessor &styler);
                   
+/**
+ * A LexerModule is responsible for lexing and folding a particular language.
+ * The class maintains a list of LexerModules which can be searched to find a
+ * module appropriate to a particular language.
+ */
 class LexerModule {
-       static LexerModule *base;
-       LexerModule *next;
+protected:
+       const LexerModule *next;
        int language;
-       LexerFunction fn;
+       LexerFunction fnLexer;
+       LexerFunction fnFolder;
+       const char * const * wordListDescriptions;
+
+       static const LexerModule *base;
+       static int nextLanguage;
+
 public:
-       LexerModule(int language_, LexerFunction fn_);
-       static void Colourise(unsigned int startPos, int lengthDoc, int initStyle,
-                  int language, WordList *keywordlists[], StylingContext &styler);
+       const char *languageName;
+       LexerModule(int language_, LexerFunction fnLexer_, 
+               const char *languageName_=0, LexerFunction fnFolder_=0,
+               const char * const wordListDescriptions_[] = NULL);
+       int GetLanguage() const { return language; }
+
+       // -1 is returned if no WordList information is available
+       int GetNumWordLists() const;
+       const char *GetWordListDescription(int index) const;
+
+       virtual void Lex(unsigned int startPos, int lengthDoc, int initStyle,
+                  WordList *keywordlists[], Accessor &styler) const;
+       virtual void Fold(unsigned int startPos, int lengthDoc, int initStyle,
+                  WordList *keywordlists[], Accessor &styler) const;
+       static const LexerModule *Find(int language);
+       static const LexerModule *Find(const char *languageName);
 };
 
+/**
+ * Check if a character is a space.
+ * This is ASCII specific but is safe with chars >= 0x80.
+ */
+inline bool isspacechar(unsigned char ch) {
+    return (ch == ' ') || ((ch >= 0x09) && (ch <= 0x0d));
+}
+
 inline bool iswordchar(char ch) {
-       return isalnum(ch) || ch == '.' || ch == '_';
+       return isascii(ch) && (isalnum(ch) || ch == '.' || ch == '_');
 }
 
 inline bool iswordstart(char ch) {
-       return isalnum(ch) || ch == '_';
+       return isascii(ch) && (isalnum(ch) || ch == '_');
 }
 
 inline bool isoperator(char ch) {
-       if (isalnum(ch))
+       if (isascii(ch) && isalnum(ch))
                return false;
        // '.' left out as it is used to make up numbers
        if (ch == '%' || ch == '^' || ch == '&' || ch == '*' ||
@@ -38,4 +72,3 @@ inline bool isoperator(char ch) {
                return true;
        return false;
 }
-