Compartilhar via


Idiomas contidos

Continha idiomas são linguagens que estão contidas por outras linguagens. Por exemplo, o HTML em ASP.NET páginas podem conter Visual C# ou Visual Basic scripts. Uma arquitetura dual-idioma é necessária para o editor de arquivos. aspx fornecer o IntelliSense, colorização e outros recursos de edição de HTML e a linguagem de script.

Implementação

A interface mais importante que você precisa implementar para os idiomas contidos é o IVsContainedLanguage interface. Essa interface é implementada por qualquer linguagem que pode ser hospedada em um idioma principal. Ele fornece acesso para o serviço de linguagem colorizer, filtro de exibição de texto e identificação do idioma principal serviço. O IVsContainedLanguageFactory permite que você crie um IVsContainedLanguage interface. As etapas a seguir mostram como implementar uma linguagem contida:

  1. Use QueryService() para obter o ID de serviço e a identificação de idioma do IVsContainedLanguageFactory.

  2. Chamar o GetLanguage método para criar um IVsContainedLanguage interface. Passar um IVsHierarchy interface, uma ID de item (um ou mais de VSITEMID_NIL, VSITEMID_ROOT, ou VSITEMID_SELECTION) e um IVsTextBufferCoordinator interface.

  3. O IVsTextBufferCoordinator interface, que é o objeto de coordenador de buffer de texto, fornece os serviços básicos que são necessárias para mapear locais em um arquivo primário no buffer do idioma secundário.

    Por exemplo, em um arquivo. aspx único, o arquivo primário inclui o ASP, HTML e todo o código que está contido. Entretanto, o buffer secundário, inclui apenas o código contido, juntamente com quaisquer definições de classe, para tornar o buffer secundário de um arquivo de código válido. O coordenador de buffer trata da função de coordenação de edições de um buffer para outro.

  4. O SetSpanMappings método, que é o idioma principal, informa o coordenador de buffer que o texto dentro de seu buffer é mapeado para o texto correspondente no buffer secundário.

    O idioma passa em uma matriz da NewSpanMapping estrutura, que atualmente inclui somente um primário e secundário span.

  5. O MapPrimaryToSecondarySpan método e a MapSecondaryToPrimarySpan método fornece o mapeamento de primário para o buffer secundário e vice-versa.