Parser: MyST Markdown to AST Parsing#

Parser collects the classmethods that hook MyST-specific block and inline rules (directives, roles, line comments, block breaks, targets) into a markdown-it engine. Each rule is registered declaratively through the ParserEntry.register() decorator, which records where in the rule chain the parser is inserted; Parser.setup() then replays the registry onto an engine alongside the default mdformat extensions.

MyST Markdown to AST Parsing.

Parser collects the classmethods that hook MyST-specific block and inline rules (directives, roles, line comments, block breaks, targets) into a markdown-it engine. Each rule is registered declaratively through the ParserEntry.register() decorator, which records where in the rule chain the parser is inserted; Parser.setup() then replays the registry onto an engine alongside the default mdformat extensions.

class myform.Parser.ParserEntry(name: str, func: Interface, rule: str = '', mode: 'before' | 'after' | 'at' = 'before', inline: bool = False, alt: list[str] = <factory>)#

One registered parser rule and its placement, kept free of import-time plugins.

func: Interface#

The rule callable; on success it increments state.line, adds tokens, and returns True.

model_dump(**kwargs: Any) → dict[str, Any]#

Return the markdown-it registration keyword arguments.

Accepts (and ignores) the standard BaseModel.model_dump keywords (mode, include, exclude, …): the pre-dataclass Pydantic model serialized through a plain-mode model_serializer, which produced this same fixed shape regardless of those options, so keyword callers keep working unchanged.

classmethod model_validate(data: Any) → ParserEntry#

Build an entry from a mapping of constructor fields (or pass an entry through).

Restores the one BaseModel constructor-style API the dataclass conversion dropped; validation itself still happens in __post_init__.

property options: RuleOptionsType | None#

Get the rule options for this parser.

classmethod register(rule: str, name: str = '', mode: 'before' | 'after' | 'at' = 'before', inline: bool = False, alt: list[str] | None = None, extra_alt: list[str] | None = None) → Callable[[M], M]#

Decorator factory that registers a parser method into the class registry.

Parameters:
  • rule – The markdown-it rule name this parser hooks into (e.g. 'fence').

  • name – Explicit registration name; inferred from the function name if omitted.

  • mode – Where to insert relative to the existing rule ('before', 'after', 'at').

  • inline – Whether this is an inline (vs. block) rule.

  • alt – Alternative block rules under which this parser may also fire.

  • extra_alt – Additional alternative rules appended to alt (block only).

Returns:

A decorator that registers the method and returns it unchanged.

class myform.Parser.Parser#

Parser for MyST-specific syntax nodes (i.e. MD -> AST).

classmethod setup(engine: MarkdownIt, *additional_plugins: str | ParserExtensionInterface) → None#

Set up the given engine with the default mdformat extensions and our custom parsers.

Parameters:
  • engine – The markdown-it engine to configure.

  • *additional_plugins – Extra mdformat parser extensions (or their names) to enable.

classmethod parse_myst_role(state: StateInline, silent: bool) → bool#

Parse MyST roles – inline {name} markers followed by backtick-fenced content.

classmethod parse_safe_setext_heading(state: StateBlock, l0: int, le: int, silent: bool) → bool#

Preserve an ambiguous unary nested dash before Setext parsing.

classmethod parse_myst_directive(state: StateBlock, l0: int, le: int, silent: bool) → bool#

Parse MyST directives (fenced code blocks identified by {bracketed} info strings).

On success: increment state.line, add to state.tokens, and return True.

classmethod parse_myst_line_comment(state: StateBlock, l0: int, le: int, silent: bool) → bool#

Parse MyST line comments (e.g. % comment text).

classmethod parse_myst_block_break(state: StateBlock, l0: int, le: int, silent: bool) → bool#

Parse MyST thematic breaks (e.g. +++ {"json": "data"}).

classmethod parse_myst_target(state: StateBlock, l0: int, le: int, silent: bool) → bool#

Parse MyST targets (e.g. (target_name)=).