view vendor/github.com/yosssi/gcss/element.go @ 74:d8727551f403 draft

The Empress (III) * Change the way how versions are handled in version.go (to ease `go install`) * Upgrade yaml.v2 to yaml.v3 Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Mon, 04 Dec 2023 00:54:29 +0000
parents 787b5ee0289d
children
line wrap: on
line source

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
}