aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2019-12-31 15:50:48 +1100
committerNeil <nyamatongwe@gmail.com>2019-12-31 15:50:48 +1100
commitf142d93df48c3b9e07edd25425627ddeeb071520 (patch)
treef7b50820c0c62966e7a384ec8e5a6e689db44c39
parent431daa97eb571282cdbc9c787098ad17f811e924 (diff)
downloadscintilla-mirror-f142d93df48c3b9e07edd25425627ddeeb071520.tar.gz
Move collection of modules from Catalogue.cxx to CatalogueModules.h so it can
be reused.
-rw-r--r--cocoa/ScintillaCocoa.mm1
-rwxr-xr-xgtk/ScintillaGTK.cxx3
-rw-r--r--gtk/deps.mak1
-rw-r--r--lexlib/CatalogueModules.h70
-rw-r--r--lexlib/LexerModule.h2
-rw-r--r--scripts/HeaderOrder.txt1
-rw-r--r--src/Catalogue.cxx29
-rw-r--r--src/ScintillaBase.cxx3
-rw-r--r--win32/DepGen.py3
-rw-r--r--win32/ScintillaWin.cxx3
-rw-r--r--win32/deps.mak40
-rw-r--r--win32/makefile5
-rw-r--r--win32/nmdeps.mak40
-rw-r--r--win32/scintilla.mak13
14 files changed, 90 insertions, 124 deletions
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm
index fb401b74a..6c975beb3 100644
--- a/cocoa/ScintillaCocoa.mm
+++ b/cocoa/ScintillaCocoa.mm
@@ -423,7 +423,6 @@ ScintillaCocoa::~ScintillaCocoa() {
* Core initialization of the control. Everything that needs to be set up happens here.
*/
void ScintillaCocoa::Init() {
- Scintilla_LinkLexers();
// Tell Scintilla not to buffer: Quartz buffers drawing for us.
WndProc(SCI_SETBUFFEREDDRAW, 0, 0);
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index 9e51f5c98..f8a2b5c9b 100755
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -3030,9 +3030,6 @@ GType scintilla_object_get_type() {
void ScintillaGTK::ClassInit(OBJECT_CLASS *object_class, GtkWidgetClass *widget_class, GtkContainerClass *container_class) {
Platform_Initialise();
-#ifdef SCI_LEXER
- Scintilla_LinkLexers();
-#endif
atomUTF8 = gdk_atom_intern("UTF8_STRING", FALSE);
atomString = GDK_SELECTION_TYPE_STRING;
atomUriList = gdk_atom_intern("text/uri-list", FALSE);
diff --git a/gtk/deps.mak b/gtk/deps.mak
index d16f60afa..6970424bc 100644
--- a/gtk/deps.mak
+++ b/gtk/deps.mak
@@ -121,6 +121,7 @@ Catalogue.o: \
../include/Scintilla.h \
../include/SciLexer.h \
../lexlib/LexerModule.h \
+ ../lexlib/CatalogueModules.h \
../src/Catalogue.h
CellBuffer.o: \
../src/CellBuffer.cxx \
diff --git a/lexlib/CatalogueModules.h b/lexlib/CatalogueModules.h
new file mode 100644
index 000000000..1a170cf70
--- /dev/null
+++ b/lexlib/CatalogueModules.h
@@ -0,0 +1,70 @@
+// Scintilla source code edit control
+/** @file CatalogueModules.h
+ ** Lexer infrastructure.
+ ** Contains a list of LexerModules which can be searched to find a module appropriate for a
+ ** particular language.
+ **/
+// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#ifndef CATALOGUEMODULES_H
+#define CATALOGUEMODULES_H
+
+namespace Scintilla {
+
+class CatalogueModules {
+ std::vector<LexerModule *> lexerCatalogue;
+public:
+ const LexerModule *Find(int language) {
+ for (const LexerModule *lm : lexerCatalogue) {
+ if (lm->GetLanguage() == language) {
+ return lm;
+ }
+ }
+ return nullptr;
+ }
+
+ const LexerModule *Find(const char *languageName) {
+ if (languageName) {
+ for (const LexerModule *lm : lexerCatalogue) {
+ if (lm->languageName && (0 == strcmp(lm->languageName, languageName))) {
+ return lm;
+ }
+ }
+ }
+ return nullptr;
+ }
+
+ void AddLexerModule(LexerModule *plm) {
+ lexerCatalogue.push_back(plm);
+ }
+
+ unsigned int Count() {
+ return static_cast<unsigned int>(lexerCatalogue.size());
+ }
+
+ const char *Name(unsigned int index) {
+ if (index < static_cast<unsigned int>(lexerCatalogue.size())) {
+ return lexerCatalogue[index]->languageName;
+ } else {
+ return "";
+ }
+ }
+
+ LexerFactoryFunction Factory(unsigned int index) {
+ // Works for object lexers but not for function lexers
+ return lexerCatalogue[index]->fnFactory;
+ }
+
+ ILexer4 *Create(unsigned int index) {
+ const LexerModule *plm = lexerCatalogue[index];
+ if (!plm) {
+ return nullptr;
+ }
+ return plm->Create();
+ }
+};
+
+}
+
+#endif
diff --git a/lexlib/LexerModule.h b/lexlib/LexerModule.h
index a6dda61ed..96cff9645 100644
--- a/lexlib/LexerModule.h
+++ b/lexlib/LexerModule.h
@@ -65,7 +65,7 @@ public:
virtual void Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle,
WordList *keywordlists[], Accessor &styler) const;
- friend class Catalogue;
+ friend class CatalogueModules;
};
inline int Maximum(int a, int b) {
diff --git a/scripts/HeaderOrder.txt b/scripts/HeaderOrder.txt
index 63f9978d3..23c16081a 100644
--- a/scripts/HeaderOrder.txt
+++ b/scripts/HeaderOrder.txt
@@ -105,6 +105,7 @@
#include "CharacterSet.h"
#include "CharacterCategory.h"
#include "LexerModule.h"
+#include "CatalogueModules.h"
#include "OptionSet.h"
#include "SparseState.h"
#include "SubStyles.h"
diff --git a/src/Catalogue.cxx b/src/Catalogue.cxx
index a6aed901d..d9e0172d5 100644
--- a/src/Catalogue.cxx
+++ b/src/Catalogue.cxx
@@ -19,36 +19,27 @@
#include "SciLexer.h"
#include "LexerModule.h"
+#include "CatalogueModules.h"
#include "Catalogue.h"
using namespace Scintilla;
-static std::vector<LexerModule *> lexerCatalogue;
+namespace {
+
+CatalogueModules catalogueDefault;
+
+}
const LexerModule *Catalogue::Find(int language) {
- Scintilla_LinkLexers();
- for (const LexerModule *lm : lexerCatalogue) {
- if (lm->GetLanguage() == language) {
- return lm;
- }
- }
- return nullptr;
+ return catalogueDefault.Find(language);
}
const LexerModule *Catalogue::Find(const char *languageName) {
- Scintilla_LinkLexers();
- if (languageName) {
- for (const LexerModule *lm : lexerCatalogue) {
- if (lm->languageName && (0 == strcmp(lm->languageName, languageName))) {
- return lm;
- }
- }
- }
- return nullptr;
+ return catalogueDefault.Find(languageName);
}
void Catalogue::AddLexerModule(LexerModule *plm) {
- lexerCatalogue.push_back(plm);
+ catalogueDefault.AddLexerModule(plm);
}
// To add or remove a lexer, add or remove its file and run LexGen.py.
@@ -63,7 +54,7 @@ int Scintilla_LinkLexers() {
initialised = 1;
// Shorten the code that declares a lexer and ensures it is linked in by calling a method.
-#define LINK_LEXER(lexer) extern LexerModule lexer; Catalogue::AddLexerModule(&lexer);
+#define LINK_LEXER(lexer) extern LexerModule lexer; catalogueDefault.AddLexerModule(&lexer);
//++Autogenerated -- run scripts/LexGen.py to regenerate
//**\(\tLINK_LEXER(\*);\n\)
diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx
index c9eb18346..f165f92e2 100644
--- a/src/ScintillaBase.cxx
+++ b/src/ScintillaBase.cxx
@@ -73,6 +73,9 @@ ScintillaBase::ScintillaBase() {
listType = 0;
maxListWidth = 0;
multiAutoCMode = SC_MULTIAUTOC_ONCE;
+#ifdef SCI_LEXER
+ Scintilla_LinkLexers();
+#endif
}
ScintillaBase::~ScintillaBase() {
diff --git a/win32/DepGen.py b/win32/DepGen.py
index 3abf68936..c255574b0 100644
--- a/win32/DepGen.py
+++ b/win32/DepGen.py
@@ -22,9 +22,6 @@ def Generate():
# Add ScintillaBaseL as the same as ScintillaBase
deps = Dependencies.InsertSynonym(deps, "ScintillaBase.o", "ScintillaBaseL.o")
- # Add ScintillaWinL as the same as ScintillaWin
- deps = Dependencies.InsertSynonym(deps, "ScintillaWin.o", "ScintillaWinL.o")
-
Dependencies.UpdateDependencies("../win32/deps.mak", deps, topComment)
# Create the dependencies file for MSVC
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index bb99166c6..99a54c1aa 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -3465,9 +3465,6 @@ LRESULT PASCAL ScintillaWin::SWndProc(
int Scintilla_RegisterClasses(void *hInstance) {
Platform_Initialise(hInstance);
const bool result = ScintillaWin::Register(static_cast<HINSTANCE>(hInstance));
-#ifdef SCI_LEXER
- Scintilla_LinkLexers();
-#endif
return result;
}
diff --git a/win32/deps.mak b/win32/deps.mak
index b7f4024cd..4eed6cc45 100644
--- a/win32/deps.mak
+++ b/win32/deps.mak
@@ -55,45 +55,6 @@ ScintillaWin.o: \
PlatWin.h \
HanjaDic.h \
ScintillaWin.h
-ScintillaWinL.o: \
- ScintillaWin.cxx \
- ../include/Platform.h \
- ../include/ILoader.h \
- ../include/Sci_Position.h \
- ../include/ILexer.h \
- ../include/Scintilla.h \
- ../lexlib/CharacterCategory.h \
- ../src/Position.h \
- ../src/UniqueString.h \
- ../src/SplitVector.h \
- ../src/Partitioning.h \
- ../src/RunStyles.h \
- ../src/ContractionState.h \
- ../src/CellBuffer.h \
- ../src/CallTip.h \
- ../src/KeyMap.h \
- ../src/Indicator.h \
- ../src/LineMarker.h \
- ../src/Style.h \
- ../src/ViewStyle.h \
- ../src/CharClassify.h \
- ../src/Decoration.h \
- ../src/CaseFolder.h \
- ../src/Document.h \
- ../src/CaseConvert.h \
- ../src/UniConversion.h \
- ../src/Selection.h \
- ../src/PositionCache.h \
- ../src/EditModel.h \
- ../src/MarginView.h \
- ../src/EditView.h \
- ../src/Editor.h \
- ../src/ElapsedPeriod.h \
- ../src/AutoComplete.h \
- ../src/ScintillaBase.h \
- PlatWin.h \
- HanjaDic.h \
- ScintillaWin.h
AutoComplete.o: \
../src/AutoComplete.cxx \
../include/Platform.h \
@@ -125,6 +86,7 @@ Catalogue.o: \
../include/Scintilla.h \
../include/SciLexer.h \
../lexlib/LexerModule.h \
+ ../lexlib/CatalogueModules.h \
../src/Catalogue.h
CellBuffer.o: \
../src/CellBuffer.cxx \
diff --git a/win32/makefile b/win32/makefile
index 7aa1be716..30ae527fb 100644
--- a/win32/makefile
+++ b/win32/makefile
@@ -130,7 +130,7 @@ SCILEX_OBJS=\
HanjaDic.o \
PlatWin.o \
ScintillaBaseL.o \
- ScintillaWinL.o
+ ScintillaWin.o
COMPONENT_OBJS = \
$(SRC_OBJS) \
@@ -162,9 +162,6 @@ include deps.mak
ScintillaBaseL.o:
$(CXX) $(CXX_ALL_FLAGS) $(CXXFLAGS) -D SCI_LEXER -c $< -o $@
-ScintillaWinL.o:
- $(CXX) $(CXX_ALL_FLAGS) $(CXXFLAGS) -D SCI_LEXER -c $< -o $@
-
ScintRes.o: ScintRes.rc
$(WINDRES) ScintRes.rc $@
diff --git a/win32/nmdeps.mak b/win32/nmdeps.mak
index f5610bb5b..c4fab693f 100644
--- a/win32/nmdeps.mak
+++ b/win32/nmdeps.mak
@@ -55,45 +55,6 @@ $(DIR_O)/ScintillaWin.obj: \
PlatWin.h \
HanjaDic.h \
ScintillaWin.h
-$(DIR_O)/ScintillaWinL.obj: \
- ScintillaWin.cxx \
- ../include/Platform.h \
- ../include/ILoader.h \
- ../include/Sci_Position.h \
- ../include/ILexer.h \
- ../include/Scintilla.h \
- ../lexlib/CharacterCategory.h \
- ../src/Position.h \
- ../src/UniqueString.h \
- ../src/SplitVector.h \
- ../src/Partitioning.h \
- ../src/RunStyles.h \
- ../src/ContractionState.h \
- ../src/CellBuffer.h \
- ../src/CallTip.h \
- ../src/KeyMap.h \
- ../src/Indicator.h \
- ../src/LineMarker.h \
- ../src/Style.h \
- ../src/ViewStyle.h \
- ../src/CharClassify.h \
- ../src/Decoration.h \
- ../src/CaseFolder.h \
- ../src/Document.h \
- ../src/CaseConvert.h \
- ../src/UniConversion.h \
- ../src/Selection.h \
- ../src/PositionCache.h \
- ../src/EditModel.h \
- ../src/MarginView.h \
- ../src/EditView.h \
- ../src/Editor.h \
- ../src/ElapsedPeriod.h \
- ../src/AutoComplete.h \
- ../src/ScintillaBase.h \
- PlatWin.h \
- HanjaDic.h \
- ScintillaWin.h
$(DIR_O)/AutoComplete.obj: \
../src/AutoComplete.cxx \
../include/Platform.h \
@@ -125,6 +86,7 @@ $(DIR_O)/Catalogue.obj: \
../include/Scintilla.h \
../include/SciLexer.h \
../lexlib/LexerModule.h \
+ ../lexlib/CatalogueModules.h \
../src/Catalogue.h
$(DIR_O)/CellBuffer.obj: \
../src/CellBuffer.cxx \
diff --git a/win32/scintilla.mak b/win32/scintilla.mak
index c5c9748a2..0e0f7558c 100644
--- a/win32/scintilla.mak
+++ b/win32/scintilla.mak
@@ -238,7 +238,7 @@ SCILEX_OBJS = \
$(DIR_O)\HanjaDic.obj \
$(DIR_O)\PlatWin.obj \
$(DIR_O)\ScintillaBaseL.obj \
- $(DIR_O)\ScintillaWinL.obj
+ $(DIR_O)\ScintillaWin.obj
COMPONENT_OBJS = \
$(DIR_O)\HanjaDic.obj \
@@ -252,14 +252,6 @@ LEXCOMPONENT_OBJS = \
$(DIR_O)\ScintillaDLL.obj \
$(SCILEX_OBJS)
-SOBJS = \
- $(SRC_OBJS) \
- $(DIR_O)\HanjaDic.obj \
- $(DIR_O)\PlatWin.obj \
- $(DIR_O)\ScintillaBase.obj \
- $(DIR_O)\ScintillaWin.obj \
- $(DIR_O)\ScintillaDLL.obj
-
$(DIR_O)\ScintRes.res : ScintRes.rc
$(RC) -fo$@ $**
@@ -287,9 +279,6 @@ $(LIBSCI): $(SCILEX_OBJS)
$(DIR_O)\ScintillaBaseL.obj: ..\src\ScintillaBase.cxx
$(CXX) $(CXXFLAGS) -DSCI_LEXER -c $(NAME)$@ ..\src\ScintillaBase.cxx
-$(DIR_O)\ScintillaWinL.obj: ScintillaWin.cxx
- $(CXX) $(CXXFLAGS) -DSCI_LEXER -c $(NAME)$@ ScintillaWin.cxx
-
# Dependencies
!IF EXISTS(nmdeps.mak)