|
|
@@ -3,11 +3,11 @@
|
|
|
#include <string.h>
|
|
|
#include <stdio.h>
|
|
|
#include "sqstdblobimpl.h"
|
|
|
-extern "C" {
|
|
|
-#include "markdown.h"
|
|
|
+extern "C" {
|
|
|
+#include "render_html.h"
|
|
|
}
|
|
|
|
|
|
-static void mywrite(char const *s,int len,void *blob)
|
|
|
+static void mywrite(const MD_CHAR *s,MD_SIZE len,void *blob)
|
|
|
{
|
|
|
SQBlob *b= (SQBlob*)blob;
|
|
|
b->Write(s,len);
|
|
|
@@ -18,10 +18,15 @@ static SQRESULT sq_markdown2html(HSQUIRRELVM v)
|
|
|
SQ_FUNC_VARS(v);
|
|
|
SQ_GET_STRING(v, 2, str);
|
|
|
SQ_OPT_INTEGER(v, 3, len, str_size);
|
|
|
- SQ_OPT_INTEGER(v, 4, flags, 0);
|
|
|
+ SQ_OPT_INTEGER(v, 4, parser_flags, MD_DIALECT_GITHUB | MD_FLAG_PERMISSIVEATXHEADERS);
|
|
|
+ SQ_OPT_INTEGER(v, 5, renderer_flags, 0);
|
|
|
if(len > str_size || len < 0) return sq_throwerror(v, _SC("invalid parameter value (%d)"), len);
|
|
|
- SQBlob b(0, 8192);
|
|
|
- markdown_str(mkd_string(str, len, 0), &b ,mywrite, flags);
|
|
|
+ /* Input size is good estimation of output size. Add some more reserve to
|
|
|
+ * deal with the HTML header/footer and tags. */
|
|
|
+ SQBlob b(0, len + (len/8 + 64));
|
|
|
+ int ret = md_render_html((const MD_CHAR*)str, len, mywrite,
|
|
|
+ (void*) &b, parser_flags, renderer_flags);
|
|
|
+ if(ret != 0) return sq_throwerror(v, _SC("markdown2html parsing failed"));
|
|
|
sq_pushstring(v, (SQChar*)b.GetBuf(), b.Len());
|
|
|
return 1;
|
|
|
}
|
|
|
@@ -33,38 +38,26 @@ extern "C" {
|
|
|
|
|
|
SQRESULT sqext_register_markdown(HSQUIRRELVM v)
|
|
|
{
|
|
|
- sq_insertfunc(v, _SC("markdown2html"), sq_markdown2html, -2, _SC(".sii"), SQTrue);
|
|
|
+ sq_insertfunc(v, _SC("markdown2html"), sq_markdown2html, -2, _SC(".siii"), SQTrue);
|
|
|
sq_pushconsttable(v);
|
|
|
#define INT_CONST(num) sq_pushstring(v,_SC(#num),-1);sq_pushinteger(v,num);sq_newslot(v,-3,SQTrue);
|
|
|
- INT_CONST(MKD_NOLINKS);
|
|
|
- INT_CONST(MKD_NOIMAGE);
|
|
|
- INT_CONST(MKD_NOPANTS);
|
|
|
- INT_CONST(MKD_NOHTML);
|
|
|
- INT_CONST(MKD_STRICT);
|
|
|
- INT_CONST(MKD_TAGTEXT);
|
|
|
- INT_CONST(MKD_NO_EXT);
|
|
|
- INT_CONST(MKD_CDATA);
|
|
|
- INT_CONST(MKD_NOSUPERSCRIPT);
|
|
|
- INT_CONST(MKD_NORELAXED);
|
|
|
- INT_CONST(MKD_NOTABLES);
|
|
|
- INT_CONST(MKD_NOSTRIKETHROUGH);
|
|
|
- INT_CONST(MKD_TOC);
|
|
|
- INT_CONST(MKD_1_COMPAT);
|
|
|
- INT_CONST(MKD_AUTOLINK);
|
|
|
- INT_CONST(MKD_SAFELINK);
|
|
|
- INT_CONST(MKD_NOHEADER);
|
|
|
- INT_CONST(MKD_TABSTOP);
|
|
|
- INT_CONST(MKD_NODIVQUOTE);
|
|
|
- INT_CONST(MKD_NOALPHALIST);
|
|
|
- INT_CONST(MKD_NODLIST);
|
|
|
- INT_CONST(MKD_EXTRA_FOOTNOTE);
|
|
|
- INT_CONST(MKD_NOSTYLE);
|
|
|
- INT_CONST(MKD_NODLDISCOUNT);
|
|
|
- INT_CONST(MKD_DLEXTRA);
|
|
|
- INT_CONST(MKD_FENCEDCODE);
|
|
|
- INT_CONST(MKD_IDANCHOR);
|
|
|
- INT_CONST(MKD_GITHUBTAGS);
|
|
|
- INT_CONST(MKD_URLENCODEDANCHOR);
|
|
|
+ INT_CONST(MD_FLAG_COLLAPSEWHITESPACE);
|
|
|
+ INT_CONST(MD_FLAG_PERMISSIVEATXHEADERS);
|
|
|
+ INT_CONST(MD_FLAG_PERMISSIVEURLAUTOLINKS);
|
|
|
+ INT_CONST(MD_FLAG_PERMISSIVEEMAILAUTOLINKS);
|
|
|
+ INT_CONST(MD_FLAG_NOINDENTEDCODEBLOCKS);
|
|
|
+ INT_CONST(MD_FLAG_NOHTMLBLOCKS);
|
|
|
+ INT_CONST(MD_FLAG_NOHTMLSPANS);
|
|
|
+ INT_CONST(MD_FLAG_TABLES);
|
|
|
+ INT_CONST(MD_FLAG_STRIKETHROUGH);
|
|
|
+ INT_CONST(MD_FLAG_PERMISSIVEWWWAUTOLINKS);
|
|
|
+ INT_CONST(MD_FLAG_PERMISSIVEAUTOLINKS);
|
|
|
+ INT_CONST(MD_FLAG_NOHTML);
|
|
|
+ INT_CONST(MD_DIALECT_COMMONMARK);
|
|
|
+ INT_CONST(MD_DIALECT_GITHUB);
|
|
|
+
|
|
|
+ INT_CONST(MD_RENDER_FLAG_DEBUG);
|
|
|
+ INT_CONST(MD_RENDER_FLAG_VERBATIM_ENTITIES);
|
|
|
|
|
|
sq_poptop(v); //remove const table
|
|
|
return 0;
|