//
// Copyright (c) 2008, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
// 7 Nov 08 Brian Frank Creation
//
**
** XNode is the base class for `XElem` and `XText`.
**
@Js abstract class XNode
{
**
** Return the node type enum. Note that XElem always
** returns 'elem', but that during pull parsing XParser
** will return 'elemStart' and 'elemEnd'.
**
abstract XNodeType nodeType()
**
** Get the root document node or null if this node is
** not mounted under a XDoc instance.
**
XDoc? doc()
{
for (XNode? x := this; x != null; x = x.parent)
if (x is XDoc) return x
return null
}
**
** Get the parent of this node or null if unmounted.
**
XNode? parent { internal set }
**
** Conveniece to `write` to an in-memory string.
**
Str writeToStr()
{
s := StrBuf()
write(s.out)
return s.toStr
}
**
** Write this node to the output stream.
**
abstract Void write(OutStream out)
}
**************************************************************************
** XNodeType
**************************************************************************
**
** Enumerates the type of `XNode` and current node of `XParser`.
**
@Js enum class XNodeType
{
** Document node type by `XDoc.nodeType`
doc,
** Element node type returned by `XElem.nodeType`
elem,
** Text node type returned by `XText.nodeType`
text,
** Processing instruction node type returned by `XPi.nodeType`
pi,
** Start of element used by XParser when pull parsing.
elemStart,
** End of element used by XParser when pull parsing.
elemEnd
}