source: code/trunk/vendor/github.com/yosssi/gcss/element_base.go@ 67

Last change on this file since 67 was 67, checked in by Izuru Yakumo, 23 months ago

Use vendored modules

Signed-off-by: Izuru Yakumo <yakumo.izuru@…>

File size: 2.2 KB
Line 
1package gcss
2
3import (
4 "bytes"
5 "io"
6)
7
8// elementBase holds the common fields of an element.
9type 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.
19func (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.
31func (eBase *elementBase) Base() *elementBase {
32 return eBase
33}
34
35// SetContext sets the context to the element.
36func (eBase *elementBase) SetContext(ctx *context) {
37 eBase.ctx = ctx
38}
39
40// Context returns the top element's context.
41func (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.
51func (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.
63func (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.
74func (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.
99func newElementBase(ln *line, parent element) elementBase {
100 return elementBase{
101 ln: ln,
102 parent: parent,
103 }
104}
Note: See TracBrowser for help on using the repository browser.