Innerhalb des Editors
Der Editor wird von mehreren unterschiedlichen Subsystemen zusammen, die entwickelt, um den Editor textmodell getrennt von der Textansicht und der Benutzeroberfläche zu halten.
Diese Abschnitten werden verschiedene Aspekte des Editors:
Diese Abschnitte beschreiben die Funktionen des Editors:
Übersicht über die Subsysteme
Textmodell-Subsystem
Das Subsystem - Textmodell ist für die Darstellung von Text und das Aktivieren der Bearbeitung verantwortlich. Das Subsystem enthält die ITextBuffer - Textmodell Schnittstelle, die die Sequenz von Zeichen beschreibt, die vom Editor angezeigt werden soll. Dieser Text kann in vielerlei Hinsicht geändert werden, überwacht werden. Andernfalls behandelt werden. Im - Textmodell stellt auch Typen für die folgenden Aspekte:
Ein Dienst, der Text mit Dateien zuweisen und verwaltet Lese- und Schreibvorgänge sie im Dateisystem.
Ein differenzierender Dienst, der die minimalen Unterschiede zwischen zwei Sequenzen von Objekten gesucht werden soll.
Ein System zum Beschreiben des Texts in einem Puffer im Hinblick auf Teilmengen des Texts in einem anderen Puffer.
Das Subsystem - Textmodell ist von den Konzepten der Benutzeroberfläche. Beispielsweise ist es nicht für die Textformatierung und Textlayout zuständig und hat keine Kenntnis von visuellen zusatzelementen, die mit dem Text zugeordnet sind.
Die öffentlichen Typen subsystems - Textmodell werden in Microsoft.VisualStudio.Text.Data.dll und Microsoft.VisualStudio.CoreUtilitiy.dll enthalten, die nur aus der .NET Framework-Basisklassenbibliothek und Managed Extensibility Framework (MEF) abhängen.
Text-Ansichts-Subsystem
Das Subsystem ist der Text, der zum Formatieren und Anzeigen des Textes zuständig. Die Typen in dieses Subsystem werden in zwei Ebenen unterteilt, je nachdem, ob die Typen in Windows Presentation Foundation (WPF) basieren. Die wichtigsten Typen sind ITextView und IWpfTextView, die den Satz von Textzeilen festlegen, die angezeigt werden sollen, sowie die Einfügemarke, die Auswahl und die Funktionen zum Schmücken des Texts, indem Elemente von WPF Benutzeroberfläche verwenden. Das Subsystem stellt außerdem die Ränder um den Text anzeigebereich bereit. Diese Ränder können erweitert werden und können verschiedene Arten von Inhalt und die visuellen Effekte enthalten. Ränder sind Beispiele für Schiebeleisten und Anzeigen von Zeilennummern.
Die subsystems der Text des öffentlichen Typen werden in " Microsoft.VisualStudio.Text.UI.dl l " und Microsoft.VisualStudio.Text.UI.Wp f.dll enthalten. Die erste Assembly enthält die plattformunabhängigen Elemente, die zweite enthält die WPF-Besondere Elemente.
Klassifizierungs-Subsystem
Das Klassifizierungs Subsystem ist zum Bestimmen von Schriftarteigenschaften für Text verantwortlich. Eine Klassifizierung unterbricht den Text in verschiedene Klassen, z. B. „Schlüsselwort“ oder „unter Kommentar“. Die zugeordnet Klassifizierungsformat verknüpft diese Klassen mit den tatsächlichen Schriftarteigenschaften z. B. „blaues Consolas 10 pt.“ Diese Informationen werden von der Textansicht verwendet, wenn sie Text formatiert und rendert. Das Etikettieren, das ausführlich weiter unten in diesem Thema beschrieben wird, können die Daten Textabschnitten verknüpft werden soll.
Die öffentlichen Typen des Klassifizierungs subsystems werden in Microsoft.VisualStudio.Text.Logic.dll enthalten, und ihnen interagieren mit den visuellen Aspekte der Klassifizierung, die in Microsoft.VisualStudio.Text.UI.Wp f.dll enthalten sind.
Vorgangs-Subsystem
Das Subsystem Vorgangs definierten Editor verhalten. Es stellt die Implementierung für Visual Studio-Texteditorbefehle Rückgängig und das System bereit.
Eine genauere Anzeige am - Textmodell und Text-Ansicht
Im - Textmodell
Das Subsystem - Textmodell besteht aus mehreren Gruppierungen von Textarten. Diese schließen den Textpuffer, die Textmomentaufnahmen und die Textabschnitte ein.
Text-Puffer und Text-Momentaufnahmen
Die ITextBuffer-Schnittstelle stellt eine Reihe von Unicode-Zeichen dar, die so codiert werden, indem UTF-16 verwendet, die die Codierung ist, die von String verwendete Typen in .NET Framework. Ein Textpuffer kann als Dateisystem Dokument beibehalten werden. Dieser ist nicht erforderlich.
ITextBufferFactoryService wird verwendet, um einen leeren Textpuffer oder einen Textpuffer zu erstellen, der aus einer Zeichenfolge oder TextReaderinitialisiert wird. Der Textpuffer kann als ITextDocumentim Dateisystem beibehalten werden.
Der Textpuffer kann von jedem Thread, bis ein Thread im Besitz übernimmt bearbeitet werden mithilfe des Textpuffers TakeThreadOwnershipaufruft. Nach dem nur dieser Thread kann Bearbeitungen ausführen.
Ein Textpuffer kann viele Versionen während seiner Lebensdauer durchlaufen. Eine neue Version wird generiert, wenn der Puffer behandelt wird und unveränderliches ITextSnapshot stellt den Inhalt dieser Version des Puffers dar. Da Textmomentaufnahmen, können Sie eine unveränderliche Textmomentaufnahme auf einem beliebigen Thread zugreifen ohne Einschränkungen Dies gilt auch, wenn die Textpuffer, wird er darstellt, um zu ändern.
Text-Momentaufnahmen und Text-Momentaufnahme-Zeilen
Sie können den Inhalt einer Textmomentaufnahme als Zeichenfolge oder als Sequenz von Linien anzeigen. Zeichen und Linien sind beide indiziertes Starten bei Null. Eine leere Textmomentaufnahme enthält keine Zeichen und eine Leerzeile. Eine Zeile ist für jede gültige Unicode-Unterstreichungs Sequenz oder durch den Anfang oder das Ende des Puffers getrennt. Zeilenumbruchzeichen werden explizit in der Textmomentaufnahme dargestellt, und alle Zeilenumbrüche in einer Textmomentaufnahme müssen nicht identisch sein.
Hinweis
Weitere Informationen zum Zeilenumbruchzeichen im Visual Studio-Editor finden Sie unter Codierungen und Zeilenumbrüche.
Eine Textzeile wird durch ein ITextSnapshotLine-Objekt dargestellt, das von einer Textmomentaufnahme für eine bestimmte Zeilennummer oder für eine bestimmte Zeichenposition abgerufen werden kann.
SnapshotPoints, SnapshotSpans und NormalizedSnapshotSpanCollections
SnapshotPoint stellt eine Zeichenposition in einer Momentaufnahme dar. Die Position wird zwischen null und der Länge der Momentaufnahme liegen gewährleistet. SnapshotSpan stellt einen Textabschnitt in einer Momentaufnahme dar. Die Endposition wird zwischen null und der Länge der Momentaufnahme liegen gewährleistet. NormalizedSnapshotSpanCollection besteht aus einem Satz von SnapshotSpan-Objekten aus derselben Momentaufnahme.
NormalizedSpanCollections und Spannen
Span stellt ein Zeitintervall dar, das einem Textabschnitt in einer Textmomentaufnahme angewendet werden kann. Momentaufnahme so positioniert sind, können an einer beliebigen Position einschließlich Spannen begonnen) ist nullbasiert. Die End-Eigenschaft einer Spanne entspricht der Summe der Start-Eigenschaft und der Length-Eigenschaft. Span enthält nicht das Zeichen ein, das von der End-Eigenschaft indiziert wird. Zum Beispiel schließen eine Spanne, die Start=5 verfügt und Length=3 End=8 verfügt und die Zeichen in Positionen 5, 6 und 7 ein. Die Notation für diese Spanne entspricht 5..8).
Zwei Spannen überlappen, wenn sie über gemeinsame Positionen verfügen, einschließlich der Endposition. Daher die Schnittmenge von [3, 5) und [2, 7) [3, 5) und die Schnittmenge von [3, 5) und [5, 7) [5, 5). Der Begriff ([5, 5) ist eine leere Spanne.)
Zwei Spannen überlappen, wenn sie über gemeinsame Positionen verfügen, mit Ausnahme der Endposition. Eine leere Spanne schneidet nie sich alle anderen Spanne, und die Überlappung von zwei Spannen ist niemals leer.
NormalizedSpanCollection ist eine Liste von Spannen in der Reihenfolge der Eigenschaften der Spannen starten. In der Liste werden berührende oder überlappende Spannen zusammengeführt. Beispielsweise ist der Satz von Spannen [5..9), [0..1) [3..6) [9..10) normalisierten Liste von Spannen [0..1), [3..10).
ITextEdit, TextVersion und Text-Änderungsbenachrichtigungen
Der Inhalt des Textpuffers kann geändert werden, indem ein ITextEdit-Objekt verwendet. Ein solches Objekt erstellt wird (mithilfe einer der CreateEdit()-Methoden von ITextBuffer) beginnt eine Transaktion zum Text aus Textbearbeitungen besteht. Jede Bearbeitung ist ein Ersatz einige Textabschnitts im Puffer durch eine Zeichenfolge. Die Koordinaten und den Inhalt jeder Bearbeitung sind relativ zur Momentaufnahme eines Puffers ausgedrückt, als die Transaktion gestartet wurde. Das ITextEdit-Objekts passt die Koordinaten von Änderungen, die von anderen Änderungen in derselben Transaktion betroffen sind.
Betrachten Sie z. B. einen Textpuffer, der diese Zeichenfolge enthält:
abcdefghij
Wendet eine Transaktion, die zwei Änderungen enthält, eine Bearbeitung, der die Spanne [2..4) mithilfe des Zeichens X und zweiten Bearbeiten ersetzt, die an die Spanne [6..9) mithilfe des Zeichens Yersetzt. Das Ergebnis ist dieser Puffer:
abXefYj
Die Koordinaten für die Bearbeitung zweite wurden in Bezug auf den Inhalt des Puffers zu Beginn der Transaktion berechnet, bevor die erste Bearbeitungsvorgang angewendet wurde.
Die Änderungen am Puffer treten in Kraft, wenn das ITextEdit-Objekt übernommen wird, indem ihre Apply()-Methode aufruft. Wenn mindestens eine nicht leer ist, wird eine neue ITextVersion Bearbeitung erstellt, wird eine neue ITextSnapshot erstellt, und ein Changed-Ereignis wird ausgelöst. Jede Version Text hat eine andere Textmomentaufnahme. Eine Textmomentaufnahme stellt den vollständigen Zustand des Textpuffers zu einer Bearbeitungstransaktion dar, aber eine Version Text beschreibt nur die Änderungen aus einer Momentaufnahme am nächsten. Im Allgemeinen werden Textmomentaufnahmen, einmal verwendet und dann verworfen werden, während Text aktiv bleiben müssen eine Zeitlang loslässt.
Eine Version INormalizedTextChangeCollectionText enthält. Diese Auflistung beschreibt die Änderungen, die an die Momentaufnahme angewendet werden, die nächste Momentaufnahme erstellen. Jedes ITextChange in der Auflistung enthält die Zeichenposition der Änderung, der ersetzten Zeichenfolge und der angegebenen Ersatzzeichenfolge. Die ersetzte Zeichenfolge ist für eine einfache Einfügung leer, und die Ersatzzeichenfolge ist für ein grundlegendes Löschen leer. Die normalisierte Auflistung ist immer null für die neueste Version des Textpuffers.
Nur ein ITextEdit-Objekt kann für einen Textpuffer jederzeit instanziiert werden, und alle Textbearbeitungen müssen auf dem Thread ausgeführt, der den Textpuffer besitzt (wenn der Besitz Konformität deklariert wurde). Eine Textbearbeitung kann abgebrochen werden, indem seine Cancel-Methode oder die Dispose-Methode aufruft.
ITextBuffer stellt auch Insert(), **Delete()**und Replace()-Methoden, die denen ähneln, die auf der ITextEdit-Schnittstelle gefunden werden. Durch Aufrufen dieser hat dieselben Auswirkungen wie das Erstellen eines ITextEdit-Objekt und legt den ähnlichen Aufruf und dann den Bearbeitungsvorgang angewendet werden.
Nachverfolgungs-Punkte und Nachverfolgungs-Spannen
ITrackingPoint stellt eine Zeichenposition in einem Textpuffer dar. Wenn der Puffer auf eine Weise geändert wurde, die die Position des Zeichens führt zu verschieben, ändert sich der Nachverfolgungspunkt ihm. Wenn beispielsweise ein Nachverfolgungspunkt Position 10 in einem Puffer verweist, und fünf Zeichen sind am Anfang des Puffers eingefügt, der Nachverfolgungspunkt dann Position 15 verweisen. Wenn eine Einfügung in genau der Position, die von den Nachverfolgungspunkt bezeichnet wird, wird ihr Verhalten durch seinen PointTrackingModebestimmt, die entweder Positive oder Negativewerden kann. Wenn der Nachverfolgungsmodus positiv ist, verweist der Nachverfolgungspunkt dasselbe Zeichen an, das jetzt am Ende der Einfügung ist. wenn der Nachverfolgungsmodus negativ ist, verweist der Nachverfolgungspunkt das erste eingefügten Zeichen in der ursprüngliche Position an. Wenn das Zeichen an der Position, die durch einen Nachverfolgungspunkt dargestellt wird, gelöscht wird, ändert sich der Nachverfolgungspunkt bis zum ersten Zeichen, das dem gelöschten Region folgt. Wenn beispielsweise ein Nachverfolgungspunkt das Zeichen an Position 5 verweist, und die Zeichen an Position 3 bis 6 werden, der Nachverfolgungspunkt verweist das Zeichen an Position 3 gelöscht.
ITrackingSpan stellt einen Bereich von Zeichen und nicht nur einer Position dar. Sein Verhalten wird durch seinen SpanTrackingModebestimmt. Wenn der Spannen nachverfolgungs entwickelt, ist EdgeInclusiveModus für die Nachverfolgungsspanne enthalten den Text an seinen Rändern eingefügt wird. nachverfolgungs Spannen wenn der Modus EdgeExclusiveist, enthält die Nachverfolgungsspanne, der Text nicht an seinen Rändern eingefügt wird. Wenn jedoch der Spannen nachverfolgungs EdgePositiveModus befindet, wird eine Einfügung die aktuelle Position zum Anfang nachverfolgungs Spannen. Wenn der Modus EdgeNegative, eine Einfügung die aktuelle Position zum Ende drückt.
Sie können die Position eines Verfolgungspunkts oder der Spanne der Nachverfolgungsspanne für jede Momentaufnahme des Textpuffers ab, zu dem sie gehören. Nachverfolgen und zeigt Nachverfolgungsspannen werden sicher von jedem Thread verwiesen werden.
Inhaltstypen
Inhaltstypen stellen einen Mechanismus zum Definieren von verschiedenen Arten des Inhalts. Ein Inhaltstyp kann es sich um einen Dateityp z. B. „text“, „Code“ oder „binary“ oder ein " Technologie als „xml“, „vb“ oder „c#“ sein. Beispielsweise wird das Wort „using“ - Schlüsselwort in C# und Visual Basic, jedoch nicht in anderen Programmiersprachen. Daher wird die Definition des Schlüsselworts auf „c#“ und „vb“ Inhaltstypen beschränkt.
Inhaltstypen werden als Filter für Zusatzelemente und andere Elemente des Editors verwendet. Viele Editorfunktionen und Erweiterungspunkte werden pro Inhaltstyp definiert. Beispielsweise ist Text farbton für Nur-Text-Dateien, XML-Datei- und Visual Basic-Quellcodedateien unterschiedlich. Textpuffer werden im Allgemeinen einen Inhaltstyp zugewiesen, wenn sie erstellt werden, und der Inhaltstyp des Textpuffers kann geändert werden.
Inhaltstypen können von anderen Inhaltstypen Mehrfachverbindungsstelle-erben. ContentTypeDefinition können Sie mehrere Basistypen als die übergeordneten Elemente eines bestimmten Inhaltstyps angeben.
Entwickler können ihre eigenen Inhaltstypen definieren und registrieren, indem IContentTypeRegistryServiceverwenden. Viele Editorfunktionen können in Bezug auf einen bestimmten Inhaltstyp definiert werden, indem ContentTypeAttributeverwendet. Bildrand kann z. B. Editor, Zusatzelemente und Maushandler definiert werden, dass sie nur für Editoren gelten, die bestimmte Inhaltstypen anzuzeigen.
Die Text-Ansicht
Der Modellansicht des Musters des Ansicht controllers (MVC) definiert die Textansicht, die die Formatierung der Ansicht, die grafische Elemente wie die Bildlaufleiste und die Einfügemarke. Alle Darstellungselemente von Visual Studio-Editors basieren auf WPF.
Text-Ansichten
Die ITextView-Schnittstelle ist eine plattformunabhängige Darstellung einer Textansicht. Es wird hauptsächlich verwendet, um Textdokumente in einem Fenster anzuzeigen, aber es kann beispielsweise in einer QuickInfo auch für andere Zwecke verwendet werden.
Die Textansicht verweist auf verschiedene Arten von Text gepuffert werden. Die TextViewModel-Eigenschaft verweist auf ein ITextViewModel-Objekt an, das Punkte zu diesen drei verschiedenen Text gepuffert werden: Der Datenpuffer, der der obere LEVEL-Puffer DATA, wird der Bearbeitungspuffer, in dem Bearbeiten fungiert, und der visuellen Puffer, der den Puffer, der in der Textansicht angezeigt wird.
Der Text wird auf Grundlage der Formatierung von Klassifizierern, die im zugrunde liegenden Textpuffer angefügt werden und wird mithilfe der verziert Hersteller Zusatzelement verwendet, die für die Textansicht selbst angefügt werden.
Das Text-Ansichts-Koordinatensystem
Wenn der Text koordinatensystem gibt Positionen in der Textansicht an. In diesem x Koordinatensystem ist der Wert 0.0 (null) bis zur linken Kante des Texts angezeigt wird, und der y-Wert 0.0 entspricht dem oberen Rand des Texts angezeigt wird. Die x Koordinate vergrößert sich von links nach rechts und y Koordinate vergrößert sich von oben nach unten.
Ein Viewport sichtbar (der Teil des Texts im Textfenster) kann nicht auf die gleiche Weise ein horizontaler Bildlauf durchgeführt werden, während er vertikalen Bildlauf durchgeführt wird. Ein Viewport horizontaler Bildlauf durchgeführt wird, indem ihre linke Koordinate ändert, damit er in Bezug auf die Zeichenoberfläche befindet. Allerdings kann es sich um einen Viewport einen vertikalen Bildlauf durchgeführt werden nur über den gerenderten Text ändert, der ein LayoutChanged-Ereignis auslöst.
Lücken im Koordinatensystem entsprechen den logischen Pixeln. Wenn die Oberfläche Rendern von Text ohne Skalierung angezeigt wird, Transformation ist eine Einheit im Textrendering-Koordinatensystem einem Pixel für die Anzeige.
Ränder
Die ITextViewMargin-Schnittstelle stellt einen Rand dar und ermöglicht die Steuerung der Sichtbarkeit des Rahmens und ihrer Größe. Es gibt vier vordefinierten Ränder, die „Rand“ benannt werden,“ Link „, „rechts“ und „Bottom“ und an der oberen, der zum Ende angefügt sind, Links oder am rechten Rand der Ansicht. Diese Ränder sind Container, in denen andere Ränder eingefügt werden können. Die Schnittstelle definiert Methoden, die die Größe des Rands und die Sichtbarkeit eines Rahmens zurück. Ränder sind visuelle Elemente, die zusätzliche Informationen über die Textansicht bereitstellen, auf die sie angefügt werden. Beispielsweise zeigt der Rand mit Zeilennummern Zeilennummern für die Textansicht an. Der Symbolrand wird Benutzeroberflächenelemente an.
Die IWpfTextViewMarginProvider-Schnittstelle behandelt die Erstellung und die Platzierung von Seitenrändern. Ränder können in Bezug auf andere Rand angeordnet sein. Ränder mit höherer Priorität befinden sich näher an der Textansicht. Wenn z. B. hat es zwei linke Randbreite Rand A und B Rand und gibt eine niedrigere Priorität Rand B, A, B Rand als Rand auf der linken Seite des Rahmens A wird.
Der Text-Ansichts-Host
Die IWpfTextViewHost-Schnittstelle enthält die Textansicht und alle berührenden Dekorationen, die die Ansicht z. B. Schiebeleisten Verfügung. Der Text Host enthält auch die Ränder, die einem Rahmen der Ansicht angefügt werden.
Formatierter Text
Der Text, der in einer Textansicht angezeigt wird, wird von ITextViewLine-Objekten besteht. Jede TEXT Ansicht Zeile entspricht einer Textzeile in der Textansicht. Lange Zeilen im zugrunde liegenden Textpuffer können entweder teilweise verdeckt werden ,wenn Zeilenumbrüche nicht aktiviert wird) oder TEXT Sicht auf mehrere Zeilen aufgeteilt. Die ITextViewLine-Schnittstelle enthält Methoden und Eigenschaften für die Zuordnung zwischen Koordinaten und Zeichen und für die Zusatzelemente, die der Zeile zugeordnet werden.
ITextViewLine-Objekte werden erstellt, indem eine IFormattedLineSource-Schnittstelle verwendet. Wenn Sie lediglich über den Text betroffen sind, der gegenwärtig in der Ansicht angezeigt wird, können Sie die Quelle Formatierung ignoriert. Wenn Sie das Format des Texts interessiert sind, der nicht in der Ansicht (z. B. ein Rich-Text-ausschneiden einfügen und Unterstützung für Verbindungen angezeigt wird, können Sie IFormattedLineSource verwenden, um Text in einem Textpuffer zu formatieren.
Die Textansicht formatiert ein ITextSnapshotLine .
Editor-Funktionen
Die Funktionen des Editors sind so konzipiert, dass die Definition der Funktion nicht mit seiner Implementierung ist. Der Editor schließt diese Funktionen:
Tags und Klassifizierern
Zusatzelemente
Projection
Gliederung
Maus- und Tastenzuordnungen
Operationen und Primitive
IntelliSense
Tags und Klassifizierern
Tage sind Marker, die mit einem Textabschnitt verbunden sind. Sie können auf verschiedene Weise dargestellt werden, z. B. durch sie farbton Text oder Grafiken, Unterstriche, Knall UPS verwenden. Klassifizierern sind eine Art Tag.
Andere Arten von Tagen sind TextMarkerTag für Text-Hervorhebung, OutliningRegionTag zum Gliedern, und ErrorTag für Compilerfehler.
Klassifizierungs-Typen
Eine IClassificationType-Schnittstelle stellt eine Übereinstimmung Klasse dar, die eine abstrakte Kategorie Text ist. Klassifizierungstypen können andere Klassifizierungstypen Mehrfachverbindungsstelle-erben. Zum Beispiel kann umfaßten Programmiersprachen klassifizierungen „Schlüsselwort“, „Kommentar“ und „Bezeichner“ all „Code“ festlegen. Klassifizierungstypen in einer natürlichen Sprache umfaßten „Substantiv“, „verb“ und „Adjektiv“, die alle von „in natürlicher Sprache“ erben.
Klassifizierungen
Eine Klassifizierung ist eine Instanz eines spezifischen Klassifizierungstyps, in der Regel zu einem Textabschnitt. ClassificationSpan wird verwendet, um eine Klassifizierung darzustellen. Eine Klassifizierungs Spanne kann für eine Bezeichnung vorstellen, die einen bestimmten Textabschnitt enthält und teilt dem System mit, dass dieser Textabschnitt aus einem bestimmten Klassifizierungstyp ist.
Klassifizierern
IClassifier ist ein Mechanismus, der Text in Klassifizierungen teilt. Klassifizierern müssen für bestimmte Inhaltstypen definiert werden und für bestimmte Textpuffer instanziiert werden. Clients müssen IClassifier implementieren, um an der Text klassifizierung teilzunehmen.
Klassifizierungs-Aggregatoren
Ein Klassifizierungs aggregator ist ein Mechanismus, der alle Klassifizierungen für einen Textpuffer Satz von Klassifizierungen in nur ein kombiniert. Beispielsweise können eine C#-Klassifizierung und eine Klassifizierung der englischen Sprache Klassifizierern über einen Kommentar in einer C#-Datei erstellen. Betrachten Sie den Kommentar:
// This method produces a classifier
Eine C#-Klassifizierung beschriftete möglicherweise die ganze Spanne als Kommentar, und die Klassifizierung der englischen Sprache möglicherweise klassifizierte „erzeugt“ als „verb“ und „Methode“ als „Substantiv“. Der Aggregator erzeugt einen Satz von nicht überlappenden Klassifizierern, und der Typ des Datensatzes basiert auf alle Beiträge.
Ein Klassifizierungs aggregator ist auch eine Klassifizierung, da sie Text in Klassifizierungen teilt. Der Klassifizierungs aggregator auch sichergestellt, dass keine überlappenden Klassifizierern ist und dass die Klassifizierern sortiert werden. Einzelne Klassifizierern gemeinsam sind alle Gruppe von Klassifizierern zurückgegeben werden, in beliebiger Reihenfolge und Überlappen auf irgendeine Weise.
Klassifizierungs-Formatierungs-und Text-Farbton
Textformatierung ist ein Beispiel für eine Funktion, die für Text klassifizierung erstellt wird. Sie wird durch den Text der Ebene verwendet, um die Darstellung von Text in einer Anwendung zu ermitteln. Der Bereich wird vom WPF Textformatierung abhängig, aber die logische Definition von Klassifizierungen nicht.
Ein Klassifizierungsformat ist ein Satz von Formatierungseigenschaften für einen bestimmten Klassifizierungstyp. Diese Formate erben vom Format des übergeordneten Elements des Klassifizierungstyps.
IClassificationFormatMap ist eine Zuordnung von einem Klassifizierungstyp zu einem Satz von Textformatierung. Die Implementierung der Format im Editor zugeordnet Klassifizierungs Dateiformaten behandelt alle Exporte aus.
Zusatzelemente
Zusatzelemente sind grafische Effekte, die nicht direkt mit der Schriftart und Farbe der Zeichen in der Textansicht verknüpft sind. Beispiel: Der rote Wellenlinien unterstrich, der verwendet wird, um das nicht-Kompilieren des Codes in vielen Programmiersprachen zu markieren, ein eingebettetes Zusatzelement und QuickInfos sind Popupfenster zusatzelemente. Zusatzelemente sind von UIElement abgeleitet und implementiert ITag. Zwei spezielle Typen sind SpaceNegotiatingAdornmentTagZusatzelement tag nach Zusatzelemente, die einen Leerraum wie der Text in einer Ansicht belegen, und ErrorTag, für den unterstrich Wellenlinien.
Eingebettete Zusatzelemente sind Grafiken, die Teil der Ansicht des formatierten Texts darstellt. Sie werden in verschiedenen z-Reihenfolgen-Ebenen organisiert. Es gibt drei integrierte Ebenen wie folgt: simsen Sie die Auswahl und der Einfügemarke. Entwickler können jedoch mehrere Ebenen definieren und dann nacheinander auf miteinander in Beziehung setzen. Die drei Arten von eingebetteten Zusatzelementen sind TEXT RELATIVE-Zusatzelemente (die verschoben werden, wenn der Text befindet und werden gelöscht, wenn der Text gelöscht wird), Ansicht RELATIVE-Zusatzelemente (Nicht TEXT-Teilen der Ansicht beinhalten) und OWNER-gesteuerte Zusatzelemente (der Entwickler muss ihre Positionierung verwalten).
Popup zusatzelemente sind Grafiken, die in einem kleinen Fenster über die Textansicht QuickInfos angezeigt werden, z. B.
Projection
Projektion ist eine Technik zur Erstellung einer anderen Art Textpuffer, der keine tatsächliche Text speichert, sondern stattdessen in Kombination von Text anderer Text gepuffert werden. Beispielsweise kann ein Projektionspuffer verwendet werden, um den Text aus zwei anderen Puffer zu verketten und das Ergebnis dargestellt werden, als ob er in nur einem Puffer ist oder Teile des Texts in einem Puffer auszublenden. Ein Projektionspuffer kann als Quellpuffer zu einem anderen Projektionspuffer auftreten. Ein Satz von Puffern, die durch Projektion verknüpft sind, kann erstellt werden, um Text auf viele verschiedene Arten neu anzuordnen. (Durch einen solchen Reihe wird auch als Pufferdiagramm.) Die Visual Studio-Text-Gliederungs wird implementiert, indem das Feature für einen Projektionspuffer verwendet, um den reduzierten Text auszublenden, und der Visual Studio-Editor für ASP.NET-Seiten Projektion verwendet, um eingebettete Sprachen wie Visual Basic und C# unterstützen.
IProjectionBuffer wird erstellt, indem IProjectionBufferFactoryServiceverwendet. Ein Projektionspuffer wird durch eine geordnete Sequenz von ITrackingSpan-Objekten dargestellt, die als Quellspannenbezeichnet wird. Der Inhalt dieser Spannen werden als Folge von Zeichen dargestellt. Der Textpuffer, von denen die Quelle umfasst, sind mit dem Namen werden als Quellpuffergezeichnet. Clients eines Projektionspuffers müssen nicht beachten, dass er von einem normalen Textpuffer unterscheidet.
Der Projektionspuffer Änderung TEXT lauscht auf den Quellspalten Ereignisse gepuffert wird. Wenn der Text in einer Quellspanne geändert wird, ordnet der Projektionspuffer die geänderten Text Koordinaten zu den eigenen Koordinaten auf und löst entsprechende Änderung vom Typ TEXT - Ereignis aus. Betrachten Sie z. B. Quellpuffer A und B, die Inhalt aufweisen:
A: ABCDE
B: vwxyz
Wenn Projektionspuffer P von zwei Textabschnitten gebildet wird, hat eine, der die ganze Puffer A und die andere enthält, das die ganze von B ist, dann von P den folgenden Inhalt:
P: ABCDEvwxyz
Wenn die Teilzeichenfolge xy aus Puffer B gelöscht wird, dann löst Puffer P ein Ereignis aus, das anzeigt, dass die Zeichen an Position 7 und 8 gelöscht wurden.
Der Projektionspuffer kann auch direkt bearbeitet werden. Es gibt Änderungen in die entsprechenden Quellspalten gepuffert werden weiter. Wenn z. B. eine Zeichenfolge im Puffer an Position 6 P (die ursprüngliche Position des Zeichens „v“) eingefügt wird, wird die Einfügung an Position 1 in den Puffer B. weitergegeben.
Es gibt Einschränkungen der Quellspannen, die einem Projektionspuffer beitragen. Quellspannen überschneiden sich möglicherweise nicht. ein Speicherort in einem Projektionspuffer kann nicht in mehr als einer Position in einem Quellpuffer zugeordnet, und ein Speicherort in einem Quellpuffer kann nicht in mehr als einer Position in einem Projektionspuffer zuordnen. Keine Zirkularitäten werden im Quell- puffer-Verhältnis zulässig.
Ereignisse werden ausgelöst, wenn der Satz von Puffern Quelle für einen Projektionspuffer ändert und wenn der Satz der Quelle Änderungen umfasst.
Ein Elisionspuffer ist eine besondere Art von Projektionspuffer. Er wird hauptsächlich zum Gliedern und für Vorgänge verwendet, die Textblöcke erweitern und reduzieren. Ein Elisionspuffer basiert auf nur einen Quellpuffer, und beide Spannen im Elisionspuffer müssen geordnet werden auf die gleiche Weise, in der sie im Quellpuffer geordnet sind.
Das Puffer-Diagramm
Die Schnittstelle ermöglicht IBufferGraph Zuordnung zu einem Diagramm mit Projektions gepuffert werden. Alle Textpuffer und Projektionspuffer werden in einem Diagramm azyklischen, auf die verwiesen wird, ähnlich wie die abstrakte Syntaxstruktur gesammelt, die von einem Sprachcompiler erzeugt wird. Das Diagramm wird durch den obersten Puffer definiert, der jeder Textpuffer werden kann. Das Pufferdiagramm kann von einem Punkt im obersten Puffer zu einem Punkt in einem Quellpuffer oder einer Spanne im obersten Puffer reservieren zu einem Satz von Spannen in einem Quellpuffer. Ebenso kann er einen Punkt oder eine Spanne von einem Quellpuffer zu einem Punkt im obersten Puffer reservieren. Puffer erstellt werden, um Diagramme mit IBufferGraphFactoryServiceverwendet.
Ereignisse und Projektions-Puffer
Wenn ein Projektionspuffer geändert wird, werden die Änderungen aus dem Projektionspuffer an Puffern gesendet, die davon abhängen. Schließlich werden die Änderung der Puffer Puffer Ereignisse werden ausgelöst, wobei am tiefsten Puffer geändert.
Gliederung
Gliederung ist die Möglichkeit, unterschiedliche Textblöcke in einer Textansicht zu erweitern oder zu reduzieren. Gliederung wird als Art ITagdefiniert, genauso wie Zusatzelemente definiert sind. OutliningRegionTag ist ein Tag, das einen Textbereich definiert, der erweitert oder reduziert werden kann. Um Gliederung zu verwenden, müssen Sie IOutliningManagerService zum Importieren IOutliningManagerabzurufen. Der reduziert wird, listet Manager Gliedern und erweitert die verschiedenen Blöcke, die als ICollapsible-Objekte dargestellt werden, und löst Ereignisse nach aus.
Maus-Bindungen
Mausbindungen verknüpfen bewegungen Maus zu verschiedenen Befehlen. Mausbindungen werden definiert, indem IMouseProcessorProviderverwendet und Tastenzuordnungen wurden definiert, indem IKeyProcessorProviderverwendet. IWpfTextViewHost instanziiert automatisch alle Bindungen und schließt sie auf Mausereignisse in der Ansicht an.
Die Schnittstelle enthält IMouseProcessor und Ereignishandler die vor der Verarbeitung nach der Verarbeitung für verschiedene Mausereignisse. Um eines der Ereignisse zu behandeln, können Sie einige der Methoden in MouseProcessorBaseüberschreiben.
Editor-Vorgänge
Editor Vorgänge verwendet werden können, um die Interaktion mit dem Editor oder Skripterstellung für andere Zwecke zu automatisieren. Sie können den IEditorOperationsFactoryService Zugriffen auf den angegebenen ITextViewimportieren. Sie können diese Objekte dann verwenden, um die Auswahl zu ändern, in der Ansicht einen Bildlauf durchzuführen oder die Einfügemarke an verschiedene Teile der Ansicht zu verschieben.
IntelliSense
IntelliSense unterstützt die Anweisungsvervollständigung, Signaturhilfe (auch als Parameter), QuickInfos und Smarttags.
Anweisungsvervollständigung stellt Popuplisten mit möglichen Vervollständigungen für Methodennamen, XML-Elemente und andere Codierung oder Markupelemente bereit. Im Allgemeinen wird eine Benutzergeste eine Vervollständigungssitzung auf. Die Sitzung wird die Liste möglicher Vervollständigungen an, und der Benutzer kann ein, oder wählen Sie in der Liste ablehnen. ICompletionBroker ist für das Erstellen und Starten ICompletionSessionverantwortlich. ICompletionSource berechnet CompletionSet Abschluss der Elemente für die Sitzung.