static void rndr_footnote_def(hoedown_buffer *ob, const hoedown_buffer *text, unsigned int num, void *opaque) { size_t i = 0; int pfound = 0; /* insert anchor at the end of first paragraph block */ if (text) { while ((i+3) < text->size) { if (text->data[i++] != '<') continue; if (text->data[i++] != '/') continue; if (text->data[i++] != 'p' && text->data[i] != 'P') continue; if (text->data[i] != '>') continue; i -= 3; pfound = 1; break; } } hoedown_buffer_printf(ob, "\n<li id=\"fn%d\">\n", num); if (pfound) { hoedown_buffer_put(ob, text->data, i); hoedown_buffer_printf(ob, " <a href=\"#fnref%d\" rev=\"footnote\">↩</a>", num); hoedown_buffer_put(ob, text->data + i, text->size - i); } else if (text) { hoedown_buffer_put(ob, text->data, text->size); } HOEDOWN_BUFPUTSL(ob, "</li>\n"); }
static void toc_header(hoedown_buffer *ob, const hoedown_buffer *text, int level, void *opaque) { hoedown_html_renderer_state *state = opaque; if (level <= state->toc_data.nesting_level) { /* set the level offset if this is the first header * we're parsing for the document */ if (state->toc_data.current_level == 0) state->toc_data.level_offset = level - 1; level -= state->toc_data.level_offset; if (level > state->toc_data.current_level) { while (level > state->toc_data.current_level) { HOEDOWN_BUFPUTSL(ob, "<ul>\n<li>\n"); state->toc_data.current_level++; } } else if (level < state->toc_data.current_level) { HOEDOWN_BUFPUTSL(ob, "</li>\n"); while (level < state->toc_data.current_level) { HOEDOWN_BUFPUTSL(ob, "</ul>\n</li>\n"); state->toc_data.current_level--; } HOEDOWN_BUFPUTSL(ob,"<li>\n"); } else { HOEDOWN_BUFPUTSL(ob,"</li>\n<li>\n"); } hoedown_buffer_printf(ob, "<a href=\"#toc_%d\">", state->toc_data.header_count++); if (text) escape_html(ob, text->data, text->size); HOEDOWN_BUFPUTSL(ob, "</a>\n"); } }
static void rndr_header(hoedown_buffer *ob, const hoedown_buffer *text, int level, void *opaque) { hoedown_html_renderer_state *state = opaque; if (ob->size) hoedown_buffer_putc(ob, '\n'); if ((state->flags & HOEDOWN_HTML_TOC) && (level <= state->toc_data.nesting_level)) hoedown_buffer_printf(ob, "<h%d id=\"toc_%d\">", level, state->toc_data.header_count++); else hoedown_buffer_printf(ob, "<h%d>", level); if (text) hoedown_buffer_put(ob, text->data, text->size); hoedown_buffer_printf(ob, "</h%d>\n", level); }
static void rndr_header(hoedown_buffer *ob, const hoedown_buffer *content, int level, const hoedown_renderer_data *data) { hoedown_html_renderer_state *state = data->opaque; if (ob->size) hoedown_buffer_putc(ob, '\n'); if (level <= state->toc_data.nesting_level) hoedown_buffer_printf(ob, "<h%d id=\"toc_%d\">", level, state->toc_data.header_count++); else hoedown_buffer_printf(ob, "<h%d>", level); if (content) hoedown_buffer_put(ob, content->data, content->size); hoedown_buffer_printf(ob, "</h%d>\n", level); }
static void toc_header(struct hoedown_buffer *ob, const struct hoedown_buffer *text, int level, void *opaque) { struct hoedown_html_renderopt *options = opaque; if (level <= options->toc_data.nesting_level) { /* set the level offset if this is the first header * we're parsing for the document */ if (options->toc_data.current_level == 0) options->toc_data.level_offset = level - 1; level -= options->toc_data.level_offset; if (level > options->toc_data.current_level) { while (level > options->toc_data.current_level) { BUFPUTSL(ob, "<ul>\n<li>\n"); options->toc_data.current_level++; } } else if (level < options->toc_data.current_level) { BUFPUTSL(ob, "</li>\n"); while (level < options->toc_data.current_level) { BUFPUTSL(ob, "</ul>\n</li>\n"); options->toc_data.current_level--; } BUFPUTSL(ob,"<li>\n"); } else { BUFPUTSL(ob,"</li>\n<li>\n"); } hoedown_buffer_printf(ob, "<a href=\"#toc_%d\">", options->toc_data.header_count++); if (text) escape_html(ob, text->data, text->size); BUFPUTSL(ob, "</a>\n"); } }
static void rndr_paragraph(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_renderer_data *data) { int list_depth, blockquote_depth; list_depth = hoedown_document_list_depth(((hoedown_context_test_renderer_state*) data->opaque)->doc); blockquote_depth = hoedown_document_blockquote_depth(((hoedown_context_test_renderer_state*) data->opaque)->doc); hoedown_buffer_printf(ob, "list depth: %d blockquote depth: %d ", list_depth, blockquote_depth); if (content) { hoedown_buffer_puts(ob, "paragraph: "); hoedown_buffer_put(ob, content->data, content->size); } hoedown_buffer_putc(ob, '\n'); }
// Adds a "toc" class to the outmost UL element to support TOC styling. void hoedown_patch_render_toc_header( hoedown_buffer *ob, const hoedown_buffer *content, int level, const hoedown_renderer_data *data) { hoedown_html_renderer_state *state = data->opaque; if (level <= state->toc_data.nesting_level) { /* set the level offset if this is the first header * we're parsing for the document */ if (state->toc_data.current_level == 0) state->toc_data.level_offset = level - 1; level -= state->toc_data.level_offset; if (level > state->toc_data.current_level) { while (level > state->toc_data.current_level) { if (state->toc_data.current_level == 0) HOEDOWN_BUFPUTSL(ob, "<ul class=\"toc\">\n<li>\n"); else HOEDOWN_BUFPUTSL(ob, "<ul>\n<li>\n"); state->toc_data.current_level++; } } else if (level < state->toc_data.current_level) { HOEDOWN_BUFPUTSL(ob, "</li>\n"); while (level < state->toc_data.current_level) { HOEDOWN_BUFPUTSL(ob, "</ul>\n</li>\n"); state->toc_data.current_level--; } HOEDOWN_BUFPUTSL(ob,"<li>\n"); } else { HOEDOWN_BUFPUTSL(ob,"</li>\n<li>\n"); } hoedown_buffer_printf(ob, "<a href=\"#toc_%d\">", state->toc_data.header_count++); if (content) hoedown_buffer_put(ob, content->data, content->size); HOEDOWN_BUFPUTSL(ob, "</a>\n"); } }
static int rndr_footnote_ref(hoedown_buffer *ob, unsigned int num, void *opaque) { hoedown_buffer_printf(ob, "<sup id=\"fnref%d\"><a href=\"#fn%d\" rel=\"footnote\">%d</a></sup>", num, num, num); return 1; }
static int rndr_footnote_ref(hoedown_buffer *ob, unsigned int num, const hoedown_renderer_data *data) { hoedown_buffer_printf(ob, "<sup id=\"fnref%d\"><a href=\"#fn%d\" rel=\"footnote\">%d</a></sup>", num, num, num); return 1; }