ftml/parsing/rule/impls/
strikethrough.rs1use super::prelude::*;
27
28pub const RULE_STRIKETHROUGH_DASH: Rule = Rule {
29 name: "strikethrough-dash",
30 position: LineRequirement::Any,
31 try_consume_fn: dash,
32};
33
34pub const RULE_STRIKETHROUGH_TILDE: Rule = Rule {
35 name: "strikethrough-tilde",
36 position: LineRequirement::Any,
37 try_consume_fn: tilde,
38};
39
40fn dash<'r, 't>(parser: &mut Parser<'r, 't>) -> ParseResult<'r, 't, Elements<'t>> {
41 trace!("Trying to create a double dash strikethrough");
42 try_consume_strikethrough(parser, RULE_STRIKETHROUGH_DASH, Token::DoubleDash)
43}
44
45fn tilde<'r, 't>(parser: &mut Parser<'r, 't>) -> ParseResult<'r, 't, Elements<'t>> {
46 trace!("Trying to create a double tilde strikethrough");
47 try_consume_strikethrough(parser, RULE_STRIKETHROUGH_TILDE, Token::DoubleTilde)
48}
49
50fn try_consume_strikethrough<'r, 't>(
52 parser: &mut Parser<'r, 't>,
53 rule: Rule,
54 token: Token,
55) -> ParseResult<'r, 't, Elements<'t>> {
56 debug!("Trying to create a strikethrough (token {})", token.name());
57 assert_step(parser, token)?;
58 collect_container(
59 parser,
60 rule,
61 ContainerType::Strikethrough,
62 &[ParseCondition::current(token)],
63 &[
64 ParseCondition::current(Token::ParagraphBreak),
65 ParseCondition::token_pair(token, Token::Whitespace),
66 ParseCondition::token_pair(Token::Whitespace, token),
67 ],
68 None,
69 )
70}