Mercurial > yakumo_izuru > aya
comparison vendor/github.com/yosssi/gcss/variable.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 |
comparison
equal
deleted
inserted
replaced
| 65:6d985efa0f7a | 66:787b5ee0289d |
|---|---|
| 1 package gcss | |
| 2 | |
| 3 import ( | |
| 4 "fmt" | |
| 5 "io" | |
| 6 "strings" | |
| 7 ) | |
| 8 | |
| 9 // variable represents a GCSS variable. | |
| 10 type variable struct { | |
| 11 elementBase | |
| 12 name string | |
| 13 value string | |
| 14 } | |
| 15 | |
| 16 // WriteTo writes the variable to the writer. | |
| 17 func (v *variable) WriteTo(w io.Writer) (int64, error) { | |
| 18 n, err := w.Write([]byte(v.value)) | |
| 19 | |
| 20 return int64(n), err | |
| 21 } | |
| 22 | |
| 23 // variableNV extracts a variable name and value | |
| 24 // from the line. | |
| 25 func variableNV(ln *line) (string, string, error) { | |
| 26 s := strings.TrimSpace(ln.s) | |
| 27 | |
| 28 if !strings.HasPrefix(s, dollarMark) { | |
| 29 return "", "", fmt.Errorf("variable must start with %q [line: %d]", dollarMark, ln.no) | |
| 30 } | |
| 31 | |
| 32 nv := strings.SplitN(s, space, 2) | |
| 33 | |
| 34 if len(nv) < 2 { | |
| 35 return "", "", fmt.Errorf("variable's name and value should be divided by a space [line: %d]", ln.no) | |
| 36 } | |
| 37 | |
| 38 if !strings.HasSuffix(nv[0], colon) { | |
| 39 return "", "", fmt.Errorf("variable's name should end with a colon [line: %d]", ln.no) | |
| 40 } | |
| 41 | |
| 42 return strings.TrimSuffix(strings.TrimPrefix(nv[0], dollarMark), colon), nv[1], nil | |
| 43 } | |
| 44 | |
| 45 // newVariable creates and returns a variable. | |
| 46 func newVariable(ln *line, parent element) (*variable, error) { | |
| 47 name, value, err := variableNV(ln) | |
| 48 | |
| 49 if err != nil { | |
| 50 return nil, err | |
| 51 } | |
| 52 | |
| 53 if strings.HasSuffix(value, semicolon) { | |
| 54 return nil, fmt.Errorf("variable must not end with %q", semicolon) | |
| 55 } | |
| 56 | |
| 57 return &variable{ | |
| 58 elementBase: newElementBase(ln, parent), | |
| 59 name: name, | |
| 60 value: value, | |
| 61 }, nil | |
| 62 } |
