...

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

Documentation: github.com/gobwas/glob/match

     1  package match
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  type PrefixSuffix struct {
     9  	Prefix, Suffix string
    10  }
    11  
    12  func NewPrefixSuffix(p, s string) PrefixSuffix {
    13  	return PrefixSuffix{p, s}
    14  }
    15  
    16  func (self PrefixSuffix) Index(s string) (int, []int) {
    17  	prefixIdx := strings.Index(s, self.Prefix)
    18  	if prefixIdx == -1 {
    19  		return -1, nil
    20  	}
    21  
    22  	suffixLen := len(self.Suffix)
    23  	if suffixLen <= 0 {
    24  		return prefixIdx, []int{len(s) - prefixIdx}
    25  	}
    26  
    27  	if (len(s) - prefixIdx) <= 0 {
    28  		return -1, nil
    29  	}
    30  
    31  	segments := acquireSegments(len(s) - prefixIdx)
    32  	for sub := s[prefixIdx:]; ; {
    33  		suffixIdx := strings.LastIndex(sub, self.Suffix)
    34  		if suffixIdx == -1 {
    35  			break
    36  		}
    37  
    38  		segments = append(segments, suffixIdx+suffixLen)
    39  		sub = sub[:suffixIdx]
    40  	}
    41  
    42  	if len(segments) == 0 {
    43  		releaseSegments(segments)
    44  		return -1, nil
    45  	}
    46  
    47  	reverseSegments(segments)
    48  
    49  	return prefixIdx, segments
    50  }
    51  
    52  func (self PrefixSuffix) Len() int {
    53  	return lenNo
    54  }
    55  
    56  func (self PrefixSuffix) Match(s string) bool {
    57  	return strings.HasPrefix(s, self.Prefix) && strings.HasSuffix(s, self.Suffix)
    58  }
    59  
    60  func (self PrefixSuffix) String() string {
    61  	return fmt.Sprintf("<prefix_suffix:[%s,%s]>", self.Prefix, self.Suffix)
    62  }
    63  

View as plain text