1
0
textedit/indent.go

35 lines
658 B
Go
Raw Normal View History

2025-11-01 03:49:02 +01:00
package textedit
2025-11-02 01:04:54 +01:00
type indentState struct {
started, lineStarted bool
2025-11-01 03:49:02 +01:00
}
2025-11-02 01:04:54 +01:00
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
2025-11-01 03:49:02 +01:00
}
var ret []rune
2025-11-02 01:04:54 +01:00
if !s.started {
ret = append(ret, first...)
} else if !s.lineStarted {
2025-11-01 03:49:02 +01:00
ret = append(ret, rest...)
}
2025-11-02 01:04:54 +01:00
ret = append(ret, r)
s.started = true
s.lineStarted = true
return ret, s
2025-11-01 03:49:02 +01:00
}
}
2025-11-02 01:04:54 +01:00
func indent(first, rest []rune) Editor {
2025-11-01 03:49:02 +01:00
return Func(
2025-11-02 01:04:54 +01:00
indentEdit(first, rest),
func(indentState) []rune { return nil },
2025-11-01 03:49:02 +01:00
)
}