Main API

class wenmode.Wenmode(rules=None, renderer=None, directives=())

Convenience facade that combines a parser and a renderer.

Wenmode is the main high-level API for applications. It parses Markdown with a configured rule set and renders the resulting node tree with a renderer.

Parameters:
  • rules (Iterable[type[Rule] | Rule] | None) – Rule classes or configured rule instances. When omitted, the CommonMark-style preset is used.

  • renderer (BaseRenderer | None) – Renderer instance used by render() and render_node(). When omitted, HTMLRenderer is used.

  • directives (Iterable[DirectiveHtmlRenderer]) – HTML directive renderers to register on the default or supplied HTML renderer.

parse(source)

Parse Markdown into a root node.

Parameters:

source (str | Iterable[str]) – Markdown source as a string or an iterable of lines.

Returns:

Parsed document root.

Return type:

Root

render(source)

Parse Markdown and render it with the configured renderer.

Parameters:

source (str | Iterable[str]) – Markdown source as a string or an iterable of lines.

Returns:

Rendered output.

Return type:

str

render_node(node)

Render an existing AST node.

Parameters:

node (Node) – Node to render.

Returns:

Rendered output.

Return type:

str

stream(source)

Yield rendered chunks while parsing Markdown incrementally.

Streaming is only supported for rule sets that do not require deferred document-wide inline transforms.

Parameters:

source (str | Iterable[str]) – Markdown source as a string or an iterable of lines.

Returns:

Iterator of rendered chunks.

Raises:

wenmode.StreamingUnsupportedError – Raised by the parser when a configured rule set requires deferred inline resolution.

Return type:

Iterator[str]

register_rule(rule)

Register or replace one parser rule.

Parameters:

rule (type[Rule] | Rule) – Rule class or configured rule instance.

register_rules(rules)

Register or replace multiple parser rules.

Parameters:

rules (Iterable[type[Rule] | Rule]) – Rule classes or configured rule instances.

register_directive_renderer(directive)

Register an HTML directive renderer.

Parameters:

directive (DirectiveHtmlRenderer) – Directive renderer implementing DirectiveHtmlRenderer.

Raises:

TypeError – If this Wenmode instance does not use an HTMLRenderer.

class wenmode.Parser(rules)

Parse Markdown into Wenmode nodes with an explicit rule set.

Parser instances are reusable. Per-document state such as reference definitions, footnotes, abbreviation definitions, and deferred inline queues is created for each parse.

Parameters:

rules (Iterable[type[Rule] | Rule]) – Rule classes or configured rule instances to enable.

register_rule(rule)

Register or replace one rule by name.

Parameters:

rule (type[Rule] | Rule) – Rule class or configured rule instance.

register_rules(rules)

Register or replace multiple rules by name.

Parameters:

rules (Iterable[type[Rule] | Rule]) – Rule classes or configured rule instances.

parse(source)

Parse Markdown into a root node.

Parameters:

source (str | Iterable[str]) – Markdown source as a string or an iterable of lines.

Returns:

Parsed document root.

Return type:

Root

parse_iter(source)

Yield top-level block nodes as they are parsed.

This API is intended for streaming renderers and rejects rule sets that need deferred inline resolution.

Parameters:

source (str | Iterable[str]) – Markdown source as a string or an iterable of lines.

Returns:

Iterator of parsed block nodes.

Raises:

StreamingUnsupportedError – If enabled rules require deferred inline transforms.

Return type:

Iterator[Node]

parse_blocks(text, parent_state)

Parse nested block content using a parent parse state.

Custom block rules should use this helper for nested Markdown content so extension state and deferred inline queues are shared with the enclosing parse.

Parameters:
  • text (str) – Markdown block content.

  • parent_state (BlockState) – Current block state from the outer parse.

Returns:

Parsed child nodes.

Return type:

list[Node]

parse_inlines(text, state=None)

Parse inline Markdown into child nodes.

Custom inline, block, and continuation rules can call this method when they need nested inline parsing.

Parameters:
  • text (str) – Inline Markdown source.

  • state (BlockState | None) – Current block state, if parsing happens inside a document parse.

Returns:

Parsed inline nodes.

Return type:

list[Node]

is_paragraph_interrupt(line, state=None)

Return whether a line would interrupt a paragraph.

Custom block parsing code can use this helper to mirror the parser’s paragraph-interruption behavior.

Parameters:
  • line (str) – Candidate source line.

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

Returns:

True if the line starts an interrupting block.

Return type:

bool

class wenmode.StreamingUnsupportedError

Raised when a rule set cannot be used for streaming output.