| 557 | } |
| 558 | |
| 559 | static void |
| 560 | toc_header(hoedown_buffer *ob, const hoedown_buffer *content, int level, const hoedown_renderer_data *data) |
| 561 | { |
| 562 | hoedown_html_renderer_state *state = data->opaque; |
| 563 | |
| 564 | if (level <= state->toc_data.nesting_level) { |
| 565 | /* set the level offset if this is the first header |
| 566 | * we're parsing for the document */ |
| 567 | if (state->toc_data.current_level == 0) |
| 568 | state->toc_data.level_offset = level - 1; |
| 569 | |
| 570 | level -= state->toc_data.level_offset; |
| 571 | |
| 572 | if (level > state->toc_data.current_level) { |
| 573 | while (level > state->toc_data.current_level) { |
| 574 | HOEDOWN_BUFPUTSL(ob, "<ul>\n<li>\n"); |
| 575 | state->toc_data.current_level++; |
| 576 | } |
| 577 | } else if (level < state->toc_data.current_level) { |
| 578 | HOEDOWN_BUFPUTSL(ob, "</li>\n"); |
| 579 | while (level < state->toc_data.current_level) { |
| 580 | HOEDOWN_BUFPUTSL(ob, "</ul>\n</li>\n"); |
| 581 | state->toc_data.current_level--; |
| 582 | } |
| 583 | HOEDOWN_BUFPUTSL(ob,"<li>\n"); |
| 584 | } else { |
| 585 | HOEDOWN_BUFPUTSL(ob,"</li>\n<li>\n"); |
| 586 | } |
| 587 | |
| 588 | hoedown_buffer_printf(ob, "<a href=\"#toc_%d\">", state->toc_data.header_count++); |
| 589 | if (content) hoedown_buffer_put(ob, content->data, content->size); |
| 590 | HOEDOWN_BUFPUTSL(ob, "</a>\n"); |
| 591 | } |
| 592 | } |
| 593 | |
| 594 | static int |
| 595 | toc_link(hoedown_buffer *ob, const hoedown_buffer *content, const hoedown_buffer *link, const hoedown_buffer *title, const hoedown_renderer_data *data) |
nothing calls this directly
no test coverage detected