package match import ( "fmt" "strings" "unicode/utf8" ) // single represents ? type Single struct { Separators string } func (self Single) Match(s string) bool { return utf8.RuneCountInString(s) == 1 && strings.IndexAny(s, self.Separators) == -1 } func (self Single) Len() int { return 1 } func (self Single) Index(s string) (int, []int) { for i, r := range s { if strings.IndexRune(self.Separators, r) == -1 { return i, []int{utf8.RuneLen(r)} } } return -1, nil } func (self Single) Kind() Kind { return KindSingle } func (self Single) String() string { return fmt.Sprintf("[single:%s]", self.Separators) }