github.com/hattya/go.sh@v0.0.0-20240328132134-f53276d95cc6/pattern/pattern_unix.go (about)

     1  //
     2  // go.sh/pattern :: pattern_unix.go
     3  //
     4  //   Copyright (c) 2021-2023 Akinori Hattori <hattya@gmail.com>
     5  //
     6  //   SPDX-License-Identifier: MIT
     7  //
     8  
     9  //go:build unix
    10  
    11  package pattern
    12  
    13  import "strings"
    14  
    15  func indexSep(pat string) (int, int) {
    16  	n := len(pat)
    17  	for {
    18  		switch i := strings.IndexAny(pat, `/\`); {
    19  		case i == -1:
    20  			return -1, 0
    21  		case pat[i] == '\\' && i+1 < len(pat):
    22  			if pat[i+1] == '/' {
    23  				return n - len(pat[i:]), 2
    24  			}
    25  			pat = pat[i+1:]
    26  		default:
    27  			return n - len(pat[i:]), 1
    28  		}
    29  	}
    30  }
    31  
    32  func split(pat string) (string, string) {
    33  	if i, w := indexSep(pat); i == 0 {
    34  		return "/", pat[w:]
    35  	}
    36  	return ".", pat
    37  }