package match import ( "fmt" "unicode/utf8" ) type Min struct { Limit int } func NewMin(l int) Min { return Min{l} } func (self Min) Match(s string) bool { var l int for range s { l += 1 if l >= self.Limit { return true } } return false } func (self Min) Index(s string) (int, []int) { var count int c := len(s) - self.Limit + 1 if c <= 0 { return -1, nil } segments := acquireSegments(c) for i, r := range s { count++ if count >= self.Limit { segments = append(segments, i+utf8.RuneLen(r)) } } if len(segments) == 0 { return -1, nil } return 0, segments } func (self Min) Len() int { return lenNo } func (self Min) String() string { return fmt.Sprintf("<min:%d>", self.Limit) }