DR-SunDown
view release on metacpan or search on metacpan
xs/Sundown.xs view on Meta::CPAN
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "markdown.h"
#include "html.h"
#include "buffer.h"
#define OUTPUT_UNIT 1024
MODULE = DR::SunDown PACKAGE = DR::SunDown
PROTOTYPES: ENABLE
SV * markdown2html(mdata)
SV * mdata
PREINIT:
struct buf *ob;
STRLEN len;
const char * ptr;
struct sd_callbacks callbacks;
struct html_renderopt options;
struct sd_markdown *markdown;
int input_is_utf8;
CODE:
if (!SvOK(mdata)) {
RETVAL = mdata;
return;
}
input_is_utf8 = SvUTF8(mdata);
ptr = SvPV(mdata, len);
ob = bufnew(OUTPUT_UNIT);
sdhtml_renderer(&callbacks, &options, 0);
markdown = sd_markdown_new(0, 16, &callbacks, &options);
sd_markdown_render(ob, (uint8_t *)ptr, len, markdown);
sd_markdown_free(markdown);
if (!ob->size) {
RETVAL = newSVpvn("", 0);
} else {
RETVAL = newSVpvn((char *)ob->data, ob->size);
if ( input_is_utf8 && !SvUTF8(RETVAL) )
SvUTF8_on(RETVAL);
}
bufrelease(ob);
OUTPUT:
RETVAL
( run in 2.064 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )