package extension

import (
	
	gast 
	
	
	
	
	
	
	
)

var taskListRegexp = regexp.MustCompile(`^\[([\sxX])\]\s*`)

type taskCheckBoxParser struct {
}

var defaultTaskCheckBoxParser = &taskCheckBoxParser{}
NewTaskCheckBoxParser returns a new InlineParser that can parse checkboxes in list items. This parser must take precedence over the parser.LinkParser.
Given AST structure must be like - List - ListItem : parent.Parent - TextBlock : parent (current line)
	if .Parent() == nil || .Parent().FirstChild() !=  {
		return nil
	}

	if ,  := .Parent().(*gast.ListItem); ! {
		return nil
	}
	,  := .PeekLine()
	 := taskListRegexp.FindSubmatchIndex()
	if  == nil {
		return nil
	}
	 := [[2]:[3]][0]
	.Advance([1])
	 :=  == 'x' ||  == 'X'
	return ast.NewTaskCheckBox()
}

nothing to do
}
TaskCheckBoxHTMLRenderer is a renderer.NodeRenderer implementation that renders checkboxes in list items.
NewTaskCheckBoxHTMLRenderer returns a new TaskCheckBoxHTMLRenderer.
func ( ...html.Option) renderer.NodeRenderer {
	 := &TaskCheckBoxHTMLRenderer{
		Config: html.NewConfig(),
	}
	for ,  := range  {
		.SetHTMLOption(&.Config)
	}
	return 
}
RegisterFuncs implements renderer.NodeRenderer.RegisterFuncs.
func ( *TaskCheckBoxHTMLRenderer) ( renderer.NodeRendererFuncRegisterer) {
	.Register(ast.KindTaskCheckBox, .renderTaskCheckBox)
}

func ( *TaskCheckBoxHTMLRenderer) ( util.BufWriter,  []byte,  gast.Node,  bool) (gast.WalkStatus, error) {
	if ! {
		return gast.WalkContinue, nil
	}
	 := .(*ast.TaskCheckBox)

	if .IsChecked {
		.WriteString(`<input checked="" disabled="" type="checkbox"`)
	} else {
		.WriteString(`<input disabled="" type="checkbox"`)
	}
	if .XHTML {
		.WriteString(" /> ")
	} else {
		.WriteString("> ")
	}
	return gast.WalkContinue, nil
}

type taskList struct {
}
TaskList is an extension that allow you to use GFM task lists.