sevenmark_parser/parser/markdown/
markdown_subscript.rs1use crate::ast::{Element, Span, TextStyleElement};
2use crate::parser::ParserInput;
3use crate::parser::element::element_parser;
4use crate::parser::utils::with_depth;
5use winnow::Result;
6use winnow::combinator::delimited;
7use winnow::prelude::*;
8use winnow::stream::Location as StreamLocation;
9use winnow::token::literal;
10
11pub fn markdown_subscript_parser(parser_input: &mut ParserInput) -> Result<Element> {
12 if parser_input.state.inside_subscript {
13 return Err(winnow::error::ContextError::new());
14 }
15 let start = parser_input.current_token_start();
16 let parsed_content = delimited(
17 literal(",,"),
18 |input: &mut ParserInput| {
19 input.state.set_subscript_context();
20 let result = with_depth(input, element_parser);
21 input.state.unset_subscript_context();
22 result
23 },
24 literal(",,"),
25 )
26 .parse_next(parser_input)?;
27 let end = parser_input.previous_token_end();
28
29 Ok(Element::Subscript(TextStyleElement {
30 span: Span { start, end },
31 children: parsed_content,
32 }))
33}