在Cocoa TextView中突出显示语法?经验?建议?想法?

时间:2009-06-09 22:25:56

标签: python objective-c cocoa syntax-highlighting textview

  

可能重复:
  Syntax coloring for Cocoa app

我对 Cocoa TextView中的语法突出显示感兴趣。

我找到了几个资源:

  • approach with flex,通过与textStorageDidProcessEditing匹配的flex模式 在TextView代表中。在这种方法中,每个输入事件都会解析整个字符串,因此性能会下降。

  • CocoaDev有own page on the topic of syntax highlighting

    1. 使用NSTextStorageDidProcessEditingNotification,然后获取已编辑的范围,然后在那里应用着色。范围可能是wordboundaries或任何东西;这肯定会提高性能。

    2. 在那里提到:例如, Xcode只对当前在屏幕上显示的文本进行着色,并推迟对文档其余部分进行着色,直到您滚动它为止。如何实现这一点?

    3. 使用NSLayoutManager - 来自临时属性[仅]用于屏幕绘制,并且不会以任何方式持久... 正如文档所说,但是不会为最后编辑的范围着色,直到输入空白字符。

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

这些方法对我来说似乎都不具有可扩展性或强大性(除了4.可能......)。

我知道SH的强大现有库,如pygments;以及PyObjC

问题:如何使用某些现有库,例如像pygments一样在Cocoa TextView中突出显示可扩展且高效的语法?

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


在此问题上找到了另一个类似的主题:Syntax coloring for Cocoa app

1 个答案:

答案 0 :(得分:7)

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