Возможный дубликат:
Синтаксическая раскраска для приложения Cocoa
Меня интересует подсветка синтаксиса в Cocoa TextView.
Я нашел несколько ресурсов:
-
подход с flex через flex pattern сопоставлено с
textStorageDidProcessEditing
в делегатеTextView
. В этом подходе вся строка обрабатывается на каждом входном событии, следовательно, производительность ухудшается. -
CocoaDev имеет собственную страницу по теме подсветки синтаксиса:
-
Используйте
NSTextStorageDidProcessEditingNotification
, затем получите отредактированный диапазон и просто примените окраску. Диапазон может быть словом или чем угодно; это определенно повышает производительность. -
Упоминается там: Xcode, например, только окрашивает текст, который в настоящее время отображается на экране, и отбрасывает раскрашивание остальной части документа, пока вы не прокрутите его. Как реализовать это?
-
Использовать
NSLayoutManager
- через временные атрибуты [which] используются только для рисования на экране и не являются постоянными каким-либо образом... как говорят документы, но не окрашивает последний отредактированный диапазон, пока не будет введен символ пробела. -
Пользовательский помощник, например UKSyntaxColoredDocument - хорошо, но определение языка осуществляется через список свойств; как использовать дополнительные/существующие определения языка?
-
Ни один из подходов не кажется действительно расширяемым или надежным для меня (кроме 4. возможно..).
Мне известны надежные существующие библиотеки для SH, например pygments; и PyObjC.
Вопрос. Как можно использовать некоторую существующую библиотеку, например. например pygments, чтобы иметь подсветку синтаксиса расширяемого и синтаксического действия в Cocoa TextView
?
Примечание. Я знаю, что этот вопрос очень широк (и слишком длинный). Опыт и предложения, а также решения приветствуются. Благодарю.
Нашел еще один подобный поток: Синтаксическая раскраска для приложения Cocoa