annotate vendor/github.com/yosssi/gcss/mixin_declaration.go @ 66:787b5ee0289d draft

Use vendored modules Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Sun, 23 Jul 2023 13:18:53 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 package gcss
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4 "fmt"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 "io"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 "strings"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 // mixinDeclaration represents a mixin declaration.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 type mixinDeclaration struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 elementBase
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 name string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 paramNames []string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 // WriteTo writes the selector to the writer.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 func (md *mixinDeclaration) WriteTo(w io.Writer) (int64, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 return 0, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 // mixinNP extracts a mixin name and parameters from the line.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 func mixinNP(ln *line, isDeclaration bool) (string, []string, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 s := strings.TrimSpace(ln.s)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 if !strings.HasPrefix(s, dollarMark) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 return "", nil, fmt.Errorf("mixin must start with %q [line: %d]", dollarMark, ln.no)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 s = strings.TrimPrefix(s, dollarMark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 np := strings.Split(s, openParenthesis)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 if len(np) != 2 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 return "", nil, fmt.Errorf("mixin's format is invalid [line: %d]", ln.no)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 paramsS := strings.TrimSpace(np[1])
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 if !strings.HasSuffix(paramsS, closeParenthesis) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 return "", nil, fmt.Errorf("mixin must end with %q [line: %d]", closeParenthesis, ln.no)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 paramsS = strings.TrimSuffix(paramsS, closeParenthesis)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 if strings.Index(paramsS, closeParenthesis) != -1 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 return "", nil, fmt.Errorf("mixin's format is invalid [line: %d]", ln.no)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49 var params []string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 if paramsS != "" {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 params = strings.Split(paramsS, comma)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 for i, p := range params {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 p = strings.TrimSpace(p)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 if isDeclaration {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 if !strings.HasPrefix(p, dollarMark) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60 return "", nil, fmt.Errorf("mixin's parameter must start with %q [line: %d]", dollarMark, ln.no)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 p = strings.TrimPrefix(p, dollarMark)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 params[i] = p
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 return np[0], params, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 // newMixinDeclaration creates and returns a mixin declaration.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 func newMixinDeclaration(ln *line, parent element) (*mixinDeclaration, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74 name, paramNames, err := mixinNP(ln, true)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 return nil, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
79
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
80 return &mixinDeclaration{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
81 elementBase: newElementBase(ln, parent),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
82 name: name,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
83 paramNames: paramNames,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
84 }, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
85 }