1 |
package gcss |
2 |
|
3 |
import "io" |
4 |
|
5 |
// mixinInvocation represents a mixin invocation. |
6 |
type mixinInvocation struct { |
7 |
elementBase |
8 |
name string |
9 |
paramValues []string |
10 |
} |
11 |
|
12 |
// WriteTo writes the selector to the writer. |
13 |
func (mi *mixinInvocation) WriteTo(w io.Writer) (int64, error) { |
14 |
return 0, nil |
15 |
} |
16 |
|
17 |
// decsParams returns the mixin's declarations and params. |
18 |
func (mi *mixinInvocation) decsParams() ([]*declaration, map[string]string) { |
19 |
md, ok := mi.Context().mixins[mi.name] |
20 |
|
21 |
if !ok { |
22 |
return nil, nil |
23 |
} |
24 |
|
25 |
params := make(map[string]string) |
26 |
|
27 |
l := len(mi.paramValues) |
28 |
|
29 |
for i, name := range md.paramNames { |
30 |
if i < l { |
31 |
params[name] = mi.paramValues[i] |
32 |
} |
33 |
} |
34 |
|
35 |
return md.decs, params |
36 |
} |
37 |
|
38 |
// selsParams returns the mixin's selectors and params. |
39 |
func (mi *mixinInvocation) selsParams() ([]*selector, map[string]string) { |
40 |
md, ok := mi.Context().mixins[mi.name] |
41 |
|
42 |
if !ok { |
43 |
return nil, nil |
44 |
} |
45 |
|
46 |
params := make(map[string]string) |
47 |
|
48 |
l := len(mi.paramValues) |
49 |
|
50 |
for i, name := range md.paramNames { |
51 |
if i < l { |
52 |
params[name] = mi.paramValues[i] |
53 |
} |
54 |
} |
55 |
|
56 |
return md.sels, params |
57 |
} |
58 |
|
59 |
// newMixinInvocation creates and returns a mixin invocation. |
60 |
func newMixinInvocation(ln *line, parent element) (*mixinInvocation, error) { |
61 |
name, paramValues, err := mixinNP(ln, false) |
62 |
|
63 |
if err != nil { |
64 |
return nil, err |
65 |
} |
66 |
|
67 |
return &mixinInvocation{ |
68 |
elementBase: newElementBase(ln, parent), |
69 |
name: name, |
70 |
paramValues: paramValues, |
71 |
}, nil |
72 |
} |