Düzenleyicinin içinde

Düzenleyici, düzenleyici metin modelini metin görünümünden ve kullanıcı arabiriminden ayrı tutmak için tasarlanmış birkaç farklı alt sistemden oluşur.

Bu bölümlerde düzenleyicinin farklı yönleri açıklanmaktadır:

Bu bölümlerde düzenleyicinin özellikleri açıklanmaktadır:

Alt sistemler

Metin modeli alt sistemi

Metin modeli alt sistemi, metni temsil etmek ve işlemesini etkinleştirmekten sorumludur. Metin modeli alt sistemi, düzenleyici tarafından görüntülenecek karakterlerin sırasını açıklayan arabirimini içerir ITextBuffer . Bu metin birçok şekilde değiştirilebilir, izlenebilir ve başka şekillerde değiştirilebilir. Metin modeli ayrıca aşağıdaki özelliklere yönelik türler de sağlar:

  • Metinleri dosyalarla ilişkilendiren ve bunları dosya sisteminde okuyup yazmayı yöneten bir hizmet.

  • İki nesne dizisi arasındaki en düşük farkları bulan bir fark kayıt hizmeti.

  • Bir arabellekteki metni diğer arabelleklerdeki metnin alt kümeleri açısından açıklamaya yönelik bir sistem.

Metin modeli alt sistemi, kullanıcı arabirimi (UI) kavramlarından arındırılır. Örneğin, metin biçimlendirme veya metin düzeninden sorumlu değildir ve metinle ilişkilendirilmiş görsel süslemeler hakkında bilgisi yoktur.

Metin modeli alt sisteminin genel türleri, yalnızca .NET Framework temel sınıf kitaplığına ve Yönetilen Genişletilebilirlik Çerçevesi'ne (MEF) bağlı olan Microsoft.VisualStudio.Text.Data.dll ve Microsoft.VisualStudio.CoreUtility.dll içinde yer alır.

Metin görünümü alt sistemi

Metin görünümü alt sistemi, metni biçimlendirmek ve görüntülemekten sorumludur. Bu alt sistemdeki türler, türlerin Windows Presentation Foundation'a (WPF) bağlı olup olmadığına bağlı olarak iki katmana ayrılır. En önemli türler ITextView , görüntülenecek metin satırları kümesini denetleyen ve IWpfTextViewayrıca WPF kullanıcı arabirimi öğelerini kullanarak metni süslemeye yönelik giriş işareti, seçim ve olanaklardır. Bu alt sistem, metin görüntüleme alanının çevresinde kenar boşlukları da sağlar. Bu kenar boşlukları genişletilebilir ve farklı türde içerik ve görsel efektler içerebilir. Kenar boşluklarına örnek olarak satır numarası ekranları ve kaydırma çubukları verilebilir.

Metin görünümü alt sisteminin genel türleri Microsoft.VisualStudio.Text.UI.dll ve Microsoft.VisualStudio.Text.UI.Wpf.dll içinde yer alır. İlk derleme platformdan bağımsız öğeleri, ikinci derleme ise WPF'ye özgü öğeleri içerir.

Sınıflandırma alt sistemi

Sınıflandırma alt sistemi, metnin yazı tipi özelliklerini belirlemekten sorumludur. Sınıflandırıcı, metni "anahtar sözcük" veya "açıklama" gibi farklı sınıflara böler. Sınıflandırma biçimi eşlemesi, bu sınıfları gerçek yazı tipi özellikleriyle ilişkilendirir; örneğin, "Blue Consolas 10 pt". Bu bilgiler, metin biçimlendirildiğinde ve işlendiğinde metin görünümü tarafından kullanılır. Bu konunun ilerleyen bölümlerinde daha ayrıntılı olarak açıklanan etiketleme, verilerin metin aralıklarıyla ilişkilendirilmesine olanak tanır.

Sınıflandırma alt sisteminin genel türleri Microsoft.VisualStudio.Text.Logic.dll içinde yer alır ve Microsoft.VisualStudio.Text.UI.Wpf.dll'de yer alan sınıflandırmanın görsel yönleriyle etkileşim kurar.

İşlemler alt sistemi

İşlemler alt sistemi düzenleyici davranışını tanımlar. Visual Studio düzenleyici komutları ve geri alma sistemi için uygulama sağlar.

Metin modeline ve metin görünümüne daha yakından bakış

Metin modeli

Metin modeli alt sistemi, farklı metin türleri gruplandırmalarından oluşur. Bunlar metin arabelleği, metin anlık görüntüleri ve metin yayılmalarıdır.

