use oxyl_lexer::{Span};
#[derive(Debug, Clone)]
pub struct Document {
pub body: Vec<Node>,
}
#[derive(Debug, Clone)]
pub enum Node {
Text(String, Span),
ParagraphBreak(Span),
Command { name: String , args: Vec<Arg>, span: Span, },
Group(Vec<Node>, Span),
Math(Vec<Node>, Span),
DisplayMath(Vec<Node>, Span),
Comment(String, Span),
AlignTab(Span),
Tilde(Span),
Environment {
name: String,
args: Vec<Arg>,
body: Vec<Node>,
span: Span,
},
}
impl Node {
pub fn span(&self) -> Span {
match self {
Node::Text(_, s) => *s,
Node::ParagraphBreak(s) => *s,
Node::Command { span, .. } => *span,
Node::Group(_, s) => *s,
Node::Math(_, s) => *s,
Node::DisplayMath(_, s) => *s,
Node::Comment(_, s) => *s,
Node::AlignTab(s) => *s,
Node::Tilde(s) => *s,
Node::Environment{ span, .. } => *span,
}
}
}
#[derive(Debug, Clone)]
pub enum Arg {
Mandatory(Vec<Node>),
Optional(Vec<Node>),
}