You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
notepad-plus-plus/lexilla/src/Lexilla.cxx

395 lines
9.0 KiB

// Lexilla lexer library
/** @file Lexilla.cxx
** Lexer infrastructure.
** Provides entry points to shared library.
**/
// Copyright 2019 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
#include <cstring>
#include <vector>
#include <initializer_list>
#if defined(_WIN32)
#define EXPORT_FUNCTION __declspec(dllexport)
#define CALLING_CONVENTION __stdcall
#else
#define EXPORT_FUNCTION __attribute__((visibility("default")))
#define CALLING_CONVENTION
#endif
#include "ILexer.h"
#include "LexerModule.h"
#include "CatalogueModules.h"
using namespace Lexilla;
//++Autogenerated -- run lexilla/scripts/LexillaGen.py to regenerate
//**\(extern const LexerModule \*;\n\)
extern const LexerModule lmA68k;
extern const LexerModule lmAbaqus;
extern const LexerModule lmAda;
extern const LexerModule lmAPDL;
extern const LexerModule lmAs;
extern const LexerModule lmAsciidoc;
extern const LexerModule lmAsm;
extern const LexerModule lmAsn1;
extern const LexerModule lmASY;
extern const LexerModule lmAU3;
extern const LexerModule lmAVE;
extern const LexerModule lmAVS;
extern const LexerModule lmBaan;
extern const LexerModule lmBash;
extern const LexerModule lmBatch;
extern const LexerModule lmBibTeX;
extern const LexerModule lmBlitzBasic;
extern const LexerModule lmBullant;
extern const LexerModule lmCaml;
extern const LexerModule lmCIL;
extern const LexerModule lmClw;
extern const LexerModule lmClwNoCase;
extern const LexerModule lmCmake;
extern const LexerModule lmCOBOL;
extern const LexerModule lmCoffeeScript;
extern const LexerModule lmConf;
extern const LexerModule lmCPP;
extern const LexerModule lmCPPNoCase;
extern const LexerModule lmCsound;
extern const LexerModule lmCss;
extern const LexerModule lmD;
extern const LexerModule lmDart;
extern const LexerModule lmDataflex;
extern const LexerModule lmDiff;
extern const LexerModule lmDMAP;
extern const LexerModule lmDMIS;
extern const LexerModule lmECL;
extern const LexerModule lmEDIFACT;
extern const LexerModule lmEiffel;
extern const LexerModule lmEiffelkw;
extern const LexerModule lmErlang;
extern const LexerModule lmErrorList;
extern const LexerModule lmESCRIPT;
extern const LexerModule lmF77;
extern const LexerModule lmFlagShip;
extern const LexerModule lmForth;
extern const LexerModule lmFortran;
extern const LexerModule lmFreeBasic;
extern const LexerModule lmFSharp;
extern const LexerModule lmGAP;
extern const LexerModule lmGDScript;
extern const LexerModule lmGui4Cli;
extern const LexerModule lmHaskell;
extern const LexerModule lmHollywood;
extern const LexerModule lmHTML;
extern const LexerModule lmIHex;
extern const LexerModule lmIndent;
extern const LexerModule lmInno;
extern const LexerModule lmJSON;
extern const LexerModule lmJulia;
extern const LexerModule lmKix;
extern const LexerModule lmKVIrc;
extern const LexerModule lmLatex;
extern const LexerModule lmLISP;
extern const LexerModule lmLiterateHaskell;
extern const LexerModule lmLot;
extern const LexerModule lmLout;
extern const LexerModule lmLua;
extern const LexerModule lmMagikSF;
extern const LexerModule lmMake;
extern const LexerModule lmMarkdown;
extern const LexerModule lmMatlab;
extern const LexerModule lmMaxima;
extern const LexerModule lmMETAPOST;
extern const LexerModule lmMMIXAL;
extern const LexerModule lmModula;
extern const LexerModule lmMSSQL;
extern const LexerModule lmMySQL;
extern const LexerModule lmNim;
extern const LexerModule lmNimrod;
extern const LexerModule lmNncrontab;
extern const LexerModule lmNsis;
extern const LexerModule lmNull;
extern const LexerModule lmOctave;
extern const LexerModule lmOpal;
extern const LexerModule lmOScript;
extern const LexerModule lmPascal;
extern const LexerModule lmPB;
extern const LexerModule lmPerl;
extern const LexerModule lmPHPSCRIPT;
extern const LexerModule lmPLM;
extern const LexerModule lmPO;
extern const LexerModule lmPOV;
extern const LexerModule lmPowerPro;
extern const LexerModule lmPowerShell;
extern const LexerModule lmProgress;
extern const LexerModule lmProps;
extern const LexerModule lmPS;
extern const LexerModule lmPureBasic;
extern const LexerModule lmPython;
extern const LexerModule lmR;
extern const LexerModule lmRaku;
extern const LexerModule lmREBOL;
extern const LexerModule lmRegistry;
extern const LexerModule lmRuby;
extern const LexerModule lmRust;
extern const LexerModule lmSAS;
extern const LexerModule lmScriptol;
extern const LexerModule lmSmalltalk;
extern const LexerModule lmSML;
extern const LexerModule lmSorc;
extern const LexerModule lmSpecman;
extern const LexerModule lmSpice;
extern const LexerModule lmSQL;
extern const LexerModule lmSrec;
extern const LexerModule lmStata;
extern const LexerModule lmSTTXT;
extern const LexerModule lmTACL;
extern const LexerModule lmTADS3;
extern const LexerModule lmTAL;
extern const LexerModule lmTCL;
extern const LexerModule lmTCMD;
extern const LexerModule lmTEHex;
extern const LexerModule lmTeX;
extern const LexerModule lmTOML;
extern const LexerModule lmTroff;
extern const LexerModule lmTxt2tags;
extern const LexerModule lmVB;
extern const LexerModule lmVBScript;
extern const LexerModule lmVerilog;
extern const LexerModule lmVHDL;
extern const LexerModule lmVisualProlog;
extern const LexerModule lmX12;
extern const LexerModule lmXML;
extern const LexerModule lmYAML;
extern const LexerModule lmZig;
//--Autogenerated -- end of automatically generated section
extern const LexerModule lmObjC;
extern const LexerModule lmSearchResult;
extern const LexerModule lmUserDefine;
namespace {
CatalogueModules catalogueLexilla;
void AddEachLexer() {
if (catalogueLexilla.Count() > 0) {
return;
}
catalogueLexilla.AddLexerModules({
//++Autogenerated -- run scripts/LexillaGen.py to regenerate
//**\(\t\t&\*,\n\)
&lmA68k,
&lmAbaqus,
&lmAda,
&lmAPDL,
&lmAs,
&lmAsciidoc,
&lmAsm,
&lmAsn1,
&lmASY,
&lmAU3,
&lmAVE,
&lmAVS,
&lmBaan,
&lmBash,
&lmBatch,
&lmBibTeX,
&lmBlitzBasic,
&lmBullant,
&lmCaml,
&lmCIL,
&lmClw,
&lmClwNoCase,
&lmCmake,
&lmCOBOL,
&lmCoffeeScript,
&lmConf,
&lmCPP,
&lmCPPNoCase,
&lmCsound,
&lmCss,
&lmD,
&lmDart,
&lmDataflex,
&lmDiff,
&lmDMAP,
&lmDMIS,
&lmECL,
&lmEDIFACT,
&lmEiffel,
&lmEiffelkw,
&lmErlang,
&lmErrorList,
&lmESCRIPT,
&lmF77,
&lmFlagShip,
&lmForth,
&lmFortran,
&lmFreeBasic,
&lmFSharp,
&lmGAP,
&lmGDScript,
&lmGui4Cli,
&lmHaskell,
&lmHollywood,
&lmHTML,
&lmIHex,
&lmIndent,
&lmInno,
&lmJSON,
&lmJulia,
&lmKix,
&lmKVIrc,
&lmLatex,
&lmLISP,
&lmLiterateHaskell,
&lmLot,
&lmLout,
&lmLua,
&lmMagikSF,
&lmMake,
&lmMarkdown,
&lmMatlab,
&lmMaxima,
&lmMETAPOST,
&lmMMIXAL,
&lmModula,
&lmMSSQL,
&lmMySQL,
&lmNim,
&lmNimrod,
&lmNncrontab,
&lmNsis,
&lmNull,
&lmOctave,
&lmOpal,
&lmOScript,
&lmPascal,
&lmPB,
&lmPerl,
&lmPHPSCRIPT,
&lmPLM,
&lmPO,
&lmPOV,
&lmPowerPro,
&lmPowerShell,
&lmProgress,
&lmProps,
&lmPS,
&lmPureBasic,
&lmPython,
&lmR,
&lmRaku,
&lmREBOL,
&lmRegistry,
&lmRuby,
&lmRust,
&lmSAS,
&lmScriptol,
&lmSmalltalk,
&lmSML,
&lmSorc,
&lmSpecman,
&lmSpice,
&lmSQL,
&lmSrec,
&lmStata,
&lmSTTXT,
&lmTACL,
&lmTADS3,
&lmTAL,
&lmTCL,
&lmTCMD,
&lmTEHex,
&lmTeX,
&lmTOML,
&lmTroff,
&lmTxt2tags,
&lmVB,
&lmVBScript,
&lmVerilog,
&lmVHDL,
&lmVisualProlog,
&lmX12,
&lmXML,
&lmYAML,
&lmZig,
//--Autogenerated -- end of automatically generated section
&lmObjC,
&lmSearchResult,
&lmUserDefine,
});
}
}
extern "C" {
EXPORT_FUNCTION int CALLING_CONVENTION GetLexerCount() {
AddEachLexer();
return static_cast<int>(catalogueLexilla.Count());
}
EXPORT_FUNCTION void CALLING_CONVENTION GetLexerName(unsigned int index, char *name, int buflength) {
AddEachLexer();
*name = 0;
const char *lexerName = catalogueLexilla.Name(index);
if (static_cast<size_t>(buflength) > strlen(lexerName)) {
strcpy(name, lexerName);
}
}
EXPORT_FUNCTION LexerFactoryFunction CALLING_CONVENTION GetLexerFactory(unsigned int index) {
AddEachLexer();
return catalogueLexilla.Factory(index);
}
EXPORT_FUNCTION Scintilla::ILexer5 * CALLING_CONVENTION CreateLexer(const char *name) {
AddEachLexer();
for (size_t i = 0; i < catalogueLexilla.Count(); i++) {
const char *lexerName = catalogueLexilla.Name(i);
if (0 == strcmp(lexerName, name)) {
return catalogueLexilla.Create(i);
}
}
return nullptr;
}
EXPORT_FUNCTION const char * CALLING_CONVENTION LexerNameFromID(int identifier) {
AddEachLexer();
const LexerModule *pModule = catalogueLexilla.Find(identifier);
if (pModule) {
return pModule->languageName;
}
return nullptr;
}
EXPORT_FUNCTION const char * CALLING_CONVENTION GetLibraryPropertyNames() {
return "";
}
EXPORT_FUNCTION void CALLING_CONVENTION SetLibraryProperty(const char *, const char *) {
// Null implementation
}
EXPORT_FUNCTION const char * CALLING_CONVENTION GetNameSpace() {
return "lexilla";
}
}
// Not exported from binary as LexerModule must be built exactly the same as
// modules listed above
void AddStaticLexerModule(const LexerModule *plm) {
AddEachLexer();
catalogueLexilla.AddLexerModule(plm);
}