/[aya]/vendor/github.com/yosssi/gcss/element_base.go
ViewVC logotype

Contents of /vendor/github.com/yosssi/gcss/element_base.go

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations)
Mon Sep 30 00:42:06 2024 UTC (6 weeks, 4 days ago) by yakumo_izuru
Branch: MAIN
CVS Tags: HEAD
Error occurred while calculating annotation data.
Mirrored from https://git.chaotic.ninja/git/yakumo_izuru/aya

1 package gcss
2
3 import (
4 "bytes"
5 "io"
6 )
7
8 // elementBase holds the common fields of an element.
9 type elementBase struct {
10 ln *line
11 parent element
12 sels []*selector
13 decs []*declaration
14 mixins []*mixinInvocation
15 ctx *context
16 }
17
18 // AppendChild appends a child element to the element.
19 func (eBase *elementBase) AppendChild(child element) {
20 switch c := child.(type) {
21 case *mixinInvocation:
22 eBase.mixins = append(eBase.mixins, c)
23 case *declaration:
24 eBase.decs = append(eBase.decs, c)
25 case *selector:
26 eBase.sels = append(eBase.sels, c)
27 }
28 }
29
30 // Base returns the element base.
31 func (eBase *elementBase) Base() *elementBase {
32 return eBase
33 }
34
35 // SetContext sets the context to the element.
36 func (eBase *elementBase) SetContext(ctx *context) {
37 eBase.ctx = ctx
38 }
39
40 // Context returns the top element's context.
41 func (eBase *elementBase) Context() *context {
42 if eBase.parent != nil {
43 return eBase.parent.Context()
44 }
45
46 return eBase.ctx
47 }
48
49 // hasMixinDecs returns true if the element has a mixin
50 // which has declarations.
51 func (eBase *elementBase) hasMixinDecs() bool {
52 for _, mi := range eBase.mixins {
53 if decs, _ := mi.decsParams(); len(decs) > 0 {
54 return true
55 }
56 }
57
58 return false
59 }
60
61 // hasMixinSels returns true if the element has a mixin
62 // which has selectors.
63 func (eBase *elementBase) hasMixinSels() bool {
64 for _, mi := range eBase.mixins {
65 if sels, _ := mi.selsParams(); len(sels) > 0 {
66 return true
67 }
68 }
69
70 return false
71 }
72
73 // writeDecsTo writes the element's declarations to w.
74 func (eBase *elementBase) writeDecsTo(w io.Writer, params map[string]string) (int64, error) {
75 bf := new(bytes.Buffer)
76
77 // Write the declarations.
78 for _, dec := range eBase.decs {
79 // Writing to the bytes.Buffer never returns an error.
80 dec.writeTo(bf, params)
81 }
82
83 // Write the mixin's declarations.
84 for _, mi := range eBase.mixins {
85 decs, prms := mi.decsParams()
86
87 for _, dec := range decs {
88 // Writing to the bytes.Buffer never returns an error.
89 dec.writeTo(bf, prms)
90 }
91 }
92
93 n, err := w.Write(bf.Bytes())
94
95 return int64(n), err
96 }
97
98 // newElementBase creates and returns an element base.
99 func newElementBase(ln *line, parent element) elementBase {
100 return elementBase{
101 ln: ln,
102 parent: parent,
103 }
104 }

nishi@chaotic.ninja
ViewVC Help
Powered by ViewVC 1.3.0-dev