SORU
24 Ocak 2012, Salı


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
18 EKİM 2012, PERŞEMBE


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:

  1. Bir hizmet olarak ek vurgulayıcı saklamayın. HighlightingColorizer sınıfının kendi kopyasını oluşturarak bunu yapmak, ve textView.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.

  2. Birden fazla HighlightedLine s birleştiren IHighlighteruygulaması DocumentHighlighters 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ştirme HighlightedLines önemsiz olmayan belirli bir sıralama ve yerleştirme kısıtlamaları bölümleri), ve gerektirir bir API değiştirmek için IHighlighter arayüzü için uğraşmak OnHighlightStateChanged bildirim (AvalonEdit 4.x türetilmiş sınıf HighlightingColorizer iç içe geçmiş bu callback erişim elde etmek için kullanır; AvalonEdit 5.0 olay) kullanır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008
  • tutvid

    tutvid

    19 AĞUSTOS 2006