use super::shared::{opt_span_range, GrammarSpan};
use crate::grammar::inlines as grammar;
use crate::parser::ast::{Node, NodeKind};
use nom::IResult;
pub fn parse_dash_strikethrough(input: GrammarSpan) -> IResult<GrammarSpan, Node> {
let start = input;
let (rest, content) = grammar::dash_strikethrough(input)?;
let span = opt_span_range(start, rest);
let children = match crate::parser::inlines::parse_inlines_from_span(content) {
Ok(children) => children,
Err(e) => {
log::warn!("Failed to parse dash-strikethrough children: {}", e);
vec![]
}
};
Ok((
rest,
Node {
kind: NodeKind::Strikethrough,
span,
children,
},
))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn smoke_test_parse_dash_strikethrough() {
let input = GrammarSpan::new("--hi--");
let (rest, node) = parse_dash_strikethrough(input).unwrap();
assert_eq!(*rest.fragment(), "");
assert!(matches!(node.kind, NodeKind::Strikethrough));
}
}