Markdown parser fork with extended syntax for personal use.
at hack 64 lines 1.8 kB view raw
1//! MDX expression (text) occurs in the [text][] content type. 2//! 3//! ## Grammar 4//! 5//! MDX expression (text) forms with the following BNF 6//! (<small>see [construct][crate::construct] for character groups</small>): 7//! 8//! ```bnf 9//! mdx_expression_text ::= mdx_expression 10//! 11//! ; See the `partial_mdx_expression` construct for the BNF of that part. 12//! ``` 13//! 14//! See [`mdx_expression`][mdx_expression] for more info. 15//! 16//! ## Tokens 17//! 18//! * [`MdxTextExpression`][Name::MdxTextExpression] 19//! * see [`mdx_expression`][mdx_expression] for more 20//! 21//! ## Recommendation 22//! 23//! See [`mdx_expression`][mdx_expression] for recommendations. 24//! 25//! ## References 26//! 27//! * [`syntax.js` in `micromark-extension-mdx-expression`](https://github.com/micromark/micromark-extension-mdx-expression/blob/main/packages/micromark-extension-mdx-expression/dev/lib/syntax.js) 28//! * [`mdxjs.com`](https://mdxjs.com) 29//! 30//! [text]: crate::construct::text 31//! [mdx_expression]: crate::construct::partial_mdx_expression 32 33use crate::event::Name; 34use crate::state::{Name as StateName, State}; 35use crate::tokenizer::Tokenizer; 36 37/// Start of an MDX expression (text). 38/// 39/// ```markdown 40/// > | a {Math.PI} c 41/// ^ 42/// ``` 43pub fn start(tokenizer: &mut Tokenizer) -> State { 44 if Some(b'{') == tokenizer.current 45 && tokenizer.parse_state.options.constructs.mdx_expression_text 46 { 47 tokenizer.tokenize_state.token_1 = Name::MdxTextExpression; 48 tokenizer.attempt(State::Next(StateName::MdxExpressionTextAfter), State::Nok); 49 State::Retry(StateName::MdxExpressionStart) 50 } else { 51 State::Nok 52 } 53} 54 55/// After expression. 56/// 57/// ```markdown 58/// > | a {Math.PI} c 59/// ^ 60/// ``` 61pub fn after(tokenizer: &mut Tokenizer) -> State { 62 tokenizer.tokenize_state.token_1 = Name::Data; 63 State::Ok 64}