]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/scintilla/include/KeyWords.h
First pass at wxPython for Mac (darwin only so far). It
[wxWidgets.git] / src / stc / scintilla / include / KeyWords.h
index 3159dcc1b43762085db9af17de6086d3c35d4be7..869b59d2674a4a3226885fb1738d6e683407ef64 100644 (file)
@@ -1,32 +1,59 @@
-// 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[], Accessor &styler);
                   
 // 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[], 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 {
 class LexerModule {
-       static LexerModule *base;
+protected:
        LexerModule *next;
        int language;
        LexerModule *next;
        int language;
-       LexerFunction fn;
+       const char *languageName;
+       LexerFunction fnLexer;
+       LexerFunction fnFolder;
+       
+       static LexerModule *base;
+       static int nextLanguage;
+
 public:
 public:
-       LexerModule(int language_, LexerFunction fn_);
-       static void Colourise(unsigned int startPos, int lengthDoc, int initStyle,
-                  int language, WordList *keywordlists[], Accessor &styler);
+       LexerModule(int language_, LexerFunction fnLexer_, 
+               const char *languageName_=0, LexerFunction fnFolder_=0);
+       int GetLanguage() { return language; }
+       virtual void Lex(unsigned int startPos, int lengthDoc, int initStyle,
+                  WordList *keywordlists[], Accessor &styler);
+       virtual void Fold(unsigned int startPos, int lengthDoc, int initStyle,
+                  WordList *keywordlists[], Accessor &styler);
+       static LexerModule *Find(int language);
+       static 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) {
 inline bool iswordchar(char ch) {
-       return isalnum(ch) || ch == '.' || ch == '_';
+       return isascii(ch) && (isalnum(ch) || ch == '.' || ch == '_');
 }
 
 inline bool iswordstart(char ch) {
 }
 
 inline bool iswordstart(char ch) {
-       return isalnum(ch) || ch == '_';
+       return isascii(ch) && (isalnum(ch) || ch == '_');
 }
 
 inline bool isoperator(char 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 == '*' ||
                return false;
        // '.' left out as it is used to make up numbers
        if (ch == '%' || ch == '^' || ch == '&' || ch == '*' ||
@@ -38,4 +65,3 @@ inline bool isoperator(char ch) {
                return true;
        return false;
 }
                return true;
        return false;
 }
-