teacat_lib 0.5.1

Tools for working with TeaCat files
Documentation
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();
	// Since the length is always between 1 and 6, it should always be in the first byte
	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 }
}