func (l *Leaf) SetChildren(newChildren []Node) {
	panic("leaf node cannot have children")
}
SetChildren will panic becuase Leaf cannot have children
package ast
type ListType int
const (
	ListTypeOrdered ListType = 1 << iota
	ListTypeDefinition
	ListTypeTerm
	ListItemContainsBlock
	ListItemBeginningOfList  
	ListItemEndOfList
)
type CellAlignFlags int
const (
	TableAlignmentLeft CellAlignFlags = 1 << iota
	TableAlignmentRight
	TableAlignmentCenter = (TableAlignmentLeft | TableAlignmentRight)
)
func (a CellAlignFlags) String() string {
	switch a {
	case TableAlignmentLeft:
		return "left"
	case TableAlignmentRight:
		return "right"
	case TableAlignmentCenter:
		return "center"
	default:
		return ""
	}
}
type DocumentMatters int
const (
	DocumentMatterNone DocumentMatters = iota
	DocumentMatterFront
	DocumentMatterMain
	DocumentMatterBack
)
type CitationTypes int
const (
	CitationTypeNone CitationTypes = iota
	CitationTypeSuppressed
	CitationTypeInformative
	CitationTypeNormative
)
type Node interface {
	AsContainer() *Container
	AsLeaf() *Leaf
	GetParent() Node
	SetParent(newParent Node)
	GetChildren() []Node
	SetChildren(newChildren []Node)
}
type Container struct {
	Parent   Node
	Children []Node
	Literal []byte  
	Content []byte  
	*Attribute  
}
func (c *Container) AsContainer() *Container {
	return c
}
func (c *Container) AsLeaf() *Leaf {
	return nil
}
func (c *Container) GetParent() Node {
	return c.Parent
}
func (c *Container) SetParent(newParent Node) {
	c.Parent = newParent
}
func (c *Container) GetChildren() []Node {
	return c.Children
}
func (c *Container) SetChildren(newChildren []Node) {
	c.Children = newChildren
}
type Leaf struct {
	Parent Node
	Literal []byte  
	Content []byte  
	*Attribute  
}
func (l *Leaf) AsContainer() *Container {
	return nil
}
func (l *Leaf) AsLeaf() *Leaf {
	return l
}
func (l *Leaf) GetParent() Node {
	return l.Parent
}
func (l *Leaf) SetParent(newParent Node) {
	l.Parent = newParent
}
func (l *Leaf) GetChildren() []Node {
	return nil
}