Chcę kaskadować silnik SyntaxHighlighting AvalonEdit. Mam 2 HighlightingDefinitions
. Pierwsza to główna składnia. Drugi to złożony wielowierszowy-preprocesor-język znaczników. Z tego powodu zbyt skomplikowane jest umieszczenie drugiej gramatyki w pierwszej. Najprostszym sposobem jest wyrenderowanie pierwszej składni i zmiana dotkniętych części linii (w oparciu o drugą składnię).AvalonEdit: Cascading HighlightingColorizers
Utworzono więc nowy HighlightingColorizer
z drugim językiem i dodano go do LineTransformers
. Ale drugi język jest kolorem kompletnego dokumentu, a nie tylko lineparty z dyrektywami preprocesora: kod nieprocesowy jest czarny.
Podczas debugowania metody ColorizeLine
-metody drugiego transformatora liniowego, wiersze nie podświetlonego kodu (= brak kodu preprocesora) nie były kolorowane zgodnie z oczekiwaniami. Ale kolor linii jest czarny.
Czy też HighlightingColorizer
resetuje wszystkie poprzednie wyróżnienia całego dokumentu, zanim zacznie się koloryzować?
Co jeszcze może być problemem? Jak mogę prawidłowo kaskadować 2 HighlightingColorizers
?
Pracowałem trochę z AvalonEdit- i IIRC resetuje wszystkie podświetlanie po zastosowaniu innego kolorowania. Najlepszym sposobem na powtórzenie tego jest powtórna próba osadzenia drugiej gramatyki w pierwszej próbie polegającej na tym, że musiałbyś zadzierać z bazą kodu AvalonEdit, aby zmienić sposób interpretacji i ponownego zastosowania schematu kolorów.Ta ostatnia prawdopodobnie nie byłaby trywialna, ponieważ nie sądzę, że będzie ona tak łatwa i "komentująca reset", czy coś w tym stylu. –
@ Xeno jest tutaj. Z pewnością będziesz musiał edytować podstawę kodu, jeśli nie chcesz korzystać z plików definicji XML. Jednak nie jestem pewien, dlaczego nie chciałbyś tego zrobić - mogą być tak długo, jak chcesz i mogą być używane do pokolorowania małych szczegółów. Właśnie napisałem plik, aby zrobić coś podobnego z wbudowanym SQL; jest szybki i działa dobrze ... – MoonKnight