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 { if len(s.currentWord) == 0 { return nil } var ret []rune if s.started { ret = append(ret, ' ') } return append(ret, s.currentWord...) } func singleLine() Editor { return Func(singleLineEdit, singleLineReleaseState) }