...
1 package resourcename
2
3 import "strings"
4
5
6 func Sprint(pattern string, variables ...string) string {
7 var length, segments int
8 var patternScanner Scanner
9 patternScanner.Init(pattern)
10 for patternScanner.Scan() {
11 segment := patternScanner.Segment()
12 if !segment.IsVariable() {
13 length += len(segment.Literal())
14 }
15 segments++
16 }
17 for _, variable := range variables {
18 length += len(variable)
19 }
20 if segments > 0 {
21 length += segments - 1
22 }
23 var result strings.Builder
24 result.Grow(length)
25 patternScanner.Init(pattern)
26 var i, variable int
27 for patternScanner.Scan() {
28 segment := patternScanner.Segment()
29 if segment.IsVariable() {
30 if variable < len(variables) {
31 _, _ = result.WriteString(variables[variable])
32 variable++
33 }
34 } else {
35 _, _ = result.WriteString(string(segment.Literal()))
36 }
37 if i < segments-1 {
38 _ = result.WriteByte('/')
39 }
40 i++
41 }
42 return result.String()
43 }
44
View as plain text