Partager via


langages contenus

Les langages contenus sont des langages contenus par d'autres langages. Par exemple, HTML dans les pages de ASP.NET peut contenir Visual C# ou des scripts de Visual Basic . Une architecture de double-langage est requise pour que l'éditeur de fichiers .aspx afin de fournir Intellisense, la colorisation, et d'autres fonctionnalités de modification du HTML et le langage de script.

Implémentation

L'interface la plus importante que vous devez implémenter pour les langages contenus est l'interface d' IVsContainedLanguage . Cette interface est implémentée par n'importe quel langage qui peut être hébergé dans une langue principale. Il permet d'accéder au coloriseur du service de langage, le filtre d'affichage de texte, et à l'identification de service de langage principale IVsContainedLanguageFactory vous permet de créer une interface d' IVsContainedLanguage . Les étapes suivantes montrent comment implémenter un langage contenu :

  1. Utilisez QueryService() pour obtenir l'ID de service de langage et l'ID d'interface d' IVsContainedLanguageFactory.

  2. appelez la méthode d' GetLanguage pour créer une interface d' IVsContainedLanguage . Passez une interface d' IVsHierarchy , un ID d'élément (un ou plusieurs des VSITEMID_NIL, d' VSITEMID_ROOT, ou d' VSITEMID_SELECTION) et une interface d' IVsTextBufferCoordinator .

  3. L'interface d' IVsTextBufferCoordinator , qui est l'objet distributed mémoire tampon de texte, fournit les services de base requis pour mapper des emplacements dans un fichier primaire dans la mémoire tampon de la langue secondaire.

    Par exemple, dans un fichier .aspx unique, le fichier principal inclut ASP, HTML et tout le code qui est contenu. Toutefois, la mémoire tampon secondaire, compose uniquement du code contenu, ainsi que toutes les définitions de classe, pour définir cette mémoire tampon secondaire un fichier valide de code. Le coordinateur de mémoire tampon gère le travail des modifications coordonnées d'une mémoire tampon vers l'autre.

  4. La méthode d' SetSpanMappings , qui est la langue principale, indique au coordinateur de mémoire tampon le texte dans sa mémoire tampon est mappé au texte correspondant dans la mémoire tampon secondaire.

    Le langage passe un tableau de la structure d' NewSpanMapping , qui inclut actuellement qu'une étendue principale et secondaire.

  5. la méthode d' MapPrimaryToSecondarySpan et la méthode d' MapSecondaryToPrimarySpan fournissent le mappage de primaire à la mémoire tampon secondaire et vice versa.