xref: /MusicPlayer2/scintilla/src/Catalogue.cxx (revision 61ef93ee18b51a83cdb07217a9fbaf099a57c9d2)
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 Yang const LexerModule *Catalogue::Find(int language) {
348af74909SZhong Yang 	return catalogueDefault.Find(language);
358af74909SZhong Yang }
368af74909SZhong Yang 
Find(const char * languageName)378af74909SZhong Yang const LexerModule *Catalogue::Find(const char *languageName) noexcept {
388af74909SZhong Yang 	return catalogueDefault.Find(languageName);
398af74909SZhong Yang }
408af74909SZhong Yang 
AddLexerModule(LexerModule * plm)418af74909SZhong Yang void 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 Yang int 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