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)33const LexerModule *Catalogue::Find(int language) { 34 return catalogueDefault.Find(language); 35 } 36 Find(const char * languageName)37const LexerModule *Catalogue::Find(const char *languageName) noexcept { 38 return catalogueDefault.Find(languageName); 39 } 40 AddLexerModule(LexerModule * plm)41void 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()49int 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