MCPcopy Create free account
hub / github.com/commonmark/cmark / S_render_node

Function S_render_node

src/man.c:73–277  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

71}
72
73static 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) {

Callers

nothing calls this directly

Calls 8

cmark_node_get_list_typeFunction · 0.85
cmark_node_get_literalFunction · 0.85
cmark_node_get_on_enterFunction · 0.85
cmark_node_get_on_exitFunction · 0.85
cmark_node_get_urlFunction · 0.85

Tested by

no test coverage detected