我对 Cocoa TextView中的语法突出显示感兴趣。
我找到了几个资源:
approach with flex,通过与textStorageDidProcessEditing
匹配的flex模式
在TextView
代表中。在这种方法中,每个输入事件都会解析整个字符串,因此性能会下降。
CocoaDev有own page on the topic of syntax highlighting:
使用NSTextStorageDidProcessEditingNotification
,然后获取已编辑的范围,然后在那里应用着色。范围可能是wordboundaries或任何东西;这肯定会提高性能。
在那里提到:例如, Xcode只对当前在屏幕上显示的文本进行着色,并推迟对文档其余部分进行着色,直到您滚动它为止。如何实现这一点?
使用NSLayoutManager
- 来自临时属性[仅]用于屏幕绘制,并且不会以任何方式持久... 正如文档所说,但是不会为最后编辑的范围着色,直到输入空白字符。
自定义助手,如UKSyntaxColoredDocument - 很好,但语言定义是通过属性列表完成的;如何使用其他/现有的语言定义?
这些方法对我来说似乎都不具有可扩展性或强大性(除了4.可能......)。
我知道SH的强大现有库,如pygments;以及PyObjC。
问题:如何使用某些现有库,例如像pygments一样在Cocoa TextView
中突出显示可扩展且高效的语法?
注意:我知道这个问题非常广泛(太长了)。欢迎提供经验和建议以及解决方案。谢谢。
在此问题上找到了另一个类似的主题:Syntax coloring for Cocoa app
答案 0 :(得分:7)
我建议您查看Smultron的源代码。它有非常好的语法高亮。它使用NSTextView的子类来完成大部分繁重的工作。代码使用布局管理器向文本添加属性,并使用其他一些巧妙的技巧,只根据需要突出显示文档。