from __future__ import annotations from dataclasses import dataclass, field class IrNode: pass @dataclass class Text(IrNode): content: str @dataclass class Bold(IrNode): children: list[IrNode] = field(default_factory=list) @dataclass class Italic(IrNode): children: list[IrNode] = field(default_factory=list) @dataclass class BoldItalic(IrNode): children: list[IrNode] = field(default_factory=list) @dataclass class Strikethrough(IrNode): children: list[IrNode] = field(default_factory=list) @dataclass class InlineCode(IrNode): code: str @dataclass class CodeBlock(IrNode): code: str language: str | None = None @dataclass class Link(IrNode): url: str children: list[IrNode] = field(default_factory=list) @dataclass class Image(IrNode): url: str alt: str = "" @dataclass class Heading(IrNode): level: int children: list[IrNode] = field(default_factory=list) @dataclass class Paragraph(IrNode): children: list[IrNode] = field(default_factory=list) @dataclass class BlockQuote(IrNode): children: list[IrNode] = field(default_factory=list) @dataclass class ListItem(IrNode): children: list[IrNode] = field(default_factory=list) @dataclass class UnorderedList(IrNode): items: list[ListItem] = field(default_factory=list) marker: str = "-" @dataclass class OrderedList(IrNode): items: list[ListItem] = field(default_factory=list) start: int = 1 @dataclass class ThematicBreak(IrNode): pass @dataclass class LineBreak(IrNode): pass @dataclass class TableCell(IrNode): children: list[IrNode] = field(default_factory=list) align: str | None = None @dataclass class TableRow(IrNode): cells: list[TableCell] = field(default_factory=list) is_header: bool = False @dataclass class Table(IrNode): header: TableRow | None = None rows: list[TableRow] = field(default_factory=list) @dataclass class Document(IrNode): children: list[IrNode] = field(default_factory=list)