aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2019-12-13 10:59:37 +1100
committerNeil <nyamatongwe@gmail.com>2019-12-13 10:59:37 +1100
commit8f1cccd456144fcab0a004afe08aeabfcf2c7357 (patch)
treed22222f36385c43630d573e40d5228f80dbdf558
parent54c7ef44396c43b964060cb15e2ebdbf7359cb02 (diff)
downloadscintilla-mirror-8f1cccd456144fcab0a004afe08aeabfcf2c7357.tar.gz
Hide details of ExternalLexer and export ExternalLexerLoad function only.
-rw-r--r--src/ExternalLexer.cxx70
-rw-r--r--src/ExternalLexer.h58
-rw-r--r--src/ScintillaBase.cxx2
3 files changed, 72 insertions, 58 deletions
diff --git a/src/ExternalLexer.cxx b/src/ExternalLexer.cxx
index 0326f19de..308846628 100644
--- a/src/ExternalLexer.cxx
+++ b/src/ExternalLexer.cxx
@@ -27,6 +27,66 @@
using namespace Scintilla;
+#if PLAT_WIN
+#define EXT_LEXER_DECL __stdcall
+#else
+#define EXT_LEXER_DECL
+#endif
+
+namespace {
+
+typedef int (EXT_LEXER_DECL *GetLexerCountFn)();
+typedef void (EXT_LEXER_DECL *GetLexerNameFn)(unsigned int Index, char *name, int buflength);
+typedef LexerFactoryFunction(EXT_LEXER_DECL *GetLexerFactoryFunction)(unsigned int Index);
+
+/// Sub-class of LexerModule to use an external lexer.
+class ExternalLexerModule : public LexerModule {
+protected:
+ GetLexerFactoryFunction fneFactory;
+ std::string name;
+public:
+ ExternalLexerModule(int language_, LexerFunction fnLexer_,
+ const char *languageName_=nullptr, LexerFunction fnFolder_=nullptr) :
+ LexerModule(language_, fnLexer_, nullptr, fnFolder_),
+ fneFactory(nullptr), name(languageName_){
+ languageName = name.c_str();
+ }
+ virtual void SetExternal(GetLexerFactoryFunction fFactory, int index);
+};
+
+/// LexerLibrary exists for every External Lexer DLL, contains ExternalLexerModules.
+class LexerLibrary {
+ std::unique_ptr<DynamicLibrary> lib;
+ std::vector<std::unique_ptr<ExternalLexerModule>> modules;
+public:
+ explicit LexerLibrary(const char *moduleName_);
+ ~LexerLibrary();
+
+ std::string moduleName;
+};
+
+/// LexerManager manages external lexers, contains LexerLibrarys.
+class LexerManager {
+public:
+ ~LexerManager();
+
+ static LexerManager *GetInstance();
+ static void DeleteInstance();
+
+ void Load(const char *path);
+ void Clear();
+
+private:
+ LexerManager();
+ static std::unique_ptr<LexerManager> theInstance;
+ std::vector<std::unique_ptr<LexerLibrary>> libraries;
+};
+
+class LMMinder {
+public:
+ ~LMMinder();
+};
+
std::unique_ptr<LexerManager> LexerManager::theInstance;
//------------------------------------------
@@ -133,3 +193,13 @@ LMMinder::~LMMinder() {
}
LMMinder minder;
+
+}
+
+namespace Scintilla {
+
+void ExternalLexerLoad(const char *path) {
+ LexerManager::GetInstance()->Load(path);
+}
+
+}
diff --git a/src/ExternalLexer.h b/src/ExternalLexer.h
index f0af9834a..d0a615e31 100644
--- a/src/ExternalLexer.h
+++ b/src/ExternalLexer.h
@@ -8,65 +8,9 @@
#ifndef EXTERNALLEXER_H
#define EXTERNALLEXER_H
-#if PLAT_WIN
-#define EXT_LEXER_DECL __stdcall
-#else
-#define EXT_LEXER_DECL
-#endif
-
namespace Scintilla {
-typedef int (EXT_LEXER_DECL *GetLexerCountFn)();
-typedef void (EXT_LEXER_DECL *GetLexerNameFn)(unsigned int Index, char *name, int buflength);
-typedef LexerFactoryFunction(EXT_LEXER_DECL *GetLexerFactoryFunction)(unsigned int Index);
-
-/// Sub-class of LexerModule to use an external lexer.
-class ExternalLexerModule : public LexerModule {
-protected:
- GetLexerFactoryFunction fneFactory;
- std::string name;
-public:
- ExternalLexerModule(int language_, LexerFunction fnLexer_,
- const char *languageName_=nullptr, LexerFunction fnFolder_=nullptr) :
- LexerModule(language_, fnLexer_, nullptr, fnFolder_),
- fneFactory(nullptr), name(languageName_){
- languageName = name.c_str();
- }
- virtual void SetExternal(GetLexerFactoryFunction fFactory, int index);
-};
-
-/// LexerLibrary exists for every External Lexer DLL, contains ExternalLexerModules.
-class LexerLibrary {
- std::unique_ptr<DynamicLibrary> lib;
- std::vector<std::unique_ptr<ExternalLexerModule>> modules;
-public:
- explicit LexerLibrary(const char *moduleName_);
- ~LexerLibrary();
-
- std::string moduleName;
-};
-
-/// LexerManager manages external lexers, contains LexerLibrarys.
-class LexerManager {
-public:
- ~LexerManager();
-
- static LexerManager *GetInstance();
- static void DeleteInstance();
-
- void Load(const char *path);
- void Clear();
-
-private:
- LexerManager();
- static std::unique_ptr<LexerManager> theInstance;
- std::vector<std::unique_ptr<LexerLibrary>> libraries;
-};
-
-class LMMinder {
-public:
- ~LMMinder();
-};
+void ExternalLexerLoad(const char *path);
}
diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx
index aec08be55..c9eb18346 100644
--- a/src/ScintillaBase.cxx
+++ b/src/ScintillaBase.cxx
@@ -1093,7 +1093,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara
return StringResult(lParam, DocumentLexState()->GetName());
case SCI_LOADLEXERLIBRARY:
- LexerManager::GetInstance()->Load(ConstCharPtrFromSPtr(lParam));
+ ExternalLexerLoad(ConstCharPtrFromSPtr(lParam));
break;
case SCI_PRIVATELEXERCALL: