我有一种自定义语言,我想在 Visual Studio Code 中为其提供语法突出显示。
在这种语言中,字符串文字以双引号或单引号开头和结尾。以双引号开头的字符串文字可以包含单引号,反之亦然。不会发生任何其他引号转义。但无论起始引号类型如何,文字都可能跨越多行。
In my tmLanguage.json
文件我尝试了这些正则表达式:
{
"match": "'[^']*'",
"name": "string.quoted.single.rss"
},
{
"match": "\"[^\"]*\"",
"name": "string.quoted.double.rss"
}
不幸的是,这只适用于单行文字。然后我尝试了
{
"match": "(?s)'[^']*'",
"name": "string.quoted.single.rss"
},
{
"match": "(?s)\"[^\"]*\"",
"name": "string.quoted.double.rss"
}
但随着(?s)
修改语法高亮根本不起作用。
有没有办法匹配多行字符串?
尝试使用begin
/ end
模式而不是简单的match
。 Haxe 语言也有多行字符串文字,它匹配如下字符串:
strings:
patterns:
- begin: '"'
beginCaptures:
'0': {name: punctuation.definition.string.begin.hx}
end: '"'
endCaptures:
'0': {name: punctuation.definition.string.end.hx}
name: string.quoted.double.hx
patterns:
- include: '#string-escape-sequences'
该语法使用 YAML 而不是 JSON 来避免转义正则表达式,但翻译起来应该相当简单。该片段的来源是here https://github.com/vshaxe/haxe-TmLanguage/blob/5bbb350eef6c64e458c11beb7d17cff97ce42aae/haxe.YAML-tmLanguage#L478-L488.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)