...

Source file src/github.com/gobwas/glob/match/prefix_any.go

Documentation: github.com/gobwas/glob/match

     1  package match
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"unicode/utf8"
     7  
     8  	sutil "github.com/gobwas/glob/util/strings"
     9  )
    10  
    11  type PrefixAny struct {
    12  	Prefix     string
    13  	Separators []rune
    14  }
    15  
    16  func NewPrefixAny(s string, sep []rune) PrefixAny {
    17  	return PrefixAny{s, sep}
    18  }
    19  
    20  func (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  
    42  func (self PrefixAny) Len() int {
    43  	return lenNo
    44  }
    45  
    46  func (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  
    53  func (self PrefixAny) String() string {
    54  	return fmt.Sprintf("<prefix_any:%s![%s]>", self.Prefix, string(self.Separators))
    55  }
    56  

View as plain text