aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj8
-rw-r--r--gtk/makefile2
-rw-r--r--lexers/LexAsm.cxx3
-rw-r--r--lexers/LexBaan.cxx3
-rw-r--r--lexers/LexBasic.cxx3
-rw-r--r--lexers/LexD.cxx3
-rw-r--r--lexers/LexDMIS.cxx3
-rw-r--r--lexers/LexEDIFACT.cxx3
-rw-r--r--lexers/LexHaskell.cxx3
-rw-r--r--lexers/LexJSON.cxx3
-rw-r--r--lexers/LexPerl.cxx3
-rw-r--r--lexers/LexProgress.cxx5
-rw-r--r--lexers/LexPython.cxx3
-rw-r--r--lexers/LexRegistry.cxx3
-rw-r--r--lexers/LexRust.cxx3
-rw-r--r--lexers/LexSQL.cxx3
-rw-r--r--lexers/LexVerilog.cxx3
-rw-r--r--lexers/LexVisualProlog.cxx3
-rw-r--r--lexlib/DefaultLexer.cxx110
-rw-r--r--lexlib/DefaultLexer.h49
-rw-r--r--qt/ScintillaEdit/ScintillaEdit.pro1
-rw-r--r--qt/ScintillaEditBase/ScintillaEditBase.pro1
-rw-r--r--win32/makefile1
-rw-r--r--win32/scintilla.mak1
24 files changed, 205 insertions, 18 deletions
diff --git a/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj b/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj
index 671799fc1..3346a8bdc 100644
--- a/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj
+++ b/cocoa/ScintillaFramework/ScintillaFramework.xcodeproj/project.pbxproj
@@ -215,6 +215,8 @@
28B647101B54C0720009DC49 /* LexNull.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28B6470A1B54C0720009DC49 /* LexNull.cxx */; };
28B647111B54C0720009DC49 /* LexProps.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28B6470B1B54C0720009DC49 /* LexProps.cxx */; };
28BC38EC1B74C6AD008BF9EB /* Sci_Position.h in Headers */ = {isa = PBXBuildFile; fileRef = 28BC38EB1B74C6AD008BF9EB /* Sci_Position.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 28BDA1221EFB8F7C00EBD3F3 /* DefaultLexer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28BDA1211EFB8F7C00EBD3F3 /* DefaultLexer.cxx */; };
+ 28BDA1241EFB8FB200EBD3F3 /* DefaultLexer.h in Headers */ = {isa = PBXBuildFile; fileRef = 28BDA1231EFB8FB200EBD3F3 /* DefaultLexer.h */; };
28C40CA81CB7321200B089F2 /* LexJSON.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28C40CA71CB7321200B089F2 /* LexJSON.cxx */; };
28D191A21DEA72C800159938 /* LexEDIFACT.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28D191A11DEA72C800159938 /* LexEDIFACT.cxx */; };
28D516D81830FFCA0047C93D /* info_bar_bg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 28D516D51830FFCA0047C93D /* info_bar_bg@2x.png */; };
@@ -440,6 +442,8 @@
28B6470A1B54C0720009DC49 /* LexNull.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexNull.cxx; path = ../../lexers/LexNull.cxx; sourceTree = "<group>"; };
28B6470B1B54C0720009DC49 /* LexProps.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexProps.cxx; path = ../../lexers/LexProps.cxx; sourceTree = "<group>"; };
28BC38EB1B74C6AD008BF9EB /* Sci_Position.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Sci_Position.h; path = ../../include/Sci_Position.h; sourceTree = "<group>"; };
+ 28BDA1211EFB8F7C00EBD3F3 /* DefaultLexer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DefaultLexer.cxx; path = ../../lexlib/DefaultLexer.cxx; sourceTree = "<group>"; };
+ 28BDA1231EFB8FB200EBD3F3 /* DefaultLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DefaultLexer.h; path = ../../lexlib/DefaultLexer.h; sourceTree = "<group>"; };
28C40CA71CB7321200B089F2 /* LexJSON.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexJSON.cxx; path = ../../lexers/LexJSON.cxx; sourceTree = "<group>"; };
28D1919E1DE69FC100159938 /* module.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = "<group>"; };
28D191A11DEA72C800159938 /* LexEDIFACT.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LexEDIFACT.cxx; path = ../../lexers/LexEDIFACT.cxx; sourceTree = "<group>"; };
@@ -672,6 +676,7 @@
114B6FA611FA7623004FB6AB /* CharClassify.h */,
114B6FA711FA7623004FB6AB /* ContractionState.h */,
114B6FA811FA7623004FB6AB /* Decoration.h */,
+ 28BDA1231EFB8FB200EBD3F3 /* DefaultLexer.h */,
114B6FA911FA7623004FB6AB /* Document.h */,
28A1DD54196BE0ED006EFCDD /* EditModel.h */,
114B6FAA11FA7623004FB6AB /* Editor.h */,
@@ -728,6 +733,7 @@
114B6F6511FA7597004FB6AB /* ContractionState.cxx */,
28804B2B1EEE232E00C0D154 /* DBCS.cxx */,
114B6F6611FA7597004FB6AB /* Decoration.cxx */,
+ 28BDA1211EFB8F7C00EBD3F3 /* DefaultLexer.cxx */,
114B6F6711FA7597004FB6AB /* Document.cxx */,
28A1DD4E196BE0CA006EFCDD /* EditModel.cxx */,
114B6F6811FA7597004FB6AB /* Editor.cxx */,
@@ -822,6 +828,7 @@
2744E5A40FC168A100E85C33 /* InfoBar.h in Headers */,
2744E5AC0FC168B200E85C33 /* InfoBarCommunicator.h in Headers */,
2744E5AA0FC168A100E85C33 /* ScintillaView.h in Headers */,
+ 28BDA1241EFB8FB200EBD3F3 /* DefaultLexer.h in Headers */,
280056FB188DDD2C00F200AE /* SparseState.h in Headers */,
2791F3C80FC19F71009DBCF9 /* SciLexer.h in Headers */,
2791F3C60FC19F71009DBCF9 /* PlatCocoa.h in Headers */,
@@ -957,6 +964,7 @@
2744E5B50FC168C500E85C33 /* ScintillaCocoa.mm in Sources */,
2744E5B60FC168C500E85C33 /* ScintillaView.mm in Sources */,
28D191A21DEA72C800159938 /* LexEDIFACT.cxx in Sources */,
+ 28BDA1221EFB8F7C00EBD3F3 /* DefaultLexer.cxx in Sources */,
114B6F0D11FA7526004FB6AB /* LexAbaqus.cxx in Sources */,
114B6F0E11FA7526004FB6AB /* LexAda.cxx in Sources */,
28B6470C1B54C0720009DC49 /* LexBatch.cxx in Sources */,
diff --git a/gtk/makefile b/gtk/makefile
index 39d811b83..321b273a5 100644
--- a/gtk/makefile
+++ b/gtk/makefile
@@ -113,7 +113,7 @@ deps: deps.mak
deps.mak:
$(CXX) -MM $(CONFIGFLAGS) $(CXXTFLAGS) $(DEPSRCS) | sed -e 's/\/usr.* //' | grep [a-zA-Z] > $@
-$(COMPLIB): Accessor.o CharacterSet.o LexerBase.o LexerModule.o LexerSimple.o StyleContext.o WordList.o \
+$(COMPLIB): Accessor.o CharacterSet.o DefaultLexer.o LexerBase.o LexerModule.o LexerSimple.o StyleContext.o WordList.o \
CharClassify.o Decoration.o Document.o PerLine.o Catalogue.o CallTip.o CaseConvert.o CaseFolder.o \
ScintillaBase.o ContractionState.o EditModel.o Editor.o EditView.o ExternalLexer.o MarginView.o \
PropSetSimple.o PlatGTK.o \
diff --git a/lexers/LexAsm.cxx b/lexers/LexAsm.cxx
index 78550bba1..16b32443c 100644
--- a/lexers/LexAsm.cxx
+++ b/lexers/LexAsm.cxx
@@ -30,6 +30,7 @@
#include "CharacterSet.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -139,7 +140,7 @@ struct OptionSetAsm : public OptionSet<OptionsAsm> {
}
};
-class LexerAsm : public ILexer {
+class LexerAsm : public DefaultLexer {
WordList cpuInstruction;
WordList mathInstruction;
WordList registers;
diff --git a/lexers/LexBaan.cxx b/lexers/LexBaan.cxx
index ab96a0db5..9d1f20972 100644
--- a/lexers/LexBaan.cxx
+++ b/lexers/LexBaan.cxx
@@ -34,6 +34,7 @@
#include "CharacterSet.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
# ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -381,7 +382,7 @@ public:
}
-class LexerBaan : public ILexer {
+class LexerBaan : public DefaultLexer {
WordListAbridged keywords;
WordListAbridged keywords2;
WordListAbridged keywords3;
diff --git a/lexers/LexBasic.cxx b/lexers/LexBasic.cxx
index 4aa449d43..8aa64267b 100644
--- a/lexers/LexBasic.cxx
+++ b/lexers/LexBasic.cxx
@@ -37,6 +37,7 @@
#include "CharacterSet.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -226,7 +227,7 @@ struct OptionSetBasic : public OptionSet<OptionsBasic> {
}
};
-class LexerBasic : public ILexer {
+class LexerBasic : public DefaultLexer {
char comment_char;
int (*CheckFoldPoint)(char const *, int &);
WordList keywordlists[4];
diff --git a/lexers/LexD.cxx b/lexers/LexD.cxx
index ededccdf4..c09498407 100644
--- a/lexers/LexD.cxx
+++ b/lexers/LexD.cxx
@@ -27,6 +27,7 @@
#include "CharacterSet.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -145,7 +146,7 @@ struct OptionSetD : public OptionSet<OptionsD> {
}
};
-class LexerD : public ILexer {
+class LexerD : public DefaultLexer {
bool caseSensitive;
WordList keywords;
WordList keywords2;
diff --git a/lexers/LexDMIS.cxx b/lexers/LexDMIS.cxx
index 8700d5329..9db391971 100644
--- a/lexers/LexDMIS.cxx
+++ b/lexers/LexDMIS.cxx
@@ -21,6 +21,7 @@
#include "StyleContext.h"
#include "CharacterSet.h"
#include "LexerModule.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -38,7 +39,7 @@ static const char *const DMISWordListDesc[] = {
};
-class LexerDMIS : public ILexer
+class LexerDMIS : public DefaultLexer
{
private:
char *m_wordListSets;
diff --git a/lexers/LexEDIFACT.cxx b/lexers/LexEDIFACT.cxx
index f7e55bfe9..63805b04e 100644
--- a/lexers/LexEDIFACT.cxx
+++ b/lexers/LexEDIFACT.cxx
@@ -18,12 +18,13 @@
#include "LexAccessor.h"
#include "LexerModule.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
#endif
-class LexerEDIFACT : public ILexer
+class LexerEDIFACT : public DefaultLexer
{
public:
LexerEDIFACT();
diff --git a/lexers/LexHaskell.cxx b/lexers/LexHaskell.cxx
index 26657830c..00e6b8cbf 100644
--- a/lexers/LexHaskell.cxx
+++ b/lexers/LexHaskell.cxx
@@ -41,6 +41,7 @@
#include "CharacterCategory.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -269,7 +270,7 @@ struct OptionSetHaskell : public OptionSet<OptionsHaskell> {
}
};
-class LexerHaskell : public ILexer {
+class LexerHaskell : public DefaultLexer {
bool literate;
Sci_Position firstImportLine;
int firstImportIndent;
diff --git a/lexers/LexJSON.cxx b/lexers/LexJSON.cxx
index 32b71926c..516aeb933 100644
--- a/lexers/LexJSON.cxx
+++ b/lexers/LexJSON.cxx
@@ -27,6 +27,7 @@
#include "CharacterSet.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -128,7 +129,7 @@ struct OptionSetJSON : public OptionSet<OptionsJSON> {
}
};
-class LexerJSON : public ILexer {
+class LexerJSON : public DefaultLexer {
OptionsJSON options;
OptionSetJSON optSetJSON;
EscapeSequence escapeSeq;
diff --git a/lexers/LexPerl.cxx b/lexers/LexPerl.cxx
index 03e371738..5e4071b20 100644
--- a/lexers/LexPerl.cxx
+++ b/lexers/LexPerl.cxx
@@ -27,6 +27,7 @@
#include "CharacterSet.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -398,7 +399,7 @@ struct OptionSetPerl : public OptionSet<OptionsPerl> {
}
};
-class LexerPerl : public ILexer {
+class LexerPerl : public DefaultLexer {
CharacterSet setWordStart;
CharacterSet setWord;
CharacterSet setSpecialVar;
diff --git a/lexers/LexProgress.cxx b/lexers/LexProgress.cxx
index aaa3d4b2d..c4a0e6a41 100644
--- a/lexers/LexProgress.cxx
+++ b/lexers/LexProgress.cxx
@@ -38,6 +38,7 @@ Differentiate between labels and variables
#include "LexerModule.h"
#include "OptionSet.h"
#include "SparseState.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -122,7 +123,7 @@ namespace {
};
}
-class LexerABL : public ILexer {
+class LexerABL : public DefaultLexer {
CharacterSet setWord;
CharacterSet setNegationOp;
CharacterSet setArithmethicOp;
@@ -172,7 +173,7 @@ public:
void * SCI_METHOD PrivateCall(int, void *) override {
return 0;
}
- int SCI_METHOD LineEndTypesSupported() {
+ int SCI_METHOD LineEndTypesSupported() override {
return SC_LINE_END_TYPE_DEFAULT;
}
static ILexer *LexerFactoryABL() {
diff --git a/lexers/LexPython.cxx b/lexers/LexPython.cxx
index 97943ca24..50c3baa8c 100644
--- a/lexers/LexPython.cxx
+++ b/lexers/LexPython.cxx
@@ -30,6 +30,7 @@
#include "LexerModule.h"
#include "OptionSet.h"
#include "SubStyles.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -310,7 +311,7 @@ const char styleSubable[] = { SCE_P_IDENTIFIER, 0 };
}
-class LexerPython : public ILexerWithSubStyles {
+class LexerPython : public DefaultLexer {
WordList keywords;
WordList keywords2;
OptionsPython options;
diff --git a/lexers/LexRegistry.cxx b/lexers/LexRegistry.cxx
index 43519e2e2..b02a0d265 100644
--- a/lexers/LexRegistry.cxx
+++ b/lexers/LexRegistry.cxx
@@ -27,6 +27,7 @@
#include "CharacterSet.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -53,7 +54,7 @@ struct OptionSetRegistry : public OptionSet<OptionsRegistry> {
}
};
-class LexerRegistry : public ILexer {
+class LexerRegistry : public DefaultLexer {
OptionsRegistry options;
OptionSetRegistry optSetRegistry;
diff --git a/lexers/LexRust.cxx b/lexers/LexRust.cxx
index 4f2c6617a..ff5e816ba 100644
--- a/lexers/LexRust.cxx
+++ b/lexers/LexRust.cxx
@@ -29,6 +29,7 @@
#include "CharacterSet.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -116,7 +117,7 @@ struct OptionSetRust : public OptionSet<OptionsRust> {
}
};
-class LexerRust : public ILexer {
+class LexerRust : public DefaultLexer {
WordList keywords[NUM_RUST_KEYWORD_LISTS];
OptionsRust options;
OptionSetRust osRust;
diff --git a/lexers/LexSQL.cxx b/lexers/LexSQL.cxx
index 6562839e4..871f4dce1 100644
--- a/lexers/LexSQL.cxx
+++ b/lexers/LexSQL.cxx
@@ -31,6 +31,7 @@
#include "LexerModule.h"
#include "OptionSet.h"
#include "SparseState.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -302,7 +303,7 @@ struct OptionSetSQL : public OptionSet<OptionsSQL> {
}
};
-class LexerSQL : public ILexer {
+class LexerSQL : public DefaultLexer {
public :
LexerSQL() {}
diff --git a/lexers/LexVerilog.cxx b/lexers/LexVerilog.cxx
index 28b8dfbdb..6be3392f1 100644
--- a/lexers/LexVerilog.cxx
+++ b/lexers/LexVerilog.cxx
@@ -31,6 +31,7 @@
#include "OptionSet.h"
#include "SubStyles.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -172,7 +173,7 @@ const char styleSubable[] = {0};
}
-class LexerVerilog : public ILexerWithSubStyles {
+class LexerVerilog : public DefaultLexer {
CharacterSet setWord;
WordList keywords;
WordList keywords2;
diff --git a/lexers/LexVisualProlog.cxx b/lexers/LexVisualProlog.cxx
index 6c61c1874..c03069075 100644
--- a/lexers/LexVisualProlog.cxx
+++ b/lexers/LexVisualProlog.cxx
@@ -39,6 +39,7 @@
#include "CharacterCategory.h"
#include "LexerModule.h"
#include "OptionSet.h"
+#include "DefaultLexer.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
@@ -64,7 +65,7 @@ struct OptionSetVisualProlog : public OptionSet<OptionsVisualProlog> {
}
};
-class LexerVisualProlog : public ILexer {
+class LexerVisualProlog : public DefaultLexer {
WordList majorKeywords;
WordList minorKeywords;
WordList directiveKeywords;
diff --git a/lexlib/DefaultLexer.cxx b/lexlib/DefaultLexer.cxx
new file mode 100644
index 000000000..9babbf7a4
--- /dev/null
+++ b/lexlib/DefaultLexer.cxx
@@ -0,0 +1,110 @@
+// Scintilla source code edit control
+/** @file DefaultLexer.cxx
+ ** A lexer base class that provides reasonable default behaviour.
+ **/
+// Copyright 2017 by Neil Hodgson <neilh@scintilla.org>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#include <cstdlib>
+#include <cassert>
+#include <cstring>
+
+#include "ILexer.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+#include "PropSetSimple.h"
+#include "WordList.h"
+#include "LexAccessor.h"
+#include "Accessor.h"
+#include "LexerModule.h"
+#include "DefaultLexer.h"
+
+#ifdef SCI_NAMESPACE
+using namespace Scintilla;
+#endif
+
+static const char styleSubable[] = { 0 };
+
+DefaultLexer::DefaultLexer() {
+}
+
+DefaultLexer::~DefaultLexer() {
+}
+
+void SCI_METHOD DefaultLexer::Release() {
+ delete this;
+}
+
+int SCI_METHOD DefaultLexer::Version() const {
+ return lvOriginal;
+}
+
+const char * SCI_METHOD DefaultLexer::PropertyNames() {
+ return "";
+}
+
+int SCI_METHOD DefaultLexer::PropertyType(const char *) {
+ return SC_TYPE_BOOLEAN;
+}
+
+const char * SCI_METHOD DefaultLexer::DescribeProperty(const char *) {
+ return "";
+}
+
+Sci_Position SCI_METHOD DefaultLexer::PropertySet(const char *, const char *) {
+ return -1;
+}
+
+const char * SCI_METHOD DefaultLexer::DescribeWordListSets() {
+ return "";
+}
+
+Sci_Position SCI_METHOD DefaultLexer::WordListSet(int, const char *) {
+ return -1;
+}
+
+void SCI_METHOD DefaultLexer::Fold(Sci_PositionU, Sci_Position, int, IDocument *) {
+}
+
+void * SCI_METHOD DefaultLexer::PrivateCall(int, void *) {
+ return nullptr;
+}
+
+int SCI_METHOD DefaultLexer::LineEndTypesSupported() {
+ return SC_LINE_END_TYPE_DEFAULT;
+}
+
+int SCI_METHOD DefaultLexer::AllocateSubStyles(int, int) {
+ return -1;
+}
+
+int SCI_METHOD DefaultLexer::SubStylesStart(int) {
+ return -1;
+}
+
+int SCI_METHOD DefaultLexer::SubStylesLength(int) {
+ return 0;
+}
+
+int SCI_METHOD DefaultLexer::StyleFromSubStyle(int subStyle) {
+ return subStyle;
+}
+
+int SCI_METHOD DefaultLexer::PrimaryStyleFromStyle(int style) {
+ return style;
+}
+
+void SCI_METHOD DefaultLexer::FreeSubStyles() {
+}
+
+void SCI_METHOD DefaultLexer::SetIdentifiers(int, const char *) {
+}
+
+int SCI_METHOD DefaultLexer::DistanceToSecondaryStyles() {
+ return 0;
+}
+
+const char * SCI_METHOD DefaultLexer::GetSubStyleBases() {
+ return styleSubable;
+}
diff --git a/lexlib/DefaultLexer.h b/lexlib/DefaultLexer.h
new file mode 100644
index 000000000..7b1490138
--- /dev/null
+++ b/lexlib/DefaultLexer.h
@@ -0,0 +1,49 @@
+// Scintilla source code edit control
+/** @file DefaultLexer.h
+ ** A lexer base class with default empty implementations of methods.
+ ** For lexers that do not support all features so do not need real implementations.
+ ** Does have real implementation for style metadata.
+ **/
+// Copyright 2017 by Neil Hodgson <neilh@scintilla.org>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#ifndef DEFAULTLEXER_H
+#define DEFAULTLEXER_H
+
+#ifdef SCI_NAMESPACE
+namespace Scintilla {
+#endif
+
+// A simple lexer with no state
+class DefaultLexer : public ILexerWithSubStyles {
+public:
+ DefaultLexer();
+ virtual ~DefaultLexer();
+ void SCI_METHOD Release() override;
+ int SCI_METHOD Version() const override;
+ const char * SCI_METHOD PropertyNames() override;
+ int SCI_METHOD PropertyType(const char *name) override;
+ const char * SCI_METHOD DescribeProperty(const char *name) override;
+ Sci_Position SCI_METHOD PropertySet(const char *key, const char *val) override;
+ const char * SCI_METHOD DescribeWordListSets() override;
+ Sci_Position SCI_METHOD WordListSet(int n, const char *wl) override;
+ void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) override = 0;
+ void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) override;
+ void * SCI_METHOD PrivateCall(int operation, void *pointer) override;
+ int SCI_METHOD LineEndTypesSupported() override;
+ int SCI_METHOD AllocateSubStyles(int styleBase, int numberStyles) override;
+ int SCI_METHOD SubStylesStart(int styleBase) override;
+ int SCI_METHOD SubStylesLength(int styleBase) override;
+ int SCI_METHOD StyleFromSubStyle(int subStyle) override;
+ int SCI_METHOD PrimaryStyleFromStyle(int style) override;
+ void SCI_METHOD FreeSubStyles() override;
+ void SCI_METHOD SetIdentifiers(int style, const char *identifiers) override;
+ int SCI_METHOD DistanceToSecondaryStyles() override;
+ const char * SCI_METHOD GetSubStyleBases() override;
+};
+
+#ifdef SCI_NAMESPACE
+}
+#endif
+
+#endif
diff --git a/qt/ScintillaEdit/ScintillaEdit.pro b/qt/ScintillaEdit/ScintillaEdit.pro
index 613393011..651b4fed3 100644
--- a/qt/ScintillaEdit/ScintillaEdit.pro
+++ b/qt/ScintillaEdit/ScintillaEdit.pro
@@ -60,6 +60,7 @@ SOURCES += \
../../lexlib/LexerNoExceptions.cxx \
../../lexlib/LexerModule.cxx \
../../lexlib/LexerBase.cxx \
+ ../../lexlib/DefaultLexer.cxx \
../../lexlib/CharacterSet.cxx \
../../lexlib/CharacterCategory.cxx \
../../lexlib/Accessor.cxx \
diff --git a/qt/ScintillaEditBase/ScintillaEditBase.pro b/qt/ScintillaEditBase/ScintillaEditBase.pro
index 098fa74bd..26dba021f 100644
--- a/qt/ScintillaEditBase/ScintillaEditBase.pro
+++ b/qt/ScintillaEditBase/ScintillaEditBase.pro
@@ -58,6 +58,7 @@ SOURCES += \
../../lexlib/LexerNoExceptions.cxx \
../../lexlib/LexerModule.cxx \
../../lexlib/LexerBase.cxx \
+ ../../lexlib/DefaultLexer.cxx \
../../lexlib/CharacterSet.cxx \
../../lexlib/Accessor.cxx \
../../lexlib/CharacterCategory.cxx \
diff --git a/win32/makefile b/win32/makefile
index 9f6309f67..cfd5b27d9 100644
--- a/win32/makefile
+++ b/win32/makefile
@@ -116,6 +116,7 @@ LOBJS = \
Accessor.o \
Catalogue.o \
ExternalLexer.o \
+ DefaultLexer.o \
LexerBase.o \
LexerModule.o \
LexerSimple.o \
diff --git a/win32/scintilla.mak b/win32/scintilla.mak
index 612d278ad..75becbfd1 100644
--- a/win32/scintilla.mak
+++ b/win32/scintilla.mak
@@ -219,6 +219,7 @@ LOBJS=\
$(DIR_O)\Accessor.obj \
$(DIR_O)\Catalogue.obj \
$(DIR_O)\ExternalLexer.obj \
+ $(DIR_O)\DefaultLexer.obj \
$(DIR_O)\LexerBase.obj \
$(DIR_O)\LexerModule.obj \
$(DIR_O)\LexerSimple.obj \