diff options
Diffstat (limited to 'lexlib')
| -rw-r--r-- | lexlib/CatalogueModules.h | 70 | ||||
| -rw-r--r-- | lexlib/LexerModule.h | 2 | 
2 files changed, 71 insertions, 1 deletions
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) {  | 
