FWMacro 方文宏
FWMacro 是企顺公司开发的一个独立的工具,用来实现文件包含与字符串替换功能。
在FWScripts中使用了FWMacro(方文宏),FWMacro与C语言的宏定义类似,可以定义一个宏,然后在代码中进行替换。(C#中的宏仅仅用于编译条件的开关),FWScript的宏语句比较简单,所有的宏定义以行为单位进行处理,以字符#开头。
Note: FWMacro是一个独立的工具,可以被灵活应用,FWScript通过调用该工具实现了宏的功能。
- 注释
- 宏标识符的替换
- 包含
- 条件处理
- 辅助特性
- 宏开关
注释
宏标识符的替换
通过定义一个宏标识符,可以在程序的任何非字符串常量的地方进行替换。
Type | 代码 | 描述 |
---|---|---|
不带参数的宏标识符 | #define BizSmooth Let’s…… | 后面代码中有#BizSmooth的的地方替换成Let’s…… |
带参数的宏标识符 | #define client(company, country, employee) #company is an important client of ours, it came from #country, and #company has #employee employee all over the world”; | 后面代码中有#client(DELL, America, 200000)的的地方替换成DELL is an important client of ours, it came from America, and DELL has 200000 employee all over the world |
注意,宏定义名称忽略大小写
目前宏标识符的替换可以嵌套使用。如:
#d capital the capital is #city #d city Beijing 后面若出现了“#capital”,将会替换成 “the capital is Beijing”
包含
有时一个定义的文件需要在很多地方去用,从而达到一致性。如:
#include c:\bizat\txt\common.h 指定本文件包含“common.h”中的定义 在FWMacro处理到包含语句时,将读取这个文件,然后将记录这个文件中的所有宏定义。
注意,FWMacro目前对被包含的文件只是处理宏定义,也就是说只是处理以“#”开头的行,其它所有的行都被忽略。
(依据此特性,可以在公共宏定义文件随意写注释)
条件处理
FWMacro中宏条件处理加强了C#的做法,使用如下语句:
宏语句 | 描述 |
---|---|
#if identifier[=value] | 如果定义了identifier的值为value则为真true,表示要执行后面的, 如果没有=value,则只要定义过identifier就为真true,没有定义过则为假false |
#else | 如果与该else对应的if条件为false而且判断该条件的语句也执行了,则执行该else后面的 |
#elif identifier[=value] | 如果前面的if条件为false而且判断该条件的语句也执行了,则执行这个判断, 如果这个判断为true则执行后面的,否则执行对应的else的后面的。 |
#endif | 对应的#if 宏语句块结束 |
注意: 宏条件语句#if 不允许嵌套使用!
多语言支持举例1: 执行的时候进行选择
## 注意在bizrunner的调用中,可以在命令行使用 -d "lang en" 或者 -d "lang cn" ## 下面的宏实现 “如果没有定义lang,则缺省为英文 en” #if lang #else #d lang en #endif #if lang=en // 设置英文的宏 #d setting "settings" #d system = "system" #elif lang=cn // 设置中文的宏 #d setting "设置" #d system "系统" #else show The language version of #lang has not been implemeted exit #endif /Window[@name = #setting and @classname = 'ApplicationFrameWindow' ]/?/List[@automationid = 'PageGroupsListView' and @classname = 'GridView' ]/?/Text[@name = #system and @classname = 'TextBlock' ]
多语言支持举例2:安装的时候选择
## 在执行代码文件中,使用如下代码 #include keywords.h :/Window[@name = #setting and @classname = 'ApplicationFrameWindow' ]/?/List[@automationid = 'PageGroupsListView' and @classname = 'GridView' ]/?/Text[@name = #system and @classname = 'TextBlock' ] ## 而针对不同的语言环境,安装程序放置不同的keywords.h文件 ## 针对中文环境,keywords.h文件的内容为 #d setting "设置" #d system "系统" ## 针对英文的环境,keywords.h文件的内容为 #d setting "settings" #d system = "system" 使用上述办法,只需一个统一的方文脚本文件,针对不同的语言环境,使用不同的宏定义文件就可以了。
注意如果使用 #if indentifier=value,则判断是否identifier的定义与值相同,比较时忽略大小写。
【注意,等号 = 前后不能有空格】
辅助特性
批量定义:有时一批宏标识符其定义的值不重要,只要不重复就行,FWMacro为此制定了批量定义的机制
“#(i,j” 表示后面的宏定义若没有指定替代的内容,则按从i开始,每次加j的方式自动进行定义,直到遇到 “#)”。
举例:
#(3,2 #d TheFirst #d TheSecond #d TheThird #)
宏开关
鉴于有很多语言需要支持以#开头的行,如Powershell, Python等语言,而在方文脚本里面,可以嵌入这些代码,这些代码必须按原样被方文脚本启动的Powershell或Python解析。
FWMacro为此特别设计了“宏开关”, 宏开关语句为:“#&”,第一次遇到该语句行时,将关闭FWMacro的处理,第二次遇到这一行时,再重新打开。
也就是说,方文宏针对在两个“#&”之间的所有行,将按原样输出。
注意:不能使用宏注释将 “#&”之间的代码注释掉,因为FWMacro遇到“#&”会直接跳过。 如: #/* ... #& sentences of scripts in other language #& ... #*/ 上述代码中,中间的代码将不会注释掉,这样会导致出错 如果要注释掉这些代码,建议使用程序注释,如下所示: /* ... #& sentences of scripts in other language #& ... */ 这样,在/*与*/之间的代码都会注释掉。
<< FWScript 调用外部进程 | FWScript 结构组织 >> |