fix lite_xl_plugin_api.h

This fixes a longstanding bug with the plugin API.
This commit is not complete, further polish is still needed.
This commit is contained in:
takase1121 2021-11-05 22:42:52 +08:00
parent dd9fc72fbd
commit 46f9bcb90c
No known key found for this signature in database
GPG Key ID: 60EEFFC68EB3031B
3 changed files with 592 additions and 309 deletions

View File

@ -1,105 +1,142 @@
#ifndef LITE_XL_PLUGIN_API /**
#define LITE_XL_PLUGIN_API
/*
The lite_xl plugin API is quite simple. Any shared library can be a plugin file, so long The lite_xl plugin API is quite simple. Any shared library can be a plugin file, so long
as it has an entrypoint that looks like the following, where xxxxx is the plugin name: as it has an entrypoint that looks like the following, where xxxxx is the plugin name:
#include "lite_xl_plugin_api.h" #include "lite_xl_plugin_api.h"
int lua_open_lite_xl_xxxxx(lua_State* L, void* XL) { int lua_open_lite_xl_xxxxx(lua_State* L, void* XL) {
lite_xl_plugin_init(XL); lite_xl_plugin_init(XL);
... ...
return 1; return 1;
} }
In linux, to compile this file, you'd do: 'gcc -o xxxxx.so -shared xxxxx.c'. Simple! In linux, to compile this file, you'd do: 'gcc -o xxxxx.so -shared xxxxx.c'. Simple!
Due to the way the API is structured, you *should not* link or include lua libraries. Due to the way the API is structured, you *should not* link or include lua libraries.
This file was automatically generated by the below code. Do NOT MODIFY DIRECTLY. This file was automatically generated by the below code. Do NOT MODIFY DIRECTLY.
#!/bin/sh #!/bin/bash
echo "#ifndef LITE_XL_PLUGIN_API"
echo "#define LITE_XL_PLUGIN_API" # https://stackoverflow.com/a/13062682
echo "/* " uncomment() {
echo "The lite_xl plugin API is quite simple. Any shared library can be a plugin file, so long" [ $# -eq 2 ] && arg="$1" || arg=""
echo "as it has an entrypoint that looks like the following, where xxxxx is the plugin name:" eval file="\$$#"
echo sed 's/a/aA/g; s/__/aB/g; s/#/aC/g' "$file" | \
echo '#include "lite_xl_plugin_api.h"' gcc -P -E $arg - | \
echo sed 's/aC/#/g; s/aB/__/g; s/aA/a/g'
echo "int lua_open_lite_xl_xxxxx(lua_State* L, void* XL) {" }
echo " lite_xl_plugin_init(XL);"
echo " ..." # this is the magic that turns multiline statements into
echo " return 1;" # single line statements
echo "}" # LITERALLY DOES NOT WORK WITH PREPROCESSOR
echo onelineize() {
echo "In linux, to compile this file, you'd do: 'gcc -o xxxxx.so -shared xxxxx.c'. Simple!" grep -v '^#' | sed -e ':r;$!{N;br};s/\([^{;]\)\n\s*/\1 /g'
echo "Due to the way the API is structured, you *should not* link or include lua libraries." }
echo
echo "This file was automatically generated by the below code. Do NOT MODIFY DIRECTLY." discard_preprocessors() {
echo grep -v '#\(include\|if\|endif\)'
echo }
cat $0
echo "*""/" # sed regex for extracting data from function signature
echo "#include <stddef.h>" # if this isn't regex, idk what is
echo "typedef struct lua_State lua_State; typedef double lua_Number; typedef int (*lua_CFunction)(lua_State*); typedef ptrdiff_t lua_Integer;" # LUA_API (return type as \2) (function name as \3) (args as \4)
echo "typedef unsigned long lua_Unsigned; typedef struct luaL_Buffer luaL_Buffer; typedef struct luaL_Reg luaL_Reg; typedef struct lua_Debug lua_Debug;" sym_regex='^LUA\(LIB\)\?_API\s\+\([^(]\+\)\s*(\([^)]\+\))\s\+(\([^)]\+\))'
echo "typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);"
echo "typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);" # get funcptr declarations
echo "typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud);" ptrize() {
LUA_HEADERS=`pkg-config --cflags lua5.2 | sed 's/^-I//' | sed 's/$/\/*.h/'` grep '^LUA' | sed -e "s/$sym_regex/static \2(*\3) (\4)/"
grep -h "^LUA\(LIB\)*_API" $LUA_HEADERS | sed "s/LUA\(LIB\)*_API //" | sed "s/(lua/(*lua/" | grep -v ",\s*$" | sed "s/^/static /" }
grep -h "#define luaL*_" $LUA_HEADERS | grep -v "\\\s*$" | grep -v "\(assert\|lock\)" | grep -v "\(asm\|int32\)" | grep -v "#define lua_number2integer(i,n)\s*lua_number2int(i, n)"
echo "#define lua_pushliteral(L, s) lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1)" export_sym() {
echo "#define lua_pushglobaltable(L) lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS)" # don't even bother reading this again
echo "#define IMPORT_SYMBOL(name, ret, ...) name = (ret (*)(__VA_ARGS__))symbol(#name)" grep '^LUA' | sed -e "s/$sym_regex/\tIMPORT_SYMBOL(\3, \2, \4)/"
echo "static void lite_xl_plugin_init(void* XL) {" }
echo "\tvoid* (*symbol)(const char*) = (void* (*)(const char*))XL;"
grep -h "^LUA\(LIB\)*_API" $LUA_HEADERS | sed "s/LUA\(LIB\)*_API //" | sed "s/(lua/(*lua/" | grep -v ",\s*$" | sed "s/^\([^)]*\)(\*\(lua\w*\))\s*(/\tIMPORT_SYMBOL(\2, \1,/" decl() {
header="$(uncomment $1 | discard_preprocessors)"
header1="$(onelineize <<< "$header")"
# typedef
grep -v '^\(LUA\|#\|extern\)' <<< "$header1"
# funcptrs
ptrize <<< "$header1"
# defines
grep '^#' <<< "$header"
}
decl_export() {
uncomment $1 | onelineize | export_sym
}
LUA_PATH="$1"
cat << EOF
/**
The lite_xl plugin API is quite simple. Any shared library can be a plugin file, so long
as it has an entrypoint that looks like the following, where xxxxx is the plugin name:
#include "lite_xl_plugin_api.h"
int lua_open_lite_xl_xxxxx(lua_State* L, void* XL) {
lite_xl_plugin_init(XL);
...
return 1;
}
In linux, to compile this file, you'd do: 'gcc -o xxxxx.so -shared xxxxx.c'. Simple!
Due to the way the API is structured, you *should not* link or include lua libraries.
This file was automatically generated by the below code. Do NOT MODIFY DIRECTLY.
EOF
cat "$0"
cat << EOF
**/
#ifndef LITE_XL_PLUGIN_API
#define LITE_XL_PLUGIN_API
EOF
decl "$LUA_PATH/lua.h"
decl "$LUA_PATH/lauxlib.h"
echo "#define IMPORT_SYMBOL(name, ret, ...) name = (ret (*) (__VA_ARGS__)) symbol(#name)"
echo "static void lite_xl_plugin_init(void *XL) {"
echo -e "\tvoid* (*symbol)(const char *) = (void* (*) (const char *)) XL;"
decl_export "$LUA_PATH/lua.h"
decl_export "$LUA_PATH/lauxlib.h"
echo "}" echo "}"
echo "#endif" echo "#endif"
*/ **/
#include <stddef.h>
typedef struct lua_State lua_State; typedef double lua_Number; typedef int (*lua_CFunction)(lua_State*); typedef ptrdiff_t lua_Integer;
typedef unsigned long lua_Unsigned; typedef struct luaL_Buffer luaL_Buffer; typedef struct luaL_Reg luaL_Reg; typedef struct lua_Debug lua_Debug; #ifndef LITE_XL_PLUGIN_API
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); #define LITE_XL_PLUGIN_API
typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); typedef struct lua_State lua_State;
typedef int (*lua_CFunction) (lua_State *L);
typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz);
typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud);
static void (*luaL_checkversion_) (lua_State *L, lua_Number ver); typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);
static int (*luaL_getmetafield) (lua_State *L, int obj, const char *e); typedef LUA_NUMBER lua_Number;
static int (*luaL_callmeta) (lua_State *L, int obj, const char *e); typedef LUA_INTEGER lua_Integer;
static const char *(*luaL_tolstring) (lua_State *L, int idx, size_t *len); typedef LUA_UNSIGNED lua_Unsigned;
static int (*luaL_argerror) (lua_State *L, int numarg, const char *extramsg); typedef struct lua_Debug lua_Debug;
static lua_Number (*luaL_checknumber) (lua_State *L, int numArg); typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
static lua_Number (*luaL_optnumber) (lua_State *L, int nArg, lua_Number def); struct lua_Debug {
static lua_Integer (*luaL_checkinteger) (lua_State *L, int numArg); int event;
static lua_Unsigned (*luaL_checkunsigned) (lua_State *L, int numArg); const char *name;
static void (*luaL_checkstack) (lua_State *L, int sz, const char *msg); const char *namewhat;
static void (*luaL_checktype) (lua_State *L, int narg, int t); const char *what;
static void (*luaL_checkany) (lua_State *L, int narg); const char *source;
static int (*luaL_newmetatable) (lua_State *L, const char *tname); int currentline;
static void (*luaL_setmetatable) (lua_State *L, const char *tname); int linedefined;
static void *(*luaL_testudata) (lua_State *L, int ud, const char *tname); int lastlinedefined;
static void *(*luaL_checkudata) (lua_State *L, int ud, const char *tname); unsigned char nups;
static void (*luaL_where) (lua_State *L, int lvl); unsigned char nparams;
static int (*luaL_error) (lua_State *L, const char *fmt, ...); char isvararg;
static int (*luaL_fileresult) (lua_State *L, int stat, const char *fname); char istailcall;
static int (*luaL_execresult) (lua_State *L, int stat); char short_src[LUA_IDSIZE];
static int (*luaL_ref) (lua_State *L, int t); struct CallInfo *i_ci;
static void (*luaL_unref) (lua_State *L, int t, int ref); };
static int (*luaL_loadstring) (lua_State *L, const char *s);
static lua_State *(*luaL_newstate) (void);
static int (*luaL_len) (lua_State *L, int idx);
static void (*luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
static int (*luaL_getsubtable) (lua_State *L, int idx, const char *fname);
static void (*luaL_buffinit) (lua_State *L, luaL_Buffer *B);
static char *(*luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
static void (*luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
static void (*luaL_addstring) (luaL_Buffer *B, const char *s);
static void (*luaL_addvalue) (luaL_Buffer *B);
static void (*luaL_pushresult) (luaL_Buffer *B);
static void (*luaL_pushresultsize) (luaL_Buffer *B, size_t sz);
static char *(*luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz);
static lua_State *(*lua_newstate) (lua_Alloc f, void *ud); static lua_State *(*lua_newstate) (lua_Alloc f, void *ud);
static void (*lua_close) (lua_State *L); static void (*lua_close) (lua_State *L);
static lua_State *(*lua_newthread) (lua_State *L); static lua_State *(*lua_newthread) (lua_State *L);
@ -140,6 +177,7 @@ static void (*lua_pushinteger) (lua_State *L, lua_Integer n);
static void (*lua_pushunsigned) (lua_State *L, lua_Unsigned n); static void (*lua_pushunsigned) (lua_State *L, lua_Unsigned n);
static const char *(*lua_pushlstring) (lua_State *L, const char *s, size_t l); static const char *(*lua_pushlstring) (lua_State *L, const char *s, size_t l);
static const char *(*lua_pushstring) (lua_State *L, const char *s); static const char *(*lua_pushstring) (lua_State *L, const char *s);
static const char *(*lua_pushvfstring) (lua_State *L, const char *fmt, va_list argp);
static const char *(*lua_pushfstring) (lua_State *L, const char *fmt, ...); static const char *(*lua_pushfstring) (lua_State *L, const char *fmt, ...);
static void (*lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); static void (*lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n);
static void (*lua_pushboolean) (lua_State *L, int b); static void (*lua_pushboolean) (lua_State *L, int b);
@ -163,8 +201,12 @@ static void (*lua_rawseti) (lua_State *L, int idx, int n);
static void (*lua_rawsetp) (lua_State *L, int idx, const void *p); static void (*lua_rawsetp) (lua_State *L, int idx, const void *p);
static int (*lua_setmetatable) (lua_State *L, int objindex); static int (*lua_setmetatable) (lua_State *L, int objindex);
static void (*lua_setuservalue) (lua_State *L, int idx); static void (*lua_setuservalue) (lua_State *L, int idx);
static void (*lua_callk) (lua_State *L, int nargs, int nresults, int ctx, lua_CFunction k);
static int (*lua_getctx) (lua_State *L, int *ctx); static int (*lua_getctx) (lua_State *L, int *ctx);
static int (*lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc, int ctx, lua_CFunction k);
static int (*lua_load) (lua_State *L, lua_Reader reader, void *dt, const char *chunkname, const char *mode);
static int (*lua_dump) (lua_State *L, lua_Writer writer, void *data); static int (*lua_dump) (lua_State *L, lua_Writer writer, void *data);
static int (*lua_yieldk) (lua_State *L, int nresults, int ctx, lua_CFunction k);
static int (*lua_resume) (lua_State *L, lua_State *from, int narg); static int (*lua_resume) (lua_State *L, lua_State *from, int narg);
static int (*lua_status) (lua_State *L); static int (*lua_status) (lua_State *L);
static int (*lua_gc) (lua_State *L, int what, int data); static int (*lua_gc) (lua_State *L, int what, int data);
@ -181,32 +223,71 @@ static const char *(*lua_setlocal) (lua_State *L, const lua_Debug *ar, int n);
static const char *(*lua_getupvalue) (lua_State *L, int funcindex, int n); static const char *(*lua_getupvalue) (lua_State *L, int funcindex, int n);
static const char *(*lua_setupvalue) (lua_State *L, int funcindex, int n); static const char *(*lua_setupvalue) (lua_State *L, int funcindex, int n);
static void *(*lua_upvalueid) (lua_State *L, int fidx, int n); static void *(*lua_upvalueid) (lua_State *L, int fidx, int n);
static void (*lua_upvaluejoin) (lua_State *L, int fidx1, int n1, int fidx2, int n2);
static int (*lua_sethook) (lua_State *L, lua_Hook func, int mask, int count); static int (*lua_sethook) (lua_State *L, lua_Hook func, int mask, int count);
static lua_Hook (*lua_gethook) (lua_State *L); static lua_Hook (*lua_gethook) (lua_State *L);
static int (*lua_gethookmask) (lua_State *L); static int (*lua_gethookmask) (lua_State *L);
static int (*lua_gethookcount) (lua_State *L); static int (*lua_gethookcount) (lua_State *L);
static void (*luaL_openlibs) (lua_State *L);
#define luaL_checkversion(L) luaL_checkversion_(L, LUA_VERSION_NUM)
#define luaL_loadfile(L,f) luaL_loadfilex(L,f,NULL)
#define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL))
#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL))
#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n)))
#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d)))
#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n)))
#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d)))
#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i)))
#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
#define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL)
#define luaL_addsize(B,s) ((B)->n += (s))
#define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE)
#define luaL_register(L,n,l) (luaL_openlib(L,(n),(l),0))
#define lua_h #define lua_h
#define LUA_VERSION_MAJOR "5"
#define LUA_VERSION_MINOR "2"
#define LUA_VERSION_NUM 502
#define LUA_VERSION_RELEASE "4"
#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE
#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2015 Lua.org, PUC-Rio"
#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes"
#define LUA_SIGNATURE "\033Lua"
#define LUA_MULTRET (-1)
#define LUA_REGISTRYINDEX LUAI_FIRSTPSEUDOIDX
#define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i)) #define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i))
#define LUA_OK 0
#define LUA_YIELD 1
#define LUA_ERRRUN 2
#define LUA_ERRSYNTAX 3
#define LUA_ERRMEM 4
#define LUA_ERRGCMM 5
#define LUA_ERRERR 6
#define LUA_TNONE (-1)
#define LUA_TNIL 0
#define LUA_TBOOLEAN 1
#define LUA_TLIGHTUSERDATA 2
#define LUA_TNUMBER 3
#define LUA_TSTRING 4
#define LUA_TTABLE 5
#define LUA_TFUNCTION 6
#define LUA_TUSERDATA 7
#define LUA_TTHREAD 8
#define LUA_NUMTAGS 9
#define LUA_MINSTACK 20
#define LUA_RIDX_MAINTHREAD 1
#define LUA_RIDX_GLOBALS 2
#define LUA_RIDX_LAST LUA_RIDX_GLOBALS
#define LUA_OPADD 0
#define LUA_OPSUB 1
#define LUA_OPMUL 2
#define LUA_OPDIV 3
#define LUA_OPMOD 4
#define LUA_OPPOW 5
#define LUA_OPUNM 6
#define LUA_OPEQ 0
#define LUA_OPLT 1
#define LUA_OPLE 2
#define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL) #define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL)
#define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL) #define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL)
#define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL) #define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL)
#define LUA_GCSTOP 0
#define LUA_GCRESTART 1
#define LUA_GCCOLLECT 2
#define LUA_GCCOUNT 3
#define LUA_GCCOUNTB 4
#define LUA_GCSTEP 5
#define LUA_GCSETPAUSE 6
#define LUA_GCSETSTEPMUL 7
#define LUA_GCSETMAJORINC 8
#define LUA_GCISRUNNING 9
#define LUA_GCGEN 10
#define LUA_GCINC 11
#define lua_tonumber(L,i) lua_tonumberx(L,i,NULL) #define lua_tonumber(L,i) lua_tonumberx(L,i,NULL)
#define lua_tointeger(L,i) lua_tointegerx(L,i,NULL) #define lua_tointeger(L,i) lua_tointegerx(L,i,NULL)
#define lua_tounsigned(L,i) lua_tounsignedx(L,i,NULL) #define lua_tounsigned(L,i) lua_tounsignedx(L,i,NULL)
@ -222,139 +303,246 @@ static void (*luaL_openlibs) (lua_State *L);
#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) #define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD)
#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) #define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE)
#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) #define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0)
#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) #define lua_pushliteral(L, s) lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1)
#define lua_strlen(L,i) lua_rawlen(L, (i))
#define lua_objlen(L,i) lua_rawlen(L, (i))
#define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ)
#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT)
#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n))
#define lua_str2number(s,p) strtod((s), (p))
#define lua_strx2number(s,p) strtod((s), (p))
#define lua_pushliteral(L, s) lua_pushlstring(L, s, (sizeof(s)/sizeof(char))-1)
#define lua_pushglobaltable(L) lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS) #define lua_pushglobaltable(L) lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS)
#define IMPORT_SYMBOL(name, ret, ...) name = (ret (*)(__VA_ARGS__))symbol(#name) #define lua_tostring(L,i) lua_tolstring(L, (i), NULL)
static void lite_xl_plugin_init(void* XL) { #define LUA_HOOKCALL 0
void* (*symbol)(const char*) = (void* (*)(const char*))XL; #define LUA_HOOKRET 1
IMPORT_SYMBOL(luaL_checkversion_, void ,lua_State *L, lua_Number ver); #define LUA_HOOKLINE 2
IMPORT_SYMBOL(luaL_getmetafield, int ,lua_State *L, int obj, const char *e); #define LUA_HOOKCOUNT 3
IMPORT_SYMBOL(luaL_callmeta, int ,lua_State *L, int obj, const char *e); #define LUA_HOOKTAILCALL 4
IMPORT_SYMBOL(luaL_tolstring, const char *,lua_State *L, int idx, size_t *len); #define LUA_MASKCALL (1 << LUA_HOOKCALL)
IMPORT_SYMBOL(luaL_argerror, int ,lua_State *L, int numarg, const char *extramsg); #define LUA_MASKRET (1 << LUA_HOOKRET)
IMPORT_SYMBOL(luaL_checknumber, lua_Number ,lua_State *L, int numArg); #define LUA_MASKLINE (1 << LUA_HOOKLINE)
IMPORT_SYMBOL(luaL_optnumber, lua_Number ,lua_State *L, int nArg, lua_Number def); #define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT)
IMPORT_SYMBOL(luaL_checkinteger, lua_Integer ,lua_State *L, int numArg); typedef struct luaL_Reg {
IMPORT_SYMBOL(luaL_checkunsigned, lua_Unsigned ,lua_State *L, int numArg); const char *name;
IMPORT_SYMBOL(luaL_checkstack, void ,lua_State *L, int sz, const char *msg); lua_CFunction func;
IMPORT_SYMBOL(luaL_checktype, void ,lua_State *L, int narg, int t); } luaL_Reg;
IMPORT_SYMBOL(luaL_checkany, void ,lua_State *L, int narg); typedef struct luaL_Buffer {
IMPORT_SYMBOL(luaL_newmetatable, int ,lua_State *L, const char *tname); char *b;
IMPORT_SYMBOL(luaL_setmetatable, void ,lua_State *L, const char *tname); size_t size;
IMPORT_SYMBOL(luaL_testudata, void *,lua_State *L, int ud, const char *tname); size_t n;
IMPORT_SYMBOL(luaL_checkudata, void *,lua_State *L, int ud, const char *tname); lua_State *L;
IMPORT_SYMBOL(luaL_where, void ,lua_State *L, int lvl); char initb[LUAL_BUFFERSIZE];
IMPORT_SYMBOL(luaL_error, int ,lua_State *L, const char *fmt, ...); } luaL_Buffer;
IMPORT_SYMBOL(luaL_fileresult, int ,lua_State *L, int stat, const char *fname); typedef struct luaL_Stream {
IMPORT_SYMBOL(luaL_execresult, int ,lua_State *L, int stat); FILE *f;
IMPORT_SYMBOL(luaL_ref, int ,lua_State *L, int t); lua_CFunction closef;
IMPORT_SYMBOL(luaL_unref, void ,lua_State *L, int t, int ref); } luaL_Stream;
IMPORT_SYMBOL(luaL_loadstring, int ,lua_State *L, const char *s); static void (*luaL_checkversion_) (lua_State *L, lua_Number ver);
IMPORT_SYMBOL(luaL_newstate, lua_State *,void); static int (*luaL_getmetafield) (lua_State *L, int obj, const char *e);
IMPORT_SYMBOL(luaL_len, int ,lua_State *L, int idx); static int (*luaL_callmeta) (lua_State *L, int obj, const char *e);
IMPORT_SYMBOL(luaL_setfuncs, void ,lua_State *L, const luaL_Reg *l, int nup); static const char *(*luaL_tolstring) (lua_State *L, int idx, size_t *len);
IMPORT_SYMBOL(luaL_getsubtable, int ,lua_State *L, int idx, const char *fname); static int (*luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
IMPORT_SYMBOL(luaL_buffinit, void ,lua_State *L, luaL_Buffer *B); static const char *(*luaL_checklstring) (lua_State *L, int numArg, size_t *l);
IMPORT_SYMBOL(luaL_prepbuffsize, char *,luaL_Buffer *B, size_t sz); static const char *(*luaL_optlstring) (lua_State *L, int numArg, const char *def, size_t *l);
IMPORT_SYMBOL(luaL_addlstring, void ,luaL_Buffer *B, const char *s, size_t l); static lua_Number (*luaL_checknumber) (lua_State *L, int numArg);
IMPORT_SYMBOL(luaL_addstring, void ,luaL_Buffer *B, const char *s); static lua_Number (*luaL_optnumber) (lua_State *L, int nArg, lua_Number def);
IMPORT_SYMBOL(luaL_addvalue, void ,luaL_Buffer *B); static lua_Integer (*luaL_checkinteger) (lua_State *L, int numArg);
IMPORT_SYMBOL(luaL_pushresult, void ,luaL_Buffer *B); static lua_Integer (*luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
IMPORT_SYMBOL(luaL_pushresultsize, void ,luaL_Buffer *B, size_t sz); static lua_Unsigned (*luaL_checkunsigned) (lua_State *L, int numArg);
IMPORT_SYMBOL(luaL_buffinitsize, char *,lua_State *L, luaL_Buffer *B, size_t sz); static lua_Unsigned (*luaL_optunsigned) (lua_State *L, int numArg, lua_Unsigned def);
IMPORT_SYMBOL(lua_newstate, lua_State *,lua_Alloc f, void *ud); static void (*luaL_checkstack) (lua_State *L, int sz, const char *msg);
IMPORT_SYMBOL(lua_close, void ,lua_State *L); static void (*luaL_checktype) (lua_State *L, int narg, int t);
IMPORT_SYMBOL(lua_newthread, lua_State *,lua_State *L); static void (*luaL_checkany) (lua_State *L, int narg);
IMPORT_SYMBOL(lua_atpanic, lua_CFunction ,lua_State *L, lua_CFunction panicf); static int (*luaL_newmetatable) (lua_State *L, const char *tname);
IMPORT_SYMBOL(lua_version, const lua_Number *,lua_State *L); static void (*luaL_setmetatable) (lua_State *L, const char *tname);
IMPORT_SYMBOL(lua_absindex, int ,lua_State *L, int idx); static void *(*luaL_testudata) (lua_State *L, int ud, const char *tname);
IMPORT_SYMBOL(lua_gettop, int ,lua_State *L); static void *(*luaL_checkudata) (lua_State *L, int ud, const char *tname);
IMPORT_SYMBOL(lua_settop, void ,lua_State *L, int idx); static void (*luaL_where) (lua_State *L, int lvl);
IMPORT_SYMBOL(lua_pushvalue, void ,lua_State *L, int idx); static int (*luaL_error) (lua_State *L, const char *fmt, ...);
IMPORT_SYMBOL(lua_remove, void ,lua_State *L, int idx); static int (*luaL_checkoption) (lua_State *L, int narg, const char *def, const char *const lst[]);
IMPORT_SYMBOL(lua_insert, void ,lua_State *L, int idx); static int (*luaL_fileresult) (lua_State *L, int stat, const char *fname);
IMPORT_SYMBOL(lua_replace, void ,lua_State *L, int idx); static int (*luaL_execresult) (lua_State *L, int stat);
IMPORT_SYMBOL(lua_copy, void ,lua_State *L, int fromidx, int toidx); static int (*luaL_ref) (lua_State *L, int t);
IMPORT_SYMBOL(lua_checkstack, int ,lua_State *L, int sz); static void (*luaL_unref) (lua_State *L, int t, int ref);
IMPORT_SYMBOL(lua_xmove, void ,lua_State *from, lua_State *to, int n); static int (*luaL_loadfilex) (lua_State *L, const char *filename, const char *mode);
IMPORT_SYMBOL(lua_isnumber, int ,lua_State *L, int idx); static int (*luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
IMPORT_SYMBOL(lua_isstring, int ,lua_State *L, int idx); static int (*luaL_loadstring) (lua_State *L, const char *s);
IMPORT_SYMBOL(lua_iscfunction, int ,lua_State *L, int idx); static lua_State *(*luaL_newstate) (void);
IMPORT_SYMBOL(lua_isuserdata, int ,lua_State *L, int idx); static int (*luaL_len) (lua_State *L, int idx);
IMPORT_SYMBOL(lua_type, int ,lua_State *L, int idx); static const char *(*luaL_gsub) (lua_State *L, const char *s, const char *p, const char *r);
IMPORT_SYMBOL(lua_typename, const char *,lua_State *L, int tp); static void (*luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
IMPORT_SYMBOL(lua_tonumberx, lua_Number ,lua_State *L, int idx, int *isnum); static int (*luaL_getsubtable) (lua_State *L, int idx, const char *fname);
IMPORT_SYMBOL(lua_tointegerx, lua_Integer ,lua_State *L, int idx, int *isnum); static void (*luaL_traceback) (lua_State *L, lua_State *L1, const char *msg, int level);
IMPORT_SYMBOL(lua_tounsignedx, lua_Unsigned ,lua_State *L, int idx, int *isnum); static void (*luaL_requiref) (lua_State *L, const char *modname, lua_CFunction openf, int glb);
IMPORT_SYMBOL(lua_toboolean, int ,lua_State *L, int idx); static void (*luaL_buffinit) (lua_State *L, luaL_Buffer *B);
IMPORT_SYMBOL(lua_tolstring, const char *,lua_State *L, int idx, size_t *len); static char *(*luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
IMPORT_SYMBOL(lua_rawlen, size_t ,lua_State *L, int idx); static void (*luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
IMPORT_SYMBOL(lua_tocfunction, lua_CFunction ,lua_State *L, int idx); static void (*luaL_addstring) (luaL_Buffer *B, const char *s);
IMPORT_SYMBOL(lua_touserdata, void *,lua_State *L, int idx); static void (*luaL_addvalue) (luaL_Buffer *B);
IMPORT_SYMBOL(lua_tothread, lua_State *,lua_State *L, int idx); static void (*luaL_pushresult) (luaL_Buffer *B);
IMPORT_SYMBOL(lua_topointer, const void *,lua_State *L, int idx); static void (*luaL_pushresultsize) (luaL_Buffer *B, size_t sz);
IMPORT_SYMBOL(lua_arith, void ,lua_State *L, int op); static char *(*luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz);
IMPORT_SYMBOL(lua_rawequal, int ,lua_State *L, int idx1, int idx2); static void (*luaL_pushmodule) (lua_State *L, const char *modname, int sizehint);
IMPORT_SYMBOL(lua_compare, int ,lua_State *L, int idx1, int idx2, int op); static void (*luaL_openlib) (lua_State *L, const char *libname, const luaL_Reg *l, int nup);
IMPORT_SYMBOL(lua_pushnil, void ,lua_State *L); #define lauxlib_h
IMPORT_SYMBOL(lua_pushnumber, void ,lua_State *L, lua_Number n); #define LUA_ERRFILE (LUA_ERRERR+1)
IMPORT_SYMBOL(lua_pushinteger, void ,lua_State *L, lua_Integer n); #define luaL_checkversion(L) luaL_checkversion_(L, LUA_VERSION_NUM)
IMPORT_SYMBOL(lua_pushunsigned, void ,lua_State *L, lua_Unsigned n); #define LUA_NOREF (-2)
IMPORT_SYMBOL(lua_pushlstring, const char *,lua_State *L, const char *s, size_t l); #define LUA_REFNIL (-1)
IMPORT_SYMBOL(lua_pushstring, const char *,lua_State *L, const char *s); #define luaL_loadfile(L,f) luaL_loadfilex(L,f,NULL)
IMPORT_SYMBOL(lua_pushfstring, const char *,lua_State *L, const char *fmt, ...); #define luaL_newlibtable(L,l) lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1)
IMPORT_SYMBOL(lua_pushcclosure, void ,lua_State *L, lua_CFunction fn, int n); #define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
IMPORT_SYMBOL(lua_pushboolean, void ,lua_State *L, int b); #define luaL_argcheck(L, cond,numarg,extramsg) ((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))
IMPORT_SYMBOL(lua_pushlightuserdata, void ,lua_State *L, void *p); #define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL))
IMPORT_SYMBOL(lua_pushthread, int ,lua_State *L); #define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL))
IMPORT_SYMBOL(lua_getglobal, void ,lua_State *L, const char *var); #define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n)))
IMPORT_SYMBOL(lua_gettable, void ,lua_State *L, int idx); #define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d)))
IMPORT_SYMBOL(lua_getfield, void ,lua_State *L, int idx, const char *k); #define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n)))
IMPORT_SYMBOL(lua_rawget, void ,lua_State *L, int idx); #define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d)))
IMPORT_SYMBOL(lua_rawgeti, void ,lua_State *L, int idx, int n); #define luaL_typename(L,i) lua_typename(L, lua_type(L,(i)))
IMPORT_SYMBOL(lua_rawgetp, void ,lua_State *L, int idx, const void *p); #define luaL_dofile(L, fn) (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))
IMPORT_SYMBOL(lua_createtable, void ,lua_State *L, int narr, int nrec); #define luaL_dostring(L, s) (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))
IMPORT_SYMBOL(lua_newuserdata, void *,lua_State *L, size_t sz); #define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
IMPORT_SYMBOL(lua_getmetatable, int ,lua_State *L, int objindex); #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))
IMPORT_SYMBOL(lua_getuservalue, void ,lua_State *L, int idx); #define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL)
IMPORT_SYMBOL(lua_setglobal, void ,lua_State *L, const char *var); #define luaL_addchar(B,c) ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), ((B)->b[(B)->n++] = (c)))
IMPORT_SYMBOL(lua_settable, void ,lua_State *L, int idx); #define luaL_addsize(B,s) ((B)->n += (s))
IMPORT_SYMBOL(lua_setfield, void ,lua_State *L, int idx, const char *k); #define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE)
IMPORT_SYMBOL(lua_rawset, void ,lua_State *L, int idx); #define LUA_FILEHANDLE "FILE*"
IMPORT_SYMBOL(lua_rawseti, void ,lua_State *L, int idx, int n); #define luaL_register(L,n,l) (luaL_openlib(L,(n),(l),0))
IMPORT_SYMBOL(lua_rawsetp, void ,lua_State *L, int idx, const void *p); #define IMPORT_SYMBOL(name, ret, ...) name = (ret (*) (__VA_ARGS__)) symbol(#name)
IMPORT_SYMBOL(lua_setmetatable, int ,lua_State *L, int objindex); static void lite_xl_plugin_init(void *XL) {
IMPORT_SYMBOL(lua_setuservalue, void ,lua_State *L, int idx); void* (*symbol)(const char *) = (void* (*) (const char *)) XL;
IMPORT_SYMBOL(lua_getctx, int ,lua_State *L, int *ctx); IMPORT_SYMBOL(lua_newstate, lua_State *, lua_Alloc f, void *ud);
IMPORT_SYMBOL(lua_dump, int ,lua_State *L, lua_Writer writer, void *data); IMPORT_SYMBOL(lua_close, void , lua_State *L);
IMPORT_SYMBOL(lua_resume, int ,lua_State *L, lua_State *from, int narg); IMPORT_SYMBOL(lua_newthread, lua_State *, lua_State *L);
IMPORT_SYMBOL(lua_status, int ,lua_State *L); IMPORT_SYMBOL(lua_atpanic, lua_CFunction , lua_State *L, lua_CFunction panicf);
IMPORT_SYMBOL(lua_gc, int ,lua_State *L, int what, int data); IMPORT_SYMBOL(lua_version, const lua_Number *, lua_State *L);
IMPORT_SYMBOL(lua_error, int ,lua_State *L); IMPORT_SYMBOL(lua_absindex, int , lua_State *L, int idx);
IMPORT_SYMBOL(lua_next, int ,lua_State *L, int idx); IMPORT_SYMBOL(lua_gettop, int , lua_State *L);
IMPORT_SYMBOL(lua_concat, void ,lua_State *L, int n); IMPORT_SYMBOL(lua_settop, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_len, void ,lua_State *L, int idx); IMPORT_SYMBOL(lua_pushvalue, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_getallocf, lua_Alloc ,lua_State *L, void **ud); IMPORT_SYMBOL(lua_remove, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_setallocf, void ,lua_State *L, lua_Alloc f, void *ud); IMPORT_SYMBOL(lua_insert, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_getstack, int ,lua_State *L, int level, lua_Debug *ar); IMPORT_SYMBOL(lua_replace, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_getinfo, int ,lua_State *L, const char *what, lua_Debug *ar); IMPORT_SYMBOL(lua_copy, void , lua_State *L, int fromidx, int toidx);
IMPORT_SYMBOL(lua_getlocal, const char *,lua_State *L, const lua_Debug *ar, int n); IMPORT_SYMBOL(lua_checkstack, int , lua_State *L, int sz);
IMPORT_SYMBOL(lua_setlocal, const char *,lua_State *L, const lua_Debug *ar, int n); IMPORT_SYMBOL(lua_xmove, void , lua_State *from, lua_State *to, int n);
IMPORT_SYMBOL(lua_getupvalue, const char *,lua_State *L, int funcindex, int n); IMPORT_SYMBOL(lua_isnumber, int , lua_State *L, int idx);
IMPORT_SYMBOL(lua_setupvalue, const char *,lua_State *L, int funcindex, int n); IMPORT_SYMBOL(lua_isstring, int , lua_State *L, int idx);
IMPORT_SYMBOL(lua_upvalueid, void *,lua_State *L, int fidx, int n); IMPORT_SYMBOL(lua_iscfunction, int , lua_State *L, int idx);
IMPORT_SYMBOL(lua_sethook, int ,lua_State *L, lua_Hook func, int mask, int count); IMPORT_SYMBOL(lua_isuserdata, int , lua_State *L, int idx);
IMPORT_SYMBOL(lua_gethook, lua_Hook ,lua_State *L); IMPORT_SYMBOL(lua_type, int , lua_State *L, int idx);
IMPORT_SYMBOL(lua_gethookmask, int ,lua_State *L); IMPORT_SYMBOL(lua_typename, const char *, lua_State *L, int tp);
IMPORT_SYMBOL(lua_gethookcount, int ,lua_State *L); IMPORT_SYMBOL(lua_tonumberx, lua_Number , lua_State *L, int idx, int *isnum);
IMPORT_SYMBOL(luaL_openlibs, void ,lua_State *L); IMPORT_SYMBOL(lua_tointegerx, lua_Integer , lua_State *L, int idx, int *isnum);
IMPORT_SYMBOL(lua_tounsignedx, lua_Unsigned , lua_State *L, int idx, int *isnum);
IMPORT_SYMBOL(lua_toboolean, int , lua_State *L, int idx);
IMPORT_SYMBOL(lua_tolstring, const char *, lua_State *L, int idx, size_t *len);
IMPORT_SYMBOL(lua_rawlen, size_t , lua_State *L, int idx);
IMPORT_SYMBOL(lua_tocfunction, lua_CFunction , lua_State *L, int idx);
IMPORT_SYMBOL(lua_touserdata, void *, lua_State *L, int idx);
IMPORT_SYMBOL(lua_tothread, lua_State *, lua_State *L, int idx);
IMPORT_SYMBOL(lua_topointer, const void *, lua_State *L, int idx);
IMPORT_SYMBOL(lua_arith, void , lua_State *L, int op);
IMPORT_SYMBOL(lua_rawequal, int , lua_State *L, int idx1, int idx2);
IMPORT_SYMBOL(lua_compare, int , lua_State *L, int idx1, int idx2, int op);
IMPORT_SYMBOL(lua_pushnil, void , lua_State *L);
IMPORT_SYMBOL(lua_pushnumber, void , lua_State *L, lua_Number n);
IMPORT_SYMBOL(lua_pushinteger, void , lua_State *L, lua_Integer n);
IMPORT_SYMBOL(lua_pushunsigned, void , lua_State *L, lua_Unsigned n);
IMPORT_SYMBOL(lua_pushlstring, const char *, lua_State *L, const char *s, size_t l);
IMPORT_SYMBOL(lua_pushstring, const char *, lua_State *L, const char *s);
IMPORT_SYMBOL(lua_pushvfstring, const char *, lua_State *L, const char *fmt, va_list argp);
IMPORT_SYMBOL(lua_pushfstring, const char *, lua_State *L, const char *fmt, ...);
IMPORT_SYMBOL(lua_pushcclosure, void , lua_State *L, lua_CFunction fn, int n);
IMPORT_SYMBOL(lua_pushboolean, void , lua_State *L, int b);
IMPORT_SYMBOL(lua_pushlightuserdata, void , lua_State *L, void *p);
IMPORT_SYMBOL(lua_pushthread, int , lua_State *L);
IMPORT_SYMBOL(lua_getglobal, void , lua_State *L, const char *var);
IMPORT_SYMBOL(lua_gettable, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_getfield, void , lua_State *L, int idx, const char *k);
IMPORT_SYMBOL(lua_rawget, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_rawgeti, void , lua_State *L, int idx, int n);
IMPORT_SYMBOL(lua_rawgetp, void , lua_State *L, int idx, const void *p);
IMPORT_SYMBOL(lua_createtable, void , lua_State *L, int narr, int nrec);
IMPORT_SYMBOL(lua_newuserdata, void *, lua_State *L, size_t sz);
IMPORT_SYMBOL(lua_getmetatable, int , lua_State *L, int objindex);
IMPORT_SYMBOL(lua_getuservalue, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_setglobal, void , lua_State *L, const char *var);
IMPORT_SYMBOL(lua_settable, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_setfield, void , lua_State *L, int idx, const char *k);
IMPORT_SYMBOL(lua_rawset, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_rawseti, void , lua_State *L, int idx, int n);
IMPORT_SYMBOL(lua_rawsetp, void , lua_State *L, int idx, const void *p);
IMPORT_SYMBOL(lua_setmetatable, int , lua_State *L, int objindex);
IMPORT_SYMBOL(lua_setuservalue, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_callk, void , lua_State *L, int nargs, int nresults, int ctx, lua_CFunction k);
IMPORT_SYMBOL(lua_getctx, int , lua_State *L, int *ctx);
IMPORT_SYMBOL(lua_pcallk, int , lua_State *L, int nargs, int nresults, int errfunc, int ctx, lua_CFunction k);
IMPORT_SYMBOL(lua_load, int , lua_State *L, lua_Reader reader, void *dt, const char *chunkname, const char *mode);
IMPORT_SYMBOL(lua_dump, int , lua_State *L, lua_Writer writer, void *data);
IMPORT_SYMBOL(lua_yieldk, int , lua_State *L, int nresults, int ctx, lua_CFunction k);
IMPORT_SYMBOL(lua_resume, int , lua_State *L, lua_State *from, int narg);
IMPORT_SYMBOL(lua_status, int , lua_State *L);
IMPORT_SYMBOL(lua_gc, int , lua_State *L, int what, int data);
IMPORT_SYMBOL(lua_error, int , lua_State *L);
IMPORT_SYMBOL(lua_next, int , lua_State *L, int idx);
IMPORT_SYMBOL(lua_concat, void , lua_State *L, int n);
IMPORT_SYMBOL(lua_len, void , lua_State *L, int idx);
IMPORT_SYMBOL(lua_getallocf, lua_Alloc , lua_State *L, void **ud);
IMPORT_SYMBOL(lua_setallocf, void , lua_State *L, lua_Alloc f, void *ud);
IMPORT_SYMBOL(lua_getstack, int , lua_State *L, int level, lua_Debug *ar);
IMPORT_SYMBOL(lua_getinfo, int , lua_State *L, const char *what, lua_Debug *ar);
IMPORT_SYMBOL(lua_getlocal, const char *, lua_State *L, const lua_Debug *ar, int n);
IMPORT_SYMBOL(lua_setlocal, const char *, lua_State *L, const lua_Debug *ar, int n);
IMPORT_SYMBOL(lua_getupvalue, const char *, lua_State *L, int funcindex, int n);
IMPORT_SYMBOL(lua_setupvalue, const char *, lua_State *L, int funcindex, int n);
IMPORT_SYMBOL(lua_upvalueid, void *, lua_State *L, int fidx, int n);
IMPORT_SYMBOL(lua_upvaluejoin, void , lua_State *L, int fidx1, int n1, int fidx2, int n2);
IMPORT_SYMBOL(lua_sethook, int , lua_State *L, lua_Hook func, int mask, int count);
IMPORT_SYMBOL(lua_gethook, lua_Hook , lua_State *L);
IMPORT_SYMBOL(lua_gethookmask, int , lua_State *L);
IMPORT_SYMBOL(lua_gethookcount, int , lua_State *L);
IMPORT_SYMBOL(luaL_checkversion_, void , lua_State *L, lua_Number ver);
IMPORT_SYMBOL(luaL_getmetafield, int , lua_State *L, int obj, const char *e);
IMPORT_SYMBOL(luaL_callmeta, int , lua_State *L, int obj, const char *e);
IMPORT_SYMBOL(luaL_tolstring, const char *, lua_State *L, int idx, size_t *len);
IMPORT_SYMBOL(luaL_argerror, int , lua_State *L, int numarg, const char *extramsg);
IMPORT_SYMBOL(luaL_checklstring, const char *, lua_State *L, int numArg, size_t *l);
IMPORT_SYMBOL(luaL_optlstring, const char *, lua_State *L, int numArg, const char *def, size_t *l);
IMPORT_SYMBOL(luaL_checknumber, lua_Number , lua_State *L, int numArg);
IMPORT_SYMBOL(luaL_optnumber, lua_Number , lua_State *L, int nArg, lua_Number def);
IMPORT_SYMBOL(luaL_checkinteger, lua_Integer , lua_State *L, int numArg);
IMPORT_SYMBOL(luaL_optinteger, lua_Integer , lua_State *L, int nArg, lua_Integer def);
IMPORT_SYMBOL(luaL_checkunsigned, lua_Unsigned , lua_State *L, int numArg);
IMPORT_SYMBOL(luaL_optunsigned, lua_Unsigned , lua_State *L, int numArg, lua_Unsigned def);
IMPORT_SYMBOL(luaL_checkstack, void , lua_State *L, int sz, const char *msg);
IMPORT_SYMBOL(luaL_checktype, void , lua_State *L, int narg, int t);
IMPORT_SYMBOL(luaL_checkany, void , lua_State *L, int narg);
IMPORT_SYMBOL(luaL_newmetatable, int , lua_State *L, const char *tname);
IMPORT_SYMBOL(luaL_setmetatable, void , lua_State *L, const char *tname);
IMPORT_SYMBOL(luaL_testudata, void *, lua_State *L, int ud, const char *tname);
IMPORT_SYMBOL(luaL_checkudata, void *, lua_State *L, int ud, const char *tname);
IMPORT_SYMBOL(luaL_where, void , lua_State *L, int lvl);
IMPORT_SYMBOL(luaL_error, int , lua_State *L, const char *fmt, ...);
IMPORT_SYMBOL(luaL_checkoption, int , lua_State *L, int narg, const char *def, const char *const lst[]);
IMPORT_SYMBOL(luaL_fileresult, int , lua_State *L, int stat, const char *fname);
IMPORT_SYMBOL(luaL_execresult, int , lua_State *L, int stat);
IMPORT_SYMBOL(luaL_ref, int , lua_State *L, int t);
IMPORT_SYMBOL(luaL_unref, void , lua_State *L, int t, int ref);
IMPORT_SYMBOL(luaL_loadfilex, int , lua_State *L, const char *filename, const char *mode);
IMPORT_SYMBOL(luaL_loadbufferx, int , lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
IMPORT_SYMBOL(luaL_loadstring, int , lua_State *L, const char *s);
IMPORT_SYMBOL(luaL_newstate, lua_State *, void);
IMPORT_SYMBOL(luaL_len, int , lua_State *L, int idx);
IMPORT_SYMBOL(luaL_gsub, const char *, lua_State *L, const char *s, const char *p, const char *r);
IMPORT_SYMBOL(luaL_setfuncs, void , lua_State *L, const luaL_Reg *l, int nup);
IMPORT_SYMBOL(luaL_getsubtable, int , lua_State *L, int idx, const char *fname);
IMPORT_SYMBOL(luaL_traceback, void , lua_State *L, lua_State *L1, const char *msg, int level);
IMPORT_SYMBOL(luaL_requiref, void , lua_State *L, const char *modname, lua_CFunction openf, int glb);
IMPORT_SYMBOL(luaL_buffinit, void , lua_State *L, luaL_Buffer *B);
IMPORT_SYMBOL(luaL_prepbuffsize, char *, luaL_Buffer *B, size_t sz);
IMPORT_SYMBOL(luaL_addlstring, void , luaL_Buffer *B, const char *s, size_t l);
IMPORT_SYMBOL(luaL_addstring, void , luaL_Buffer *B, const char *s);
IMPORT_SYMBOL(luaL_addvalue, void , luaL_Buffer *B);
IMPORT_SYMBOL(luaL_pushresult, void , luaL_Buffer *B);
IMPORT_SYMBOL(luaL_pushresultsize, void , luaL_Buffer *B, size_t sz);
IMPORT_SYMBOL(luaL_buffinitsize, char *, lua_State *L, luaL_Buffer *B, size_t sz);
IMPORT_SYMBOL(luaL_pushmodule, void , lua_State *L, const char *modname, int sizehint);
IMPORT_SYMBOL(luaL_openlib, void , lua_State *L, const char *libname, const luaL_Reg *l, int nup);
} }
#endif #endif

View File

@ -22,6 +22,7 @@ Various scripts and configurations used to configure, build, and package Lite XL
and run Lite XL, mainly useful for CI and documentation purpose. and run Lite XL, mainly useful for CI and documentation purpose.
Preferably not to be used in user systems. Preferably not to be used in user systems.
- **fontello-config.json**: Used by the icons generator. - **fontello-config.json**: Used by the icons generator.
- **generate_header.sh**: Generates a header file for native plugin API
[1]: https://github.com/LinusU/node-appdmg [1]: https://github.com/LinusU/node-appdmg
[2]: https://docs.appimage.org/ [2]: https://docs.appimage.org/

94
scripts/generate_header.sh Executable file
View File

@ -0,0 +1,94 @@
#!/bin/bash
# https://stackoverflow.com/a/13062682
uncomment() {
[ $# -eq 2 ] && arg="$1" || arg=""
eval file="\$$#"
sed 's/a/aA/g; s/__/aB/g; s/#/aC/g' "$file" | \
gcc -P -E $arg - | \
sed 's/aC/#/g; s/aB/__/g; s/aA/a/g'
}
# this is the magic that turns multiline statements into
# single line statements
# LITERALLY DOES NOT WORK WITH PREPROCESSOR
onelineize() {
grep -v '^#' | sed -e ':r;$!{N;br};s/\([^{;]\)\n\s*/\1 /g'
}
discard_preprocessors() {
grep -v '#\(include\|if\|endif\)'
}
# sed regex for extracting data from function signature
# if this isn't regex, idk what is
# LUA_API (return type as \2) (function name as \3) (args as \4)
sym_regex='^LUA\(LIB\)\?_API\s\+\([^(]\+\)\s*(\([^)]\+\))\s\+(\([^)]\+\))'
# get funcptr declarations
ptrize() {
grep '^LUA' | sed -e "s/$sym_regex/static \2(*\3) (\4)/"
}
export_sym() {
# don't even bother reading this again
grep '^LUA' | sed -e "s/$sym_regex/\tIMPORT_SYMBOL(\3, \2, \4)/"
}
decl() {
header="$(uncomment $1 | discard_preprocessors)"
header1="$(onelineize <<< "$header")"
# typedef
grep -v '^\(LUA\|#\|extern\)' <<< "$header1"
# funcptrs
ptrize <<< "$header1"
# defines
grep '^#' <<< "$header"
}
decl_export() {
uncomment $1 | onelineize | export_sym
}
LUA_PATH="$1"
cat << EOF
/**
The lite_xl plugin API is quite simple. Any shared library can be a plugin file, so long
as it has an entrypoint that looks like the following, where xxxxx is the plugin name:
#include "lite_xl_plugin_api.h"
int lua_open_lite_xl_xxxxx(lua_State* L, void* XL) {
lite_xl_plugin_init(XL);
...
return 1;
}
In linux, to compile this file, you'd do: 'gcc -o xxxxx.so -shared xxxxx.c'. Simple!
Due to the way the API is structured, you *should not* link or include lua libraries.
This file was automatically generated by the below code. Do NOT MODIFY DIRECTLY.
EOF
cat "$0"
cat << EOF
**/
#ifndef LITE_XL_PLUGIN_API
#define LITE_XL_PLUGIN_API
EOF
decl "$LUA_PATH/lua.h"
decl "$LUA_PATH/lauxlib.h"
echo "#define IMPORT_SYMBOL(name, ret, ...) name = (ret (*) (__VA_ARGS__)) symbol(#name)"
echo "static void lite_xl_plugin_init(void *XL) {"
echo -e "\tvoid* (*symbol)(const char *) = (void* (*) (const char *)) XL;"
decl_export "$LUA_PATH/lua.h"
decl_export "$LUA_PATH/lauxlib.h"
echo "}"
echo "#endif"