AvalonEdit: Basamaklı HighlightingColorizers
Ardarda AvalonEdit bu SyntaxHighlighting Motor istiyorum. 2 HighlightingDefinitions
var. İlk ana sözdizimi. İkinci bir karmaşık çok satırlı-işleyişi-biçimlendirme dili. Bu nedenle birinci, ikinci dilbilgisi embbed için çok karmaşıktır. Daha kolay yolu ilk sözdizimi oluşturma ve çizgi parçaları etkilenen (ikinci sözdizimi dayalı) daha sonra değiştirmek için.
İkinci dil HighlightingColorizer
yeni bir örneği ve LineTransformers
için ekledim. Non-işleyişi-siyah kod. ama ikinci dili tam belge renklendirir ve sadece lineparts ile ön işlemci direktifleri:
İkinci hat trafosu ColorizeLine
-yöntem ben debug olarak, vurgulu olmayan kod (= basit kod) hatları beklendiği gibi renkli, olmamıştır. Ama çizgilerin rengi siyah.
HighlightingColorizer
renklendirme için başlamadan önce tüm belgeyi önceki vurgulama reset mu?
Ya da başka ne sorun olabilir? Nasıl düzgün ardarda 2 HighlightingColorizers
miyim?
CEVAP
Sorun HighlightingColorizer
doğrudan TextView.Services
) DocumentHighlighter
, ama bunun yerine depolar başvuru saklamaz. Bu her düzenleyici DocumentHighlighter
kendi alır, böylece birden fazla editör için aynı colorizer ekleme yapılmasına izin veriyor.
İkinci bir colorizer taktığınızda, IHighlighter
servis kabı içinde saklanan yazar; hem colorizers yeni vurgulayıcı kullanarak sonuna kadar.
Ayrıca, 'pano' HtmlClipboard
mantık herhangi bir colorizers kullanmaz, doğrudan IHighlighter
servis erişir. kopyalama not (Word için metin kopyalama sözdizimi vurgulama işaretleri kat) gibi başka dönüşümler korur
Aslında bu sorunu çözmek için iki yaklaşım vardır:
Bir hizmet olarak ek vurgulayıcı saklamayın.
HighlightingColorizer
sınıfının kendi kopyasını oluşturarak bunu yapmak, vetextView.Services
erişmek yerine bu sınıfta bir alanı kullanabilirsiniz. Bu kolay bir değişiklik, ancak ek kalemleri panoya metin kopyalama zaman kullanılmaz.Birden fazla
HighlightedLine
s birleştirenIHighlighter
uygulamasıDocumentHighlighter
s oluşturun. Bu C# için SharpDevelop semantik mevcut genişleten ek bir işaretleyici olarak çalışan 5 vurgulayarak kullanıyoruz yaklaşımdır .: tabanlı C# vurgulama. Ancak, bu yaklaşım, karmaşık (birleştirmeHighlightedLine
s önemsiz olmayan belirli bir sıralama ve yerleştirme kısıtlamaları bölümleri), ve gerektirir bir API değiştirmek içinIHighlighter
arayüzü için uğraşmakOnHighlightStateChanged
bildirim (AvalonEdit 4.x türetilmiş sınıfHighlightingColorizer
iç içe geçmiş bu callback erişim elde etmek için kullanır; AvalonEdit 5.0 olay) kullanır.
Basamaklı örnekler derlemek için başar...
Rasgele dize büyük harf ve Python basa...
Ne zaman SQL Server Basamaklı kullanma...
Bir iki basamaklı tek basamaklı bir ta...
Türü Enlem/için kullanılmalıdır Veri 8...