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(+)
2.9 KiB
2.9 KiB
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,正常处理