mirror of
https://github.com/lxsang/antd-lua-plugin
synced 2024-12-27 09:58:21 +01:00
64 lines
1.7 KiB
C
64 lines
1.7 KiB
C
#include "../lualib.h"
|
|
#include "md4c/md4c-html.h"
|
|
|
|
static void md_process_output(const MD_CHAR *buf, MD_SIZE len, void *udata)
|
|
{
|
|
lua_State *L = (lua_State *)udata;
|
|
lua_pushlstring(L, buf, len);
|
|
lua_call(L, 1, 0);
|
|
lua_pushvalue(L, -1);
|
|
}
|
|
|
|
static int l_md_to_html(lua_State *L)
|
|
{
|
|
const char *input = luaL_checkstring(L, 1);
|
|
if (input == NULL)
|
|
{
|
|
ERROR("NULL markdown input string");
|
|
return 0;
|
|
}
|
|
if (!lua_isfunction(L, -1))
|
|
{
|
|
ERROR("Invalid callback function");
|
|
return 0;
|
|
}
|
|
// duplicate top of the stack
|
|
lua_pushvalue(L, -1);
|
|
reset_hd_cnt();
|
|
if (md_html(input,
|
|
strlen(input),
|
|
md_process_output,
|
|
L,
|
|
MD_DIALECT_GITHUB |
|
|
MD_HTML_FLAG_VERBATIM_ENTITIES |
|
|
MD_FLAG_PERMISSIVEATXHEADERS |
|
|
MD_FLAG_NOINDENTEDCODEBLOCKS |
|
|
MD_FLAG_NOHTMLBLOCKS |
|
|
MD_FLAG_NOHTMLSPANS |
|
|
MD_FLAG_NOHTML |
|
|
MD_FLAG_COLLAPSEWHITESPACE |
|
|
MD_FLAG_PERMISSIVEURLAUTOLINKS |
|
|
MD_FLAG_PERMISSIVEWWWAUTOLINKS |
|
|
MD_FLAG_PERMISSIVEEMAILAUTOLINKS |
|
|
MD_FLAG_PERMISSIVEAUTOLINKS |
|
|
MD_FLAG_UNDERLINE,
|
|
MD_HTML_FLAG_XHTML) == -1)
|
|
{
|
|
ERROR("Unable to parse markdown: md_parse() fails");
|
|
lua_pop(L,1);
|
|
return 0;
|
|
}
|
|
lua_pop(L,1);
|
|
return 1;
|
|
}
|
|
|
|
static const struct luaL_Reg _lib[] = {
|
|
{"to_html", l_md_to_html},
|
|
{NULL, NULL}};
|
|
|
|
int luaopen_md(lua_State *L)
|
|
{
|
|
luaL_newlib(L, _lib);
|
|
return 1;
|
|
}
|