| 2733 | **********************/ |
| 2734 | |
| 2735 | hoedown_document * |
| 2736 | hoedown_document_new( |
| 2737 | const hoedown_renderer *renderer, |
| 2738 | hoedown_extensions extensions, |
| 2739 | size_t max_nesting) |
| 2740 | { |
| 2741 | hoedown_document *doc = NULL; |
| 2742 | |
| 2743 | assert(max_nesting > 0 && renderer); |
| 2744 | |
| 2745 | doc = hoedown_malloc(sizeof(hoedown_document)); |
| 2746 | memcpy(&doc->md, renderer, sizeof(hoedown_renderer)); |
| 2747 | |
| 2748 | doc->data.opaque = renderer->opaque; |
| 2749 | |
| 2750 | hoedown_stack_init(&doc->work_bufs[BUFFER_BLOCK], 4); |
| 2751 | hoedown_stack_init(&doc->work_bufs[BUFFER_SPAN], 8); |
| 2752 | |
| 2753 | memset(doc->active_char, 0x0, 256); |
| 2754 | |
| 2755 | if (extensions & HOEDOWN_EXT_UNDERLINE && doc->md.underline) { |
| 2756 | doc->active_char['_'] = MD_CHAR_EMPHASIS; |
| 2757 | } |
| 2758 | |
| 2759 | if (doc->md.emphasis || doc->md.double_emphasis || doc->md.triple_emphasis) { |
| 2760 | doc->active_char['*'] = MD_CHAR_EMPHASIS; |
| 2761 | doc->active_char['_'] = MD_CHAR_EMPHASIS; |
| 2762 | if (extensions & HOEDOWN_EXT_STRIKETHROUGH) |
| 2763 | doc->active_char['~'] = MD_CHAR_EMPHASIS; |
| 2764 | if (extensions & HOEDOWN_EXT_HIGHLIGHT) |
| 2765 | doc->active_char['='] = MD_CHAR_EMPHASIS; |
| 2766 | } |
| 2767 | |
| 2768 | if (doc->md.codespan) |
| 2769 | doc->active_char['`'] = MD_CHAR_CODESPAN; |
| 2770 | |
| 2771 | if (doc->md.linebreak) |
| 2772 | doc->active_char['\n'] = MD_CHAR_LINEBREAK; |
| 2773 | |
| 2774 | if (doc->md.image || doc->md.link || doc->md.footnotes || doc->md.footnote_ref) |
| 2775 | doc->active_char['['] = MD_CHAR_LINK; |
| 2776 | |
| 2777 | doc->active_char['<'] = MD_CHAR_LANGLE; |
| 2778 | doc->active_char['\\'] = MD_CHAR_ESCAPE; |
| 2779 | doc->active_char['&'] = MD_CHAR_ENTITY; |
| 2780 | |
| 2781 | if (extensions & HOEDOWN_EXT_AUTOLINK) { |
| 2782 | doc->active_char[':'] = MD_CHAR_AUTOLINK_URL; |
| 2783 | doc->active_char['@'] = MD_CHAR_AUTOLINK_EMAIL; |
| 2784 | doc->active_char['w'] = MD_CHAR_AUTOLINK_WWW; |
| 2785 | } |
| 2786 | |
| 2787 | if (extensions & HOEDOWN_EXT_SUPERSCRIPT) |
| 2788 | doc->active_char['^'] = MD_CHAR_SUPERSCRIPT; |
| 2789 | |
| 2790 | if (extensions & HOEDOWN_EXT_QUOTE) |
| 2791 | doc->active_char['"'] = MD_CHAR_QUOTE; |
| 2792 |
no test coverage detected