all2md.renderers.org
Org-Mode rendering from AST.
This module provides the OrgRenderer class which converts AST nodes to Org-Mode text. The renderer supports configurable handling of TODO states, tags, and properties.
The rendering process uses the visitor pattern to traverse the AST and generate Org-Mode output.
- class all2md.renderers.org.OrgRenderer
Bases:
NodeVisitor,InlineContentMixin,BaseRendererRender AST nodes to Org-Mode.
This class implements the visitor pattern to traverse an AST and generate Org-Mode output with configurable formatting options.
- Parameters:
options (OrgRendererOptions or None, default = None) – Org-Mode formatting options
Examples
Basic usage:
>>> from all2md.ast import Document, Heading, Text >>> from all2md.renderers.org import OrgRenderer >>> doc = Document(children=[ ... Heading(level=1, content=[Text(content="Title")]) ... ]) >>> renderer = OrgRenderer() >>> org = renderer.render_to_string(doc) >>> print(org) * Title
Rendering enhanced Org features:
>>> from all2md import to_markdown >>> from all2md.options.org import OrgParserOptions, OrgRendererOptions >>> # Parse with enhanced features >>> parser_opts = OrgParserOptions( ... parse_logbook=True, ... parse_clock=True, ... parse_closed=True, ... preserve_timestamp_metadata=True ... ) >>> # Render with enhanced features >>> renderer_opts = OrgRendererOptions( ... preserve_logbook=True, ... preserve_clock=True, ... preserve_closed=True ... ) >>> # Round-trip conversion preserves these features >>> markdown = to_markdown( ... "orgfile.org", ... source_format="org", ... parser_options=parser_opts ... )
Notes
Enhanced Org-Mode Features:
The renderer can output enhanced Org-mode metadata including:
CLOSED timestamps: When tasks are completed (org_closed metadata)
SCHEDULED/DEADLINE: With repeaters and time ranges (org_scheduled, org_deadline metadata)
LOGBOOK drawer: State changes and notes (org_logbook metadata)
CLOCK entries: Time tracking entries (org_clock metadata)
Tags: Heading tags (tags metadata)
TODO states: Task states (todo_keyword metadata)
Metadata Format Compatibility:
The renderer handles both dictionary (new format) and string (legacy format) metadata for backward compatibility:
Dictionary format includes structured data (start date, repeater, etc.)
String format is rendered directly
This ensures existing AST structures continue to work
orgparse Parser Limitations:
When working with documents parsed by the OrgParser (which uses orgparse), be aware that some metadata may be incomplete:
LOGBOOK drawer content may be missing if SCHEDULED/DEADLINE are placed after PROPERTIES drawer (orgparse strips it)
CLOCK entries may be incomplete in nested sections
The renderer handles these gracefully by checking for None/empty values
For best results when round-tripping Org-mode documents, use standard Org-mode formatting (SCHEDULED/DEADLINE before PROPERTIES drawer).
Initialize the Org renderer with options.
- __init__(options: OrgRendererOptions | None = None)
Initialize the Org renderer with options.
- render_to_string(document: Document) str
Render a document AST to Org-Mode string.
- Parameters:
document (Document) – The document node to render
- Returns:
Org-Mode text
- Return type:
str
- visit_document(node: Document) None
Render a Document node.
- Parameters:
node (Document) – Document to render
- visit_heading(node: Heading) None
Render a Heading node.
- Parameters:
node (Heading) – Heading to render
- visit_paragraph(node: Paragraph) None
Render a Paragraph node.
- Parameters:
node (Paragraph) – Paragraph to render
- visit_code_block(node: CodeBlock) None
Render a CodeBlock node.
- Parameters:
node (CodeBlock) – Code block to render
- visit_block_quote(node: BlockQuote) None
Render a BlockQuote node.
- Parameters:
node (BlockQuote) – Block quote to render
- visit_list_item(node: ListItem) None
Render a ListItem node.
- Parameters:
node (ListItem) – List item to render
- visit_table_row(node: TableRow) None
Render a TableRow node.
- Parameters:
node (TableRow) – Table row to render
- visit_table_cell(node: TableCell) None
Render a TableCell node.
- Parameters:
node (TableCell) – Table cell to render
- visit_thematic_break(node: ThematicBreak) None
Render a ThematicBreak node.
- Parameters:
node (ThematicBreak) – Thematic break to render
- visit_emphasis(node: Emphasis) None
Render an Emphasis node.
- Parameters:
node (Emphasis) – Emphasis to render
- visit_line_break(node: LineBreak) None
Render a LineBreak node.
- Parameters:
node (LineBreak) – Line break to render
- visit_strikethrough(node: Strikethrough) None
Render a Strikethrough node.
- Parameters:
node (Strikethrough) – Strikethrough to render
- visit_underline(node: Underline) None
Render an Underline node.
- Parameters:
node (Underline) – Underline to render
- visit_superscript(node: Superscript) None
Render a Superscript node.
- Parameters:
node (Superscript) – Superscript to render
- visit_subscript(node: Subscript) None
Render a Subscript node.
- Parameters:
node (Subscript) – Subscript to render
- visit_html_inline(node: HTMLInline) None
Render inline HTML (preserve as-is).
- visit_footnote_reference(node: FootnoteReference) None
Render footnote reference.
- visit_footnote_definition(node: FootnoteDefinition) None
Render footnote definition.
- visit_math_inline(node: MathInline) None
Render inline math.
- visit_definition_list(node: DefinitionList) None
Render a DefinitionList node.
- Parameters:
node (DefinitionList) – Definition list to render
- visit_definition_term(node: DefinitionTerm) None
Render a DefinitionTerm node.
- Parameters:
node (DefinitionTerm) – Definition term to render
- visit_definition_description(node: DefinitionDescription) None
Render a DefinitionDescription node.
- Parameters:
node (DefinitionDescription) – Definition description to render
- visit_comment(node: Comment) None
Render a Comment node (block-level).
- Parameters:
node (Comment) – Comment block to render
- visit_comment_inline(node: CommentInline) None
Render a CommentInline node (inline).
- Parameters:
node (CommentInline) – Inline comment to render