Macro API_宏API
提供宏的添加、删除与查询。(Macro 是「宏工厂」——自定义宏的底层接口。)
参见:
MacroContextAPI。
方法
Macro.add(name , definition)
添加新宏。
name:(string|Array<string>)宏名或名称数组。名称须由基本拉丁字母组成,以字母开头。definition:(Object|string)宏定义对象或要复制其定义的现有宏名。
定义对象属性(仅 handler 必需):
skipArgs:(可选,boolean|Array<string>)禁用把参数字符串解析为离散参数。tags:(可选,null|Array<string>)表示宏是容器宏(非自闭合),值为子标签名数组或null。handler:(Function)宏的主函数,无参数调用,this设为宏上下文对象。
javascript
/* 一个极简的 `<<if>>`/`<<elseif>>`/`<<else>>` 实现 */
Macro.add('if', {
skipArgs : true,
tags : ['elseif', 'else'],
handler : function () {
try {
for (var i = 0, len = this.payload.length; i < len; ++i) {
if (
this.payload[i].name === 'else' ||
!!Scripting.evalJavaScript(this.payload[i].args.full)
) {
jQuery(this.output).wiki(this.payload[i].contents);
break;
}
}
}
catch (ex) {
return this.error('bad conditional expression: ' + ex.message);
}
}
});Macro.delete(name)
移除现有宏。
javascript
Macro.delete("amacro");
Macro.delete(["amacro", "bmacro"]);Macro.get(name) → Object
返回指定名称的宏定义,失败则 null。
Macro.has(name) → boolean
返回指定名称的宏是否存在。
Macro.tags.get(name) → Array<string>
返回指定宏标签的父级数组(含所有注册了该子标签的宏名),失败则 null。
javascript
Macro.tags.get("else") // 标准库返回:["if"]Macro.tags.has(name) → boolean
返回指定宏标签是否存在。