package mdconv import ( "fmt" "io" "text/template" "tildegit.org/tjp/gus/gemtext" ) func Convert(wr io.Writer, doc gemtext.Document, overrides *template.Template) error { tmpl, err := baseTmpl.Clone() if err != nil { return err } if overrides != nil { for _, override := range overrides.Templates() { tmpl, err = tmpl.AddParseTree(override.Name(), override.Tree) if err != nil { return err } } } return tmpl.ExecuteTemplate(wr, "mdconv", doc) } var baseTmpl = template.Must(template.New("mdconv").Parse(fmt.Sprintf((` {{block "header" .}}{{end -}} {{range . -}} {{if .Type | eq %d}}{{block "textline" . -}} {{. -}} {{end -}} {{else if .Type | eq %d}}{{block "linkline" . -}} => [{{if eq .Label ""}}{{.URL}}{{else}}{{.Label}}{{end}}]({{.URL}}) {{end -}} {{else if .Type | eq %d}}{{block "preformattoggleline" . -}} ` + "```" + ` {{end -}} {{else if .Type | eq %d}}{{block "preformattedtextline" . -}} {{. -}} {{end -}} {{else if .Type | eq %d}}{{block "heading1line" . -}} # {{.Body}} {{end -}} {{else if .Type | eq %d}}{{block "heading2line" . -}} ## {{.Body}} {{end -}} {{else if .Type | eq %d}}{{block "heading3line" . -}} ### {{.Body}} {{end -}} {{else if .Type | eq %d}}{{block "listitemline" . -}} * {{.Body}} {{end -}} {{else if .Type | eq %d}}{{block "quoteline" . -}} > {{.Body}} {{end -}} {{end -}} {{end -}} {{block "footer" .}}{{end -}} `)[1:], gemtext.LineTypeText, gemtext.LineTypeLink, gemtext.LineTypePreformatToggle, gemtext.LineTypePreformattedText, gemtext.LineTypeHeading1, gemtext.LineTypeHeading2, gemtext.LineTypeHeading3, gemtext.LineTypeListItem, gemtext.LineTypeQuote, )))