@@ -153,23 +153,8 @@ static bool is_autolink(cmark_node *node) {
153153 link_text -> as .literal .len ) == 0 );
154154}
155155
156- // if node is a block node, returns node.
157- // otherwise returns first block-level node that is an ancestor of node.
158- // if there is no block-level ancestor, returns NULL.
159- static cmark_node * get_containing_block (cmark_node * node ) {
160- while (node ) {
161- if (CMARK_NODE_BLOCK_P (node )) {
162- return node ;
163- } else {
164- node = node -> parent ;
165- }
166- }
167- return NULL ;
168- }
169-
170156static int S_render_node (cmark_renderer * renderer , cmark_node * node ,
171157 cmark_event_type ev_type , int options ) {
172- cmark_node * tmp ;
173158 int list_number ;
174159 cmark_delim_type list_delim ;
175160 int numticks ;
@@ -189,14 +174,17 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
189174 // Don't adjust tight list status til we've started the list.
190175 // Otherwise we loose the blank line between a paragraph and
191176 // a following list.
192- if (!(node -> type == CMARK_NODE_ITEM && node -> prev == NULL && entering )) {
193- tmp = get_containing_block (node );
194- renderer -> in_tight_list_item =
195- tmp && // tmp might be NULL if there is no containing block
196- ((tmp -> type == CMARK_NODE_ITEM &&
197- cmark_node_get_list_tight (tmp -> parent )) ||
198- (tmp && tmp -> parent && tmp -> parent -> type == CMARK_NODE_ITEM &&
199- cmark_node_get_list_tight (tmp -> parent -> parent )));
177+ if (entering ) {
178+ if (node -> parent && node -> parent -> type == CMARK_NODE_ITEM ) {
179+ renderer -> in_tight_list_item = node -> parent -> parent -> as .list .tight ;
180+ }
181+ } else {
182+ if (node -> type == CMARK_NODE_LIST ) {
183+ renderer -> in_tight_list_item =
184+ node -> parent &&
185+ node -> parent -> type == CMARK_NODE_ITEM &&
186+ node -> parent -> parent -> as .list .tight ;
187+ }
200188 }
201189
202190 if (node -> extension && node -> extension -> commonmark_render_func ) {
@@ -228,19 +216,15 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
228216 LIT ("<!-- end list -->" );
229217 BLANKLINE ();
230218 }
219+ renderer -> list_number = cmark_node_get_list_start (node );
231220 break ;
232221
233222 case CMARK_NODE_ITEM :
234223 if (cmark_node_get_list_type (node -> parent ) == CMARK_BULLET_LIST ) {
235224 marker_width = 4 ;
236225 } else {
237- list_number = cmark_node_get_list_start ( node -> parent ) ;
226+ list_number = renderer -> list_number ++ ;
238227 list_delim = cmark_node_get_list_delim (node -> parent );
239- tmp = node ;
240- while (tmp -> prev ) {
241- tmp = tmp -> prev ;
242- list_number += 1 ;
243- }
244228 // we ensure a width of at least 4 so
245229 // we get nice transition from single digits
246230 // to double
@@ -405,10 +389,12 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
405389 break ;
406390
407391 case CMARK_NODE_STRONG :
408- if (entering ) {
409- LIT ("**" );
410- } else {
411- LIT ("**" );
392+ if (node -> parent == NULL || node -> parent -> type != CMARK_NODE_STRONG ) {
393+ if (entering ) {
394+ LIT ("**" );
395+ } else {
396+ LIT ("**" );
397+ }
412398 }
413399 break ;
414400
0 commit comments