feat: 实现字体主题系统和东亚字体支持
实现完整的字体主题系统,支持可复用字体配置、预设类别和扩展属性。 同时修复中文字体渲染问题,确保 Source Han Sans 等东亚字体正确显示。 核心功能: - 字体主题配置:metadata.fonts 和 fonts_default - 三种引用方式:整体引用、继承覆盖、独立定义 - 预设字体类别:sans、serif、mono、cjk-sans、cjk-serif - 扩展字体属性:family、underline、strikethrough、line_spacing、 space_before、space_after、baseline、caps - 表格字体字段:font 和 header_font 替代旧的 style.font_size - 引用循环检测和属性继承链 - 模板字体继承支持 东亚字体修复: - 添加 _set_font_with_eastasian() 方法 - 同时设置拉丁字体、东亚字体和复杂脚本字体 - 修复中文字符使用默认字体的问题 测试: - 58 个单元测试覆盖所有字体系统功能 - 3 个集成测试验证端到端场景 - 移除旧语法相关测试 文档: - 更新 README.md 添加字体主题系统使用说明 - 更新 README_DEV.md 添加技术文档 - 创建 4 个示例 YAML 文件 - 同步 delta specs 到主 specs 归档: - 归档 font-theme-system 变更到 openspec/changes/archive/ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -39,9 +39,27 @@ class Presentation:
|
||||
f"无效的尺寸值: {self.size},尺寸必须是字符串(如 '16:9' 或 '4:3')"
|
||||
)
|
||||
|
||||
# 解析字体配置
|
||||
self.fonts = metadata.get("fonts", {})
|
||||
self.fonts_default = metadata.get("fonts_default")
|
||||
|
||||
# 验证 fonts_default
|
||||
if self.fonts_default:
|
||||
# fonts_default 必须是引用格式
|
||||
if not isinstance(self.fonts_default, str) or not self.fonts_default.startswith("@"):
|
||||
raise YAMLError(
|
||||
f"fonts_default 必须是引用格式(@xxx),当前值: {self.fonts_default}"
|
||||
)
|
||||
# fonts_default 引用的配置必须存在于 fonts 中
|
||||
font_name = self.fonts_default[1:]
|
||||
if font_name not in self.fonts:
|
||||
raise YAMLError(
|
||||
f"fonts_default 引用的字体配置不存在: {self.fonts_default}"
|
||||
)
|
||||
|
||||
# 模板缓存
|
||||
self.template_cache = {}
|
||||
|
||||
|
||||
# 解析并保存内联模板
|
||||
self.inline_templates = self.data.get('templates', {})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user