void tmh_cb_blockcode(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_buffer *lang, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "blockcode", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("blockcode");
    
        PUSHBUF(text);
    
        PUSHBUF(lang);
    
    CB_FOOTER;
    
}
void tmh_cb_blockquote(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "blockquote", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("blockquote");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
}
void tmh_cb_header(hoedown_buffer *ob, const hoedown_buffer *content, int level, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "header", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("header");
    
        PUSHBUF(content);
    
        mXPUSHi(level);
    
    CB_FOOTER;
    
}
void tmh_cb_hrule(hoedown_buffer *ob, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "hrule", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("hrule");
    
    CB_FOOTER;
    
}
void tmh_cb_list(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_list_flags flags, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "list", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("list");
    
        PUSHBUF(content);
    
        mXPUSHi(flags);
    
    CB_FOOTER;
    
}
void tmh_cb_listitem(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_list_flags flags, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "listitem", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("listitem");
    
        PUSHBUF(content);
    
        mXPUSHi(flags);
    
    CB_FOOTER;
    
}
void tmh_cb_paragraph(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "paragraph", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("paragraph");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
}
void tmh_cb_table(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "table", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("table");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
}
void tmh_cb_table_header(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "table_header", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("table_header");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
}
void tmh_cb_table_body(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "table_body", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("table_body");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
}
void tmh_cb_table_row(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "table_row", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("table_row");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
}
void tmh_cb_table_cell(hoedown_buffer *ob, const hoedown_buffer *content, hoedown_table_flags flags, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "table_cell", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("table_cell");
    
        PUSHBUF(content);
    
        mXPUSHi(flags);
    
    CB_FOOTER;
    
}
void tmh_cb_footnotes(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "footnotes", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("footnotes");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
}
void tmh_cb_footnote_def(hoedown_buffer *ob, const hoedown_buffer *content, unsigned int num, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "footnote_def", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("footnote_def");
    
        PUSHBUF(content);
    
        mXPUSHu(num);
    
    CB_FOOTER;
    
}
void tmh_cb_blockhtml(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "blockhtml", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("blockhtml");
    
        PUSHBUF(text);
    
    CB_FOOTER;
    
}
int tmh_cb_autolink(hoedown_buffer *ob, const hoedown_buffer *link, hoedown_autolink_type type, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "autolink", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("autolink");
    
        PUSHBUF(link);
    
        mXPUSHi(type);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_codespan(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "codespan", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("codespan");
    
        PUSHBUF(text);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_double_emphasis(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "double_emphasis", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("double_emphasis");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_emphasis(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "emphasis", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("emphasis");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_underline(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "underline", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("underline");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_highlight(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "highlight", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("highlight");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_quote(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "quote", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("quote");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_image(hoedown_buffer *ob, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_buffer *alt, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "image", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("image");
    
        PUSHBUF(link);
    
        PUSHBUF(title);
    
        PUSHBUF(alt);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_linebreak(hoedown_buffer *ob, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "linebreak", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("linebreak");
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_link(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "link", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("link");
    
        PUSHBUF(content);
    
        PUSHBUF(link);
    
        PUSHBUF(title);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_triple_emphasis(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "triple_emphasis", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("triple_emphasis");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_strikethrough(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "strikethrough", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("strikethrough");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_superscript(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "superscript", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("superscript");
    
        PUSHBUF(content);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_footnote_ref(hoedown_buffer *ob, unsigned int num, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "footnote_ref", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("footnote_ref");
    
        mXPUSHu(num);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_math(hoedown_buffer *ob, const hoedown_buffer *text, int displaymode, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "math", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("math");
    
        PUSHBUF(text);
    
        mXPUSHi(displaymode);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
int tmh_cb_raw_html(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "raw_html", 0);
    
    if (!rcb) { return 0; }
    
    CB_HEADER("raw_html");
    
        PUSHBUF(text);
    
    CB_FOOTER;
    
    return is_null ? 0 : 1;
    
}
void tmh_cb_entity(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "entity", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("entity");
    
        PUSHBUF(text);
    
    CB_FOOTER;
    
}
void tmh_cb_normal_text(hoedown_buffer *ob, const hoedown_buffer *text, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "normal_text", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("normal_text");
    
        PUSHBUF(text);
    
    CB_FOOTER;
    
}
void tmh_cb_doc_header(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "doc_header", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("doc_header");
    
        mXPUSHi(inline_render);
    
    CB_FOOTER;
    
}
void tmh_cb_doc_footer(hoedown_buffer *ob, int inline_render, const hoedown_renderer_data *data) {
    dTHX; dSP; bool is_null = 0;
    SV** rcb = hv_fetchs((HV*)data->opaque, "doc_footer", 0);
    
    if (!rcb) { return; }
    
    CB_HEADER("doc_footer");
    
        mXPUSHi(inline_render);
    
    CB_FOOTER;
    
}