use super::{AstNode, MarkupType, Rule, TeaPair, parse_line_content};
pub fn parse_markup(pair: TeaPair) -> AstNode {
assert!(pair.as_rule() == Rule::markup);
let mut pairs = pair.into_inner();
let symbol = pairs
.next()
.expect("Markup must contain markup_symbol!")
.as_str();
let of = match symbol {
"+" => MarkupType::Bold,
"*" => MarkupType::Italic,
"~" => MarkupType::Strikethrough,
"_" => MarkupType::Underline,
other => panic!("Unknown MarkupType: {other}"),
};
let content = pairs.next().expect("Markup must contain line_content!");
let inner = parse_line_content(content).into();
AstNode::Markup { of, inner }
}
pub fn parse_header(pair: TeaPair) -> AstNode {
assert!(pair.as_rule() == Rule::header);
let mut pairs = pair.into_inner();
let symbol = pairs
.next()
.expect("Header must contain header_symbol!")
.as_str();
let len = symbol.len().to_le_bytes()[0];
let of = MarkupType::Header(len);
let content = pairs.next().expect("Header must contain line_content!");
let inner = parse_line_content(content).into();
AstNode::Markup { of, inner }
}