18af74909SZhong Yang // Scintilla source code edit control 28af74909SZhong Yang /** @file Catalogue.cxx 38af74909SZhong Yang ** Lexer infrastructure. 48af74909SZhong Yang ** Contains a list of LexerModules which can be searched to find a module appropriate for a 58af74909SZhong Yang ** particular language. 68af74909SZhong Yang **/ 78af74909SZhong Yang // Copyright 1998-2002 by Neil Hodgson <[email protected]> 88af74909SZhong Yang // The License.txt file describes the conditions under which this software may be distributed. 98af74909SZhong Yang 108af74909SZhong Yang #include <cstdlib> 118af74909SZhong Yang #include <cassert> 128af74909SZhong Yang #include <cstring> 138af74909SZhong Yang 148af74909SZhong Yang #include <stdexcept> 158af74909SZhong Yang #include <vector> 168af74909SZhong Yang 178af74909SZhong Yang #include "ILexer.h" 188af74909SZhong Yang #include "Scintilla.h" 198af74909SZhong Yang #include "SciLexer.h" 208af74909SZhong Yang 218af74909SZhong Yang #include "LexerModule.h" 228af74909SZhong Yang #include "CatalogueModules.h" 238af74909SZhong Yang #include "Catalogue.h" 248af74909SZhong Yang 258af74909SZhong Yang using namespace Scintilla; 268af74909SZhong Yang 278af74909SZhong Yang namespace { 288af74909SZhong Yang 298af74909SZhong Yang CatalogueModules catalogueDefault; 308af74909SZhong Yang 318af74909SZhong Yang } 328af74909SZhong Yang Find(int language)338af74909SZhong Yangconst LexerModule *Catalogue::Find(int language) { 348af74909SZhong Yang return catalogueDefault.Find(language); 358af74909SZhong Yang } 368af74909SZhong Yang Find(const char * languageName)378af74909SZhong Yangconst LexerModule *Catalogue::Find(const char *languageName) noexcept { 388af74909SZhong Yang return catalogueDefault.Find(languageName); 398af74909SZhong Yang } 408af74909SZhong Yang AddLexerModule(LexerModule * plm)418af74909SZhong Yangvoid Catalogue::AddLexerModule(LexerModule *plm) { 428af74909SZhong Yang catalogueDefault.AddLexerModule(plm); 438af74909SZhong Yang } 448af74909SZhong Yang 458af74909SZhong Yang // To add or remove a lexer, add or remove its file and run LexGen.py. 468af74909SZhong Yang 478af74909SZhong Yang // Force a reference to all of the Scintilla lexers so that the linker will 488af74909SZhong Yang // not remove the code of the lexers. Scintilla_LinkLexers()498af74909SZhong Yangint Scintilla_LinkLexers() { 508af74909SZhong Yang 518af74909SZhong Yang static int initialised = 0; 528af74909SZhong Yang if (initialised) 538af74909SZhong Yang return 0; 548af74909SZhong Yang initialised = 1; 558af74909SZhong Yang 568af74909SZhong Yang #if !defined(SCI_EMPTYCATALOGUE) 578af74909SZhong Yang 588af74909SZhong Yang // Shorten the code that declares a lexer and ensures it is linked in by calling a method. 598af74909SZhong Yang #define LINK_LEXER(lexer) extern LexerModule lexer; catalogueDefault.AddLexerModule(&lexer); 608af74909SZhong Yang 618af74909SZhong Yang //++Autogenerated -- run scripts/LexGen.py to regenerate 628af74909SZhong Yang //**\(\tLINK_LEXER(\*);\n\) 638af74909SZhong Yang LINK_LEXER(lmNull); 64*61ef93eeSZhong Yang LINK_LEXER(lmLyric); 658af74909SZhong Yang 668af74909SZhong Yang //--Autogenerated -- end of automatically generated section 678af74909SZhong Yang 688af74909SZhong Yang #endif 698af74909SZhong Yang 708af74909SZhong Yang return 1; 718af74909SZhong Yang } 72