tmLanguage 和 tmTheme 文件之间标识符的匹配
Matching of identifiers between tmLanguage and tmTheme files
我正在尝试了解 Visual Studio 代码如何匹配主题文件和语言文件之间的标识符。例如在一个 tmLanguage 文件中我有这样的定义:
...
<dict>
<key>begin</key>
<string>'</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.java-or-c</string>
</dict>
</dict>
...
dict包含标识符punctuation.definition.string.begin.java-or-c来标识单引号字符串的开始。现在查看我拥有的一个 tmThemes 文件,这个标识符从未被提及,事实上我可以想象语言文件编写者可以自由使用他们想要的任何标识符。但是如何将主题与它们相匹配,以便 VS Code 知道要应用哪种颜色?是否有描述该过程的文档?
有一些 conventions(滚动使用的标识符,以便主题可用于多种语言。
所以基本上你是对的,编写语言文件的人在理论上是完全免费的,可以使用他喜欢的任何标识符,但可能还需要一个附带的主题文件。
您可能还想查看以下答案:
Are there any standards for tmlanguage keyword types?
Visual Studio 代码显然使用了 TextMate 的样式方法,因此适用于 TextMate 的大部分内容(例如主题和语言自定义)在 VS Code 中也有效。匹配的完成方式类似于 CSS 选择器,如 Scope Selectors 文档中所述。简而言之:主题文件包含某些范围的颜色值(例如 DAXaholic 提到的那些)。这些与语言文件中指定的范围部分或完全匹配,例如范围 "string" 匹配所有 "string.quoted" 范围等
进一步阅读,尤其是在语言+主题文件中应该支持哪些范围,可以在页面上完成:Writing a TextMate Grammar: Some Lessons Learned,其中还提到了标准范围列表。
我正在尝试了解 Visual Studio 代码如何匹配主题文件和语言文件之间的标识符。例如在一个 tmLanguage 文件中我有这样的定义:
...
<dict>
<key>begin</key>
<string>'</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.java-or-c</string>
</dict>
</dict>
...
dict包含标识符punctuation.definition.string.begin.java-or-c来标识单引号字符串的开始。现在查看我拥有的一个 tmThemes 文件,这个标识符从未被提及,事实上我可以想象语言文件编写者可以自由使用他们想要的任何标识符。但是如何将主题与它们相匹配,以便 VS Code 知道要应用哪种颜色?是否有描述该过程的文档?
有一些 conventions(滚动使用的标识符,以便主题可用于多种语言。
所以基本上你是对的,编写语言文件的人在理论上是完全免费的,可以使用他喜欢的任何标识符,但可能还需要一个附带的主题文件。
您可能还想查看以下答案:
Are there any standards for tmlanguage keyword types?
Visual Studio 代码显然使用了 TextMate 的样式方法,因此适用于 TextMate 的大部分内容(例如主题和语言自定义)在 VS Code 中也有效。匹配的完成方式类似于 CSS 选择器,如 Scope Selectors 文档中所述。简而言之:主题文件包含某些范围的颜色值(例如 DAXaholic 提到的那些)。这些与语言文件中指定的范围部分或完全匹配,例如范围 "string" 匹配所有 "string.quoted" 范围等
进一步阅读,尤其是在语言+主题文件中应该支持哪些范围,可以在页面上完成:Writing a TextMate Grammar: Some Lessons Learned,其中还提到了标准范围列表。