#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum Data {
GrammarError(String),
Repetition(String),
}
#[derive(Debug, PartialEq, Clone)]
#[non_exhaustive]
pub enum Token {
Str(String),
Paragraph(Vec<Token>),
Header(i32, Vec<Token>),
Emphasis(Vec<Token>),
Strong(Vec<Token>),
Strikethrough(Vec<Token>),
Code(String),
BlockQuote(Vec<Token>),
CodeBlock(String, String),
Superscript(Vec<Token>),
Subscript(Vec<Token>),
TaskItem(bool, Vec<Token>),
List(Vec<Token>),
OrderedList(usize, Vec<Token>),
Item(Vec<Token>),
DescriptionList(Vec<Token>),
DescriptionItem(Vec<Token>),
DescriptionTerm(Vec<Token>),
DescriptionDetails(Vec<Token>),
Table(i32, Vec<Token>),
TableHead(Vec<Token>),
TableRow(Vec<Token>),
TableCell(Vec<Token>),
FootnoteReference(String),
FootnoteDefinition(String, Vec<Token>),
Rule,
SoftBreak,
HardBreak,
Link(String, String, Vec<Token>),
Image(String, String, Vec<Token>),
StandaloneImage(String, String, Vec<Token>),
}
use Token::*;
impl Token {
pub fn inner(&self) -> Option<&[Token]> {
match *self {
Rule
| SoftBreak
| HardBreak
| Str(_)
| CodeBlock(_, _)
| Code(_)
| FootnoteReference(_) => None,
Paragraph(ref v)
| Header(_, ref v)
| Emphasis(ref v)
| Strong(ref v)
| BlockQuote(ref v)
| Subscript(ref v)
| Superscript(ref v)
| List(ref v)
| OrderedList(_, ref v)
| Item(ref v)
| DescriptionList(ref v)
| DescriptionItem(ref v)
| DescriptionTerm(ref v)
| DescriptionDetails(ref v)
| Table(_, ref v)
| TableHead(ref v)
| TableRow(ref v)
| TableCell(ref v)
| FootnoteDefinition(_, ref v)
| Link(_, _, ref v)
| Image(_, _, ref v)
| StandaloneImage(_, _, ref v)
| Strikethrough(ref v)
| TaskItem(_, ref v) => Some(v),
}
}
pub fn inner_mut(&mut self) -> Option<&mut Vec<Token>> {
match *self {
Rule
| SoftBreak
| HardBreak
| Str(_)
| CodeBlock(_, _)
| Code(_)
| FootnoteReference(_) => None,
Paragraph(ref mut v)
| Header(_, ref mut v)
| Emphasis(ref mut v)
| Strong(ref mut v)
| BlockQuote(ref mut v)
| Subscript(ref mut v)
| Superscript(ref mut v)
| List(ref mut v)
| OrderedList(_, ref mut v)
| Item(ref mut v)
| DescriptionList(ref mut v)
| DescriptionItem(ref mut v)
| DescriptionTerm(ref mut v)
| DescriptionDetails(ref mut v)
| Table(_, ref mut v)
| TableHead(ref mut v)
| TableRow(ref mut v)
| TableCell(ref mut v)
| FootnoteDefinition(_, ref mut v)
| Link(_, _, ref mut v)
| Image(_, _, ref mut v)
| Strikethrough(ref mut v)
| TaskItem(_, ref mut v)
| StandaloneImage(_, _, ref mut v) => Some(v),
}
}
pub fn is_str(&self) -> bool {
matches!(*self, Token::Str(_))
}
pub fn is_image(&self) -> bool {
matches!(*self, Token::Image(_, _, _))
}
pub fn is_header(&self) -> bool {
matches!(*self, Token::Header(..))
}
pub fn is_code(&self) -> bool {
matches!(*self, Token::CodeBlock(..) | Token::Code(..))
}
pub fn is_container(&self) -> bool {
matches!(
*self,
Token::Paragraph(..)
| Token::Header(..)
| Token::Emphasis(..)
| Token::Strong(..)
| Token::List(..)
| Token::OrderedList(..)
| Token::Table(..)
| Token::TableHead(..)
| Token::TableRow(..)
| Token::FootnoteDefinition(..)
| Token::TableCell(..)
| Token::Item(..)
| Token::BlockQuote(..)
)
}
}