SyntaxHighlighter
Ресурс подсветки текста с картой цветовых переходов и собственным кэшем.
Создайте отдельный SyntaxHighlighter для каждого TextEdit и назначьте через TextEdit.SyntaxHighlighter. Ресурс хранит контекст одного редактора: назначение другому перепривязывает его, даже если первый ещё ссылается на тот же ресурс. Не используйте один экземпляр одновременно в нескольких редакторах.
Для своей подсветки наследуйте SyntaxHighlighter и переопределите _GetLineSyntaxHighlighting. Верните Dictionary: ключ — колонка в кодовых точках Unicode, значение — вложенный Dictionary с ключом "color" и Color. Цвет действует до следующего ключа или конца строки. Например, переходы в 0 и 5 задают два диапазона; это не массив цвета каждого символа.
Вызывайте GetLineSyntaxHighlighting, чтобы получить данные через кэш. Возвращённый словарь разделяется с кэшем: читайте его, но не очищайте и не редактируйте на месте. Dispose C#-обёртки словаря не равен Clear. Изменения строк автоматически инвалидируют соответствующие данные.
При смене собственных правил очистите кэш через ClearHighlightingCache или обновите состояние через UpdateCache, затем вызовите EmitChanged: TextEdit хранит ещё и свой кэш и слушает Changed ресурса. Сам ClearHighlightingCache не гарантирует обновление уже нарисованного редактора.
GetTextEdit возвращает заимствованную ссылку. Не освобождайте редактор через неё. Согласуйте время жизни ресурса с редактором и не запрашивайте подсветку после удаления редактора; наличие внешней ссылки на ресурс не продлевает жизнь UI.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
SyntaxHighlighterКонструктор
public SyntaxHighlighter();Создаёт ресурс без привязанного редактора. Базовая реализация не задаёт правила языка; переопределите _GetLineSyntaxHighlighting или используйте CodeHighlighter.
Методы7
ClearHighlightingCachevoid
public void ClearHighlightingCache();Очищает карты строк и вызывает hook очистки, не обновляя все настройки. Для обновления TextEdit после смены правил дополнительно вызовите EmitChanged: у редактора есть отдельный кэш.
GetLineSyntaxHighlightingReckfell.Collections.Dictionary
public Reckfell.Collections.Dictionary GetLineSyntaxHighlighting(int line);Возвращает кэшированную карту переходов колонка → {"color": Color}. Без редактора карта пустая. Вызывайте этот метод, а не виртуальный hook напрямую. Словарь общий с кэшем: не меняйте его на месте; освобождайте C#-обёртку после чтения.
| Имя | Тип | По умолчанию |
|---|---|---|
line | int | — |
lineИндекс существующей логической строки; колонки результата считаются в кодовых точках Unicode.
Reckfell.Collections.DictionaryВозвращает кэшированную карту переходов колонка → {"color": Color}. Без редактора карта пустая. Вызывайте этот метод, а не виртуальный hook напрямую. Словарь общий с кэшем: не меняйте его на месте; освобождайте C#-обёртку после чтения.
GetTextEditTextEdit
public TextEdit GetTextEdit();Заимствованный контекст одного TextEdit, null до привязки. Не продлевает жизнь редактора и не разрешает пользоваться контекстом после его удаления. При совместном ресурсе возвращается последний привязанный редактор.
TextEditЗаимствованный контекст одного TextEdit, null до привязки. Не продлевает жизнь редактора и не разрешает пользоваться контекстом после его удаления. При совместном ресурсе возвращается последний привязанный редактор.
UpdateCachevoid
public void UpdateCache();Сначала очищает карты, затем вызывает hook обновления при живом привязанном редакторе. CodeHighlighter обновляет базовый цвет текста. После внешней смены правил/данных уведомите редактор через EmitChanged.
_ClearHighlightingCachevoid
public virtual void _ClearHighlightingCache();Hook для сброса собственного состояния анализа, например многострочных областей. Вызывается из ClearHighlightingCache/UpdateCache. Переопределение заменяет стандартный hook, поэтому для полного своего анализатора предпочтительна база SyntaxHighlighter.
_GetLineSyntaxHighlightingReckfell.Collections.Dictionary
public virtual Reckfell.Collections.Dictionary _GetLineSyntaxHighlighting(int line);Виртуальный hook вычисления карты для одной строки при промахе кэша. Верните Dictionary с целыми колонками в кодовых точках Unicode и вложенными Dictionary с Color под ключом "color". Получайте текст через живой GetTextEdit; не вызывайте GetLineSyntaxHighlighting этой же строки рекурсивно.
| Имя | Тип | По умолчанию |
|---|---|---|
line | int | — |
lineИндекс существующей логической строки; колонки результата считаются в кодовых точках Unicode.
Reckfell.Collections.DictionaryВиртуальный hook вычисления карты для одной строки при промахе кэша. Верните Dictionary с целыми колонками в кодовых точках Unicode и вложенными Dictionary с Color под ключом "color". Получайте текст через живой GetTextEdit; не вызывайте GetLineSyntaxHighlighting этой же строки рекурсивно.
_UpdateCachevoid
public virtual void _UpdateCache();Hook обновления собственных данных после очистки карт. Вызывается UpdateCache только при привязанном редакторе. Не изменяйте текст редактора во время вычисления подсветки.