AvalonEdit - Подсветка синтаксиса - Как добавить подчеркивание, изменить размер шрифта и т. Д.?

Я пытаюсь создать простой текстовый редактор в стиле Markdown. (Тот, где текст имеет встроенный стиль, а не две панели рядом, как это делают большинство редакторов Markdown) (Я также не собираюсь поддерживать полную спецификацию Markdown - никаких списков или таблиц, в основном только форматирование текста жирным шрифтом, курсивом, подчеркиванием и т. д.)

У меня есть проект, который использует проект AvalonEdit (через исходный код, а не пакет Nuget) - у меня редактор настроен именно так, как я хочу - затем я начал писать XSHD-файл с подсветкой синтаксиса, когда понял, что подсветчик поддерживает только форматирование, такое как цвета шрифта, курсив, полужирный шрифт и т. д., а не размер шрифта, подчеркивание и другие ...

Как я могу добавить дополнительное форматирование шрифта? Придется ли мне писать новый парсер / маркер / что-то еще? Есть ли простой способ подключить и расширить существующий маркер?

Я уже внес несколько небольших изменений в один файл в источнике (TextEditor.xaml), и я готов изменить больше, чтобы эта работа работала, хотя, когда я начинал, я надеялся как можно меньше касаться источника. ..

Если бы кто-то мог просто указать мне правильное направление, я был бы признателен - Спасибо!


person encoder    schedule 25.05.2014    source источник


Ответы (1)


Из документации по подсветке синтаксиса:

Среди точек расширения визуализации текста есть поддержка «преобразователей визуальных линий», которые могут изменять отображение визуальной линии после ее создания «генераторами визуальных элементов». Полезным базовым классом, реализующим IVisualLineTransformer с целью выделения синтаксиса, является DocumentColorizingTransformer. Взгляните на документацию этого класса, чтобы узнать, как писать полностью настраиваемые подсветки синтаксиса. В этой статье обсуждается только встроенный механизм выделения на основе XML.

Прочитав и / или просмотрев эту страницу несколько раз, я не мог полностью разобраться в ней, пока не просмотрел код еще немного, не прочитал несколько сообщений на форумы SharpDevelop и т. д.

И если вы находитесь на той же стадии, что и я (и не можете полностью осмыслить эту цитату), суть в том, что редактор выполняет эти две вещи (упрощенно, конечно):

  1. Он генерирует строки видимого текста (он беспокоится только о строках, которые в настоящее время отображаются на экране, по соображениям производительности)
  2. Затем он запускает различные преобразователи для указанного сгенерированного текста, чтобы стилизовать его различными способами.

Таким образом, «встроенный механизм выделения на основе XML» - это только один способ найти и стилизовать текст - тот, который должен быть простой реализацией более «продвинутого» способа, который заключается в создании настраиваемого текстового преобразователя, такого как DocumentColorizingTransformer. .

И вот некоторая информация о DocumentColorizingTransformer, которая может оказаться вам полезной (помимо документации API, на которую они указывают):

https://stackoverflow.com/a/23251990/859833

http://danielgrunwald.de/coding/AvalonEdit/rendering.php

person encoder    schedule 25.05.2014