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