// Supports task list syntax if HOEDOWN_HTML_USE_TASK_LIST is on. // Implementation based on hoextdown. void hoedown_patch_render_listitem( hoedown_buffer *ob, const hoedown_buffer *text, hoedown_list_flags flags, const hoedown_renderer_data *data) { if (text) { hoedown_html_renderer_state *state = data->opaque; size_t offset = 0; if (flags & HOEDOWN_LI_BLOCK) offset = 3; // Do task list checkbox ([x] or [ ]). if (USE_TASK_LIST(state) && text->size >= 3) { if (strncmp((char *)(text->data + offset), "[ ]", 3) == 0) { HOEDOWN_BUFPUTSL(ob, "<li class=\"task-list-item\">"); hoedown_buffer_put(ob, text->data, offset); if (USE_XHTML(state)) HOEDOWN_BUFPUTSL(ob, "<input type=\"checkbox\" />"); else HOEDOWN_BUFPUTSL(ob, "<input type=\"checkbox\">"); offset += 3; } else if (strncmp((char *)(text->data + offset), "[x]", 3) == 0) { HOEDOWN_BUFPUTSL(ob, "<li class=\"task-list-item\">"); hoedown_buffer_put(ob, text->data, offset); if (USE_XHTML(state)) HOEDOWN_BUFPUTSL(ob, "<input type=\"checkbox\" checked />"); else HOEDOWN_BUFPUTSL(ob, "<input type=\"checkbox\" checked>"); offset += 3; } else { HOEDOWN_BUFPUTSL(ob, "<li>"); offset = 0; } } else { HOEDOWN_BUFPUTSL(ob, "<li>"); offset = 0; } size_t size = text->size; while (size && text->data[size - offset - 1] == '\n') size--; hoedown_buffer_put(ob, text->data + offset, size - offset); } HOEDOWN_BUFPUTSL(ob, "</li>\n"); }
static void rndr_hrule(struct buf *ob, void *opaque) { struct html_renderopt *options = opaque; if (ob->size) bufputc(ob, '\n'); bufputs(ob, USE_XHTML(options) ? "<hr/>\n" : "<hr>\n"); }
static int rndr_linebreak(struct buf *ob, void *opaque) { struct html_renderopt *options = opaque; bufputs(ob, USE_XHTML(options) ? "<br/>\n" : "<br>\n"); return 1; }
static void rndr_hrule(hoedown_buffer *ob, void *opaque) { hoedown_html_renderer_state *state = opaque; if (ob->size) hoedown_buffer_putc(ob, '\n'); hoedown_buffer_puts(ob, USE_XHTML(state) ? "<hr/>\n" : "<hr>\n"); }
static int rndr_linebreak(hoedown_buffer *ob, void *opaque) { hoedown_html_renderer_state *state = opaque; hoedown_buffer_puts(ob, USE_XHTML(state) ? "<br/>\n" : "<br>\n"); return 1; }
static void rndr_hrule(hoedown_buffer *ob, const hoedown_renderer_data *data) { hoedown_html_renderer_state *state = data->opaque; if (ob->size) hoedown_buffer_putc(ob, '\n'); hoedown_buffer_puts(ob, USE_XHTML(state) ? "<hr/>\n" : "<hr>\n"); }
static int rndr_linebreak(hoedown_buffer *ob, const hoedown_renderer_data *data) { hoedown_html_renderer_state *state = data->opaque; hoedown_buffer_puts(ob, USE_XHTML(state) ? "<br/>\n" : "<br>\n"); return 1; }
static void rndr_hrule(struct hoedown_buffer *ob, void *opaque) { struct hoedown_html_renderopt *options = opaque; if (ob->size) hoedown_buffer_putc(ob, '\n'); hoedown_buffer_puts(ob, USE_XHTML(options) ? "<hr/>\n" : "<hr>\n"); }
static int rndr_linebreak(struct hoedown_buffer *ob, void *opaque) { struct hoedown_html_renderopt *options = opaque; hoedown_buffer_puts(ob, USE_XHTML(options) ? "<br/>\n" : "<br>\n"); return 1; }
static int rndr_image(struct buf *ob, const struct buf *link, const struct buf *title, const struct buf *alt, void *opaque) { struct html_renderopt *options = opaque; if (link != NULL && (options->flags & HTML_SAFELINK) != 0 && !sd_autolink_issafe(link->data, link->size)) return 0; BUFPUTSL(ob, "<img src=\""); if (link && link->size) escape_href(ob, link->data, link->size); BUFPUTSL(ob, "\" alt=\""); if (alt && alt->size) escape_html(ob, alt->data, alt->size); if (title && title->size) { BUFPUTSL(ob, "\" title=\""); escape_html(ob, title->data, title->size); } bufputs(ob, USE_XHTML(options) ? "\"/>" : "\">"); return 1; }
static void rndr_footnotes(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) { hoedown_html_renderer_state *state = data->opaque; if (ob->size) hoedown_buffer_putc(ob, '\n'); HOEDOWN_BUFPUTSL(ob, "<div class=\"footnotes\">\n"); hoedown_buffer_puts(ob, USE_XHTML(state) ? "<hr/>\n" : "<hr>\n"); HOEDOWN_BUFPUTSL(ob, "<ol>\n"); if (content) hoedown_buffer_put(ob, content->data, content->size); HOEDOWN_BUFPUTSL(ob, "\n</ol>\n</div>\n"); }
static void rndr_footnotes(struct hoedown_buffer *ob, const struct hoedown_buffer *text, void *opaque) { struct hoedown_html_renderopt *options = opaque; if (ob->size) hoedown_buffer_putc(ob, '\n'); BUFPUTSL(ob, "<div class=\"footnotes\">\n"); hoedown_buffer_puts(ob, USE_XHTML(options) ? "<hr/>\n" : "<hr>\n"); BUFPUTSL(ob, "<ol>\n"); if (text) hoedown_buffer_put(ob, text->data, text->size); BUFPUTSL(ob, "\n</ol>\n</div>\n"); }
static int rndr_image(struct buf *ob, struct buf *link, struct buf *title, struct buf *alt, void *opaque) { struct html_renderopt *options = opaque; if (!link || !link->size) return 0; BUFPUTSL(ob, "<img src=\""); sdhtml_escape(ob, link->data, link->size); BUFPUTSL(ob, "\" alt=\""); if (alt && alt->size) sdhtml_escape(ob, alt->data, alt->size); if (title && title->size) { BUFPUTSL(ob, "\" title=\""); sdhtml_escape(ob, title->data, title->size); } bufputs(ob, USE_XHTML(options) ? "\"/>" : "\">"); return 1; }
static int rndr_image(hoedown_buffer *ob, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_buffer *alt, void *opaque) { hoedown_html_renderer_state *state = opaque; if (!link || !link->size) return 0; HOEDOWN_BUFPUTSL(ob, "<img src=\""); escape_href(ob, link->data, link->size); HOEDOWN_BUFPUTSL(ob, "\" alt=\""); if (alt && alt->size) escape_html(ob, alt->data, alt->size); if (title && title->size) { HOEDOWN_BUFPUTSL(ob, "\" title=\""); escape_html(ob, title->data, title->size); } hoedown_buffer_puts(ob, USE_XHTML(state) ? "\"/>" : "\">"); return 1; }
static int rndr_image(struct hoedown_buffer *ob, const struct hoedown_buffer *link, const struct hoedown_buffer *title, const struct hoedown_buffer *alt, void *opaque) { struct hoedown_html_renderopt *options = opaque; if (!link || !link->size) return 0; BUFPUTSL(ob, "<img src=\""); escape_href(ob, link->data, link->size); BUFPUTSL(ob, "\" alt=\""); if (alt && alt->size) escape_html(ob, alt->data, alt->size); if (title && title->size) { BUFPUTSL(ob, "\" title=\""); escape_html(ob, title->data, title->size); } hoedown_buffer_puts(ob, USE_XHTML(options) ? "\"/>" : "\">"); return 1; }