feat(writer): add renderer (ChapterContent -> DocxInjector.Block)
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
"""渲染:ChapterContent 的 ContentBlock 序列 → DocxInjector.Block 序列(Phase 5)。
|
||||
|
||||
字段塌缩(外视 #6):table.headers/caption、list.items/style 在渲染时显式丢弃,
|
||||
仅保留 DocxInjector.Block 支持的 (kind, text, level, rows)。
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from genesis.writer.docx_injector import Block
|
||||
from genesis.writer.models import ChapterContent
|
||||
|
||||
|
||||
def render_chapter_blocks(content: ChapterContent) -> list[Block]:
|
||||
out: list[Block] = []
|
||||
for b in content.blocks:
|
||||
if b.type == "heading":
|
||||
out.append(Block(kind="heading", text=b.text or b.caption or "", level=b.level or 1))
|
||||
elif b.type == "table":
|
||||
out.append(Block(kind="table", text=b.caption or "", rows=b.rows or []))
|
||||
elif b.type == "list":
|
||||
out.append(Block(kind="list", text="\n".join(b.items or [])))
|
||||
elif b.type == "note":
|
||||
out.append(Block(kind="note", text=b.text or b.caption or ""))
|
||||
else: # paragraph 及未知类型
|
||||
out.append(Block(kind="paragraph", text=b.text or b.caption or ""))
|
||||
return out
|
||||
Reference in New Issue
Block a user