1*8af74909SZhong Yang // Scintilla source code edit control 2*8af74909SZhong Yang /** @file Catalogue.cxx 3*8af74909SZhong Yang ** Lexer infrastructure. 4*8af74909SZhong Yang ** Contains a list of LexerModules which can be searched to find a module appropriate for a 5*8af74909SZhong Yang ** particular language. 6*8af74909SZhong Yang **/ 7*8af74909SZhong Yang // Copyright 1998-2002 by Neil Hodgson <[email protected]> 8*8af74909SZhong Yang // The License.txt file describes the conditions under which this software may be distributed. 9*8af74909SZhong Yang 10*8af74909SZhong Yang #include <cstdlib> 11*8af74909SZhong Yang #include <cassert> 12*8af74909SZhong Yang #include <cstring> 13*8af74909SZhong Yang 14*8af74909SZhong Yang #include <stdexcept> 15*8af74909SZhong Yang #include <vector> 16*8af74909SZhong Yang 17*8af74909SZhong Yang #include "ILexer.h" 18*8af74909SZhong Yang #include "Scintilla.h" 19*8af74909SZhong Yang #include "SciLexer.h" 20*8af74909SZhong Yang 21*8af74909SZhong Yang #include "LexerModule.h" 22*8af74909SZhong Yang #include "CatalogueModules.h" 23*8af74909SZhong Yang #include "Catalogue.h" 24*8af74909SZhong Yang 25*8af74909SZhong Yang using namespace Scintilla; 26*8af74909SZhong Yang 27*8af74909SZhong Yang namespace { 28*8af74909SZhong Yang 29*8af74909SZhong Yang CatalogueModules catalogueDefault; 30*8af74909SZhong Yang 31*8af74909SZhong Yang } 32*8af74909SZhong Yang 33*8af74909SZhong Yang const LexerModule *Catalogue::Find(int language) { 34*8af74909SZhong Yang return catalogueDefault.Find(language); 35*8af74909SZhong Yang } 36*8af74909SZhong Yang 37*8af74909SZhong Yang const LexerModule *Catalogue::Find(const char *languageName) noexcept { 38*8af74909SZhong Yang return catalogueDefault.Find(languageName); 39*8af74909SZhong Yang } 40*8af74909SZhong Yang 41*8af74909SZhong Yang void Catalogue::AddLexerModule(LexerModule *plm) { 42*8af74909SZhong Yang catalogueDefault.AddLexerModule(plm); 43*8af74909SZhong Yang } 44*8af74909SZhong Yang 45*8af74909SZhong Yang // To add or remove a lexer, add or remove its file and run LexGen.py. 46*8af74909SZhong Yang 47*8af74909SZhong Yang // Force a reference to all of the Scintilla lexers so that the linker will 48*8af74909SZhong Yang // not remove the code of the lexers. 49*8af74909SZhong Yang int Scintilla_LinkLexers() { 50*8af74909SZhong Yang 51*8af74909SZhong Yang static int initialised = 0; 52*8af74909SZhong Yang if (initialised) 53*8af74909SZhong Yang return 0; 54*8af74909SZhong Yang initialised = 1; 55*8af74909SZhong Yang 56*8af74909SZhong Yang #if !defined(SCI_EMPTYCATALOGUE) 57*8af74909SZhong Yang 58*8af74909SZhong Yang // Shorten the code that declares a lexer and ensures it is linked in by calling a method. 59*8af74909SZhong Yang #define LINK_LEXER(lexer) extern LexerModule lexer; catalogueDefault.AddLexerModule(&lexer); 60*8af74909SZhong Yang 61*8af74909SZhong Yang //++Autogenerated -- run scripts/LexGen.py to regenerate 62*8af74909SZhong Yang //**\(\tLINK_LEXER(\*);\n\) 63*8af74909SZhong Yang LINK_LEXER(lmNull); 64*8af74909SZhong Yang 65*8af74909SZhong Yang //--Autogenerated -- end of automatically generated section 66*8af74909SZhong Yang 67*8af74909SZhong Yang #endif 68*8af74909SZhong Yang 69*8af74909SZhong Yang return 1; 70*8af74909SZhong Yang } 71