Classes
FencedDirective
FencedDirective that allows indentation, skips code blocks, and supports named closers.
This is cr…
FencedDirective
FencedDirective that allows indentation, skips code blocks, and supports named closers.
This is crucial for:
- Nesting directives inside lists or other blocks where indentation is required/present
- Showing directive syntax examples inside code blocks without the ::: sequences being consumed by the directive parser
- Using named closers (:::{/name}) for complex nested structures
Example with fence-depth counting (traditional): ::::{tab-set} :::{tab-item} Example Content here ::: ::::
Example with named closers (new): :::{tab-set} :::{tab-item} Example Content here :::{/tab-item} :::{/tab-set}
Both syntaxes work and can be mixed. Named closers are optional but recommended for deeply nested structures where counting colons is error-prone.
BaseFencedDirectiveMethods 1
parse_directive
parse_directive
def parse_directive(self, block: BlockParser, m: Match[str], state: BlockState) -> int | None
Parameters 3
block |
BlockParser |
|
m |
Match[str] |
|
state |
BlockState |
Returns
int | None
Internal Methods 4
__init__
__init__
def __init__(self, plugins: list[Any], markers: str = ':') -> None
Parameters 2
plugins |
list[Any] |
|
markers |
str |
_process_directive
Process a directive, supporting named closers and skipping code blocks.
This o…
_process_directive
def _process_directive(self, block: BlockParser, marker: str, start: int, state: BlockState) -> int | None
Process a directive, supporting named closers and skipping code blocks.
This overrides the base implementation to handle:
- Named closers: :::{/name} explicitly closes :::{name}
- Code blocks: ::: sequences inside fenced code blocks are skipped
- Traditional fence-depth: :::: closes ::::{name}
Named closers take precedence when found, otherwise falls back to fence-depth counting for backward compatibility.
Parameters 4
block |
BlockParser |
|
marker |
str |
|
start |
int |
|
state |
BlockState |
Returns
int | None
_extract_directive_name
Extract directive name from opening pattern like {name}.
_extract_directive_name
def _extract_directive_name(self, text: str) -> str | None
Extract directive name from opening pattern like {name}.
Parameters 1
text |
str |
Returns
str | None
_find_named_closer
Find a named closer for the given directive.
Handles nested directives of the …
_find_named_closer
def _find_named_closer(self, text: str, directive_name: str, is_inside_code_block: Any) -> tuple[str, int] | None
Find a named closer for the given directive.
Handles nested directives of the same type by tracking nesting depth.
Parameters 3
text |
str |
Remaining source text after the opening directive |
directive_name |
str |
Name of the directive to close (e.g., "tab-set") |
is_inside_code_block |
Any |
Function to check if position is in code block |
Returns
Tuple of (content_before_closer, end_position) or None if not foundtuple[str, int] | None
—