1package match
2
3import (
4	"fmt"
5	"strings"
6	"unicode/utf8"
7
8	sutil "github.com/gobwas/glob/util/strings"
9)
10
11type PrefixAny struct {
12	Prefix     string
13	Separators []rune
14}
15
16func NewPrefixAny(s string, sep []rune) PrefixAny {
17	return PrefixAny{s, sep}
18}
19
20func (self PrefixAny) Index(s string) (int, []int) {
21	idx := strings.Index(s, self.Prefix)
22	if idx == -1 {
23		return -1, nil
24	}
25
26	n := len(self.Prefix)
27	sub := s[idx+n:]
28	i := sutil.IndexAnyRunes(sub, self.Separators)
29	if i > -1 {
30		sub = sub[:i]
31	}
32
33	seg := acquireSegments(len(sub) + 1)
34	seg = append(seg, n)
35	for i, r := range sub {
36		seg = append(seg, n+i+utf8.RuneLen(r))
37	}
38
39	return idx, seg
40}
41
42func (self PrefixAny) Len() int {
43	return lenNo
44}
45
46func (self PrefixAny) Match(s string) bool {
47	if !strings.HasPrefix(s, self.Prefix) {
48		return false
49	}
50	return sutil.IndexAnyRunes(s[len(self.Prefix):], self.Separators) == -1
51}
52
53func (self PrefixAny) String() string {
54	return fmt.Sprintf("<prefix_any:%s![%s]>", self.Prefix, string(self.Separators))
55}
56