From 1eaba5aa4c841d15248f7ac0cf629459b491f080 Mon Sep 17 00:00:00 2001 From: Shulhan Date: Sat, 3 Dec 2022 14:25:24 +0700 Subject: all: store the list item counter inside element In the parseListOrdered, each time we found list item, we store its counter and increment it by one so backend can use it to render the counter. --- document_parser.go | 13 ++++++++----- element.go | 7 ++++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/document_parser.go b/document_parser.go index 9e78554..2a29152 100644 --- a/document_parser.go +++ b/document_parser.go @@ -948,13 +948,15 @@ func (docp *documentParser) parseListDescription(parent, el *element, line []byt // On success it will return non-empty line and terminator character. func (docp *documentParser) parseListOrdered(parent *element, title string, line []byte, term int) (got []byte) { var ( - logp = `parseListOrdered` - list = &element{ + logp = `parseListOrdered` + itemNumber = 1 + list = &element{ kind: elKindListOrdered, rawTitle: title, } listItem = &element{ - kind: elKindListOrderedItem, + kind: elKindListOrderedItem, + listItemNumber: itemNumber, } el *element @@ -1006,6 +1008,8 @@ func (docp *documentParser) parseListOrdered(parent *element, title string, line el.parseListOrderedItem(line) if listItem.level == el.level { + itemNumber++ + el.listItemNumber = itemNumber list.addChild(el) listItem = el line = nil @@ -1018,8 +1022,7 @@ func (docp *documentParser) parseListOrdered(parent *element, title string, line // ... Next list parentListItem = parent for parentListItem != nil { - if parentListItem.kind == docp.kind && - parentListItem.level == el.level { + if parentListItem.kind == docp.kind && parentListItem.level == el.level { list.postParseList(docp.doc, elKindListOrderedItem) return line } diff --git a/element.go b/element.go index 8f6348d..c0e94c1 100644 --- a/element.go +++ b/element.go @@ -42,9 +42,10 @@ type element struct { elementAttribute - rawLabel bytes.Buffer - level int // The number of dot for ordered list, or '*' for unordered list. - kind int + rawLabel bytes.Buffer + level int // The number of dot for ordered list, or '*' for unordered list. + listItemNumber int // The counter for list item, start from 1. + kind int // List of substitutions to be applied on raw. applySubs int -- cgit v1.3