如何在Cocoa中实现源代码的语法高亮是最佳方式?

19

我正在开发一个可分析并突出显示多种编程语言(如Objective-C、SQL、JavaScript和Python等)源代码的Cocoa应用程序。该文本应该是可编辑的(例如使用NSTextView)。

请建议在Mac OS X 10.5中实现此功能的最佳方式。

无需支持自动完成和其他额外功能。仅通过关键字、字符串、#include和数字进行简单格式化,性能良好即可。

此外,如果支持按语言进行配置将会很好。

谢谢!


智能语法高亮可能相当困难 - 这就是为什么苹果公司在LLVM的clang前端上做了很多工作的部分原因。你可能想要去看看它。 - user57368
5个回答

16

我正在准备一个将需要类似功能的项目,我已经找到了以下内容(但没有进行深入评估):

  • /Developer/Examples/OpenGL/Cocoa/GLSLEditorSample 实现了语法高亮。
  • IDEKit,“一个开源框架,提供程序员源代码编辑,包括语法着色、弹出函数和分裂帧”。这个项目已经有一段时间没有更新了(它宣传10.2和10.3兼容性,并附带一个Project Builder项目——可以用Xcode 2.5进行转换)。
  • UKSyntaxColoredTextDocument

5
Gandreas删掉了代码库,但我从旧的SVN代码库中挽救了一个可用副本(最新版本为0.3),链接在这里:https://github.com/CodaFi/IDEKit。我的副本支持Xcode 4.x和ARC。 - CodaFi

6

我赞同Ahruman的建议 - 特别是要看看Uli的UKSyntaxColoredTextDocument,因为它会指引你学习哪些类等知识方面的正确方向。

这是另一个极好的信息来源:

http://www.cocoadev.com/index.pl?ImplementSyntaxHighlighting

祝你好运 - 语法高亮很难做到完美,但在这个过程中会很有趣!


谢谢大家。这绝对是正确的答案。我会仔细研究Uli的组件,但我想把这个问题留给几天。也许到那时会有人想出新的东西。 - Vadim

2

最近我需要为Cocoa寻找一种语法高亮的解决方案,但在Stack Overflow、Google和GitHub上搜索后,我没有找到任何现代化、易于重用且仍在积极开发中的解决方案。

看起来现在大多数的语法高亮器都是为Web编写的。幸运的是,将它们嵌入到WebView中以在任何Cocoa应用程序中使用实际上非常容易。通过WebKit的WebScriptObject协议可以与编辑器进行通信。

这里有一个示例包装器,用于将流行的JavaScript文本编辑器CodeMirror用于Cocoa: https://github.com/swisspol/CodeMirrorView


1
你可以使用用Python编写的Pygments来生成源代码的HTML表示形式,然后在Web视图中呈现。
(注意,如下评论所反映-此答案是针对原始问题而言,该问题未提及可编辑文本。)

谢谢你,Matthew。不好意思,我忘记提出另一个需求了。源代码应该是可编辑的(例如放置在NSTextView中)。使用Pygments来将高亮功能整合到NSTextView中以实现此目标是否可行? - Vadim
除了生成HTML之外,我还没有使用过pygments做其他事情,但我知道它可以标记为其他格式。也许其中一个可以作为显示NSTextView的基础。 - Matthew Schinckel

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接