实现完整的字体主题系统,支持可复用字体配置、预设类别和扩展属性。 同时修复中文字体渲染问题,确保 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>
2.5 KiB
2.5 KiB
Element Rendering (Delta)
Purpose
本增量规范更新表格元素的字体渲染方式,新增 font 和 header_font 字段支持完整字体配置,移除旧语法 style.font_size 和 style.header_color。
MODIFIED Requirements
Requirement: 系统必须支持表格元素渲染
系统 SHALL 将 YAML 中定义的表格元素渲染为 PPTX 表格对象。表格元素支持 font 和 header_font 字段用于字体配置,style 字段仅用于非字体样式(如背景色)。
Scenario: 渲染基本表格
- WHEN 元素定义为
{type: table, position: [1, 2], data: [["A", "B"], ["C", "D"]], col_widths: [2, 2]} - THEN 系统在 (1, 2) 位置创建 2×2 表格,列宽各为 2 英寸
Scenario: 表格定义整体字体
- WHEN 表格定义
font: {family: "Arial", size: 14, color: "#333333"} - THEN 系统将数据单元格和表头都应用该字体样式
Scenario: 表格定义表头字体
- WHEN 表格定义
header_font: {bold: true, color: "#ffffff"} - THEN 系统将表头应用该字体样式,数据单元格继承 font 或使用默认字体
Scenario: 表头字体继承表格字体
- WHEN 表格定义
font: {size: 14}且header_font: {parent: "@font", bold: true} - THEN 表头继承 size: 14,覆盖 bold: true
Scenario: 表格仅定义 header_font
- WHEN 表格仅定义
header_font: {bold: true} - THEN 表头应用 bold: true,数据单元格使用 fonts_default 或系统默认字体
Scenario: 表格定义背景样式
- WHEN 表格定义
style: {header_bg: "#4a90e2"} - THEN 系统将表头背景色设置为 #4a90e2
Scenario: 表格同时定义字体和背景样式
- WHEN 表格定义
font: {size: 14}和style: {header_bg: "#4a90e2"} - THEN 系统同时应用字体样式和背景色
Scenario: 表格数据为空时报错
- WHEN 表格的
data字段为空数组 - THEN 系统抛出错误,提示表格数据不能为空
Scenario: 表格列宽不匹配时报错
- WHEN
col_widths数组长度与表格列数不一致 - THEN 系统抛出错误,要求列宽数量与列数匹配
REMOVED Requirements
Requirement: 系统必须支持表格样式中的字体属性
Reason: 被 font 和 header_font 字段取代,提供更完整和统一的字体配置方式
Migration: 使用新的 font 和 header_font 字段替代 style.font_size 和 style.header_color
- FROM:
style: {font_size: 14, header_color: "#ffffff"} - TO:
font: {size: 14}, header_font: {color: "#ffffff"}