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:
@@ -0,0 +1,67 @@
|
||||
# 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"}`
|
||||
Reference in New Issue
Block a user