10

可能重复:
Cocoa 应用程序的语法着色

我对Cocoa TextView中的语法高亮感兴趣。

我找到了几个资源:

  • 使用 flex 方法,通过 在委托中匹配的flex模式。在这种方法中,整个字符串在每个输入事件上都会被解析,因此性能会下降。textStorageDidProcessEditingTextView

  • CocoaDev 有一个关于语法高亮主题的页面

    1. 使用NSTextStorageDidProcessEditingNotification,然后获取编辑后的范围,然后在此处应用颜色。范围可能是单词边界或任何东西;这肯定会提高性能。

    2. 那里提到:例如,Xcode 仅对当前屏幕上的文本着色,并推迟对文档的其余部分着色,直到您滚动浏览它。将如何实现这一点?

    3. 使用NSLayoutManager– 通过Temporary attributes [which] 仅用于屏幕上的绘图,并且不会以任何方式持久化......正如文档所说,但这不会为最后编辑的范围着色,直到输入空白字符。

    4. UKSyntaxColoredDocument这样的自定义助手——很好,但是语言定义是通过属性列表完成的;如何使用其他/现有的语言定义?

对我来说,这些方法似乎都不是真正可扩展或健壮的(除了 4. 也许..)。

我知道像pygments这样的强大的 SH 现有库;和PyObjC

问题:如何使用一些现有的库(例如pygments)在 Cocoa 中突出显示可扩展和高性能的语法TextView

注意:我知道这个问题非常广泛(而且太长了)。欢迎经验和建议以及解决方案。谢谢。


在这件事上找到了另一个类似的线程:Cocoa 应用程序的语法着色

4

1 回答 1

7

我建议看一下Smultron的源代码。它有非常好的语法高亮。它使用 NSTextView 的子类来完成大部分繁重的工作。该代码使用布局管理器向文本添加属性,并使用其他一些巧妙的技巧仅在必要时突出显示文档。

于 2009-06-10T10:15:30.640 回答