1
0
Files
PPTX/openspec/changes/archive/2026-03-05-font-theme-system/specs/element-rendering/spec.md
lanyuanxiaoyao bd12fce14b 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>
2026-03-05 10:38:59 +08:00

68 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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"}`