Metin arabellekleri ve metin anlık görüntüleri

Arabirim, ITextBuffer .NET Framework'teki tür tarafından kullanılan kodlama olan UTF-16 kullanılarak kodlanmış bir Unicode karakter dizisini String temsil eder. Metin arabelleği dosya sistemi belgesi olarak kalıcı hale getirilebilir, ancak bu gerekli değildir.

ITextBufferFactoryService, boş bir metin arabelleği veya bir dizeden veya TextReaderiçinden başlatılan bir metin arabelleği oluşturmak için kullanılır. Metin arabelleği dosya sisteminde olarak ITextDocumentkalıcı hale gelebilir.

Bir iş parçacığı çağırarak TakeThreadOwnershipmetin arabelleğinin sahipliğini alıncaya kadar herhangi bir iş parçacığı metin arabelleği düzenleyebilir. Bundan sonra, yalnızca bu iş parçacığı düzenlemeler gerçekleştirebilir.

Metin arabelleği, kullanım ömrü boyunca birçok sürümden geçebilir. Arabellek her düzenlendiğinde yeni bir sürüm oluşturulur ve sabit ITextSnapshot bir sürüm, arabelleğinde bu sürümün içeriğini temsil eder. Metin anlık görüntüleri sabit olduğundan, temsil ettiği metin arabelleği değişmeye devam etse bile herhangi bir iş parçacığındaki metin anlık görüntüsüne kısıtlama olmadan erişebilirsiniz.

Metin anlık görüntüleri ve metin anlık görüntüsü çizgileri

Metin anlık görüntüsünün içeriğini karakter dizisi veya satır dizisi olarak görüntüleyebilirsiniz. Karakterler ve çizgiler sıfırdan başlayarak dizine eklenir. Boş metin anlık görüntüsü sıfır karakter ve bir boş satır içerir. Bir satır, geçerli bir Unicode satır sonu karakter dizisiyle veya arabelleğin başına veya sonuna göre sınırlandırılır. Satır sonu karakterleri metin anlık görüntüsünde açıkça gösterilir ve metin anlık görüntüsündeki satır sonlarının tümünün aynı olması gerekmez.

Not

Visual Studio düzenleyicisinde satır sonu karakterleri hakkında daha fazla bilgi için bkz . Kodlamalar ve satır sonları.

Metin satırı, belirli bir satır numarası veya belirli bir ITextSnapshotLine karakter konumu için metin anlık görüntüsünden alınabilen bir nesneyle temsil edilir.

SnapshotPoints, SnapshotSpans ve NormalizedSnapshotSpanCollections

A SnapshotPoint , bir anlık görüntüdeki karakter konumunu temsil eder. Konumun sıfır ile anlık görüntünün uzunluğu arasında yer aldığı garanti edilir. A SnapshotSpan , anlık görüntüdeki bir metin aralığını temsil eder. Bitiş konumunun sıfır ile anlık görüntünün uzunluğu arasında yer aldığı garanti edilir. aynı NormalizedSnapshotSpanCollection anlık görüntüdeki bir nesne kümesinden SnapshotSpan oluşur.

Spans ve NormalizedSpanCollections

A Span , metin anlık görüntüsündeki bir metin aralığına uygulanabilen bir aralığı temsil eder. Anlık görüntü konumları sıfır tabanlı olduğundan, aralıklar sıfır dahil olmak üzere herhangi bir konumdan başlayabilir. End Bir span'ın özelliği, özelliğinin ve özelliğinin Start toplamına Length eşittir. , Span özelliği tarafından End dizine alınan karakteri içermez. Örneğin, Başlangıç=5 ve Uzunluk=3 içeren bir span End=8'e sahiptir ve 5, 6 ve 7 konumlarında yer alan karakterleri içerir. Bu yayılma alanının gösterimi [5..8) şeklindedir.

İki yayılma alanı, Bitiş konumu dahil olmak üzere ortak konumları varsa kesişmektedir. Dolayısıyla [3, 5) ve [2, 7) kesişimi [3, 5) ve [3, 5) ile [5, 7) kesişimi [5, 5) şeklindedir. ([5, 5) boş bir aralık olduğuna dikkat edin.)

Bitiş konumu dışında ortak konumları varsa iki yayılma alanı çakışıyor. Boş bir yayılma alanı hiçbir zaman başka bir yayılma alanıyla çakışmaz ve iki yayılma alanının çakışması hiçbir zaman boş olmaz.

