1
0
textedit/singleline.go

46 lines
765 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 {
2025-11-02 01:23:00 +01:00
if len(s.currentWord) == 0 {
return nil
}
var ret []rune
if s.started {
ret = append(ret, ' ')
}
return append(ret, s.currentWord...)
2025-11-02 01:04:54 +01:00
}
func singleLine() Editor {
return Func(singleLineEdit, singleLineReleaseState)
}