diff --git a/block.go b/block.go
index ff5ef49..298aa4d 100644
--- a/block.go
+++ b/block.go
@@ -1050,19 +1050,18 @@ func (p *parser) dliPrefix(data []byte) int {
func (p *parser) list(out *bytes.Buffer, data []byte, flags ListType) int {
i := 0
flags |= ListItemBeginningOfList
- work := func() {
- for i < len(data) {
- skip := p.listItem(out, data[i:], &flags)
- i += skip
+ p.r.BeginList(out, flags)
- if skip == 0 || flags&ListItemEndOfList != 0 {
- break
- }
- flags &= ^ListItemBeginningOfList
+ for i < len(data) {
+ skip := p.listItem(out, data[i:], &flags)
+ i += skip
+ if skip == 0 || flags&ListItemEndOfList != 0 {
+ break
}
+ flags &= ^ListItemBeginningOfList
}
- p.r.List(out, work, flags)
+ p.r.EndList(out, flags)
return i
}
diff --git a/html.go b/html.go
index 4654911..12c60b5 100644
--- a/html.go
+++ b/html.go
@@ -345,7 +345,9 @@ func (options *Html) TableCell(out *bytes.Buffer, text []byte, align int) {
func (options *Html) Footnotes(out *bytes.Buffer, text func()) {
out.WriteString("
\n")
}
@@ -372,7 +374,7 @@ func (options *Html) FootnoteItem(out *bytes.Buffer, name, text []byte, flags Li
out.WriteString("\n")
}
-func (options *Html) List(out *bytes.Buffer, text func(), flags ListType) {
+func (options *Html) BeginList(out *bytes.Buffer, flags ListType) {
doubleSpace(out)
if flags&ListTypeDefinition != 0 {
@@ -382,7 +384,9 @@ func (options *Html) List(out *bytes.Buffer, text func(), flags ListType) {
} else {
out.WriteString("")
}
- text()
+}
+
+func (r *Html) EndList(out *bytes.Buffer, flags ListType) {
if flags&ListTypeDefinition != 0 {
out.WriteString("\n")
} else if flags&ListTypeOrdered != 0 {
diff --git a/latex.go b/latex.go
index d4221c6..67783dc 100644
--- a/latex.go
+++ b/latex.go
@@ -98,13 +98,15 @@ func (options *Latex) HRule(out *bytes.Buffer) {
out.WriteString("\n\\HRule\n")
}
-func (options *Latex) List(out *bytes.Buffer, text func(), flags ListType) {
+func (r *Latex) BeginList(out *bytes.Buffer, flags ListType) {
if flags&ListTypeOrdered != 0 {
out.WriteString("\n\\begin{enumerate}\n")
} else {
out.WriteString("\n\\begin{itemize}\n")
}
- text()
+}
+
+func (r *Latex) EndList(out *bytes.Buffer, flags ListType) {
if flags&ListTypeOrdered != 0 {
out.WriteString("\n\\end{enumerate}\n")
} else {
diff --git a/markdown.go b/markdown.go
index e534f0e..289047c 100644
--- a/markdown.go
+++ b/markdown.go
@@ -166,7 +166,8 @@ type Renderer interface {
BeginHeader(out *bytes.Buffer, level int, id string) int
EndHeader(out *bytes.Buffer, level int, id string, tocMarker int)
HRule(out *bytes.Buffer)
- List(out *bytes.Buffer, text func(), flags ListType)
+ BeginList(out *bytes.Buffer, flags ListType)
+ EndList(out *bytes.Buffer, flags ListType)
ListItem(out *bytes.Buffer, text []byte, flags ListType)
Paragraph(out *bytes.Buffer, text func())
Table(out *bytes.Buffer, header []byte, body []byte, columnData []int)