当语言服务提供语法着色时,该分析器将文本行转换为数组可着色项并返回标记类型与这些可着色项对应。 该分析器应返回属于可着色项列表的标记类型。 Visual Studio 根据适当的标记类型的 colorizer 对象分配的属性显示在代码窗口中的每个可着色项。
Visual Studio 不指定分析器接口,并且,分析器实现完全由您决定。 但是,默认分析器实现在 Visual Studio 语言包 " 项目提供。 对于托管代码,托管包框架 (MPF)提供完整的 colorizing 的文本支持。
编辑执行的步骤。 Colorize 文本
编辑器通过调用 IVsLanguageInfo 对象的 GetColorizer 方法获取 colorizer。
编辑器调用 GetStateMaintenanceFlag 方法确定 colorizer 是否需要每行状态。 colorizer 外部维护。
如果 colorizer 要求该状态。 colorizer 外部维护,编辑器称为 GetStartState 方法获取第一行的状态。
对缓冲区的每一行,编辑器 ColorizeLine 调用方法,执行以下步骤:
文本行传递给扫描仪将文本转换为标记。 每个标记指定该标记文本和该标记类型。
该标记类型转换为索引为可着色项列表。
符号信息填充数组此类数组的每个元素都对应于行中的一个字符。 在数组中存储的值是索引到可着色项列表。
状态在行尾为每一行。
如果 colorizer 要求该状态维护,编辑缓存该行的状态。
编辑器呈现文本行使用从 ColorizeLine 方法返回的信息。 这需要以下步骤:
对于在行的每个字符,获取可着色项索引。
如果使用默认可着色项,编辑的可着色项列表的访问。
否则,调用语言服务的 GetColorableItem 方法获取一个可着色项。
使用信息在可着色项呈现该文本为显示。
托管包结构 Colorizer
托管包框架 (MPF)提供了实现 colorizer 的任何类。 语言服务类应继承 LanguageService 类并实现所需方法。 必须通过实现 IScanner 接口提供扫描仪和分析器,并返回该接口实例从 GetScanner 方法 (在 LanguageService 类必须实现) 的一个方法。 有关更多信息,请参见 语法 Colorizing (托管包结构)。