ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/aya/vendor/github.com/yosssi/gcss/variable.go
Revision: 1.1
Committed: Mon Sep 30 00:42:06 2024 UTC (6 weeks, 4 days ago) by yakumo_izuru
Branch: MAIN
CVS Tags: HEAD
Log Message:
Mirrored from https://git.chaotic.ninja/git/yakumo_izuru/aya

File Contents

# User Rev Content
1 yakumo_izuru 1.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     }