2

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

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

H1 A quick list:
* first item
* second item

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

我已经找到了很多潜在的方法来做到这一点,但是文本系统非常复杂(有理由),如果已经有合适的内置内容,我不想开始“自己做饭”。顺便说一句,我会对 Snow Leopard 唯一的 API 感到满意。

我首先想到的是“数据检测器”,但我找不到用于执行此操作的公共 API。

走到了尽头,我转向了新的“文本输入源 API ”。这可以做各种各样的事情,但是 WWDC 2006 演示文稿“负责文本输入”的“数据驱动输入法”部分在我的上下文中似乎很有趣。然而,除了那张单一的演示幻灯片之外,任何地方似乎都不存在任何东西,所以这又是一条死胡同。

最后,我查看了NSSpellChecker类,该类也应该提供完成功能和自动更正。但我也不确定如何将其重新用于我的要求。

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

任何正确方向的建议或指示将不胜感激。

4

1 回答 1

4

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

按照这些思路,当用户停止时,无需重新解析整个内容。文本系统将修改后的范围发送给您,并让您有机会对这些更改采取行动(甚至立即拒绝它们)。由于所有更改都通过此(键入、粘贴、删除...)进行,因此这就是您要调解的地方。

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

祝你好运!

于 2009-12-07T16:26:12.430 回答