Lines Matching refs:s
30 func ExpandNinjaEscaped(s string, mapping func(string) (string, bool, error)) (string, error) {
31 return expand(s, true, mapping)
37 func Expand(s string, mapping func(string) (string, error)) (string, error) {
38 return expand(s, false, func(s string) (string, bool, error) {
39 s, err := mapping(s)
40 return s, false, err
44 func expand(s string, ninjaEscape bool, mapping func(string) (string, bool, error)) (string, error)…
46 buf := make([]byte, 0, 2*len(s))
48 for j := 0; j < len(s); j++ {
49 if s[j] == '$' {
50 if j+1 >= len(s) {
53 buf = append(buf, s[i:j]...)
54 value, ninjaVariable, w, err := getMapping(s[j+1:], mapping)
66 return string(buf) + s[i:], nil
69 func getMapping(s string, mapping func(string) (string, bool, error)) (string, bool, int, error) {
70 switch s[0] {
73 for i := 1; i < len(s); i++ {
74 if s[i] == ')' {
75 ret, ninjaVariable, err := mapping(strings.TrimSpace(s[1:i]))
79 return "", false, len(s), fmt.Errorf("missing )")
83 i := strings.IndexFunc(s, unicode.IsSpace)
85 return "", false, 0, fmt.Errorf("unexpected character '%c' after '$'", s[0])
87 i = len(s)
89 return "", false, 0, fmt.Errorf("expected '(' after '$', did you mean $(%s)?", s[:i])