aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/ExternalLexer.h
diff options
context:
space:
mode:
Diffstat (limited to 'win32/ExternalLexer.h')
-rw-r--r--win32/ExternalLexer.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/win32/ExternalLexer.h b/win32/ExternalLexer.h
new file mode 100644
index 000000000..bbc2cf4f6
--- /dev/null
+++ b/win32/ExternalLexer.h
@@ -0,0 +1,74 @@
+// Scintilla source code edit control
+/** @file ExternalLexer.h
+ ** Support external lexers in DLLs.
+ **/
+// Copyright 2001 Simon Steele <ss@pnotepad.org>, portions copyright Neil Hodgson.
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#ifndef EXTERNALLEXER_H
+#define EXTERNALLEXER_H
+
+// External Lexer function definitions...
+typedef void (__stdcall *ExtLexerFunction)(unsigned int lexer, unsigned int startPos, int length, int initStyle,
+ char *words[], WindowID window, char *props);
+typedef void (__stdcall *ExtFoldFunction)(unsigned int lexer, unsigned int startPos, int length, int initStyle,
+ char *words[], WindowID window, char *props);
+typedef void* (__stdcall *GetLexerFunction)(unsigned int Index);
+typedef int (__stdcall *GetLexerCountFn)();
+typedef void (__stdcall *GetLexerNameFn)(unsigned int Index, char *name, int buflength);
+
+// Sub-class of LexerModule to use an external lexer.
+class ExternalLexerModule : protected LexerModule {
+protected:
+ ExtLexerFunction fneLexer;
+ ExtFoldFunction fneFolder;
+ int externalLanguage;
+ char name[100];
+public:
+ ExternalLexerModule(int language_, LexerFunction fnLexer_,
+ const char *languageName_=0, LexerFunction fnFolder_=0) : LexerModule(language_, fnLexer_, 0, fnFolder_){
+ strncpy(name, languageName_, sizeof(name));
+ languageName = name;
+ };
+ 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);
+ virtual void SetExternal(ExtLexerFunction fLexer, ExtFoldFunction fFolder, int index);
+};
+
+// LexerMinder points to an ExternalLexerModule - so we don't leak them.
+class LexerMinder {
+public:
+ ExternalLexerModule *self;
+ LexerMinder *next;
+};
+
+// LexerLibrary exists for every External Lexer DLL, contains LexerMinders.
+class LexerLibrary {
+public:
+ LexerLibrary(LPCTSTR ModuleName);
+ ~LexerLibrary();
+ void Release();
+ // Variables
+ LexerLibrary *next;
+ SString m_sModuleName;
+private:
+ HMODULE m_hModule;
+ LexerMinder *first;
+ LexerMinder *last;
+};
+
+// LexerManager manages external lexers, contains LexerLibrarys.
+class LexerManager {
+public:
+ LexerManager();
+ ~LexerManager();
+private:
+ void EnumerateLexers();
+ static int UseCount;
+ static LexerLibrary *first;
+ static LexerLibrary *last;
+};
+
+#endif