Выделение синтаксиса в Cocoa TextView? Опыт? Предложения? Идеи?

Возможный дубликат:
Синтаксическая раскраска для приложения Cocoa

Меня интересует подсветка синтаксиса в Cocoa TextView.

Я нашел несколько ресурсов:

  • подход с flex через flex pattern сопоставлено с textStorageDidProcessEditing в делегате TextView. В этом подходе вся строка обрабатывается на каждом входном событии, следовательно, производительность ухудшается.

  • CocoaDev имеет собственную страницу по теме подсветки синтаксиса:

    • Используйте NSTextStorageDidProcessEditingNotification, затем получите отредактированный диапазон и просто примените окраску. Диапазон может быть словом или чем угодно; это определенно повышает производительность.

    • Упоминается там: Xcode, например, только окрашивает текст, который в настоящее время отображается на экране, и отбрасывает раскрашивание остальной части документа, пока вы не прокрутите его. Как реализовать это?

    • Использовать NSLayoutManager - через временные атрибуты [which] используются только для рисования на экране и не являются постоянными каким-либо образом... как говорят документы, но не окрашивает последний отредактированный диапазон, пока не будет введен символ пробела.

    • Пользовательский помощник, например UKSyntaxColoredDocument - хорошо, но определение языка осуществляется через список свойств; как использовать дополнительные/существующие определения языка?

Ни один из подходов не кажется действительно расширяемым или надежным для меня (кроме 4. возможно..).

Мне известны надежные существующие библиотеки для SH, например pygments; и PyObjC.

Вопрос. Как можно использовать некоторую существующую библиотеку, например. например pygments, чтобы иметь подсветку синтаксиса расширяемого и синтаксического действия в Cocoa TextView?

Примечание. Я знаю, что этот вопрос очень широк (и слишком длинный). Опыт и предложения, а также решения приветствуются. Благодарю.


Нашел еще один подобный поток: Синтаксическая раскраска для приложения Cocoa

Ответ 1

Я бы предложил посмотреть исходный код на Smultron. Он имеет очень приятный синтаксис. Он использует подкласс NSTextView для выполнения большей части тяжелого подъема. Код использует диспетчер компоновки для добавления атрибутов в текст и использует некоторые другие умные трюки, чтобы выделить только значительную часть документа по мере необходимости.