xref: /MusicPlayer2/scintilla/src/Catalogue.cxx (revision 8af74909132ed5e696cb05b6689ae4baf14c1c96)
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