A NormalizedSpanCollection , span'ların Başlangıç özellikleri sırasına göre bir span listesidir. Listede, çakışan veya bitişik olan aralıklar birleştirilir. Örneğin, [5..9), [0..1), [3..6) ve [9..10) aralık kümesi göz önüne alındığında, normalleştirilmiş yayılma alanları listesi [0..1), [3..10) şeklindedir.

ITextEdit, TextVersion ve metin değişikliği bildirimleri

Metin arabelleğinin içeriği bir ITextEdit nesne kullanılarak değiştirilebilir. Böyle bir nesne oluşturma (yöntemlerinden CreateEdit()ITextBufferbirini kullanarak) metin düzenlemelerinden oluşan bir metin işlemi başlatır. Her düzenleme, arabellekteki bir metin aralığının dizeyle değiştirilmesidir. Her düzenlemenin koordinatları ve içeriği, işlem başlatıldığında arabelleğin anlık görüntüsüne göre ifade edilir. nesnesi, ITextEdit aynı işlemdeki diğer düzenlemelerden etkilenen düzenlemelerin koordinatlarını ayarlar.

Örneğin, şu dizeyi içeren bir metin arabelleği düşünün:

abcdefghij

[2..4) aralığındaki yayılma alanının yerini alan iki düzenleme içeren bir işlem ve karakterini X kullanarak Y[6..9) aralığındaki yayılma alanının yerini alan ikinci bir düzenleme uygulayın. Sonuç şu arabellektir:

abXefYj

İkinci düzenlemenin koordinatları, ilk düzenleme uygulanmadan önce işlemin başındaki arabelleğin içeriğine göre hesaplandı.

Arabellek değişiklikleri, nesnesi yöntemini çağırarak Apply() işlendiğinde ITextEdit etkili olur. En az bir boş olmayan düzenleme yapıldıysa, yeni ITextVersion bir düzenleme oluşturulur, yeni ITextSnapshot bir olay oluşturulur ve bir Changed olay oluşturulur. Her metin sürümünün farklı bir metin anlık görüntüsü vardır. Metin anlık görüntüsü, düzenleme işleminden sonra metin arabelleğinin tam durumunu temsil eder, ancak metin sürümü yalnızca bir anlık görüntüden diğerine yapılan değişiklikleri açıklar. Genel olarak, metin anlık görüntülerinin bir kez kullanılması ve sonra atılması amaçlanırken, metin sürümlerinin bir süre canlı kalması gerekir.

Metin sürümü bir INormalizedTextChangeCollectioniçerir. Bu koleksiyon, anlık görüntüye uygulandığında sonraki anlık görüntüyü oluşturan değişiklikleri açıklar. Koleksiyondaki her ITextChange biri, değişikliğin karakter konumunu, değiştirilen dizeyi ve değiştirme dizesini içerir. Değiştirilen dize, temel ekleme için boş, değiştirme dizesi ise temel silme işlemi için boş. Normalleştirilmiş koleksiyon her zaman null metin arabelleğinin en son sürümü içindir.

ITextEdit Herhangi bir anda bir metin arabelleği için yalnızca bir nesne örneği oluşturulabilir ve tüm metin düzenlemeleri metin arabelleğinin sahibi olan iş parçacığında gerçekleştirilmelidir (sahiplik talep edildiyse). Metin düzenleme, yöntemini veya Dispose yöntemini çağırarak Cancel terk edilebilir.

ITextBufferayrıca , Delete()ve Replace() arabirimde ITextEdit bulunanlara benzer yöntemler sağlarInsert(). Bunları çağırmak, nesne ITextEdit oluşturma, benzer bir çağrı yapma ve ardından düzenlemeyi uygulama ile aynı etkiye sahiptir.

İzleme noktaları ve izleme aralıkları

, ITrackingPoint metin arabelleğindeki bir karakter konumunu temsil eder. Arabellek, karakterin konumunun kaymasına neden olacak şekilde düzenlenirse, izleme noktası da onunla birlikte kayar. Örneğin, bir izleme noktası arabelleğe 10 konumuna başvuruyorsa ve arabelleğin başına beş karakter eklenirse, izleme noktası 15 konumuna başvurur. Ekleme, izleme noktası tarafından tam olarak belirtilen konumda gerçekleşirse, davranışı veya Negativeolabilir Positive olan kendi PointTrackingModetarafından belirlenir. İzleme modu pozitifse, izleme noktası eklemenin sonundaki aynı karaktere başvurur. İzleme modu negatifse, izleme noktası özgün konumda eklenen ilk karaktere başvurur. bir izleme noktası tarafından temsil edilen konumdaki karakter silinirse, izleme noktası silinen aralığı izleyen ilk karaktere kayar. Örneğin, bir izleme noktası 5. konumdaki karaktere başvuruyorsa ve 3 ile 6 arası konumlarda bulunan karakterler silinirse, izleme noktası 3. konumdaki karaktere başvurur.

