@@ -25,11 +25,12 @@ import (
2525)
2626
2727var delimiter = "\\ $"
28- var substitution = "[_a-z][_a-z0-9]*(?::?[-?][^}]*)?"
28+ var substitutionNamed = "[_a-z][_a-z0-9]*"
29+ var substitutionBraced = "[_a-z][_a-z0-9]*(?::?[-?][^}]*)?"
2930
3031var patternString = fmt .Sprintf (
3132 "%s(?i:(?P<escaped>%s)|(?P<named>%s)|{(?P<braced>%s)}|(?P<invalid>))" ,
32- delimiter , delimiter , substitution , substitution ,
33+ delimiter , delimiter , substitutionNamed , substitutionBraced ,
3334)
3435
3536var defaultPattern = regexp .MustCompile (patternString )
@@ -74,29 +75,33 @@ func SubstituteWith(template string, mapping Mapping, pattern *regexp.Regexp, su
7475 return escaped
7576 }
7677
78+ braced := false
7779 substitution := groups ["named" ]
7880 if substitution == "" {
7981 substitution = groups ["braced" ]
82+ braced = true
8083 }
8184
8285 if substitution == "" {
8386 err = & InvalidTemplateError {Template : template }
8487 return ""
8588 }
8689
87- for _ , f := range subsFuncs {
88- var (
89- value string
90- applied bool
91- )
92- value , applied , err = f (substitution , mapping )
93- if err != nil {
94- return ""
95- }
96- if ! applied {
97- continue
90+ if braced {
91+ for _ , f := range subsFuncs {
92+ var (
93+ value string
94+ applied bool
95+ )
96+ value , applied , err = f (substitution , mapping )
97+ if err != nil {
98+ return ""
99+ }
100+ if ! applied {
101+ continue
102+ }
103+ return value
98104 }
99- return value
100105 }
101106
102107 value , ok := mapping (substitution )
0 commit comments