1
0
textedit/singleline.go

37 lines
641 B
Go
Raw Normal View History

2025-11-02 01:04:54 +01:00
package textedit
import "unicode"
type singleLineState struct {
started bool
currentWord []rune
}
func singleLineEdit(r rune, s singleLineState) ([]rune, singleLineState) {
if !unicode.IsSpace(r) || r == nonbreakSpace {
s.currentWord = append(s.currentWord, r)
return nil, s
}
if len(s.currentWord) == 0 {
return nil, s
}
ret := s.currentWord
if s.started {
ret = append([]rune{' '}, ret...)
}
s.currentWord = nil
s.started = true
return ret, s
}
func singleLineReleaseState(s singleLineState) []rune {
return s.currentWord
}
func singleLine() Editor {
return Func(singleLineEdit, singleLineReleaseState)
}