Add an UI to enable/disable specific overlay handlers.
[TortoiseGit.git] / ext / scintilla / src / ExternalLexer.h
blobb72f7a20c1ddfe63ef54cb71565f18a83840c588
1 // Scintilla source code edit control
2 /** @file ExternalLexer.h
3 ** Support external lexers in DLLs.
4 **/
5 // Copyright 2001 Simon Steele <ss@pnotepad.org>, portions copyright Neil Hodgson.
6 // The License.txt file describes the conditions under which this software may be distributed.
8 #ifndef EXTERNALLEXER_H
9 #define EXTERNALLEXER_H
11 #if PLAT_WIN
12 #define EXT_LEXER_DECL __stdcall
13 #else
14 #define EXT_LEXER_DECL
15 #endif
17 #ifdef SCI_NAMESPACE
18 namespace Scintilla {
19 #endif
21 // External Lexer function definitions...
22 typedef void (EXT_LEXER_DECL *ExtLexerFunction)(unsigned int lexer, unsigned int startPos, int length, int initStyle,
23 char *words[], WindowID window, char *props);
24 typedef void (EXT_LEXER_DECL *ExtFoldFunction)(unsigned int lexer, unsigned int startPos, int length, int initStyle,
25 char *words[], WindowID window, char *props);
26 typedef void* (EXT_LEXER_DECL *GetLexerFunction)(unsigned int Index);
27 typedef int (EXT_LEXER_DECL *GetLexerCountFn)();
28 typedef void (EXT_LEXER_DECL *GetLexerNameFn)(unsigned int Index, char *name, int buflength);
30 //class DynamicLibrary;
32 /// Sub-class of LexerModule to use an external lexer.
33 class ExternalLexerModule : protected LexerModule {
34 protected:
35 ExtLexerFunction fneLexer;
36 ExtFoldFunction fneFolder;
37 int externalLanguage;
38 char name[100];
39 public:
40 ExternalLexerModule(int language_, LexerFunction fnLexer_,
41 const char *languageName_=0, LexerFunction fnFolder_=0) : LexerModule(language_, fnLexer_, 0, fnFolder_){
42 strncpy(name, languageName_, sizeof(name));
43 languageName = name;
45 virtual void Lex(unsigned int startPos, int lengthDoc, int initStyle,
46 WordList *keywordlists[], Accessor &styler) const;
47 virtual void Fold(unsigned int startPos, int lengthDoc, int initStyle,
48 WordList *keywordlists[], Accessor &styler) const;
49 virtual void SetExternal(ExtLexerFunction fLexer, ExtFoldFunction fFolder, int index);
52 /// LexerMinder points to an ExternalLexerModule - so we don't leak them.
53 class LexerMinder {
54 public:
55 ExternalLexerModule *self;
56 LexerMinder *next;
59 /// LexerLibrary exists for every External Lexer DLL, contains LexerMinders.
60 class LexerLibrary {
61 DynamicLibrary *lib;
62 LexerMinder *first;
63 LexerMinder *last;
65 public:
66 LexerLibrary(const char* ModuleName);
67 ~LexerLibrary();
68 void Release();
70 LexerLibrary *next;
71 SString m_sModuleName;
74 /// LexerManager manages external lexers, contains LexerLibrarys.
75 class LexerManager {
76 public:
77 ~LexerManager();
79 static LexerManager *GetInstance();
80 static void DeleteInstance();
82 void Load(const char* path);
83 void Clear();
85 private:
86 LexerManager();
87 static LexerManager *theInstance;
89 void LoadLexerLibrary(const char* module);
90 LexerLibrary *first;
91 LexerLibrary *last;
94 class LMMinder {
95 public:
96 ~LMMinder();
99 #ifdef SCI_NAMESPACE
101 #endif
103 #endif