Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja> git-svn-id: file:///srv/svn/repo/aya/trunk@67 cec141ff-132a-4243-88a5-ce187bd62f94
42 lines
1007 B
Go
42 lines
1007 B
Go
package gcss
|
|
|
|
import "io"
|
|
|
|
// element represents an element of GCSS source codes.
|
|
type element interface {
|
|
io.WriterTo
|
|
AppendChild(child element)
|
|
Base() *elementBase
|
|
SetContext(*context)
|
|
Context() *context
|
|
}
|
|
|
|
// newElement creates and returns an element.
|
|
func newElement(ln *line, parent element) (element, error) {
|
|
var e element
|
|
var err error
|
|
|
|
switch {
|
|
case ln.isComment():
|
|
e = newComment(ln, parent)
|
|
case ln.isAtRule():
|
|
e = newAtRule(ln, parent)
|
|
case ln.isMixinDeclaration():
|
|
// error can be ignored becuase the line is checked beforehand
|
|
// by calling `ln.isMixinDeclaration()`.
|
|
e, _ = newMixinDeclaration(ln, parent)
|
|
case ln.isMixinInvocation():
|
|
// error can be ignored becuase the line is checked beforehand
|
|
// by calling `ln.isMixinInvocation()`.
|
|
e, _ = newMixinInvocation(ln, parent)
|
|
case ln.isVariable():
|
|
e, err = newVariable(ln, parent)
|
|
case ln.isDeclaration():
|
|
e, err = newDeclaration(ln, parent)
|
|
default:
|
|
e, err = newSelector(ln, parent)
|
|
}
|
|
|
|
return e, err
|
|
}
|