# AST Nodes URL: /docs/reference/nodes/ Section: reference Tags: reference, ast, nodes -------------------------------------------------------------------------------- AST Nodes Patitas parses Markdown into a typed Abstract Syntax Tree (AST). All nodes are frozen dataclasses with slots for memory efficiency and thread safety. Block Nodes Block nodes form the document structure. Document The root node (not typically used directly). @dataclass(frozen=True, slots=True) class Document: children: tuple[Block, ...] source_file: str | None = None Heading @dataclass(frozen=True, slots=True) class Heading: level: int # 1-6 children: tuple[Inline, ...] location: SourceLocation | None = None Paragraph @dataclass(frozen=True, slots=True) class Paragraph: children: tuple[Inline, ...] location: SourceLocation | None = None List @dataclass(frozen=True, slots=True) class List: ordered: bool start: int | None # For ordered lists tight: bool children: tuple[ListItem, ...] location: SourceLocation | None = None ListItem @dataclass(frozen=True, slots=True) class ListItem: children: tuple[Block, ...] location: SourceLocation | None = None BlockQuote @dataclass(frozen=True, slots=True) class BlockQuote: children: tuple[Block, ...] location: SourceLocation | None = None CodeBlock @dataclass(frozen=True, slots=True) class CodeBlock: info: str # Language hint literal: str # Code content location: SourceLocation | None = None ThematicBreak @dataclass(frozen=True, slots=True) class ThematicBreak: location: SourceLocation | None = None HtmlBlock @dataclass(frozen=True, slots=True) class HtmlBlock: literal: str location: SourceLocation | None = None Inline Nodes Inline nodes appear within blocks. Text @dataclass(frozen=True, slots=True) class Text: literal: str location: SourceLocation | None = None Emphasis @dataclass(frozen=True, slots=True) class Emphasis: children: tuple[Inline, ...] location: SourceLocation | None = None Strong @dataclass(frozen=True, slots=True) class Strong: children: tuple[Inline, ...] location: SourceLocation | None = None Code Inline code span. @dataclass(frozen=True, slots=True) class Code: literal: str location: SourceLocation | None = None Link @dataclass(frozen=True, slots=True) class Link: destination: str title: str children: tuple[Inline, ...] location: SourceLocation | None = None Image @dataclass(frozen=True, slots=True) class Image: destination: str title: str alt: str location: SourceLocation | None = None SoftBreak @dataclass(frozen=True, slots=True) class SoftBreak: location: SourceLocation | None = None HardBreak @dataclass(frozen=True, slots=True) class HardBreak: location: SourceLocation | None = None HtmlInline @dataclass(frozen=True, slots=True) class HtmlInline: literal: str location: SourceLocation | None = None Type Aliases Block = Heading | Paragraph | List | ListItem | BlockQuote | CodeBlock | ThematicBreak | HtmlBlock | Directive Inline = Text | Emphasis | Strong | Code | Link | Image | SoftBreak | HardBreak | HtmlInline -------------------------------------------------------------------------------- Metadata: - Word Count: 359 - Reading Time: 2 minutes