如何实现对RTF转换执行即时标记的NSTextView

时间:2009-12-07 14:59:09

标签: objective-c cocoa nstextview

我正在尝试构建一个NSTextView,它可以采用“标记”输入,在用户输入时自动转换为漂亮的RTF样式文本。

这个想法是让用户以“纯文本”格式输入文本,但要在现场“美化”它,例如

H1 A quick list:
* first item
* second item

将被翻译成带有标题字体的第一行,然后是项目符号列表。

我已经找到了很多这样做的潜在方法,但是文本系统非常复杂(有原因)而且我不想开始“自己烹饪”,如果已经有一些合适的内置功能。顺便说一句,我会对仅使用Snow Leopard的API感到满意。

我首先想到的是“数据检测器”,但我找不到这样做的公共API。

随着时间的推移,我转向了新的“文本输入源API ”。这可以做各种各样的事情,但WWDC 2006演示文稿“掌控文本输入”的“数据驱动输入法”部分在我的上下文中似乎很有趣。除了单一的演示幻灯片之外,任何地方似乎都没有,所以这又有点死路了。

最后,我看了一下 NSSpellChecker 类,它也应该提供完成功能和自动更正......但是我不确定如何根据我的要求重新设置它

目前,我很想手动重新解析整个NSTextStorage并在用户停止输入时自行进行更改..但我确信这个论坛周围有更聪明的人......

非常感谢任何正确方向的建议或指示。

1 个答案:

答案 0 :(得分:3)

数据检测器和拼写检查器都不适合此任务。假设您只是想找到一种方法将输入传递给您已经拥有的解析器/格式化程序,那么与文本系统连接起来并不困难。您正在处理编辑NSTextStorage的正确轨道。

沿着这些方向,当用户停止时,不需要重新解析整个事物。文本系统会向您发送修改后的范围,并让您有机会对这些更改采取行动(甚至可以拒绝这些更改)。由于所有更改都通过此漏斗(输入,粘贴,删除...),因此您需要进行调解。

因为你正在处理标题和项目符号列表,所以我会得到修改范围的附件。这为您提供了一个很好的,圆形的工作单元,很容易被发现并完全适合您想要完成的任务。

祝你好运!