1
0

feat: 实现模板库metadata和跨域字体引用系统

实现了统一的metadata结构和字体作用域系统,支持文档和模板库之间的单向字体引用。

主要变更:
- 模板库必须包含metadata字段(包括size、fonts、fonts_default)
- 实现文档和模板库的size一致性校验
- 实现字体作用域系统(文档可引用模板库字体,反之不可)
- 实现跨域循环引用检测
- 实现fonts_default级联规则(模板库→文档→系统默认)
- 添加错误代码常量(SIZE_MISMATCH、FONT_NOT_FOUND等)
- 更新文档和开发者指南

测试覆盖:
- 新增33个测试(单元测试20个,集成测试13个)
- 所有457个测试通过

Breaking Changes:
- 模板库文件必须包含metadata字段
- 模板库metadata.size为必填字段
- 文档和模板库的size必须一致

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 18:12:05 +08:00
parent f1aae96a04
commit 98098dc911
25 changed files with 2794 additions and 141 deletions

View File

@@ -30,6 +30,7 @@ import pytest
from pathlib import Path
from core.presentation import Presentation
from renderers.pptx_renderer import PptxGenerator
from loaders.yaml_loader import YAMLError
class TestMultilineTextExtendedProperties:
@@ -146,9 +147,6 @@ slides:
slide_data = pres.data.get('slides', [])[0]
# 渲染时应该抛出循环引用错误
with pytest.raises(ValueError, match="检测到字体引用循环"):
# 渲染时应该抛出循环引用错误(包装为 YAMLError
with pytest.raises(YAMLError, match="字体解析失败.*检测到字体引用循环"):
rendered = pres.render_slide(slide_data)
# 触发字体解析
for elem in rendered['elements']:
gen.font_resolver.resolve_font(elem.font)