使用 simpleeval 库替换原有的简单正则匹配,支持复杂的条件表达式评估。新增 ConditionEvaluator 类处理条件逻辑,支持比较运算、逻辑运算、成员测试、数学计算和内置函数,同时保持向后兼容性。
53 lines
2.1 KiB
Markdown
53 lines
2.1 KiB
Markdown
# Template System (Delta Spec)
|
||
|
||
## MODIFIED Requirements
|
||
|
||
### Requirement: 系统必须支持条件渲染
|
||
|
||
系统 SHALL 支持基于变量值的条件渲染,通过 `visible` 字段控制元素是否显示。条件表达式使用 simpleeval 引擎评估,支持复杂的逻辑判断、比较运算、成员测试和数学计算。
|
||
|
||
#### Scenario: 显示满足条件的元素
|
||
|
||
- **WHEN** 元素定义了 `visible: "{count > 0}"`,且用户提供的 count 大于 0
|
||
- **THEN** 系统渲染该元素
|
||
|
||
#### Scenario: 隐藏不满足条件的元素
|
||
|
||
- **WHEN** 元素定义了 `visible: "{count > 0}"`,但用户提供的 count 等于 0
|
||
- **THEN** 系统跳过该元素,不渲染到幻灯片中
|
||
|
||
#### Scenario: 复杂逻辑条件
|
||
|
||
- **WHEN** 元素定义了 `visible: "{count > 0 and status == 'active'}"`,且两个条件都满足
|
||
- **THEN** 系统渲染该元素
|
||
|
||
#### Scenario: 成员测试条件
|
||
|
||
- **WHEN** 元素定义了 `visible: "{status in ['draft', 'review']}"`,且 status 为 "draft"
|
||
- **THEN** 系统渲染该元素
|
||
|
||
#### Scenario: 数学运算条件
|
||
|
||
- **WHEN** 元素定义了 `visible: "{(price * discount) > 50}"`,且计算结果大于 50
|
||
- **THEN** 系统渲染该元素
|
||
|
||
#### Scenario: 条件表达式语法错误
|
||
|
||
- **WHEN** visible 字段包含无效的条件表达式(如 `{count > }`)
|
||
- **THEN** 系统抛出错误,提示"条件表达式语法错误",并显示具体的语法问题
|
||
|
||
#### Scenario: 条件表达式中的变量未定义
|
||
|
||
- **WHEN** visible 字段引用了未定义的变量(如 `{undefined_var > 0}`)
|
||
- **THEN** 系统抛出错误,提示"条件表达式中的变量未定义: undefined_var",并列出可用变量
|
||
|
||
#### Scenario: 条件表达式使用不支持的函数
|
||
|
||
- **WHEN** visible 字段使用了不在白名单中的函数(如 `{eval(code)}`)
|
||
- **THEN** 系统抛出错误,提示"条件表达式中使用了不支持的函数: eval"
|
||
|
||
#### Scenario: 向后兼容的简单表达式
|
||
|
||
- **WHEN** 元素定义了 `visible: "{subtitle != ''}"`(旧语法格式)
|
||
- **THEN** 系统使用新的 simpleeval 引擎正确评估该表达式
|