Rules

For a compact lookup table of preset membership, generated nodes, rule options, and streaming compatibility, see Rule matrix.

Rule Base Classes

class wenmode.rules.Rule(name)

Base class for parser rules.

Parameters:

name (str) – Stable rule name. Parser rule dictionaries are keyed by this value.

class wenmode.rules.BlockRule(name, pattern)

Base class for block-level Markdown rules.

Parameters:

pattern (str) – Regular expression pattern used to detect block openers.

parse(parser, state, match)

Parse a matched block opener.

Implementations must advance state when they consume input.

Parameters:
  • parser (Parser) – Active parser.

  • state (BlockState) – Current block state.

  • match (re.Match[str]) – Match object from the compiled block opener.

Returns:

Parsed node, or None if the rule declines the match.

Return type:

Node | None

class wenmode.rules.ContinueRule(name)

Base class for rules that transform paragraph continuations.

matches(line)

Return whether a line should be checked by this continuation rule.

parse_paragraph_continuation(parser, state, lines)

Parse a paragraph continuation.

Parameters:
  • parser (Parser) – Active parser.

  • state (BlockState) – Current block state positioned at the continuation line.

  • lines (list[str]) – Paragraph lines collected so far.

Returns:

Replacement node, or None to keep parsing the paragraph.

Return type:

Node | None

class wenmode.rules.InlineRule(name, pattern, trigger_chars='')

Base class for inline Markdown rules.

Parameters:
  • pattern (str) – Regular expression pattern used by this inline rule.

  • trigger_chars (str) – Optional literal characters that can start the rule. Supplying trigger characters lets the parser dispatch inline rules more efficiently.

search(text, pos=0)

Search for the next candidate match.

Override this method for rules that need custom scanning behavior.

parse(parser, text, match, state=None)

Parse a matched inline opener.

Parameters:
  • parser (Parser) – Active parser.

  • text (str) – Full inline source text.

  • match (re.Match[str]) – Match object returned by this rule.

  • state (BlockState | None) – Current block state, if available.

Returns:

A (node, end_index) pair. Return (None, match.start()) to decline the match.

Return type:

tuple[Node | None, int]

class wenmode.rules.RootTransform(*args, **kwargs)

Protocol for document-wide transforms attached by rules.

Root transforms can collect definitions, request helper rules, defer inline parsing, and update the parsed root after block parsing completes.

prepare(parser, root, state)

Prepare document-wide state before deferred inlines resolve.

transform(parser, root, state)

Update the root after deferred inlines have resolved.

Block Rules

class wenmode.rules.ThematicBreak

Parse thematic breaks such as ---, ***, and ___.

Markdown syntax:

---
class wenmode.rules.FencedCode

Parse fenced code blocks opened by backticks or tildes.

Markdown syntax:

```python
print(1)
```
class wenmode.rules.IndentedCode

Parse indented code blocks.

Markdown syntax:

print(1)
class wenmode.rules.HtmlBlock(disallowed_tags=())

Parse CommonMark HTML block starts.

Markdown syntax:

<div>HTML</div>
Parameters:

disallowed_tags (Sequence[str]) – HTML tag names that should be escaped during parsing.

class wenmode.rules.List(task=False)

Parse ordered and unordered lists.

Markdown syntax:

- item
Parameters:

task (bool) – Parse GFM task list markers when True.

class wenmode.rules.AtxHeading(id_transform=False)

Parse hash-prefixed ATX headings.

Markdown syntax:

# Heading
Parameters:

id_transform (HeadingIdTransformOption) – True or a custom transform to generate heading IDs.

class wenmode.rules.SetextHeading(id_transform=False)

Parse setext headings from paragraph continuations.

Markdown syntax:

Heading
---
Parameters:

id_transform (HeadingIdTransformOption) – True or a custom transform to generate heading IDs.

class wenmode.rules.Blockquote

Parse > block quote containers.

Markdown syntax:

> blockquote
class wenmode.rules.Table

Parse GFM pipe tables.

Markdown syntax:

| A | B |
| --- | --- |
| x | y |
class wenmode.rules.FootnoteDefinition

Parse footnote definition blocks.

Markdown syntax:

