diff options
Diffstat (limited to 'lexlib')
| -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"; | 
