package main import ( "fmt" "runtime" "strings" ) type markdownRenderer struct { nodes []string } func newMardownRenderer() *markdownRenderer { return &markdownRenderer{} } func (m *markdownRenderer) add(s string) *markdownRenderer { m.nodes = append(m.nodes, s) return m } func (m *markdownRenderer) PlainText(s string) *markdownRenderer { return m.add(s) } func (m *markdownRenderer) LF() *markdownRenderer { return m.add(" ") } func (m *markdownRenderer) H2(s string) *markdownRenderer { return m.add("## " + s) } func (m *markdownRenderer) H3(s string) *markdownRenderer { return m.add("### " + s) } func (m *markdownRenderer) CodeBlocks(lang, s string) *markdownRenderer { return m.add(fmt.Sprintf("```%s%s%s%s```", lang, lineFeed(), s, lineFeed())) } func (m *markdownRenderer) String() string { return strings.Join(m.nodes, lineFeed()) } func lineFeed() string { if runtime.GOOS == "windows" { return "\r\n" } return "\n" }