sevenmark_parser/parser/token/
token_asterisk.rs1use crate::ast::{Element, Span, TextElement};
2use crate::parser::ParserInput;
3use winnow::Result;
4use winnow::prelude::*;
5use winnow::stream::Location as StreamLocation;
6use winnow::token::literal;
7
8pub fn token_asterisk_parser(parser_input: &mut ParserInput) -> Result<Element> {
9 if parser_input.state.inside_bold && parser_input.input.starts_with("**") {
11 return Err(winnow::error::ContextError::new());
12 }
13 if parser_input.state.inside_italic && parser_input.input.starts_with("*") {
15 return Err(winnow::error::ContextError::new());
16 }
17
18 let start = parser_input.current_token_start();
19 literal("*").parse_next(parser_input)?;
20 let end = parser_input.previous_token_end();
21
22 Ok(Element::Text(TextElement {
23 span: Span { start, end },
24 value: "*".to_string(),
25 }))
26}