...
1 package match
2
3 import (
4 "fmt"
5 "strings"
6
7 sutil "github.com/gobwas/glob/util/strings"
8 )
9
10 type SuffixAny struct {
11 Suffix string
12 Separators []rune
13 }
14
15 func NewSuffixAny(s string, sep []rune) SuffixAny {
16 return SuffixAny{s, sep}
17 }
18
19 func (self SuffixAny) Index(s string) (int, []int) {
20 idx := strings.Index(s, self.Suffix)
21 if idx == -1 {
22 return -1, nil
23 }
24
25 i := sutil.LastIndexAnyRunes(s[:idx], self.Separators) + 1
26
27 return i, []int{idx + len(self.Suffix) - i}
28 }
29
30 func (self SuffixAny) Len() int {
31 return lenNo
32 }
33
34 func (self SuffixAny) Match(s string) bool {
35 if !strings.HasSuffix(s, self.Suffix) {
36 return false
37 }
38 return sutil.IndexAnyRunes(s[:len(s)-len(self.Suffix)], self.Separators) == -1
39 }
40
41 func (self SuffixAny) String() string {
42 return fmt.Sprintf("<suffix_any:![%s]%s>", string(self.Separators), self.Suffix)
43 }
44
View as plain text