更新 – 增加对单边宏定义的支持

swish

Moderater
Staff member
Moderater
#1
默认情况下,QMacros 支持的宏定义是包含在开始和结束字符之间的一串内容,如 [MacroName] 。但有些时候,我们的宏可能只有开始符而没有结束符,而是靠标志符的规则来控制宏名称的结束。如下面带参数的 SQL 语句:

[mw_shl_code=sql,true]select * from mytable where id>:id and age<:age[/mw_shl_code]

其规则就是以 : 开始,遇到第一个非有效的标志符截止(上面的空白)。我们从上面解析出来两个参数: id 和 age。

QMacros 现在已经支持这种宏的解析,只需要在编译或替换时的标志位上设置 MRF_END_WITH_INVALID_CHAR 标志位即可。如上面的脚本,我们使用下面的代码进行宏替换:

[mw_shl_code=delphi,true] AMacros.Push('id',100);
AMacros.Push('age',50);
S:=AMacros.Replace('select * from mytable where id>:id and age<:age',':',#0,MRF_END_WITH_INVALID_CHAR);[/mw_shl_code]

S 的内容将为:

[mw_shl_code=sql,true]select * from mytable where id>100 and age<50[/mw_shl_code]

另外,程序还修改了对于 0 长度宏的支持,改为抛出异常。