, ITrackingSpan yalnızca bir konum yerine bir karakter aralığını temsil eder. Davranışı, tarafından SpanTrackingModebelirlenir. Span izleme modu SpanTrackingMode.EdgeInclusive ise, izleme aralığı kenarlarına eklenen metinleri içerecek şekilde büyür. Span izleme modu SpanTrackingMode.EdgeExclusive ise, izleme aralığı kenarlarına eklenen metni içermez. Ancak, span izleme modu SpanTrackingMode.EdgePositive ise, ekleme geçerli konumu başlangıç konumuna doğru iter ve span izleme modu SpanTrackingMode.EdgeNegative ise, ekleme geçerli konumu sona doğru iter.

Bir izleme noktasının konumunu veya ait oldukları metin arabelleğinin herhangi bir anlık görüntüsü için izleme aralığının aralığını alabilirsiniz. İzleme noktalarına ve izleme aralıklarına herhangi bir iş parçacığından güvenle başvurulabilir.

İçerik türleri

İçerik türleri, farklı içerik türlerini tanımlamaya yönelik bir mekanizmadır. İçerik türü "metin", "kod" veya "ikili" gibi bir dosya türü veya "xml", "vb" veya "c#" gibi bir teknoloji türü olabilir. Örneğin, "using" sözcüğü hem C# hem de Visual Basic'te bir anahtar sözcüktür, ancak diğer programlama dillerinde değildir. Bu nedenle, bu anahtar sözcüğün tanımı "c#" ve "vb" içerik türleriyle sınırlı olacaktır.

İçerik türleri, süslemeler ve düzenleyicinin diğer öğeleri için filtre olarak kullanılır. İçerik türü başına birçok düzenleyici özelliği ve uzantı noktası tanımlanır. Örneğin, düz metin dosyaları, XML dosyaları ve Visual Basic kaynak kodu dosyaları için metin renklendirme farklıdır. Metin arabelleklerine genellikle oluşturulduklarında bir içerik türü atanır ve metin arabelleğinin içerik türü değiştirilebilir.

İçerik türleri diğer içerik türlerinden birden çok devralabilir. , ContentTypeDefinition belirli bir içerik türünün ana dosyası olarak birden çok temel tür belirtmenize olanak tanır.

Geliştiriciler kendi içerik türlerini tanımlayabilir ve kullanarak IContentTypeRegistryServicebunları kaydedebilir. Birçok düzenleyici özelliği, kullanılarak ContentTypeAttributebelirli bir içerik türüne göre tanımlanabilir. Örneğin, düzenleyici kenar boşlukları, kenarlıklar ve fare işleyicileri, yalnızca belirli içerik türlerini görüntüleyen düzenleyicilere uygulanacak şekilde tanımlanabilir.

Metin görünümü

Model görünüm denetleyicisi (MVC) deseninin görünüm bölümü metin görünümünü, görünümün biçimlendirmesini, kaydırma çubuğu gibi grafik öğelerini ve şapka işaretini tanımlar. Visual Studio düzenleyicisinin tüm sunu öğeleri WPF'yi temel alır.

Metin görünümleri

Arabirim ITextView , metin görünümünün platformdan bağımsız bir gösterimidir. Öncelikle metin belgelerini bir pencerede görüntülemek için kullanılır, ancak araç ipucu gibi başka amaçlarla da kullanılabilir.

Metin görünümü farklı türlerde metin arabelleğine başvurur. TextViewModel özelliği şu üç farklı metin arabelleğine işaret eden bir ITextViewModel nesneye başvurur: en üst veri düzeyi arabelleği olan veri arabelleği, düzenlemenin gerçekleştiği düzenleme arabelleği ve metin görünümünde görüntülenen arabellek olan görsel arabellek.

Metin, temel alınan metin arabelleğine eklenen sınıflandırıcılara göre biçimlendirilir ve metin görünümüne eklenmiş olan donatma sağlayıcıları kullanılarak süslenir.

Metin görünümü koordinat sistemi

Metin görünümü koordinat sistemi, metin görünümündeki konumları belirtir. Bu koordinat sisteminde x değeri 0,0, görüntülenen metnin sol kenarına, y değeri 0,0 ise görüntülenen metnin üst kenarına karşılık gelir. x koordinatı soldan sağa, y koordinatı ise yukarıdan aşağıya doğru artar.

