///|
pub(all) enum TokenKind { Header; Statement; Comment; Directive; FrontMatter; Whitespace; Separator; Error } derive(Eq, Debug)
///|
pub(all) struct Token { kind : TokenKind; text : String; offset : Int } derive(Eq, Debug)
///|
pub struct Node { children : ReadOnlyArray[Token] } derive(Eq, Debug)
///|
pub fn Node::new(children : ArrayView[Token]) -> Node { {children:ReadOnlyArray::from_array(children)} }
///|
pub fn Node::text(self : Node) -> String { let out=StringBuilder(); for token in self.children { out.write_string(token.text) }; out.to_string() }
///|
pub fn Token::span(self : Token, source : String) -> @diagrams.Span { @positions.span(source,self.offset,self.offset+self.text.length()) }
///|
pub extend TokenKind with Eq::{equal,not_equal}
///|
pub extend TokenKind with @debug.Debug::{to_repr}
///|
pub extend Token with Eq::{equal,not_equal}
///|
pub extend Token with @debug.Debug::{to_repr}
///|
pub extend Node with Eq::{equal,not_equal}
///|
pub extend Node with @debug.Debug::{to_repr}