Add core Python script (yaml2pptx.py) for converting YAML to PowerPoint: - Element rendering: text, image, shape, table, chart - Template system with placeholders - PPTX generation with python-pptx OpenSpec workflow setup: - 3 archived changes: browser-preview, template-dir-cli, yaml-to-pptx - 7 main specifications covering all core modules - Config and documentation structure 30 files changed, 4984 insertions(+)
73 lines
2.9 KiB
Markdown
73 lines
2.9 KiB
Markdown
# Template System (Delta)
|
||
|
||
## MODIFIED Requirements
|
||
|
||
### Requirement: 模板文件必须可从指定目录加载
|
||
|
||
系统 SHALL 从用户通过 `--template-dir` 参数指定的目录加载模板文件,支持通过模板名称引用。模板名称必须是纯文件名,不能包含路径分隔符。
|
||
|
||
#### Scenario: 通过名称加载模板
|
||
|
||
- **WHEN** 幻灯片指定 `template: title-slide`,且用户提供 `--template-dir /path/to/templates`
|
||
- **THEN** 系统从 `/path/to/templates/title-slide.yaml` 加载模板文件
|
||
|
||
#### Scenario: 模板文件不存在时报错
|
||
|
||
- **WHEN** 幻灯片引用不存在的模板名称
|
||
- **THEN** 系统抛出错误,提示"模板文件不存在: <模板名>",并显示查找位置和期望文件路径
|
||
|
||
#### Scenario: 缓存已加载的模板
|
||
|
||
- **WHEN** 多个幻灯片使用同一个模板
|
||
- **THEN** 系统仅加载一次模板文件,后续使用缓存
|
||
|
||
#### Scenario: 错误信息包含详细的查找信息
|
||
|
||
- **WHEN** 模板文件未找到
|
||
- **THEN** 错误信息包含:模板名称、查找位置(template_dir)、期望文件的完整路径、解决建议
|
||
|
||
## ADDED Requirements
|
||
|
||
### Requirement: 模板名称必须是纯文件名
|
||
|
||
系统 SHALL 验证模板名称不包含路径分隔符,确保模板只能从指定目录的一层加载。
|
||
|
||
#### Scenario: 拒绝包含正斜杠的模板名称
|
||
|
||
- **WHEN** 幻灯片指定 `template: subdir/title-slide`
|
||
- **THEN** 系统抛出错误,提示"模板名称不能包含路径分隔符: subdir/title-slide"
|
||
|
||
#### Scenario: 拒绝包含反斜杠的模板名称
|
||
|
||
- **WHEN** 幻灯片指定 `template: subdir\title-slide`
|
||
- **THEN** 系统抛出错误,提示"模板名称不能包含路径分隔符: subdir\title-slide"
|
||
|
||
#### Scenario: 拒绝路径遍历尝试
|
||
|
||
- **WHEN** 幻灯片指定 `template: ../other-templates/slide`
|
||
- **THEN** 系统抛出错误,提示模板名称不能包含路径分隔符
|
||
|
||
#### Scenario: 接受纯文件名
|
||
|
||
- **WHEN** 幻灯片指定 `template: title-slide`(不包含路径分隔符)
|
||
- **THEN** 系统正常处理,从指定的 template_dir 加载模板
|
||
|
||
#### Scenario: 错误信息提供正确格式示例
|
||
|
||
- **WHEN** 系统因模板名称包含路径分隔符而报错
|
||
- **THEN** 错误信息中包含"模板名称应该是纯文件名,如: 'title-slide'"的提示
|
||
|
||
### Requirement: 未指定模板目录时必须报错
|
||
|
||
系统 SHALL 在用户未提供 `--template-dir` 参数但 YAML 文件中使用了模板时,立即报错。
|
||
|
||
#### Scenario: 使用模板但未指定目录
|
||
|
||
- **WHEN** YAML 文件中包含 `template: title-slide`,但 `templates_dir` 参数为 `None`
|
||
- **THEN** 系统在尝试加载模板时抛出错误,提示"未指定模板目录,无法加载模板"
|
||
|
||
#### Scenario: 不使用模板时不检查目录
|
||
|
||
- **WHEN** YAML 文件中所有幻灯片都是自定义幻灯片(不包含 `template` 字段)
|
||
- **THEN** 系统不检查 `templates_dir` 是否为 `None`,正常处理
|