...
1
2
3
4 package utils
5
6 import "strings"
7
8
9
10
11 func PathSplitter(path string, delimiter string) []string {
12 ps := strings.Split(path, delimiter)
13 var res []string
14
15
16
17 if len(ps) > 1 && ps[0] == "" {
18 ps = ps[1:]
19 }
20
21 res = append(res, ps[0])
22 for i := 1; i < len(ps); i++ {
23 last := len(res) - 1
24 if strings.HasSuffix(res[last], `\`) {
25 res[last] = strings.TrimSuffix(res[last], `\`) + delimiter + ps[i]
26 } else {
27 res = append(res, ps[i])
28 }
29 }
30 return res
31 }
32
33
34
35
36
37
38
39
40
41
42
43
44 func SmarterPathSplitter(path string, delimiter string) []string {
45 var result []string
46 split := PathSplitter(path, delimiter)
47
48 for i := 0; i < len(split); i++ {
49 elem := split[i]
50 if strings.HasPrefix(elem, "[") && !strings.HasSuffix(elem, "]") {
51
52 bracketed := []string{elem}
53 for i < len(split)-1 {
54 i++
55 bracketed = append(bracketed, split[i])
56 if strings.HasSuffix(split[i], "]") {
57 break
58 }
59 }
60 bracketedStr := strings.Join(bracketed, delimiter)
61 if strings.Contains(bracketedStr, "=") {
62 result = append(result, bracketedStr)
63 } else {
64 result = append(result, strings.Trim(bracketedStr, "[]"))
65 }
66 } else {
67 result = append(result, elem)
68 }
69 }
70 return result
71 }
72
View as plain text