自定义编辑器中的语法着色

Visual Studio 环境 SDK 编辑器(包括核心编辑器)使用语言服务来标识特定的语法项,并使用给定文档视图的指定颜色显示它们。

着色要求

实现语言服务着色器的所有编辑器都必须:

  1. 使用实现 IVsTextBuffer 对象来管理要着色的文本,并使用实现 IVsTextView 对象来提供文本的文档视图。

  2. 通过使用语言服务的标识 GUID 查询 VSPackage 的服务提供商来获取特定语言服务的接口。

  3. SetLanguageServiceID调用实现IVsTextBuffer的对象的方法。 此方法将语言服务与 IVsTextBuffer VSPackage 用来管理要着色的文本的实现相关联。

语言服务的着色器的核心编辑器用法

当具有着色器的语言服务由核心编辑器的实例获取时,语言服务的着色器自动分析和呈现文本,而无需进一步干预。

IDE 透明方式:

  • 根据需要调用着色器来分析和分析文本,因为它在实现 IVsTextBuffer中添加或修改。

  • 确保通过使用着色器返回的信息更新并重新绘制由实现提供的文档视图提供的 IVsTextView 显示。

语言服务的着色器的非核心编辑器用法

非核心编辑器实例还可以使用语言服务的语法着色服务,但它们必须显式检索和应用服务的着色器,并重新修补其文档视图。

为此,非核心编辑器必须:

  1. 获取语言服务的着色器对象(实现 IVsColorizerIVsColorizer2)。 VSPackage 通过在语言服务的接口上调用 GetColorizer 方法来执行此操作。

  2. ColorizeLine调用该方法以请求对特定文本范围进行着色。

    该方法 ColorizeLine 返回一个值数组,其中一个用于着色的文本范围中的每个字母。 它还将文本范围标识为特定类型的可着色项,例如批注、关键字 (keyword)或数据类型。

  3. 使用返回的 ColorizeLine 着色信息重新着色并显示其文本。

注意

除了使用语言服务的着色器之外,VSPackage 还可以选择使用常规用途的 Visual Studio 环境 SDK 文本着色机制。 有关此机制的详细信息,请参阅 使用字体和颜色