包含的语言

包含的语言 由其他语言包含的语言。 例如,在 ASP.NET 页的 HTML 可以包含 Visual C# 或 Visual Basic 脚本。 双语言结构对于 .aspx 文件编辑所需的为 HTML 和这种脚本语言提供 IntelliSense、着色以及其他编辑功能。

实现

您需要为包含的语言实现的最重要的接口是 IVsContainedLanguage 接口。 此接口由可承载在 PRIMARY LANGUAGE 内的任何语言实现。 它允许访问语言服务的 colorizer、文本视图筛选器和 PRIMARY LANGUAGE 服务标识符的访问 IVsContainedLanguageFactory 可以创建 IVsContainedLanguage 接口。 下面的步骤演示如何实现一种包含的语言:

  1. 使用 QueryService() 获取语言服务 ID 和 IVsContainedLanguageFactory的接口 ID。

  2. 调用 GetLanguage 方法创建 IVsContainedLanguage 接口。 通过 IVsHierarchy 接口、项 ID (一个或多 VSITEMID_NILVSITEMID_ROOTVSITEMID_SELECTION) 和 IVsTextBufferCoordinator 接口。

  3. IVsTextBufferCoordinator 接口,必须是文本缓冲区协调员对象,提供需要映射一个主文档的位置添加到辅助语言的缓冲区的基本服务。

    例如,在一个 .aspx 文件,主文档包含 ASP、 HTML 和包含的任何代码。 但是,辅助缓冲区,用任何类定义一起包括包含的代码,,使辅助缓冲区有效的代码文件。 工作协调从一个缓冲区编辑到其他的缓冲区协调员处理。

  4. SetSpanMappings 方法,该方法是 PRIMARY LANGUAGE,调用缓冲区协调员在其缓冲区中的哪些文本映射到辅助缓冲区的相应文本。

    该语言在 NewSpanMapping 结构数组传递,仅当前包括主和一个辅助范围。

  5. MapPrimaryToSecondarySpan 方法和 MapSecondaryToPrimarySpan 方法提供用于从主到辅助缓冲区反之亦然。