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 },
),
)
}