Görünüm penceresi (metnin metin penceresinde görünen bölümü) dikey olarak kaydırıldığından yatay olarak aynı şekilde kaydırılamaz. Görünüm penceresi, sol koordinatı çizim yüzeyine göre hareket etmek üzere değiştirilerek yatay olarak kaydırılır. Ancak, bir görünüm penceresi yalnızca işlenen metin değiştirilerek dikey olarak kaydırılabilir ve bu da bir LayoutChanged olayın oluşturulmasına neden olur.

Koordinat sistemindeki uzaklıklar mantıksal piksellere karşılık gelir. Metin işleme yüzeyi ölçeklendirme dönüşümü olmadan görüntüleniyorsa, metin işleme koordinat sistemindeki bir birim ekrandaki bir piksele karşılık gelir.

Kenar boşlukları

ITextViewMargin Arabirim bir kenar boşluğu temsil eder ve kenar boşluğunun ve boyutunun görünürlüğünü denetlemeyi sağlar. "Üst", "Sol", "Sağ" ve "Alt" olarak adlandırılan ve görünümün üst, alt, sol veya sağ kenarına eklenmiş dört önceden tanımlanmış kenar boşluğu vardır. Bu kenar boşlukları, diğer kenar boşluklarının yerleştirilebileceği kapsayıcılardır. Arabirim, kenar boşluğunun boyutunu ve kenar boşluğunun görünürlüğünü döndüren yöntemleri tanımlar. Kenar boşlukları, eklendikleri metin görünümü hakkında ek bilgi sağlayan görsel öğelerdir. Örneğin, satır numarası kenar boşluğu metin görünümü için satır numaralarını görüntüler. Karakter kenar boşluğu kullanıcı arabirimi öğelerini görüntüler.

Arabirim, IWpfTextViewMarginProvider kenar boşluklarının oluşturulmasını ve yerleştirilmesini işler. Kenar boşlukları diğer kenar boşluklarına göre sıralanabilir. Yüksek öncelikli kenar boşlukları metin görünümüne daha yakın bir konumda bulunur. Örneğin, A ve B kenar boşluğu olmak üzere iki sol kenar boşluğu varsa ve B kenar boşluğu A kenar boşluğundan daha düşük önceliğe sahipse, A kenar boşluğunun solunda B kenar boşluğu görünür.

Metin görünümü konağı

Arabirim, IWpfTextViewHost metin görünümünü ve görünüme eşlik eden tüm dolgulu süslemeleri (örneğin, kaydırma çubukları) içerir. Metin görünümü konağı, görünümün kenar boşluğuna eklenmiş kenar boşluklarını da içerir.

Biçimlendirilmiş metin

Metin görünümünde görüntülenen metin nesnelerden ITextViewLine oluşur. Her metin görünümü satırı, metin görünümündeki bir metin satırına karşılık gelir. Temel alınan metin arabelleğindeki uzun satırlar kısmen gizlenebilir (sözcük kaydırma etkin değilse) veya birden çok metin görünümü satırına ayrılabilir. Arabirim, ITextViewLine koordinatlar ve karakterler arasında eşleme ve çizgiyle ilişkilendirilmiş olabilecek süslemeler için yöntemler ve özellikler içerir.

ITextViewLine nesneleri bir IFormattedLineSource arabirim kullanılarak oluşturulur. Yalnızca görünümde görüntülenen metinle ilgileniyorsanız, biçimlendirme kaynağını yoksayabilirsiniz. Görünümde görüntülenmeyen metnin biçimiyle ilgileniyorsanız (örneğin, zengin metin kesme ve yapıştırmayı desteklemek için), metin arabelleğindeki metni biçimlendirmek için kullanabilirsiniz IFormattedLineSource .

Metin görünümü birer birer ITextSnapshotLine biçimlendirildi.

Düzenleyici özellikleri

Düzenleyicinin özellikleri, özelliğin tanımı uygulamasından ayrı olacak şekilde tasarlanmıştır. Düzenleyici şu özellikleri içerir:

  • Etiketler ve sınıflandırıcılar

  • Süsleme -leri

  • Yansıtma

  • Anahat Oluşturma

  • Fare ve tuş bağlamaları

  • İşlemler ve ilkel öğeler

  • IntelliSense

Etiketler ve sınıflandırıcılar

Etiketler, bir metin aralığıyla ilişkili işaretçilerdir. Bunlar, örneğin metin renklendirmeleri, alt çizgiler, grafikler veya açılır pencereler kullanılarak farklı şekillerde sunulabilir. Sınıflandırıcılar bir tür etikettir.

