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 }