如何在 tmLanguge 文件中交错两种语言支持文件?
How to interleave two language support files in a tmLanguge file?
我正在尝试制作一个 VS 代码扩展来突出显示 Pollen 标记文件。这些是带有嵌入式变量和 Racket 代码的纯文本文件。变量有这样的语法(稍后通过预处理器拼接到文本中):
Some text ◊variable-name text continued
并且可以使用类似的语法嵌入 Racket 函数:
One plus two is ◊(number->string (+ 1 2)).
我有一个支持 Racket 语法的 tmLanguage 文件,还有一个支持 Pollen 语法的 tmlLanguage 文件(文本 + 变量 + 内嵌函数 source.racket)。我也希望它能正确突出显示这段代码,但想不出一个干净的解决方案:
◊n plus ◊m is ◊(number->string (+ ◊n ◊m)).
换句话说,Pollen语法中的Racket语法中的Pollen语法。是否可以仅在事物的 Pollen 端实现这样的语法高亮显示,而无需制作支持嵌入式 Pollen 代码的特殊 source.racket 文件?
比如首先突出显示球拍然后然后再次浏览文本,使用花粉规则突出显示(并覆盖当前颜色,如果存在)?
我发现了关于 injections
的顶级子句,它完全符合我的需要:
"injections": {
"L:meta.function-call.racket": {
"patterns": [
{
"include": "text.pollen"
}
]
}
},
它在每个 meta.function-call.racket
作用域中注入一个 { "include": "text.pollen" }
— 我不需要编辑每个使用此作用域的地方(这很有用,因为它在很多地方 和在另一个文件中)。
可以找到更多信息 in this thread in Atom's forums and in this gist describing a making-of grammar for Atom。
我正在尝试制作一个 VS 代码扩展来突出显示 Pollen 标记文件。这些是带有嵌入式变量和 Racket 代码的纯文本文件。变量有这样的语法(稍后通过预处理器拼接到文本中):
Some text ◊variable-name text continued
并且可以使用类似的语法嵌入 Racket 函数:
One plus two is ◊(number->string (+ 1 2)).
我有一个支持 Racket 语法的 tmLanguage 文件,还有一个支持 Pollen 语法的 tmlLanguage 文件(文本 + 变量 + 内嵌函数 source.racket)。我也希望它能正确突出显示这段代码,但想不出一个干净的解决方案:
◊n plus ◊m is ◊(number->string (+ ◊n ◊m)).
换句话说,Pollen语法中的Racket语法中的Pollen语法。是否可以仅在事物的 Pollen 端实现这样的语法高亮显示,而无需制作支持嵌入式 Pollen 代码的特殊 source.racket 文件?
比如首先突出显示球拍然后然后再次浏览文本,使用花粉规则突出显示(并覆盖当前颜色,如果存在)?
我发现了关于 injections
的顶级子句,它完全符合我的需要:
"injections": {
"L:meta.function-call.racket": {
"patterns": [
{
"include": "text.pollen"
}
]
}
},
它在每个 meta.function-call.racket
作用域中注入一个 { "include": "text.pollen" }
— 我不需要编辑每个使用此作用域的地方(这很有用,因为它在很多地方 和在另一个文件中)。
可以找到更多信息 in this thread in Atom's forums and in this gist describing a making-of grammar for Atom。