ForcePilot/backend/package/yuxi/channel/render/ir.py
Kris 8ee9c1425e feat(channel/render): 新增markdown渲染模块
实现了完整的markdown解析与渲染能力,包含IR中间节点定义、markdown解析器以及两种渲染风格(markdown格式与纯文本格式),支持常见markdown语法渲染
2026-05-21 10:28:14 +08:00

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)