///|
pub(all) enum TokenKind {
Header
Statement
Comment
Directive
FrontMatter
Whitespace
Error
} derive(Eq, Debug)
///|
pub(all) struct Token {
kind : TokenKind
text : String
offset : Int32
} 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}