Syntax-tönen (Managed Paketframework)
Syntax farbauftrag ist eine Funktion, die verschiedene Elemente der Ursachen einer in einer Quelldatei in verschiedenen Farben und Formate Programmiersprache angezeigt werden soll. Um diese Funktion zu unterstützen, müssen Sie einen Parser oder einen Scanner angeben die Typen von Elementen oder lexikalische Token in der Datei identifizieren können. Viele Sprachen unterscheiden Schlüsselwörter Trennzeichen (z oder geschweifte Klammern) und Kommentare, indem sie auf verschiedene Arten darfarbig stellen.
Implementierung
Um Farbauftrag zu unterstützen, schließt das verwaltete Paketframework (MPF), die Colorizer-Klasse, die die IVsColorizer-Schnittstelle implementiert. Diese Klasse interagiert mit IScanner ein, um das Token und Farben zu bestimmen. Weitere Informationen über Scanner finden Sie unter Sprachendienst-Parser und Scanner (Managed Paketframework). Die Colorizer-Klasse markiert dann alle Zeichen des Tokens mit den Farbinformationen und gibt diese Informationen in den Editor zurück, der die Quelldatei anzeigt.
Die Farbinformationen, die dem Editor zurückgegeben werden, sind ein Index für eine Liste von färbbaren Elementen. Jedes färbbare Element gibt einen Farbwert und einen Satz von Attributen, z. B. Schriftart fett oder Durchstreichen auf. Der Editor stellt einen Satz von standardmäßigen färbbare Elemente, die der Sprachdienst verwenden kann. Alles, was Sie tun müssen, besteht darin, den entsprechenden Index Farben für jeden Tokentyp an. Sie können jedoch benutzerdefinierte färbbare Elemente und Indizes bieten, die Sie für die Token angeben und leiten die eigene Liste von Elementen färbbaren Statt der Standardliste. Sie müssen den RequestStockColors Registrierungseintrag auf 0 festlegen (oder geben Sie nicht den RequestStockColors Eintrag vorhanden) an, um benutzerdefinierte Farben zu unterstützen. Sie können den Registrierungseintrag mit einem benannten Parameter für das benutzerdefinierte Attribut ProvideLanguageServiceAttribute festlegen. Weitere Informationen zum Registrieren des Sprachdiensts und das Festlegen ihrer Optionen finden Sie unter Wenn Sie einen Sprachdienst registrieren (Managed Paketframework).
Für benutzerdefinierte färbbare Elemente
Um anzugeben, benutzerdefinierte färbbare Elemente besitzen, müssen Sie GetItemCount und die GetColorableItem-Methode für die LanguageService-Klasse überschreiben. Die erste Methode gibt die Anzahl der benutzerdefinierten färbbaren Elementen zurück, die der Sprachdienst unterstützt und die zweite ruft das benutzerdefinierte färbbare Element anhand des Indexes ab. Sie erstellen die Standardliste von benutzerdefinierten färbbaren Elementen. Im Konstruktor des Sprachdiensts, alles ist, müssen Sie jedes färbbare Element mit einem Namen zu geben. Visual Studio behandelt automatisch den Fall, in dem der Benutzer einen anderen Satz färbbare Element auswählt. Dieser Name ist, was in der Schriftarten und Farben-Eigenschaftenseite auf dem Optionen von Visual Studio verfügbar (Dialogfeld Extras Menü angezeigt wird) und dieser Name bestimmt den Farbe ein Benutzer überschrieben hat. Die Auswahl des Benutzers werden in einem Cache in der Registrierung gespeichert und den Zugriff auf durch den Farbnamen. Die Schriftarten und Farben-Eigenschaftenseite zeigt alle Farbnamen in alphabetischer Reihenfolge aufgelistet. Daher können Sie benutzerdefinierte Farben gruppieren, indem Sie einen Farbnamen mit dem Sprachnamen vorausgehen.TestLanguage- Kommentar„z“ und „TestLanguage- Schlüsselwort“. Sie können auch die färbbaren Elemente gruppieren nach Typ „Kommentar (TestLanguage)“ und „Schlüsselwort (TestLanguage)“. Die Gruppierung von Sprachennamen ist vorzuziehen.
Warnung
Es wird dringend empfohlen, den Sprachennamen im färbbaren Elementnamen einschließen, um Konflikte mit vorhandenen färbbaren Elementnamen zu vermeiden.
Hinweis
Wenn Sie den Namen eines der Farben während der Entwicklung ändern, müssen Sie den Cache zurücksetzen, den Visual Studio, das das erste Mal den Farben erstellt wurde, zugegriffen wurde.Sie können so vorgehen, indem Sie den Experimentellen Hive zurücksetzen Befehl aus Visual Studio SDK-Programm-Menü ausführen.
Beachten Sie, dass das erste Element in der Liste der färbbaren Elementen nie verwiesen wird. Der Visual Studio stellt immer die Farben Standardtext und - Attribute für dieses Element. Die einfachste Art des Beschäftigens in diesem Fall wird ein färbbares Element des Platzhalters als Erstes Element zu erzeugen.
Hohe Farben-färbbare Elemente
Elemente können Färbbare 24-Bit oder hohe Farbwerte von der Schnittstelle IVsHiColorItem ebenfalls unterstützen. Die Klasse unterstützt die Schnittstelle IVsHiColorItem MPF ColorableItem 24-Bit-Farben werden im Konstruktor und die zusammen mit den normalen Farben angegeben. Zeigen Sie die ColorableItem-Klasse. Im folgenden Beispiel wird gezeigt, wie die 24-Bit-Farben für Schlüsselwörter und Kommentare festlegt. Die 24-Bit-Farben werden verwendet, wenn 24-Bit-Farbe auf den Desktop des Benutzers unterstützt wird. Andernfalls werden die normalen die Textfarbe verwendet.
Denken Sie daran, diese sind die Standardfarben für die Sprache. Der Benutzer kann diese Farben ändern, was sie soll.
Beispiel
In diesem Beispiel wird eine Möglichkeit gezeigt, ein Array benutzerdefinierte färbbare Elemente mithilfe der ColorableItem-Klasse zu deklarieren und zu füllen. In diesem Beispiel wird die aus Schlüsselwörtern und Kommentar mit den Farben 24-Bit-Farben fest.
using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;
namespace TestLanguagePackage
{
public class TestLanguageService : LanguageService
{
private ColorableItem[] m_colorableItems;
TestLanguageService() : base()
{
m_colorableItems = new ColorableItem[] {
new ColorableItem("TestLanguage – Text",
"Text",
COLORINDEX.CI_SYSPLAINTEXT_FG,
COLORINDEX.CI_SYSPLAINTEXT_BK,
System.Drawing.Color.Empty,
System.Drawing.Color.Empty,
FONTFLAGS.FF_DEFAULT),
new ColorableItem("TestLanguage – Keyword",
"Keyword",
COLORINDEX.CI_MAROON,
COLORINDEX.CI_SYSPLAINTEXT_BK,
System.Drawing.Color.FromArgb(192,32,32),
System.Drawing.Color.Empty,
FONTFLAGS.FF_BOLD),
new ColorableItem("TestLanguage – Comment",
"Comment",
COLORINDEX.CI_DARKGREEN,
COLORINDEX.CI_LIGHTGRAY,
System.Drawing.Color.FromArgb(32,128,32),
System.Drawing.Color.Empty,
FONTFLAGS.FF_DEFAULT)
// ...
// Add as many colorable items as you want to support.
};
}
}
}
Die Klasse der farbigen Darstellung und der Scanner
Die Basis LanguageService Diese Klasse enthält eine Methode GetColorizer instantiantes die Colorizer-Klasse. Der Scanner, der von der GetScanner-Methode zurückgegeben wird, wird dem Colorizer-Klassenkonstruktor übergeben.
Sie müssen die GetScanner-Methode implementieren, Version der LanguageService-Klasse besitzen. Die Colorizer-Klasse wird der Scanner, um alle Token farbinformationen.
Der Scanner muss eine TokenInfo Struktur für jedes Token aufgefüllt, das gesucht werden soll. Diese Struktur enthält Informationen wie die Spanne, die das Token einnimmt, die Farben Zeilenindex, mit welchem Typ und das Token " Token (siehe TokenTriggers). Nur die Spanne und die Farben für Farbauftrag Index werden durch die Colorizer-Klasse benötigt.
Der Index des Farben in der TokenInfo Struktur gespeichert wird, ist in der Regel ein Wert aus der TokenColor-Enumeration, die mehrere benannte Indizes entsprechend unterschiedlichen Sprachelemente wie Schlüsselwörtern und Operatoren bereitstellt. Wenn die benutzerdefinierten färbbaren Elemente, die aufzeigen, der die Elemente in der Enumeration TokenColor angezeigt werden, können Sie die Enumeration als Farbe für jedes Token zur Zeit verwenden. Wenn Sie jedoch zusätzliche färbbare Elemente verfügen oder nicht vorhandene Werte in dieser Reihenfolge verwenden möchten, können Sie die benutzerdefinierte färbbare Elementliste an, um zu erfordern und gibt den entsprechenden Index in dieser Liste. Stellen Sie sicher, dass Sie den Index zu TokenColor umzuwandeln, wenn Sie den Bericht in der TokenInfo Struktur speichern. Visual Studio sieht lediglich den Index.
Beispiel
Im folgenden Beispiel wird gezeigt, wie der Scanner werden drei Tokentypen identifiziert: Zahlen, Interpunktionszeichen und Bezeichner (aller, der keine Zahl oder ein Satzzeichen ist). Dieses Beispiel ist nur auf Veranschaulichung und stellt keine umfassende Parser- und Scanner-Implementierung dar. Es wird davon ausgegangen, dass es sich um eine Lexer-Klasse mit einer GetNextToken() Möglichkeit gibt, die eine Zeichenfolge zurückgibt.
using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;
namespace TestLanguagePackage
{
private Lexer lex;
public class TestScanner : IScanner
{
public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo,
ref int state)
{
bool foundToken = false;
string token = lex.GetNextToken();
if (token != null)
{
char firstChar = token[0];
if (Char.IsPunctuation(firstChar))
{
tokenInfo.Type = TokenType.Operator;
tokenInfo.Color = TokenColor.Keyword;
}
else if (Char.IsNumber)
{
tokenInfo.Type = TokenType.Literal;
tokenInfo.Color = TokenColor.Number;
}
else
{
tokenInfo.Type = TokenType.Identifier;
tokenInfo.Color = TokenColor.Identifier;
}
}
return foundToken;
}
Siehe auch
Konzepte
Sprachendienst-Parser und Scanner (Managed Paketframework)
Wenn Sie einen Sprachdienst registrieren (Managed Paketframework)