使用 simpleeval 库替换原有的简单正则匹配,支持复杂的条件表达式评估。新增 ConditionEvaluator 类处理条件逻辑,支持比较运算、逻辑运算、成员测试、数学计算和内置函数,同时保持向后兼容性。
2.1 KiB
2.1 KiB
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 引擎正确评估该表达式