Diğer etiket TextMarkerTag türleri metin vurgulama, OutliningRegionTag ana hat oluşturma ve ErrorTag derleme hataları içindir.

Sınıflandırma türleri

Arabirim IClassificationType , soyut bir metin kategorisi olan denklik sınıfını temsil eder. Sınıflandırma türleri diğer sınıflandırma türlerinden birden çok devralabilir. Örneğin, programlama dili sınıflandırmaları "koddan" devralan "anahtar sözcük", "açıklama" ve "tanımlayıcı" içerebilir. Doğal dil sınıflandırma türleri "isim", "fiil" ve "sıfat" içerebilir ve bunların tümü "doğal dilden" devralır.

Sınıflandırmalar

Sınıflandırma, genellikle bir metin aralığı boyunca belirli bir sınıflandırma türünün örneğidir. bir ClassificationSpan sınıflandırmayı temsil etmek için kullanılır. Sınıflandırma aralığı, belirli bir metin aralığını kapsayan ve sisteme bu metin aralığının belirli bir sınıflandırma türünde olduğunu söyleyen bir etiket olarak düşünülebilir.

Sınıflandırıcı

, IClassifier metni bir sınıflandırma kümesine bölen bir mekanizmadır. Sınıflandırıcılar belirli içerik türleri için tanımlanmalı ve belirli metin arabellekleri için örneklenmelidir. İstemcilerin metin sınıflandırmasına katılmak için uygulaması IClassifier gerekir.

Sınıflandırıcı toplayıcıları

Sınıflandırıcı toplayıcısı, bir metin arabelleği için tüm sınıflandırıcıları tek bir sınıflandırma kümesinde birleştiren bir mekanizmadır. Örneğin, hem C# sınıflandırıcısı hem de İngilizce dil sınıflandırıcısı, C# dosyasındaki bir açıklama üzerinden sınıflandırmalar oluşturabilir. Şu açıklamayı göz önünde bulundurun:

// This method produces a classifier

C# sınıflandırıcısı tüm yayılmayı açıklama olarak etiketleyip İngilizce dil sınıflandırıcısı "üretir"i "fiil" ve "yöntem"i "isim" olarak sınıflandırabilir. Toplayıcı, çakışmayan bir sınıflandırma kümesi oluşturur ve kümenin türü tüm katkıları temel alır.

Sınıflandırıcı toplayıcısı da bir sınıflandırıcıdır çünkü metni bir sınıflandırma kümesine böler. Sınıflandırıcı toplayıcısı, çakışan sınıflandırmaların olmamasını ve sınıflandırmaların sıralanmasını da sağlar. Tek tek sınıflandırıcılar herhangi bir sınıflandırma kümesini herhangi bir sırayla ve herhangi bir şekilde çakışarak döndürmek için ücretsizdir.

Sınıflandırma biçimlendirmesi ve metin renklendirilmesi

Metin biçimlendirme, metin sınıflandırması üzerine oluşturulmuş bir özelliğe örnektir. Metin görünümü katmanı tarafından bir uygulamadaki metnin görüntülenmesini belirlemek için kullanılır. Metin biçimlendirme alanı WPF'ye bağlıdır, ancak sınıflandırmaların mantıksal tanımı bağımlı değildir.

Sınıflandırma biçimi, belirli bir sınıflandırma türü için biçimlendirme özellikleri kümesidir. Bu biçimler, sınıflandırma türünün üst öğesinin biçiminden devralır.

, IClassificationFormatMap bir sınıflandırma türünden bir dizi metin biçimlendirme özelliğine eşlemdir. Biçim eşlemesinin düzenleyicide uygulanması, sınıflandırma biçimlerinin tüm dışarı aktarmalarını işler.

Süsleme -leri

Kenarlıklar, metin görünümündeki karakterlerin yazı tipi ve rengiyle doğrudan ilgili olmayan grafik efektleridir. Örneğin, derlenmeyen kodu birçok programlama dilinde işaretlemek için kullanılan kırmızı dalgalı alt çizgi ekli bir donatmadır ve araç ipuçları açılır süslemelerdir. Süslemeler'den UIElement türetilir ve uygular ITag. Görünümdeki SpaceNegotiatingAdornmentTagmetinle ErrorTagaynı alanı kaplayan süslemeler için , ve dalgalı alt çizgi için ise iki özel tür donatma etiketi vardır.

