📅  最后修改于: 2023-12-03 15:26:14.895000             🧑  作者: Mango
方案tmLanguage是一种文本编辑器代码高亮语法的文件格式,它是Sublime Text、TextMate和VS Code等流行代码编辑器使用的标准之一。它是使用XML语法描述的,可以定义关键字、注释、字符串、正则表达式、行注释、块注释、标点符号等各种编程语言中常见的构造。
一个方案tmLanguage文件通常由下面几个部分组成
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>MyLanguage</string>
<key>scopeName</key>
<string>source.mylanguage</string>
<key>fileTypes</key>
<array>
<string>ml</string>
</array>
<key>uuid</key>
<string>6D94E1B7-37F9-452F-9EB9-2EE071ECE8EB</string>
</dict>
</plist>
全局设置由一个字典组成,需要指定方案的名称、范围名称、支持的文件类型和UUID等必要信息。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>MyLanguage</string>
<key>scopeName</key>
<string>source.mylanguage</string>
<key>fileTypes</key>
<array>
<string>ml</string>
</array>
<key>uuid</key>
<string>6D94E1B7-37F9-452F-9EB9-2EE071ECE8EB</string>
<key>patterns</key>
<array>
<!-- 定义注释 -->
<dict>
<key>name</key>
<string>comment.line.mylanguage</string>
<key>match</key>
<string>//.*</string>
</dict>
<!-- 定义关键字 -->
<dict>
<key>name</key>
<string>keyword.control.mylanguage</string>
<key>match</key>
<string>\b(if|else|for|while|do|break)\b</string>
</dict>
<!-- 定义字符串 -->
<dict>
<key>name</key>
<string>string.quoted.double.mylanguage</string>
<key>begin</key>
<string>"</string>
<key>end</key>
<string>"</string>
</dict>
</array>
</dict>
</plist>
语法定义是方案中最重要的部分,其中包含了各种单词、符号和注释等的语法定义。在这个例子中,我们用了正则表达式来匹配和标识出数字和关键字。我们定义了注释、关键字和字符串三种类型的标记。每个标记由一个字典定义,并指定了其名称、开始和结束符号以及正则表达式等属性。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>MyLanguage</string>
<key>scopeName</key>
<string>source.mylanguage</string>
<key>fileTypes</key>
<array>
<string>ml</string>
</array>
<key>uuid</key>
<string>6D94E1B7-37F9-452F-9EB9-2EE071ECE8EB</string>
<key>patterns</key>
<array>
<!-- 定义注释 -->
<dict>
<key>name</key>
<string>comment.line.mylanguage</string>
<key>match</key>
<string>//.*</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.mylanguage</string>
</dict>
</dict>
</dict>
<!-- 定义关键字 -->
<dict>
<key>name</key>
<string>keyword.control.mylanguage</string>
<key>match</key>
<string>\b(if|else|for|while|do|break)\b</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.mylanguage</string>
</dict>
</dict>
</dict>
<!-- 定义字符串 -->
<dict>
<key>name</key>
<string>string.quoted.double.mylanguage</string>
<key>begin</key>
<string>"</string>
<key>end</key>
<string>"</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.mylanguage</string>
</dict>
<key>1</key>
<dict>
<key>name</key>
<string>string.quoted.double.mylanguage</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.mylanguage</string>
</dict>
</dict>
</dict>
</array>
<key>uuid</key>
<string>9D45A68F-5347-4C73-88AB-2B3B3C4AE4E4</string>
<key>uuid</key>
<string>6D94E1B7-37F9-452F-9EB9-2EE071ECE8EB</string>
<key>name</key>
<string>MyLanguage</string>
<key>scopeName</key>
<string>source.mylanguage</string>
<key>fileTypes</key>
<array>
<string>ml</string>
</array>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>meta.embedded.block.html</string>
<key>begin</key>
<string>^</string>
<key>end</key>
<string>$</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
</array>
</dict>
</plist>
颜色定义指定了在编辑器中使用的颜色和字体信息等,可以让代码更好的视觉效果。它也由一个字典定义,并在其中指定了用于显示各项标记的字体和颜色等属性。在这个例子中,我们使用上一节中定义的注释、关键字和字符串三种类型的标记,并设置了它们的颜色和字体。
方案tmLanguage是一个用于定义文本编辑器代码高亮的文件格式,它是使用XML语法描述的,可以定义关键字、注释、字符串、正则表达式等构造。Sublime Text、TextMate、VS Code等流行的代码编辑器都支持使用方案tmLanguage格式定义语法高亮。方案tmLanguage文件通常由全局设置、语法定义和颜色定义三部分组成。它们一起工作,使得代码编辑器可以更好地辨别和高亮语言中各种关键字和标记,提高了编程效率和代码可读性。