Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Editor se skládá z několika různých subsystémů, které jsou navržené tak, aby byl textový model editoru oddělený od textového zobrazení a uživatelského rozhraní.
Tyto části popisují různé aspekty editoru:
Tyto části popisují funkce editoru:
Subsystémy
Subsystém textového modelu
Subsystém textového modelu zodpovídá za reprezentaci textu a umožnění jeho manipulace. Subsystém textového modelu obsahuje ITextBuffer rozhraní, které popisuje posloupnost znaků, které má editor zobrazit. Tento text lze upravovat, sledovat a jinak manipulovat mnoha způsoby. Textový model také poskytuje typy pro následující aspekty:
Služba, která přidruží text k souborům a spravuje čtení a zápis v systému souborů.
Rozdílová služba, která najde minimální rozdíly mezi dvěma sekvencemi objektů.
Systém pro popisování textu ve vyrovnávací paměti z hlediska podmnožin textu v jiných vyrovnávacích pamětech.
Subsystém textového modelu je bez konceptů uživatelského rozhraní. Například není zodpovědný za formátování textu nebo rozložení textu a nemá žádné znalosti vizuálních doplňků, které mohou být přidruženy k textu.
Veřejné typy subsystému textového modelu jsou obsaženy v Microsoft.VisualStudio.Text.Data.dll a Microsoft.VisualStudio.CoreUtility.dll, které závisí pouze na knihovně základních tříd rozhraní .NET Framework a rozhraní MEF (Managed Extensibility Framework).
Subsystém textového zobrazení
Subsystém textového zobrazení zodpovídá za formátování a zobrazování textu. Typy v tomto subsystému jsou rozděleny do dvou vrstev v závislosti na tom, jestli typy spoléhají na Windows Presentation Foundation (WPF). Nejdůležitější typy jsou ITextView a IWpfTextView, které řídí sadu textových řádků, jež se mají zobrazit, a také kurzor, výběr a možnosti zdobení textu pomocí prvků uživatelského rozhraní WPF. Tento subsystém také poskytuje okraje kolem oblasti zobrazení textu. Tyto okraje je možné rozšířit a mohou obsahovat různé druhy obsahu a vizuálních efektů. Příklady okrajů jsou zobrazení čísel řádků a posuvníky.
Veřejné typy subsystému textového zobrazení jsou obsaženy v Microsoft.VisualStudio.Text.UI.dll a Microsoft.VisualStudio.Text.UI.Wpf.dll. První sestavení obsahuje prvky nezávislé na platformě a druhé obsahuje prvky specifické pro WPF.
Subsystém klasifikace
Subsystém klasifikace zodpovídá za určení vlastností písma pro text. Klasifikátor rozdělí text do různých tříd, například "klíčové slovo" nebo "komentář". Mapa formátu klasifikace spojuje tyto třídy se skutečnými vlastnostmi písma, například "Blue Consolas 10 pt". Tyto informace používá textové zobrazení při formátování a vykreslení textu. Označování, které je podrobněji popsáno dále v tomto tématu, umožňuje přidružit data k rozsahům textu.
Veřejné typy klasifikačního subsystému jsou obsaženy v Microsoft.VisualStudio.Text.Logic.dlla pracují s vizuálními aspekty klasifikace, které jsou obsaženy v Microsoft.VisualStudio.Text.UI.Wpf.dll.
Operační subsystém
Subsystém operací definuje chování editoru. Poskytuje implementaci příkazů editoru sady Visual Studio a systému vrácení zpět.
Bližší pohled na textový model a zobrazení textu
Textový model
Subsystém textového modelu se skládá z různých seskupení typů textu. Patří mezi ně vyrovnávací paměť textu, snímky textu a rozsahy textu.
Textové buffery a snímky textu
Rozhraní ITextBuffer představuje posloupnost znaků Unicode, které jsou kódovány pomocí UTF-16, což je kódování používané typem String v rozhraní .NET Framework. Textovou vyrovnávací paměť lze zachovat jako dokument systému souborů, ale není to nutné.
K vytvoření prázdné textové vyrovnávací paměti nebo textové vyrovnávací paměti inicializované z řetězce nebo z ITextBufferFactoryService se používá TextReader. Textový buffer lze uložit do systému souborů jako ITextDocument.
Jakékoli vlákno může upravit textovou vyrovnávací paměť, dokud vlákno nepřevezme vlastnictví textové vyrovnávací paměti voláním TakeThreadOwnership. Potom může úpravy provádět pouze toto vlákno.
Textový buffer může během své životnosti procházet mnoha verzemi. Při každé úpravě vyrovnávací paměti se vygeneruje nová verze a neměnná ITextSnapshot verze představuje obsah této verze vyrovnávací paměti. Vzhledem k tomu, že snímky textu jsou neměnné, můžete k textovému snímku přistupovat v libovolném vlákně bez omezení, i když se textová vyrovnávací paměť, kterou představuje, bude i nadále měnit.
Textové snímky a řádky textových snímků
Obsah textového snímku můžete zobrazit jako posloupnost znaků nebo jako posloupnost řádků. Znaky i řádky jsou indexovány od nuly. Prázdný textový snímek obsahuje nula znaků a jeden prázdný řádek. Řádek je ohraničen libovolnou platnou posloupností znaků pro zalomení řádku v Unicode, nebo začátkem či koncem vyrovnávací paměti. Znaky zalomení řádku jsou explicitně zastoupeny ve snímku textu, přičemž konce řádků v textovém snímku nemusí být všechny stejné.
Poznámka:
Další informace o znacích zalomení řádků v editoru sady Visual Studio najdete v tématu Kódování a konce řádků.
Řádek textu je reprezentován objektem ITextSnapshotLine , který lze získat z textového snímku pro určité číslo řádku nebo pro konkrétní pozici znaku.
Bodové snímky, Rozsahy snímků a Normalizované kolekce rozsahů snímků
A SnapshotPoint představuje pozici znaku ve snímku. Je zaručeno, že pozice leží mezi nulou a délkou snímku. A SnapshotSpan představuje rozsah textu ve snímku. Je zaručeno, že jeho koncová pozice bude mezi nulou a délkou snímku. NormalizedSnapshotSpanCollection se skládá ze sady SnapshotSpan objektů ze stejného snímku.
Rozsahy a normalizované kolekce rozsahů
A Span představuje interval, který lze použít na rozsah textu v textovém snímku. Pozice snímků jsou založené na nule, takže rozsahy můžou začínat na libovolné pozici včetně nuly. Vlastnost End span se rovná součtu jeho Start vlastnosti a jeho Length vlastnosti. A Span neobsahuje znak, který je indexován End vlastností. Například rozsah, který má Začátek=5 a Délka=3 má Hodnotu End=8 a obsahuje znaky na pozicích 5, 6 a 7. Zápis tohoto rozsahu je [5..8).
Dvě rozsahy se protínají, pokud mají společné jakékoli pozice, včetně koncové pozice. Průsečík [3, 5) a [2, 7) je [3, 5) a průsečík [3, 5) a [5, 7) je [5, 5). (Všimněte si, že [5, 5) je prázdné rozpětí.)
Dvě rozpětí se překrývají, pokud mají společné pozice, s výjimkou koncové pozice. Prázdné rozpětí nikdy nepřekrývá žádné jiné rozpětí a překrytí dvou rozpětí není nikdy prázdné.
A NormalizedSpanCollection je seznam rozsahů v pořadí jejich počátečních vlastností. V seznamu se slučují překrývající se úseky nebo sousedící úseky. Například s ohledem na množinu rozsahů [5...9), [0..1), [3..6) a [9..10), normalizovaný seznam rozsahů je [0..1), [3..10).
Oznámení o změnách textu, iTextEdit a TextVersion.
Obsah textové vyrovnávací paměti lze změnit pomocí objektu ITextEdit . Vytvoření takového objektu (pomocí jedné z CreateEdit() metod ITextBuffer) spustí textovou transakci, která se skládá z úprav textu. Každá úprava je nahrazením určitého rozsahu textu v vyrovnávací paměti řetězcem. Souřadnice a obsah každé úpravy jsou vyjádřeny vzhledem k snímku vyrovnávací paměti při spuštění transakce. Objekt ITextEdit upravuje souřadnice úprav, které jsou ovlivněny jinými úpravami ve stejné transakci.
Představte si například textový buffer, který obsahuje tento řetězec:
abcdefghij
Použijte transakci, která obsahuje dvě úpravy, jednu úpravu, která nahradí rozsah na [2..4) znakem X a druhou úpravou, která nahradí rozsah v [6..9) znakem Y. Výsledkem je tato vyrovnávací paměť:
abXefYj
Souřadnice pro druhou úpravu byly vypočítány s ohledem na obsah vyrovnávací paměti na začátku transakce před použitím první úpravy.
Změny ve vyrovnávací paměti se projeví, když je objekt ITextEdit potvrzen voláním metody Apply(). Pokud došlo alespoň k jedné neprázdné úpravě, vytvoří se nová ITextVersion , vytvoří se nová ITextSnapshot a vyvolá se jedna Changed událost. Každá textová verze má jiný textový snímek. Textový snímek představuje úplný stav vyrovnávací paměti textu po transakci úprav, ale textová verze popisuje pouze změny z jednoho snímku na další. Obecně platí, že textové snímky se mají používat jednou a pak se zahodí, zatímco textové verze musí nějakou dobu zůstat aktivní.
Textová verze obsahuje INormalizedTextChangeCollection. Tato kolekce popisuje změny, které po aplikaci na snímek vytvoří následující snímek. Každý ITextChange v kolekci obsahuje pozici znaku změny, nahrazený řetězec a náhradní řetězec. Nahrazený řetězec je prázdný pro základní vložení a náhradní řetězec je prázdný pro základní odstranění. Normalizovaná kolekce je vždy null určená pro nejnovější verzi textové vyrovnávací paměti.
Pouze jeden ITextEdit objekt může být instanciován pro textovou vyrovnávací paměť najednou a všechny úpravy textu se musí provádět ve vlákně, které vlastní textovou vyrovnávací paměť (pokud bylo vlastnictví uplatněno). Úpravu textu můžete opustit voláním metody Cancel nebo metody Dispose .
ITextBuffer také poskytuje Insert(), Delete()a Replace() metody, které se podobají těm, které se nacházejí v ITextEdit rozhraní. Volání těchto objektů má stejný účinek jako vytvoření objektu ITextEdit , vytvoření podobného volání a následné použití úprav.
Sledovací body a rozsahy sledování
ITrackingPoint představuje pozici znaku v textové vyrovnávací paměti. Pokud je vyrovnávací paměť upravena tak, že to způsobí posun pozice znaku, sledovací bod se posune společně s ním. Pokud například sledovací bod odkazuje na pozici 10 ve vyrovnávací paměti a na začátek vyrovnávací paměti se vloží pět znaků, sledovací bod pak odkazuje na pozici 15. Pokud k vložení dojde přesně na pozici označené sledovacím bodem, jeho chování je určeno jeho PointTrackingMode, což může být buď Positive nebo Negative. Pokud je režim sledování pozitivní, bod sledování odkazuje na stejný znak, který je nyní na konci procesu vložení. Pokud je režim sledování záporný, bod sledování odkazuje na první vložený znak na původní pozici. Pokud je znak na pozici reprezentované sledovacím bodem odstraněn, bod sledování se přesune na první znak, který následuje za odstraněnou oblastí. Pokud například sledovací bod odkazuje na znak na pozici 5 a znaky na pozicích 3 až 6 se odstraní, sledovací bod odkazuje na znak na pozici 3.
Znak ITrackingSpan představuje oblast znaků, nikoliv pouze jednu pozici. Jeho chování je určeno jeho SpanTrackingMode. Pokud je režim sledování spanu SpanTrackingMode.EdgeInclusive, rozrůstá se rozsah sledování tak, aby zahrnoval text vložený na jeho okraji. Pokud je režim sledování spanu SpanTrackingMode.EdgeExclusive, rozsah sledování neobsahuje text vložený na jeho okrajích. Pokud je však režim sledování rozsahu SpanTrackingMode.EdgePositive, vložení posune aktuální pozici směrem k začátku, a pokud je režim sledování rozsahu SpanTrackingMode.EdgeNegative, vložení posune aktuální pozici směrem ke konci.
Umístění bodu sledování nebo rozsahu sledování můžete získat pro jakýkoli snímek textové vyrovnávací paměti, do které patří. Sledovací body a rozsahy sledování mohou být bezpečně odkazovány z jakéhokoli vlákna.
Typy obsahu
Typy obsahu představují mechanismus pro definování různých druhů obsahu. Typ obsahu může být typ souboru, například "text", "kód" nebo "binární", nebo typ technologie, například "xml", "vb" nebo "c#". Například slovo "using" je klíčové slovo v jazyce C# i Visual Basic, ale ne v jiných programovacích jazycích. Proto by definice tohoto klíčového slova byla omezena na typy obsahu "c#" a "vb".
Typy obsahu se používají jako filtr pro doplňky a další prvky editoru. Mnoho funkcí editoru a rozšiřujících bodů je definováno pro jednotlivé typy obsahu. Například barvení textu se liší pro soubory ve formátu prostého textu, soubory XML a soubory zdrojového kódu jazyka Visual Basic. Vyrovnávací paměti textu jsou obecně přiřazeny typ obsahu při jejich vytváření a typ obsahu textové vyrovnávací paměti lze změnit.
Typy obsahu mohou vícenásobně dědit z jiných typů obsahu. ContentTypeDefinition umožňuje určit více základních typů jako nadřazené prvky daného typu obsahu.
Vývojáři mohou definovat své vlastní typy obsahu a zaregistrovat je pomocí nástroje IContentTypeRegistryService. Mnoho funkcí editoru lze definovat s ohledem na určitý typ obsahu pomocí .ContentTypeAttribute Lze například definovat okraje editoru, doplňky a obslužné rutiny myši, aby se použily pouze u editorů, které zobrazují konkrétní typy obsahu.
Textové zobrazení
Část "View" v návrhovém vzoru Model-View-Controller (MVC) definuje textové zobrazení, formátování zobrazení, grafické prvky, jako je posuvník a kurzor. Všechny prvky prezentace editoru sady Visual Studio jsou založené na WPF.
Zobrazení textu
Rozhraní ITextView je reprezentace textového zobrazení nezávislá na platformě. Používá se primárně k zobrazení textových dokumentů v okně, ale dá se použít i pro jiné účely, například v popisu.
Textové zobrazení odkazuje na různé druhy textových vyrovnávacích pamětí. Vlastnost TextViewModel odkazuje na ITextViewModel objekt, který odkazuje na tyto tři různé textové vyrovnávací paměti: vyrovnávací paměť dat, což je vyrovnávací paměť nejvyšší úrovně dat, vyrovnávací paměť pro úpravy, ve které dochází k úpravám, a vizuální vyrovnávací paměť, což je vyrovnávací paměť zobrazená v textovém zobrazení.
Text je formátován na základě klasifikátorů, které jsou připojeny k základní vyrovnávací paměti, a je ozdoben pomocí poskytovatelů ozdob, které jsou připojeny k samotnému textovému zobrazení.
Souřadnicový systém textového zobrazení
Souřadnicový systém textového zobrazení určuje pozice v textovém zobrazení. V tomto souřadnicovém systému odpovídá hodnota x 0,0 levému okraji zobrazeného textu a hodnota y 0,0 odpovídá hornímu okraji zobrazeného textu. Souřadnice x se zvyšuje zleva doprava a souřadnice y se zvyšuje shora dolů.
Oblast zobrazení (část textu viditelná v textovém okně) se nedá posunout horizontálně stejným způsobem jako vertikálně. Oblast zobrazení se posune vodorovně změnou její levé souřadnice, aby se pohybovala vzhledem ke kreslicí ploše. Oblast zobrazení (viewport) lze ale posunout svisle pouze změnou vykresleného textu, což způsobí, že dojde k vyvolání LayoutChanged události.
Vzdálenosti v souřadnicovém systému odpovídají logickým pixelům. Pokud je plocha vykreslování textu zobrazena bez transformace měřítka, pak jedna jednotka v souřadnicovém systému vykreslování textu odpovídá jednomu pixelu na displeji.
Okraje
Rozhraní ITextViewMargin představuje okraj a umožňuje řídit viditelnost okraje a jeho velikost. Existují čtyři předdefinované okraje, které mají název "Horní", "Vlevo", "Vpravo" a "Dole" a jsou připojeny k hornímu, dolnímu, levému nebo pravému okraji zobrazení. Tyto okraje jsou kontejnery, ve kterých lze umístit další okraje. Rozhraní definuje metody, které vracejí velikost okraje a viditelnost okrajů. Okraje jsou vizuální prvky, které poskytují další informace o textovém zobrazení, ke kterému jsou připojeny. Například okraj s číslem řádku zobrazuje čísla řádků pro textové zobrazení. Okraj glyph zobrazuje prvky uživatelského rozhraní.
Rozhraní IWpfTextViewMarginProvider zpracovává vytváření a umístění okrajů. Okraje lze řadit s ohledem na ostatní okraje. Okraje s vyšší prioritou se nacházejí blíže k textovému zobrazení. Pokud jsou například dva levé okraje, okraj A a okraj B a okraj B má nižší prioritu než okraj A, zobrazí se okraj B nalevo od okraje A.
Hostitel textového zobrazení
Rozhraní IWpfTextViewHost obsahuje textové zobrazení a všechny ozdoby, které doprovázejí zobrazení, například posuvníky. Hostitel textového zobrazení obsahuje také okraje, které jsou připojeny k ohraničení zobrazení.
Formátovaný text
Text zobrazený v textovém zobrazení se skládá z ITextViewLine objektů. Každý řádek textového zobrazení odpovídá jednomu řádku textu v textovém zobrazení. Dlouhé řádky v podkladové vyrovnávací paměti textu můžou být buď částečně skryté (pokud není povolené zalamování textu), nebo rozdělené na několik řádků textového zobrazení. Rozhraní ITextViewLine obsahuje metody a vlastnosti pro mapování mezi souřadnicemi a znaky a pro doplňky, které mohou být přidruženy k řádku.
ITextViewLine objekty jsou vytvořeny pomocí IFormattedLineSource rozhraní. Pokud vás zajímá právě text, který je aktuálně zobrazený v zobrazení, můžete zdroj formátování ignorovat. Pokud vás zajímá formát textu, který se nezobrazuje v zobrazení (například pro podporu bohatého textu při vyjmutí a vložení), můžete použít IFormattedLineSource k formátování textu ve vyrovnávací paměti textu.
Textové zobrazení formátuje vždy jeden ITextSnapshotLine.
Funkce editoru
Funkce editoru jsou navrženy tak, aby definice funkce byla oddělena od její implementace. Editor obsahuje tyto funkce:
Značky a klasifikátory
Ozdoby
Projection
Outlining
Přiřazení myši a kláves
Operace a primitivní operace
IntelliSense
Značky a klasifikátory
Značky jsou markery, které jsou přidružené k úseku textu. Mohou být prezentovány různými způsoby, například pomocí barvení textu, podtržení, grafiky nebo automaticky otevíraných oken. Klasifikátory jsou jedním druhem značky.
Další druhy značek jsou TextMarkerTag určeny pro zvýraznění textu, OutliningRegionTag pro obrysy a ErrorTag pro chyby kompilace.
Typy klasifikace
Rozhraní IClassificationType představuje třídu ekvivalence, což je abstraktní kategorie textu. Typy klasifikace mohou vícenásobně dědit z jiných typů klasifikace. Například klasifikace programovacích jazyků můžou zahrnovat klíčové slovo, komentář a identifikátor, které dědí ze kódu. Typy klasifikace přirozeného jazyka můžou zahrnovat podstatná jména, sloveso a adjektivní jméno, které dědí z přirozeného jazyka.
Classifications
Klasifikace je instancí určitého typu klasifikace, obvykle v rámci určitého textu. A ClassificationSpan slouží k reprezentaci klasifikace. Rozsah klasifikace lze považovat za popisek, který pokrývá určitý rozsah textu a říká systému, že toto rozpětí textu je určitého typu klasifikace.
Třídění
Je IClassifier mechanismus, který rozděluje text do sady klasifikací. Klasifikátory musí být definovány pro konkrétní typy obsahu a musí být vytvořeny instance pro konkrétní textové vyrovnávací paměti. Klienti musí implementovat IClassifier , aby se mohli účastnit klasifikace textu.
Agregátory klasifikátorů
Agregátor klasifikátoru je mechanismus, který kombinuje všechny klasifikátory pro jednu vyrovnávací paměť textu do pouze jedné sady klasifikací. Klasifikátor jazyka C# i klasifikátor anglického jazyka by například mohly vytvářet klasifikace přes komentář v souboru C#. Zvažte tento komentář:
// This method produces a classifier
Klasifikátor jazyka C# může označovat celý rozsah jako komentář a klasifikátor anglického jazyka může klasifikovat "produkuje" jako "sloveso" a "metodu" jako "podstatné jméno". Agregátor vytvoří sadu nepřekrývajících se klasifikací a typ sady vychází ze všech příspěvků.
Agregátor klasifikátoru je také klasifikátor, protože rozdělí text do sady klasifikací. Agregátor klasifikátoru také zajišťuje, že neexistují překrývající se klasifikace a že jsou klasifikace seřazené. Jednotlivé klasifikátory mohou vrátit libovolnou sadu klasifikací, v libovolném pořadí a překrývat se jakýmkoli způsobem.
Formátování klasifikace a zbarvení textu
Formátování textu je příkladem funkce, která je založená na klasifikaci textu. Používá se vrstvou textového zobrazení k určení zobrazení textu v aplikaci. Oblast formátování textu závisí na WPF, ale logická definice klasifikací není.
Formát klasifikace je sada vlastností formátování pro určitý typ klasifikace. Tyto formáty dědí z formátu nadřazeného typu klasifikace.
An IClassificationFormatMap je mapa z typu klasifikace na sadu vlastností formátování textu. Implementace mapy formátu v editoru zpracovává všechny exporty formátů klasifikace.
Ozdoby
Doplňky jsou grafické efekty, které přímo nesouvisí s písmem a barvou znaků v textovém zobrazení. Například červené vlnovkové podtržení, které se používá k označení nekompilačního kódu v mnoha programovacích jazycích, je vnořeným prvkem, a bublinové nápovědy jsou vyskakovacími prvky. Doplňky jsou odvozeny z UIElement a implementují ITag. Dva specializované typy označovacích značek jsou SpaceNegotiatingAdornmentTag, pro značky, které zabírají stejné místo jako text v zobrazení, a ErrorTag, pro podtržení vlnovkou.
Vložené doplňky jsou grafické prvky, které tvoří součást formátovaného textového zobrazení. Jsou uspořádány v různých vrstvách pořadí Z. Existují tři vestavěné vrstvy: text, kurzor a výběr. Vývojáři ale můžou definovat více vrstev a dát je do pořádku s ohledem na sebe navzájem. Tři druhy vložených doplňků jsou textově relativní doplňky (které se přesouvají při přesouvání textu a odstraní se při odstranění textu), zobrazením relativní doplňky (které souvisejí s netextovými částmi zobrazení) a doplňky řízené vlastníkem (vývojář musí spravovat jejich umístění).
Vyskakovací ozdoby jsou grafické prvky, které se zobrazují v malém okně nad textovým zobrazením, například popisy.
Projection
Projekce je technika pro vytvoření jiného druhu textové vyrovnávací paměti, která ve skutečnosti neukládá text, ale kombinuje text z jiných textových vyrovnávacích pamětí. Například vyrovnávací paměť projekce lze použít ke zřetězení textu ze dvou dalších vyrovnávacích pamětí a prezentovat výsledek, jako by byl v jedné vyrovnávací paměti, nebo ke skrytí částí textu v jedné vyrovnávací paměti. Vyrovnávací paměť projekce může sloužit jako zdrojová vyrovnávací paměť pro jinou vyrovnávací paměť projekce. Sada vyrovnávacích pamětí, které souvisejí s projekcí, lze vytvořit tak, aby přeuspořádala text mnoha různými způsoby. (Taková sada se označuje také jako graf vyrovnávací paměti.) Funkce osnovy textu sady Visual Studio je implementována pomocí projekční vyrovnávací paměti ke skrytí sbaleného textu, a editor sady Visual Studio pro stránky ASP.NET používá projekci pro podporu vložených jazyků, jako je Visual Basic a C#.
Vytvoří se IProjectionBuffer pomocí IProjectionBufferFactoryService. Vyrovnávací paměť projekce je reprezentována seřazenou posloupností ITrackingSpan objektů, které se označují jako zdrojové rozsahy. Obsah těchto rozsahů se prezentuje jako posloupnost znaků. Textové vyrovnávací paměti, ze kterých jsou čerpány zdrojové úseky, jsou pojmenované zdrojové vyrovnávací paměti. Klienti projekční vyrovnávací paměti nemusí vědět, že se liší od obyčejné textové vyrovnávací paměti.
Projekční buffer naslouchá událostem změny textu ve zdrojových bufferech. Když se text ve zdroji změní, projekční vyrovnávací paměť mapuje změněné textové souřadnice na vlastní souřadnice a generuje příslušné události změny textu. Představte si například zdrojové vyrovnávací paměti A a B, které mají tento obsah:
A: ABCDE
B: vwxyz
Pokud se vyrovnávací paměť projekce P vytvoří ze dvou rozsahů textu, jedna, která má veškerou vyrovnávací paměť A a druhou, která má veškerou vyrovnávací paměť B, pak P má následující obsah:
P: ABCDEvwxyz
Pokud je podřetězce xy odstraněn z vyrovnávací paměti B, pak vyrovnávací paměť P vyvolá událost, která označuje, že znaky na pozicích 7 a 8 byly odstraněny.
Vyrovnávací paměť projekce lze také upravit přímo. Propaguje úpravy do příslušných zdrojových bufferů. Pokud je například řetězec vložen do vyrovnávací paměti P na pozici 6 (původní pozice znaku "v"), vložení se rozšíří do vyrovnávací paměti B na pozici 1.
Jsou zde omezení rozsahů zdrojového kódu, které přispívají k projekčnímu bufferu. Rozsahy zdroje se nesmí překrývat; umístění ve vyrovnávací paměti projekce nemůže být mapováno na více než jedno umístění v žádné zdrojové vyrovnávací paměti a umístění ve zdrojové vyrovnávací paměti nelze mapovat na více než jedno umístění ve vyrovnávací paměti projekce. Ve vztahu zdrojové vyrovnávací paměti nejsou povoleny žádné cyklity.
Události jsou vyvolány, když se změní sada zdrojových vyrovnávacích pamětí pro projekční vyrovnávací paměť a když se změní sada zdrojových intervalů. Vyrovnávací paměť elision je zvláštní druh projekční vyrovnávací paměti. Primárně se používá pro tvorbu osnov a operace, které rozbalují a sbalují bloky textu. Vyrovnávací paměť elision je založena pouze na jedné zdrojové vyrovnávací paměti a rozsahy v vyrovnávací paměti elision musí být seřazeny stejně, jako jsou seřazeny ve zdrojové vyrovnávací paměti.
Graf vyrovnávací paměti
Rozhraní IBufferGraph umožňuje mapování napříč grafem vyrovnávacích pamětí projekce. Všechny textové vyrovnávací paměti a vyrovnávací paměti projekce se shromažďují v řízeném acyklickém grafu, podobně jako abstraktní strom syntaxe vytvořený kompilátorem jazyka. Graf je definován horní vyrovnávací pamětí, což může být libovolná textová vyrovnávací paměť. Graf vyrovnávací paměti může mapovat z bodu v horní vyrovnávací paměti na bod ve zdrojové vyrovnávací paměti nebo z rozsahu v horní vyrovnávací paměti do sady rozsahů ve zdrojové vyrovnávací paměti. Podobně může mapovat bod nebo rozsah ze zdrojové vyrovnávací paměti na bod v horní vyrovnávací paměti. Grafy vyrovnávací paměti se vytvářejí pomocí metody IBufferGraphFactoryService.
Vyrovnávací paměti událostí a projekční vyrovnávací paměti
Při úpravě vyrovnávací paměti projekce se změny odesílají z vyrovnávací paměti projekce do vyrovnávací paměti, které na ní závisí. Po změně všech vyrovnávacích pamětí jsou vyvolány události změny vyrovnávací paměti, počínaje nejhlubší vyrovnávací pamětí.
Outlining
Strukturování je schopnost rozbalit nebo sbalit různé bloky textu v textovém zobrazení. Osnova je definována jako druh ITag, stejně jako jsou definovány doplňky. A OutliningRegionTag je značka, která definuje textovou oblast, kterou lze rozbalit nebo sbalit. Pokud chcete použít osnovu, musíte naimportovat IOutliningManagerService, abyste získali IOutliningManager. Správce obrysů vyjmenuje, sbalí a rozbalí různé bloky, které jsou reprezentovány jako ICollapsible objekty, a odpovídajícím způsobem vyvolává události.
Přiřazení tlačítek myši
Vazby myši propojují pohyby myši s různými příkazy. Vazby myši jsou definovány pomocí IMouseProcessorProvider, a klíčové vazby jsou definovány pomocí IKeyProcessorProvider. Automaticky IWpfTextViewHost vytvoří instanci všech vazeb a připojí je k událostem myši v zobrazení.
Rozhraní IMouseProcessor obsahuje obslužné rutiny událostí před procesem a po zpracování pro různé události myši. Chcete-li zpracovat jednu z událostí, můžete přepsat některé metody v MouseProcessorBase.
Operace editoru
Operace editoru lze použít k automatizaci interakce s editorem pro skriptování nebo jiné účely. Můžete importovat IEditorOperationsFactoryService k přístupu k operacím na daném ITextView. Tyto objekty pak můžete použít k úpravě výběru, posouvání zobrazení nebo přesunutí kurzoru do různých částí zobrazení.
IntelliSense
IntelliSense podporuje dokončování příkazů, nápovědu k podpisu (označovanou také jako informace o parametrech), rychlé informace a žárovky.
Dokončování kódu poskytuje vyskakovací seznamy možných doplnění názvů metod, elementů XML a dalších programovacích nebo značkovacích prvků. Obecně platí, že gesto uživatele vyvolá relaci dokončení. Seance zobrazí seznam možností dokončení a uživatel může vybrat jednu položku nebo seznam zavřít. Za vytvoření a aktivaci ICompletionBroker je zodpovědný ICompletionSession. ICompletionSource Vypočítá CompletionSet položky dokončení relace.
Řešení potíží s importem a exportem: Přístup k protokolu chyb MEF Composition
Pokud se pokusíte naimportovat něco, co v aktuální instalaci VS neexistuje nebo pokud import nebo export nesprávně vytvoříte, může dojít k problémům. Primárním způsobem, jak tyto problémy najít a vyřešit, je odkazovat na Protokol chyb skladby MEF (Managed Extensibility Framework) uložený v %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err.