Eklenmiş kenarlıklar, biçimlendirilmiş metin görünümünün bir parçasını oluşturan grafiklerdir. Bunlar farklı Z düzeni katmanlarında düzenlenir. Aşağıdaki gibi üç yerleşik katman vardır: metin, şapka işareti ve seçim. Ancak geliştiriciler daha fazla katman tanımlayabilir ve bunları birbirlerine göre sıralayabilir. Ekli üç tür donatma, metin göreli kenarlıklardır (metin taşındığında hareket eder ve metin silindiğinde silinir), görünüm göreli kenarlıkları (görünümün metin olmayan bölümleriyle ilgisi vardır) ve sahip denetimindeki kenarlıklardır (geliştirici yerleşimlerini yönetmelidir).

Açılır kenarlıklar, metin görünümünün üzerinde küçük bir pencerede görünen grafiklerdir, örneğin araç ipuçları.

Yansıtma

Projeksiyon, aslında metin depolamayan, bunun yerine diğer metin arabelleklerindeki metinleri birleştiren farklı türde bir metin arabelleği oluşturmak için kullanılan bir tekniktir. Örneğin, projeksiyon arabelleği, metni diğer iki arabellekten birleştirmek ve sonucu yalnızca bir arabellekte gibi sunmak veya metnin bölümlerini tek bir arabellekte gizlemek için kullanılabilir. Projeksiyon arabelleği, başka bir projeksiyon arabelleğine kaynak arabelleği olarak görev yapabilir. Projeksiyonla ilişkili bir arabellek kümesi, metni birçok farklı yolla yeniden düzenlemek için oluşturulabilir. (Bu tür bir küme, arabellek grafı olarak da bilinir.) Visual Studio metin anahat özelliği daraltılmış metni gizlemek için bir projeksiyon arabelleği kullanılarak uygulanır ve ASP.NET sayfaları için Visual Studio düzenleyicisi, Visual Basic ve C# gibi ekli dilleri desteklemek için projeksiyon kullanır.

IProjectionBuffer kullanılarak IProjectionBufferFactoryServiceoluşturulur. Projeksiyon arabelleği, kaynak yayılma alanları olarak bilinen sıralı bir nesne dizisiyle ITrackingSpan temsil edilir. Bu span'ların içeriği bir karakter dizisi olarak sunulur. Kaynak span'ların çizildiği metin arabellekleri, kaynak arabellekleri olarak adlandırılır. Projeksiyon arabelleği istemcilerinin normal bir metin arabelleğinden farklı olduğunu bilmesi gerekmez.

Projeksiyon arabelleği, kaynak arabelleklerdeki metin değişikliği olaylarını dinler. Kaynak yayılma alanı içindeki metin değiştiğinde, projeksiyon arabelleği değiştirilen metin koordinatlarını kendi koordinatlarıyla eşler ve uygun metin değişikliği olaylarını oluşturur. Örneğin, şu içeriklere sahip A ve B kaynak arabelleklerini göz önünde bulundurun:

A: ABCDE
B: vwxyz

Projeksiyon arabelleği P iki metin aralığından oluşuyorsa, biri A arabelleğinin tümüne, diğeri de tüm B arabelleğine sahipse P aşağıdaki içeriğe sahiptir:

P: ABCDEvwxyz

Alt dize xy B arabellekten silinirse, P arabelleği 7 ve 8 konumlarında karakterlerin silindiğini belirten bir olay oluşturur.

Projeksiyon arabelleği doğrudan da düzenlenebilir. Düzenlemeleri uygun kaynak arabelleklerine yayılım. Örneğin, P arabelleğine 6 konumunda bir dize eklenirse ("v" karakterinin özgün konumu), ekleme 1 konumundaki B arabelleğine yayılır.

Bir projeksiyon arabelleğine katkıda bulunan kaynak yayılmalarında kısıtlamalar vardır. Kaynak yayılma alanları çakışmayabilir; Projeksiyon arabelleğindeki bir konum, herhangi bir kaynak arabellekteki birden fazla konuma eşlenemez ve kaynak arabellekteki bir konum projeksiyon arabelleğinde birden fazla konuma eşlenemez. Kaynak arabellek ilişkisinde döngüselliklere izin verilmez.

Olaylar, yansıtma arabelleği için kaynak arabellek kümesi değiştiğinde ve kaynak yayılma kümesi değiştiğinde tetiklenir. elision arabellek, özel bir projeksiyon arabelleği türüdür. Öncelikle metin bloklarını genişleten ve daraltan işlemlerin ana hatlarını oluşturma ve işlemleri için kullanılır. Elision arabelleği yalnızca bir kaynak arabelleği temel alır ve izma arabelleğindeki yayılma alanları, kaynak arabellekte sıralanmış oldukları gibi sıralanmalıdır.

