@@ -153,23 +153,8 @@ static bool is_autolink(cmark_node *node) {
153
153
link_text -> as .literal .len ) == 0 );
154
154
}
155
155
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
-
170
156
static int S_render_node (cmark_renderer * renderer , cmark_node * node ,
171
157
cmark_event_type ev_type , int options ) {
172
- cmark_node * tmp ;
173
158
int list_number ;
174
159
cmark_delim_type list_delim ;
175
160
int numticks ;
@@ -189,14 +174,17 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
189
174
// Don't adjust tight list status til we've started the list.
190
175
// Otherwise we loose the blank line between a paragraph and
191
176
// 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
+ }
200
188
}
201
189
202
190
if (node -> extension && node -> extension -> commonmark_render_func ) {
@@ -234,13 +222,8 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
234
222
if (cmark_node_get_list_type (node -> parent ) == CMARK_BULLET_LIST ) {
235
223
marker_width = 4 ;
236
224
} else {
237
- list_number = cmark_node_get_list_start (node -> parent );
225
+ list_number = cmark_node_get_item_index (node );
238
226
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
- }
244
227
// we ensure a width of at least 4 so
245
228
// we get nice transition from single digits
246
229
// to double
@@ -405,10 +388,12 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
405
388
break ;
406
389
407
390
case CMARK_NODE_STRONG :
408
- if (entering ) {
409
- LIT ("**" );
410
- } else {
411
- LIT ("**" );
391
+ if (node -> parent == NULL || node -> parent -> type != CMARK_NODE_STRONG ) {
392
+ if (entering ) {
393
+ LIT ("**" );
394
+ } else {
395
+ LIT ("**" );
396
+ }
412
397
}
413
398
break ;
414
399
0 commit comments