Skip to content

Commit a6cb6c8

Browse files
committed
store list item number
- add cmark_node_get_item_number() function - store item number in cmark_item member Signed-off-by: Bjoern Foersterling <bjoern.foersterling@gmail.com>
1 parent eec0eeb commit a6cb6c8

4 files changed

Lines changed: 30 additions & 0 deletions

File tree

src/blocks.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,17 @@ static cmark_node *finalize(cmark_parser *parser, cmark_node *b) {
336336
b->data = cmark_strbuf_detach(node_content);
337337
break;
338338

339+
case CMARK_NODE_ITEM:
340+
if (parent->as.list.list_type != CMARK_ORDERED_LIST)
341+
break;
342+
343+
if (b->prev == NULL)
344+
b->as.item.number = parent->as.list.start;
345+
else
346+
b->as.item.number = b->prev->as.item.number + 1;
347+
348+
break;
349+
339350
case CMARK_NODE_LIST: // determine tight/loose status
340351
b->as.list.tight = true; // tight by default
341352
item = b->first_child;

src/cmark.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,10 @@ CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node);
347347
*/
348348
CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight);
349349

350+
/** Returns the list item number of 'node' or 0 if it is not an ordered list.
351+
*/
352+
CMARK_EXPORT int cmark_node_get_item_number(cmark_node *node);
353+
350354
/** Returns the info string from a fenced code block.
351355
*/
352356
CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node);

src/node.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,16 @@ int cmark_node_set_list_tight(cmark_node *node, int tight) {
482482
}
483483
}
484484

485+
int cmark_node_get_item_number(cmark_node *node) {
486+
if (node == NULL)
487+
return 0;
488+
489+
if (node->type == CMARK_NODE_ITEM)
490+
return node->as.item.number;
491+
else
492+
return 0;
493+
}
494+
485495
const char *cmark_node_get_fence_info(cmark_node *node) {
486496
if (node == NULL) {
487497
return NULL;

src/node.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ typedef struct {
3636
bool setext;
3737
} cmark_heading;
3838

39+
typedef struct {
40+
int number;
41+
} cmark_item;
42+
3943
typedef struct {
4044
unsigned char *url;
4145
unsigned char *title;
@@ -78,6 +82,7 @@ struct cmark_node {
7882
cmark_list list;
7983
cmark_code code;
8084
cmark_heading heading;
85+
cmark_item item;
8186
cmark_link link;
8287
cmark_custom custom;
8388
int html_block_type;

0 commit comments

Comments
 (0)