package html import ( "code.squareroundforest.org/arpio/textedit" "io" ) type indentState struct { started, lineStarted bool } func indentLen(indent string) int { var l int r := []rune(indent) for _, ri := range r { if ri == '\t' { l += 8 continue } l++ } return l } func indentEdit(indent []rune) func(rune, indentState) ([]rune, indentState) { return func(r rune, s indentState) ([]rune, indentState) { var ret []rune if r == '\n' { s.started = true s.lineStarted = false ret = append(ret, '\n') return ret, s } if s.started && !s.lineStarted { ret = append(ret, indent...) } ret = append(ret, r) s.started = true s.lineStarted = true return ret, s } } func newIndentWriter(out io.Writer, indent string) *textedit.Writer { return textedit.New( out, textedit.Func( indentEdit([]rune(indent)), func(indentState) []rune { return nil }, ), ) }