[^a]: Footnote text.
class wenmode.rules.Abbreviation

Parse abbreviation definitions and rewrite matching text nodes.

Markdown syntax:

HTML

*[HTML]: HyperText Markup Language
class wenmode.rules.DefinitionList

Parse colon-prefixed definition list continuations.

Markdown syntax:

Term
: Definition
class wenmode.rules.MathBlock

Parse display math blocks fenced by $$ markers.

Markdown syntax:

$$
x + y
$$
class wenmode.rules.BlockSpoiler

Parse >! block spoiler containers.

Markdown syntax:

>! hidden text
class wenmode.rules.LeafDirective

Parse mdast-style leaf directives such as ::name[label].

Markdown syntax:

::toc[On this page]{min=2 max=3}
class wenmode.rules.ContainerDirective

Parse mdast-style container directives fenced with colons.

Markdown syntax:

:::note[Title]
Body.
:::
class wenmode.rules.FencedDirective

Parse MyST-style fenced directives such as code fences with {name}.

Markdown syntax:

```{note} Title
Body.
```
class wenmode.rules.ReferenceDefinition

Parse link and image reference definitions.

Markdown syntax:

[label]: https://example.com "Title"

Inline Rules

class wenmode.rules.BackslashEscape

Parse backslash escapes for Markdown punctuation.

Markdown syntax:

\*
class wenmode.rules.CharacterReference

Parse named and numeric character references.

Markdown syntax:

&copy;
class wenmode.rules.HardBreak

Parse hard line breaks created with backslash or trailing spaces.

Markdown syntax:

line\
break

Parse angle-bracket URI and email autolinks.

Markdown syntax:

<https://example.com>
class wenmode.rules.RawHtml(disallowed_tags=(), comment_style='commonmark')

Parse inline raw HTML.

Markdown syntax:

<span>HTML</span>
Parameters:
  • disallowed_tags (Sequence[str]) – HTML tag names that should be escaped during parsing.

  • comment_style (Literal['commonmark', 'gfm']) – "commonmark" uses CommonMark 0.31-style inline comments. "gfm" uses the stricter GFM 0.29 comment grammar.

class wenmode.rules.Image(references=True)

Parse inline and reference-style images.

Markdown syntax:

![alt](/image.png)
Parameters:

references (bool) – Enable reference-style images and reference definitions.

Parse inline and reference-style links.

Markdown syntax:

[label](https://example.com)
Parameters:

references (bool) – Enable reference-style links and reference definitions.

class wenmode.rules.InlineCode

Parse inline code spans.

Markdown syntax:

`code`
class wenmode.rules.Emphasis

Parse emphasis and strong emphasis delimiters.

Markdown syntax:

*emphasis* and **strong**
class wenmode.rules.Strikethrough

Parse deletion spans delimited by tildes.

Markdown syntax:

~~deleted~~

Parse bare URL and email autolinks.

Markdown syntax:

https://example.com
class wenmode.rules.Mark

Parse highlighted text delimited by ==.

Markdown syntax:

==marked==
class wenmode.rules.Insert

Parse inserted text delimited by ^^.

Markdown syntax:

^^inserted^^
class wenmode.rules.Superscript

Parse caret-delimited superscript spans.

Markdown syntax:

2^10^
class wenmode.rules.Subscript

Parse tilde-delimited subscript spans.

Markdown syntax:

H~2~O
class wenmode.rules.Ruby

Parse ruby annotation syntax.

Markdown syntax:

[漢字(kanji)]
class wenmode.rules.InlineSpoiler

Parse spoiler spans delimited by >! and !<.

Markdown syntax:

>! secret !<
class wenmode.rules.InlineMath

Parse inline math delimited by dollar signs.

Markdown syntax:

$x + y$
class wenmode.rules.TextDirective

Parse mdast-style text directives such as :name[label].

Markdown syntax:

:abbr[HTML]{title="HyperText Markup Language"}
class wenmode.rules.Role

Parse MyST-style inline roles.

Markdown syntax:

{iconify}`devicon:pypi`
class wenmode.rules.Footnote

Parse footnote references and collect matching definitions.

Markdown syntax:

A note[^a].

[^a]: Footnote text.