Arabellek grafiği

Arabirim, IBufferGraph projeksiyon arabellekleri grafiğinde eşlemeyi etkinleştirir. Tüm metin arabellekleri ve projeksiyon arabellekleri, bir dil derleyicisi tarafından oluşturulan soyut söz dizimi ağacına çok benzer şekilde, yönlendirilmiş bir döngüsel grafikte toplanır. Grafik, herhangi bir metin arabelleği olabilecek üst arabellek tarafından tanımlanır. Arabellek grafiği, üst arabellekteki bir noktadan kaynak arabelleğindeki bir noktaya veya üst arabellekteki bir span'dan kaynak arabelleğindeki bir dizi yayılma alanıyla eşlenebilir. Benzer şekilde, kaynak arabellekteki bir noktayı veya yayılmayı üst arabellekteki bir noktaya eşleyebilir. Arabellek grafikleri kullanılarak IBufferGraphFactoryServiceoluşturulur.

Olaylar ve projeksiyon arabellekleri

Bir projeksiyon arabelleği değiştirildiğinde, değişiklikler yansıtma arabelleğinden buna bağlı olan arabelleklere gönderilir. Tüm arabellekler değiştirildikten sonra, arabellek değişikliği olayları en derin arabellekle başlayarak tetiklenir.

Anahat Oluşturma

Ana hat oluşturma, metin görünümünde farklı metin bloklarını genişletme veya daraltma özelliğidir. Anahat oluşturma, bir tür ITagolarak tanımlanır, aynı süslemelerin tanımlandığı gibi. A OutliningRegionTag , genişletilebilen veya daraltılabilir bir metin bölgesini tanımlayan bir etikettir. Anahat oluşturma özelliğini kullanmak için, almak IOutliningManageriçin öğesini IOutliningManagerService içeri aktarmanız gerekir. Ana hat yöneticisi nesne olarak ICollapsible temsil edilen farklı blokları numaralandırır, daraltıp genişletir ve olayları buna göre oluşturur.

Fare bağlamaları

Fare bağlamaları, fare hareketlerini farklı komutlara bağlar. Fare bağlamaları kullanılarak IMouseProcessorProvidertanımlanır ve anahtar bağlamaları kullanılarak IKeyProcessorProvidertanımlanır. , IWpfTextViewHost tüm bağlamaların örneğini otomatik olarak oluşturur ve bunları görünümdeki fare olaylarına bağlar.

Arabirim, IMouseProcessor farklı fare olayları için işlem öncesi ve işlem sonrası olay işleyicileri içerir. Olaylardan birini işlemek için içindeki yöntemlerden MouseProcessorBasebazılarını geçersiz kılabilirsiniz.

Düzenleyici işlemleri

Düzenleyici işlemleri, betik oluşturma veya başka amaçlarla düzenleyiciyle etkileşimi otomatikleştirmek için kullanılabilir. belirli ITextViewbir üzerindeki işlemlere erişmek için öğesini içeri aktarabilirsinizIEditorOperationsFactoryService. Ardından bu nesneleri kullanarak seçimi değiştirebilir, görünümü kaydırabilir veya şapka işaretini görünümün farklı bölümlerine taşıyabilirsiniz.

IntelliSense

IntelliSense deyim tamamlama, imza yardımı (parametre bilgisi olarak da bilinir), Hızlı Bilgi ve ampulleri destekler.

Deyim tamamlama, yöntem adları, XML öğeleri ve diğer kodlama veya işaretleme öğeleri için olası tamamlamaların açılır listelerini sağlar. Genel olarak, kullanıcı hareketi bir tamamlama oturumu çağırır. Oturumda olası tamamlamaların listesi görüntülenir ve kullanıcı bir tane seçebilir veya listeyi kapatabilir. ICompletionBroker, oluşturma ve tetikleme sorumluluğundadırICompletionSession. , ICompletionSource oturumun CompletionSet tamamlanma öğelerini hesaplar.

İçeri/Dışarı Aktarma Sorunlarını Giderme: MEF Oluşturma Hata Günlüğüne Erişme

Geçerli VS yüklemesinde mevcut olmayan bir şeyi içeri aktarmaya çalışırsanız veya içeri veya dışarı aktarma işleminizi yanlış yazarsanız sorunlarla karşılaşabilirsiniz. Bu sorunları bulmanın ve çözmenin birincil yolu, %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err konumunda depolanan Yönetilen Genişletilebilirlik Çerçevesi (MEF) Oluşturma Hata Günlüğüne başvurmaktır.