updated Scintilla to 2.29
[TortoiseGit.git] / ext / scintilla / src / ExternalLexer.h
blob21ac49001e3d2fbe07ebf2ab92e3546d69e20a3e
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 typedef void*(EXT_LEXER_DECL *GetLexerFunction)(unsigned int Index);
22 typedef int (EXT_LEXER_DECL *GetLexerCountFn)();
23 typedef void (EXT_LEXER_DECL *GetLexerNameFn)(unsigned int Index, char *name, int buflength);
24 typedef LexerFactoryFunction(EXT_LEXER_DECL *GetLexerFactoryFunction)(unsigned int Index);
26 /// Sub-class of LexerModule to use an external lexer.
27 class ExternalLexerModule : public LexerModule {
28 protected:
29 GetLexerFactoryFunction fneFactory;
30 char name[100];
31 public:
32 ExternalLexerModule(int language_, LexerFunction fnLexer_,
33 const char *languageName_=0, LexerFunction fnFolder_=0) :
34 LexerModule(language_, fnLexer_, 0, fnFolder_),
35 fneFactory(0) {
36 strncpy(name, languageName_, sizeof(name));
37 name[sizeof(name)-1] = '\0';
38 languageName = name;
40 virtual void SetExternal(GetLexerFactoryFunction fFactory, int index);
43 /// LexerMinder points to an ExternalLexerModule - so we don't leak them.
44 class LexerMinder {
45 public:
46 ExternalLexerModule *self;
47 LexerMinder *next;
50 /// LexerLibrary exists for every External Lexer DLL, contains LexerMinders.
51 class LexerLibrary {
52 DynamicLibrary *lib;
53 LexerMinder *first;
54 LexerMinder *last;
56 public:
57 LexerLibrary(const char *ModuleName);
58 ~LexerLibrary();
59 void Release();
61 LexerLibrary *next;
62 std::string m_sModuleName;
65 /// LexerManager manages external lexers, contains LexerLibrarys.
66 class LexerManager {
67 public:
68 ~LexerManager();
70 static LexerManager *GetInstance();
71 static void DeleteInstance();
73 void Load(const char *path);
74 void Clear();
76 private:
77 LexerManager();
78 static LexerManager *theInstance;
80 void LoadLexerLibrary(const char *module);
81 LexerLibrary *first;
82 LexerLibrary *last;
85 class LMMinder {
86 public:
87 ~LMMinder();
90 #ifdef SCI_NAMESPACE
92 #endif
94 #endif