我们使用了自己的脚本语言。语言非常简单,但它有一个“独占”的东西:字符串是使用'['和']'定义的(所以“test”将是[test]),这些大括号可以在彼此内部:
lateinit([concat([test], [blah])])
此外,没有转义字符。
如何将此块解析为一个字符串(从而突出显示[concat([test], [blah])]
块)?
我目前有以下规则:
{ token: 'punctuation.definition.string.begin.vcl',
regex: '\\[',
push:
[
{ token: 'punctuation.definition.string.end.vcl',
regex: '\\]',
next: 'pop' },
{ defaultToken: 'string.quoted.other.vcl' } ],
},
但是,正如您可能已经猜到的那样,这将在测试结束时停止在支撑位置:' [ concat([test ] ,[blah])] ” ...
其他例子是:
setexpratt(1, [if(comparetext([yes], [no]), msg([test expression]))]);
terminator([confirm([Are you sure you want to exit?])]);
registerfunction([testfunction], 1, 3, [], [msg(concat([Argument 1: ], p(1), [, Argument 2: ], p(2), [, Argument 3: ], p(3)))]);
答案 0 :(得分:5)
您需要将[
的规则添加到内部字符串状态,尝试
this.$rules = {
start: [
{ token: 'string.begin.vcl', regex: '\\[', push: "string" }
],
string : [
{ token: 'string.begin.vcl', regex: '\\[', push: "string" },
{ token: 'string.end.vcl', regex: '\\]', next: 'pop' },
{ defaultToken: 'string.quoted.other.vcl' },
]
};
this.normalizeRules();