Markdown parser fork with extended syntax for personal use.
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}