121 lines
2.0 KiB
Python
121 lines
2.0 KiB
Python
|
|
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)
|