PSPad自定义语法高亮,notepad++自定义语言格式
由于最近要用ISaGRAF来写结构化文本语言的程序,而ISaGRAF写代码的界面和记事本差不多,只能换其它的文本编辑器了。
先试了PSPad,自定义了语法高亮,由于要按Ctrl+J才能自动补全,而notepad++可以敲字母的时候直接自动补全就显示出来了,方便些,于是又试了下notepad++的自定义语言格式。就自定义的语法高亮来说,PSPad比notepad++好用。
先说PSPad的自定义语法高亮:
安装目录下的Syntax文件夹下的*.ini就是语言的配置文件。
“设置 - 自定义语法高亮”,由于是要新建一个,所以在弹出的“打开”对话框中选“取消”,(如果是要修改之前的,则选中之前的ini文件选“打开”)。
点击保存后ISaGRAF.ini保存在了Syntax文件夹下,上图右侧1对应的是[KeyWords],2 - [ReservedWords],3 - [KeyWords2],4 - [KeyWords3],内容如下:
;PSPad user HighLighter definition file
[Settings]
Name=ISaGRAF
HTMLGroup=0
Vectors=0
Label=1
FileType=.stf
CommentString=
ANSIComment=1
IndentChar=
UnIndentChar=
TabWidth=0
SingleQuote=1
EscString=0
EscChar=\
KeyWordChars=_
CodeExplorer=ftUnknown
DocComment=
[KeyWords]
BY=
CASE=
DO=
ELSE=
ELSIF=
END_CASE=
END_FOR=
END_IF=
END_REPEAT=
END_WHILE=
EXIT=
FOR=
IF=
OF=
REPEAT=
RETURN=
THEN=
TO=
UNTIL=
WHILE=
[ReservedWords]
[KeyWords2]
ABS=
ACOS=
AND=
AND_MASK=
ANY_TO_BOOL=
ANY_TO_DINT=
ANY_TO_REAL=
ANY_TO_SINT=
ANY_TO_STRING=
ANY_TO_TIME=
ASCII=
ASIN=
ATAN=
CHAT=
COS=
DELETE=
EXPT=
FIND=
INSERT=
LEFT=
LIMIT=
LOG=
MAX=
MID=
MIN=
MLEN=
MOD=
MOD=
MUX4=
MUX8=
NOT=
NOT_MASK=
ODD=
OFFSET=
OR=
OR_MASK=
POW=
RAND=
REPLACE=
RIGHT=
ROL=
ROR=
SEL=
SHL=
SHR=
SIN=
SQRT=
TAN=
TRUNC=
XOR=
XOR_MASK=
[KeyWords3]
CAN_IIRegID=
CAN_IIRX=
CAN_IITX=
CAN_II_Init=
Eth_udp_rx=
Eth_udp_tx=
RS232Init=
RS232Read=
RS232Write=
RS422Init=
RS422Read=
RS422Write=
然后“设置 - 语法高亮”,先在1处选中一个<not assigned>,然后在2处选中ISaGRAF,然后1处的<not assigned>就变为ISaGRAF了,选中ISaGRAF前面的框框,切换到“颜色”就可以配置颜色了。
notepad++自定义语言格式:
选择“语言 - 自定义语言 - 自定义语言格式”,点“新建”输入个名称“ISaGRAF”后定确定。“层次设置与默认格式”没动。
“关键字列表”中输入关键字,“样式”中可设置颜色,这样每组可设置不同的颜色,若不选前缀模式,则只有前后都有空格时才被认为是关键字,比方说“if(”后面紧跟了个括号,是不能被识别是关键字的,但如果选了前缀模式,则比方说“if(hello)”整个都会被认为是关键字,有点不智能哈。
“注释与数字”,按下面这样设置,单行注释有效,多行注释时不能被识别。但去掉“单行注释样式”中的(*和*),只保留“区块注释样式”中的,则单行、多行注释都能被识别。前缀1和后缀2是一对(https://www.cnblogs.com/xin04/p/12397641.html 这文章里有说明)。
“数字与运算符”,“运算符1”与“运算符2(需要分隔符)”的区别,比方说a=b,若=放在“运算符1”中,则可被识别为等号;若放在“运算符2(需要分隔符)”中则不能被识别,需要=前后有空格才能被识别。对于一些函数,比方说ANY_TO_DINT,由于后面跟着(,因此若放在“关键字列表”中,则不能被识别,因此干脆放在了“运算符1”中,这样就算后面紧跟括号也能被识别。
还有种办法是,比方说ANY_TO_DINT放在“关键字列表”中,在“数字与运算符”的“运算符1样式”中的开始填“(”、结尾填“)”,此时ANY_TO_DINT后就算紧跟“(”也能被识别,但如果嵌套了括号,如“( ( ) )”,则括号中的关键字就又有不能被识别的了。因此对于前后不是空格的关键字、函数等都放在了“运算符1”中。
在“语言”下选中“ISaGRAF”就可以按刚刚的设置来语法高亮了。
设置好后,可导出为xml文件,在其他地方导入后,若“语言”下没有“ISaGRAF”,则关闭notepad++再重新打开后应该就有了。