chore: implement task list parser

This commit is contained in:
Steven
2023-12-16 12:48:52 +08:00
parent 1c7fb77e05
commit bb42042db4
9 changed files with 235 additions and 4 deletions

View File

@ -43,6 +43,8 @@ func (r *HTMLRenderer) RenderNode(node ast.Node) {
r.renderUnorderedList(n)
case *ast.OrderedList:
r.renderOrderedList(n)
case *ast.TaskList:
r.renderTaskList(n)
case *ast.Bold:
r.renderBold(n)
case *ast.Italic:
@ -119,6 +121,24 @@ func (r *HTMLRenderer) renderBlockquote(node *ast.Blockquote) {
}
}
func (r *HTMLRenderer) renderTaskList(node *ast.TaskList) {
prevSibling, nextSibling := node.PrevSibling(), node.NextSibling()
if prevSibling == nil || prevSibling.Type() != ast.TaskListNode {
r.output.WriteString("<ul>")
}
r.output.WriteString("<li>")
r.output.WriteString("<input type=\"checkbox\"")
if node.Complete {
r.output.WriteString(" checked")
}
r.output.WriteString(" disabled>")
r.RenderNodes(node.Children)
r.output.WriteString("</li>")
if nextSibling == nil || nextSibling.Type() != ast.TaskListNode {
r.output.WriteString("</ul>")
}
}
func (r *HTMLRenderer) renderUnorderedList(node *ast.UnorderedList) {
prevSibling, nextSibling := node.PrevSibling(), node.NextSibling()
if prevSibling == nil || prevSibling.Type() != ast.UnorderedListNode {