1 // Scintilla source code edit control
2 /** @file Catalogue.cxx
3  ** Lexer infrastructure.
4  ** Contains a list of LexerModules which can be searched to find a module appropriate for a
5  ** particular language.
6  **/
7 // Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org>
8 // The License.txt file describes the conditions under which this software may be distributed.
9 
10 #include <cstdlib>
11 #include <cassert>
12 #include <cstring>
13 
14 #include <stdexcept>
15 #include <vector>
16 
17 #include "ILexer.h"
18 #include "Scintilla.h"
19 #include "SciLexer.h"
20 
21 #include "LexerModule.h"
22 #include "CatalogueModules.h"
23 #include "Catalogue.h"
24 
25 using namespace Scintilla;
26 
27 namespace {
28 
29 CatalogueModules catalogueDefault;
30 
31 }
32 
Find(int language)33 const LexerModule *Catalogue::Find(int language) {
34 	return catalogueDefault.Find(language);
35 }
36 
Find(const char * languageName)37 const LexerModule *Catalogue::Find(const char *languageName) noexcept {
38 	return catalogueDefault.Find(languageName);
39 }
40 
AddLexerModule(LexerModule * plm)41 void Catalogue::AddLexerModule(LexerModule *plm) {
42 	catalogueDefault.AddLexerModule(plm);
43 }
44 
45 // To add or remove a lexer, add or remove its file and run LexGen.py.
46 
47 // Force a reference to all of the Scintilla lexers so that the linker will
48 // not remove the code of the lexers.
Scintilla_LinkLexers()49 int Scintilla_LinkLexers() {
50 
51 	static int initialised = 0;
52 	if (initialised)
53 		return 0;
54 	initialised = 1;
55 
56 #if !defined(SCI_EMPTYCATALOGUE)
57 
58 // Shorten the code that declares a lexer and ensures it is linked in by calling a method.
59 #define LINK_LEXER(lexer) extern LexerModule lexer; catalogueDefault.AddLexerModule(&lexer);
60 
61 //++Autogenerated -- run scripts/LexGen.py to regenerate
62 //**\(\tLINK_LEXER(\*);\n\)
63 	LINK_LEXER(lmA68k);
64 	LINK_LEXER(lmAbaqus);
65 	LINK_LEXER(lmAda);
66 	LINK_LEXER(lmAPDL);
67 	LINK_LEXER(lmAs);
68 	LINK_LEXER(lmAsm);
69 	LINK_LEXER(lmAsn1);
70 	LINK_LEXER(lmASY);
71 	LINK_LEXER(lmAU3);
72 	LINK_LEXER(lmAVE);
73 	LINK_LEXER(lmAVS);
74 	LINK_LEXER(lmBaan);
75 	LINK_LEXER(lmBash);
76 	LINK_LEXER(lmBatch);
77 	LINK_LEXER(lmBibTeX);
78 	LINK_LEXER(lmBlitzBasic);
79 	LINK_LEXER(lmBullant);
80 	LINK_LEXER(lmCaml);
81 	LINK_LEXER(lmCIL);
82 	LINK_LEXER(lmClw);
83 	LINK_LEXER(lmClwNoCase);
84 	LINK_LEXER(lmCmake);
85 	LINK_LEXER(lmCOBOL);
86 	LINK_LEXER(lmCoffeeScript);
87 	LINK_LEXER(lmConf);
88 	LINK_LEXER(lmCPP);
89 	LINK_LEXER(lmCPPNoCase);
90 	LINK_LEXER(lmCsound);
91 	LINK_LEXER(lmCss);
92 	LINK_LEXER(lmD);
93 	LINK_LEXER(lmDataflex);
94 	LINK_LEXER(lmDiff);
95 	LINK_LEXER(lmDMAP);
96 	LINK_LEXER(lmDMIS);
97 	LINK_LEXER(lmECL);
98 	LINK_LEXER(lmEDIFACT);
99 	LINK_LEXER(lmEiffel);
100 	LINK_LEXER(lmEiffelkw);
101 	LINK_LEXER(lmErlang);
102 	LINK_LEXER(lmErrorList);
103 	LINK_LEXER(lmESCRIPT);
104 	LINK_LEXER(lmF77);
105 	LINK_LEXER(lmFlagShip);
106 	LINK_LEXER(lmForth);
107 	LINK_LEXER(lmFortran);
108 	LINK_LEXER(lmFreeBasic);
109 	LINK_LEXER(lmGAP);
110 	LINK_LEXER(lmGui4Cli);
111 	LINK_LEXER(lmHaskell);
112 	LINK_LEXER(lmHollywood);
113 	LINK_LEXER(lmHTML);
114 	LINK_LEXER(lmIHex);
115 	LINK_LEXER(lmIndent);
116 	LINK_LEXER(lmInno);
117 	LINK_LEXER(lmJSON);
118 	LINK_LEXER(lmKix);
119 	LINK_LEXER(lmKVIrc);
120 	LINK_LEXER(lmLatex);
121 	LINK_LEXER(lmLISP);
122 	LINK_LEXER(lmLiterateHaskell);
123 	LINK_LEXER(lmLot);
124 	LINK_LEXER(lmLout);
125 	LINK_LEXER(lmLua);
126 	LINK_LEXER(lmMagikSF);
127 	LINK_LEXER(lmMake);
128 	LINK_LEXER(lmMarkdown);
129 	LINK_LEXER(lmMatlab);
130 	LINK_LEXER(lmMaxima);
131 	LINK_LEXER(lmMETAPOST);
132 	LINK_LEXER(lmMMIXAL);
133 	LINK_LEXER(lmModula);
134 	LINK_LEXER(lmMSSQL);
135 	LINK_LEXER(lmMySQL);
136 	LINK_LEXER(lmNim);
137 	LINK_LEXER(lmNimrod);
138 	LINK_LEXER(lmNncrontab);
139 	LINK_LEXER(lmNsis);
140 	LINK_LEXER(lmNull);
141 	LINK_LEXER(lmOctave);
142 	LINK_LEXER(lmOpal);
143 	LINK_LEXER(lmOScript);
144 	LINK_LEXER(lmPascal);
145 	LINK_LEXER(lmPB);
146 	LINK_LEXER(lmPerl);
147 	LINK_LEXER(lmPHPSCRIPT);
148 	LINK_LEXER(lmPLM);
149 	LINK_LEXER(lmPO);
150 	LINK_LEXER(lmPOV);
151 	LINK_LEXER(lmPowerPro);
152 	LINK_LEXER(lmPowerShell);
153 	LINK_LEXER(lmProgress);
154 	LINK_LEXER(lmProps);
155 	LINK_LEXER(lmPS);
156 	LINK_LEXER(lmPureBasic);
157 	LINK_LEXER(lmPython);
158 	LINK_LEXER(lmR);
159 	LINK_LEXER(lmRaku);
160 	LINK_LEXER(lmREBOL);
161 	LINK_LEXER(lmRegistry);
162 	LINK_LEXER(lmRuby);
163 	LINK_LEXER(lmRust);
164 	LINK_LEXER(lmSAS);
165 	LINK_LEXER(lmScriptol);
166 	LINK_LEXER(lmSmalltalk);
167 	LINK_LEXER(lmSML);
168 	LINK_LEXER(lmSorc);
169 	LINK_LEXER(lmSpecman);
170 	LINK_LEXER(lmSpice);
171 	LINK_LEXER(lmSQL);
172 	LINK_LEXER(lmSrec);
173 	LINK_LEXER(lmStata);
174 	LINK_LEXER(lmSTTXT);
175 	LINK_LEXER(lmTACL);
176 	LINK_LEXER(lmTADS3);
177 	LINK_LEXER(lmTAL);
178 	LINK_LEXER(lmTCL);
179 	LINK_LEXER(lmTCMD);
180 	LINK_LEXER(lmTEHex);
181 	LINK_LEXER(lmTeX);
182 	LINK_LEXER(lmTxt2tags);
183 	LINK_LEXER(lmVB);
184 	LINK_LEXER(lmVBScript);
185 	LINK_LEXER(lmVerilog);
186 	LINK_LEXER(lmVHDL);
187 	LINK_LEXER(lmVisualProlog);
188 	LINK_LEXER(lmX12);
189 	LINK_LEXER(lmXML);
190 	LINK_LEXER(lmYAML);
191 
192 //--Autogenerated -- end of automatically generated section
193 
194 #endif
195 
196 	return 1;
197 }
198