diff options
-rw-r--r-- | lexlib/DefaultLexer.cxx | 17 | ||||
-rw-r--r-- | lexlib/DefaultLexer.h | 4 | ||||
-rw-r--r-- | lexlib/LexAccessor.h | 7 | ||||
-rw-r--r-- | lexlib/LexerBase.cxx | 17 | ||||
-rw-r--r-- | lexlib/LexerBase.h | 4 | ||||
-rw-r--r-- | lexlib/LexerModule.cxx | 16 | ||||
-rw-r--r-- | lexlib/LexerModule.h | 9 | ||||
-rw-r--r-- | lexlib/LexerSimple.cxx | 4 |
8 files changed, 57 insertions, 21 deletions
diff --git a/lexlib/DefaultLexer.cxx b/lexlib/DefaultLexer.cxx index 19221cc53..656c3d13d 100644 --- a/lexlib/DefaultLexer.cxx +++ b/lexlib/DefaultLexer.cxx @@ -26,7 +26,8 @@ using namespace Scintilla; static const char styleSubable[] = { 0 }; -DefaultLexer::DefaultLexer() { +DefaultLexer::DefaultLexer(const LexicalClass *lexClasses_, size_t nClasses_) : + lexClasses(lexClasses_), nClasses(nClasses_) { } DefaultLexer::~DefaultLexer() { @@ -110,17 +111,17 @@ const char * SCI_METHOD DefaultLexer::GetSubStyleBases() { } int SCI_METHOD DefaultLexer::NamedStyles() { - return 0; + return static_cast<int>(nClasses); } -const char * SCI_METHOD DefaultLexer::NameOfStyle(int) { - return ""; +const char * SCI_METHOD DefaultLexer::NameOfStyle(int style) { + return (style < NamedStyles()) ? lexClasses[style].name : ""; } -const char * SCI_METHOD DefaultLexer::TagsOfStyle(int) { - return ""; +const char * SCI_METHOD DefaultLexer::TagsOfStyle(int style) { + return (style < NamedStyles()) ? lexClasses[style].tags : ""; } -const char * SCI_METHOD DefaultLexer::DescriptionOfStyle(int) { - return ""; +const char * SCI_METHOD DefaultLexer::DescriptionOfStyle(int style) { + return (style < NamedStyles()) ? lexClasses[style].description : ""; } diff --git a/lexlib/DefaultLexer.h b/lexlib/DefaultLexer.h index 372294e1a..9d2a0567d 100644 --- a/lexlib/DefaultLexer.h +++ b/lexlib/DefaultLexer.h @@ -16,8 +16,10 @@ namespace Scintilla { // A simple lexer with no state class DefaultLexer : public ILexer4 { + const LexicalClass *lexClasses; + size_t nClasses; public: - DefaultLexer(); + DefaultLexer(const LexicalClass *lexClasses_ = nullptr, size_t nClasses_ = 0); virtual ~DefaultLexer(); void SCI_METHOD Release() override; int SCI_METHOD Version() const override; diff --git a/lexlib/LexAccessor.h b/lexlib/LexAccessor.h index 0cf6e8ce0..9f786132b 100644 --- a/lexlib/LexAccessor.h +++ b/lexlib/LexAccessor.h @@ -184,6 +184,13 @@ public: } }; +struct LexicalClass { + int value; + const char *name; + const char *tags; + const char *description; +}; + #ifdef SCI_NAMESPACE } #endif diff --git a/lexlib/LexerBase.cxx b/lexlib/LexerBase.cxx index fdf8878a2..4e1c03991 100644 --- a/lexlib/LexerBase.cxx +++ b/lexlib/LexerBase.cxx @@ -26,7 +26,8 @@ using namespace Scintilla; static const char styleSubable[] = { 0 }; -LexerBase::LexerBase() { +LexerBase::LexerBase(const LexicalClass *lexClasses_, size_t nClasses_) : + lexClasses(lexClasses_), nClasses(nClasses_) { for (int wl = 0; wl < numWordLists; wl++) keyWordLists[wl] = new WordList; keyWordLists[numWordLists] = 0; @@ -129,17 +130,17 @@ const char * SCI_METHOD LexerBase::GetSubStyleBases() { } int SCI_METHOD LexerBase::NamedStyles() { - return 0; + return static_cast<int>(nClasses); } -const char * SCI_METHOD LexerBase::NameOfStyle(int) { - return ""; +const char * SCI_METHOD LexerBase::NameOfStyle(int style) { + return (style < NamedStyles()) ? lexClasses[style].name : ""; } -const char * SCI_METHOD LexerBase::TagsOfStyle(int) { - return ""; +const char * SCI_METHOD LexerBase::TagsOfStyle(int style) { + return (style < NamedStyles()) ? lexClasses[style].tags : ""; } -const char * SCI_METHOD LexerBase::DescriptionOfStyle(int) { - return ""; +const char * SCI_METHOD LexerBase::DescriptionOfStyle(int style) { + return (style < NamedStyles()) ? lexClasses[style].description : ""; } diff --git a/lexlib/LexerBase.h b/lexlib/LexerBase.h index 66e7560e1..b0c50813c 100644 --- a/lexlib/LexerBase.h +++ b/lexlib/LexerBase.h @@ -15,11 +15,13 @@ namespace Scintilla { // A simple lexer with no state class LexerBase : public ILexer4 { protected: + const LexicalClass *lexClasses; + size_t nClasses; PropSetSimple props; enum {numWordLists=KEYWORDSET_MAX+1}; WordList *keyWordLists[numWordLists+1]; public: - LexerBase(); + LexerBase(const LexicalClass *lexClasses_=nullptr, size_t nClasses_=0); virtual ~LexerBase(); void SCI_METHOD Release() override; int SCI_METHOD Version() const override; diff --git a/lexlib/LexerModule.cxx b/lexlib/LexerModule.cxx index c7dec38e2..690c59157 100644 --- a/lexlib/LexerModule.cxx +++ b/lexlib/LexerModule.cxx @@ -30,12 +30,16 @@ LexerModule::LexerModule(int language_, LexerFunction fnLexer_, const char *languageName_, LexerFunction fnFolder_, - const char *const wordListDescriptions_[]) : + const char *const wordListDescriptions_[], + const LexicalClass *lexClasses_, + size_t nClasses_) : language(language_), fnLexer(fnLexer_), fnFolder(fnFolder_), fnFactory(0), wordListDescriptions(wordListDescriptions_), + lexClasses(lexClasses_), + nClasses(nClasses_), languageName(languageName_) { } @@ -48,6 +52,8 @@ LexerModule::LexerModule(int language_, fnFolder(0), fnFactory(fnFactory_), wordListDescriptions(wordListDescriptions_), + lexClasses(nullptr), + nClasses(0), languageName(languageName_) { } @@ -74,6 +80,14 @@ const char *LexerModule::GetWordListDescription(int index) const { } } +const LexicalClass *LexerModule::LexClasses() const { + return lexClasses; +} + +size_t LexerModule::NamedStyles() const { + return nClasses; +} + ILexer4 *LexerModule::Create() const { if (fnFactory) return fnFactory(); diff --git a/lexlib/LexerModule.h b/lexlib/LexerModule.h index d05993d96..db17f96e2 100644 --- a/lexlib/LexerModule.h +++ b/lexlib/LexerModule.h @@ -14,6 +14,7 @@ namespace Scintilla { class Accessor; class WordList; +struct LexicalClass; typedef void (*LexerFunction)(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, WordList *keywordlists[], Accessor &styler); @@ -31,6 +32,8 @@ protected: LexerFunction fnFolder; LexerFactoryFunction fnFactory; const char * const * wordListDescriptions; + const LexicalClass *lexClasses; + size_t nClasses; public: const char *languageName; @@ -38,7 +41,9 @@ public: LexerFunction fnLexer_, const char *languageName_=0, LexerFunction fnFolder_=0, - const char * const wordListDescriptions_[] = NULL); + const char * const wordListDescriptions_[] = NULL, + const LexicalClass *lexClasses_=nullptr, + size_t nClasses_=0); LexerModule(int language_, LexerFactoryFunction fnFactory_, const char *languageName_, @@ -50,6 +55,8 @@ public: // -1 is returned if no WordList information is available int GetNumWordLists() const; const char *GetWordListDescription(int index) const; + const LexicalClass *LexClasses() const; + size_t NamedStyles() const; ILexer4 *Create() const; diff --git a/lexlib/LexerSimple.cxx b/lexlib/LexerSimple.cxx index f741e0fef..3df15d32d 100644 --- a/lexlib/LexerSimple.cxx +++ b/lexlib/LexerSimple.cxx @@ -26,7 +26,9 @@ using namespace Scintilla; #endif -LexerSimple::LexerSimple(const LexerModule *module_) : module(module_) { +LexerSimple::LexerSimple(const LexerModule *module_) : + LexerBase(module_->LexClasses(), module_->NamedStyles()), + module(module_) { for (int wl = 0; wl < module->GetNumWordLists(); wl++) { if (!wordLists.empty()) wordLists += "\n"; |