| 71 | } |
| 72 | |
| 73 | static int S_render_node(cmark_renderer *renderer, cmark_node *node, |
| 74 | cmark_event_type ev_type, int options) { |
| 75 | cmark_node *tmp; |
| 76 | int list_number; |
| 77 | bool entering = (ev_type == CMARK_EVENT_ENTER); |
| 78 | bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options); |
| 79 | struct block_number *new_block_number; |
| 80 | cmark_mem *allocator = cmark_get_default_mem_allocator(); |
| 81 | |
| 82 | // avoid unused parameter error: |
| 83 | (void)(options); |
| 84 | |
| 85 | // indent inside nested lists |
| 86 | if (renderer->block_number_in_list_item && |
| 87 | node->type < CMARK_NODE_FIRST_INLINE) { |
| 88 | if (entering) { |
| 89 | renderer->block_number_in_list_item->number += 1; |
| 90 | if (renderer->block_number_in_list_item->number == 2) { |
| 91 | CR(); |
| 92 | LIT(".RS"); // indent |
| 93 | CR(); |
| 94 | } |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | switch (node->type) { |
| 99 | case CMARK_NODE_DOCUMENT: |
| 100 | break; |
| 101 | |
| 102 | case CMARK_NODE_BLOCK_QUOTE: |
| 103 | if (entering) { |
| 104 | CR(); |
| 105 | LIT(".RS"); |
| 106 | CR(); |
| 107 | } else { |
| 108 | CR(); |
| 109 | LIT(".RE"); |
| 110 | CR(); |
| 111 | } |
| 112 | break; |
| 113 | |
| 114 | case CMARK_NODE_LIST: |
| 115 | break; |
| 116 | |
| 117 | case CMARK_NODE_ITEM: |
| 118 | if (entering) { |
| 119 | new_block_number = allocator->calloc(1, sizeof(struct block_number)); |
| 120 | new_block_number->number = 0; |
| 121 | new_block_number->parent = renderer->block_number_in_list_item; |
| 122 | renderer->block_number_in_list_item = new_block_number; |
| 123 | CR(); |
| 124 | LIT(".IP "); |
| 125 | if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { |
| 126 | LIT("\\[bu] 2"); |
| 127 | } else { |
| 128 | list_number = cmark_node_get_list_start(node->parent); |
| 129 | tmp = node; |
| 130 | while (tmp->prev) { |
nothing calls this directly
no test coverage detected