1
0
textedit/indent.go

35 lines
658 B
Go

package textedit
type indentState struct {
started, lineStarted bool
}
func indentEdit(first, rest []rune) func(rune, indentState) ([]rune, indentState) {
return func(r rune, s indentState) ([]rune, indentState) {
if r == '\n' {
s.started = true
s.lineStarted = false
return []rune{'\n'}, s
}
var ret []rune
if !s.started {
ret = append(ret, first...)
} else if !s.lineStarted {
ret = append(ret, rest...)
}
ret = append(ret, r)
s.started = true
s.lineStarted = true
return ret, s
}
}
func indent(first, rest []rune) Editor {
return Func(
indentEdit(first, rest),
func(indentState) []rune { return nil },
)
}