refactor(core): export_docx 字体助手复用 rendering.common——消除逐字重复

_set_run_fonts 与 rendering/common.py::set_run_fonts 逐字相同,改为 import
复用(单一事实源)。方向说明:rendering/ 会 bind-mount 进沙箱、必须保持无
core 依赖,故 export_docx(读 PG)留在 core、反向引 rendering —— 修正架构
审查里「迁 rendering/docx_chat.py」的建议,搬过去会破坏该层的沙箱可用性。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
caoqianming 2026-07-23 12:51:04 +08:00
parent 9e680314eb
commit 8300631a1c
1 changed files with 4 additions and 12 deletions

View File

@ -25,10 +25,13 @@ from core.task import TaskState
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
from docx.shared import Cm, Pt, RGBColor
# 字体 OOXML 助手复用平台渲染层的单一事实源(rendering/ 无 core 依赖,host 进程
# 反向引它方向合法;本模块读 PG,不能反过来搬进 rendering —— 那层要保持沙箱可用)。
from rendering.common import set_run_fonts as _set_run_fonts
# ───────────────────────── 配色 ─────────────────────────
# 选 Word 浅底高对比度的 GitHub-ish 色板,不刺眼也能区分
@ -44,17 +47,6 @@ COLOR_META_LABEL = RGBColor(0x57, 0x60, 0x6A)
# ───────────────────────── 字体辅助 ─────────────────────────
def _set_run_fonts(run, *, cn_font: str = "宋体", en_font: str = "Times New Roman") -> None:
rPr = run._element.get_or_add_rPr()
rFonts = rPr.find(qn("w:rFonts"))
if rFonts is None:
rFonts = OxmlElement("w:rFonts")
rPr.append(rFonts)
rFonts.set(qn("w:eastAsia"), cn_font)
rFonts.set(qn("w:ascii"), en_font)
rFonts.set(qn("w:hAnsi"), en_font)
def _preserve_spaces(run) -> None:
"""让 docx 不压缩连续空格 — 代码块/JSON 缩进必须留住。"""
for t in run._element.iter(qn("w:t")):