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