我需要一个跨平台的编辑器控件来用作内部工具中的GUI部分。这种控制可能是商业性的,但价格合理。
所需功能:
- 平台:Win32、OS X、Linux
- UTF-8支持
- 文本样式(或至少颜色)的细粒度运行时控件
- 不错的低级别普通C API,没有常见的可怕膨胀
- 不应该阻止我拥有这些功能(即使我必须自己实现它们):
- 撤消/恢复
- 复制/粘贴
- 上下文菜单,取决于文本中的单击位置
- 工具栏,取决于文本中的光标位置
- 边栏面板,取决于文本中的光标位置
其实上面需要的不是简单的控制,而是整个跨平台的GUI库。
放弃的选项:
- 闪烁体及其后代
- FLTK
- Fox工具包
- gtksource视图
更新:
注意:我在这里漏写了一些半写半弃的推理,我很抱歉。Scintilla确实在OS X上工作。但是,如果我理解正确的话,Scintilla的API是用C++编写的。
用例:
我的用例是编写自定义的"半刚性"逻辑编辑器,用户可以自由地复制粘贴,在他希望的地方添加注释,甚至如果他希望的话直接键入文本。但文本结构是逻辑树的刚性自然语言表示(在本质上有点像AST)。我计划写一些类似intellisense的东西(或类似代码模板的东西),用作主要的创作工具(而不是手动键入逻辑)。
顺便说一句,存储格式不会是纯文本,而是上述逻辑树的内部表示(带有注释和空格等元信息)。
所以,我有所有必要的信息,以渲染文本所需的颜色自己。我不需要任何外部lexer等。
正如John所写,Scintilla可以在OS X上运行。
现在,它不是一个富文本组件,如果这是你想要的。它是一个源代码编辑器:不能将任意颜色应用于任意的文本段,它使用lexer来设置内容的样式。
你没有告诉我们你的用例是什么。
[EDIT]感谢您添加用例。
免责声明1:我不想"出售"闪烁体,我只是想向您提供我熟悉的组件的信息,希望这能帮助您…:-D
请注意,"相关站点"页面列出了许多可能感兴趣的替代编辑组件(或者不感兴趣,其中许多仅适用于Win32)
免责声明2:我没有在Win32平台之外使用Scintilla的经验。
但在源树上,我看到了一个闪烁/macosx文件夹。除其他外,它还有一个SciTest子文件夹,其中包含一个main.cpp文件。尽管它是扩展的,但对我来说,它看起来很像纯C。因此,它可以成为如何在C.中使用闪烁体的一个例子
请注意,在设计上,Scintilla API非常有限:它最初是通过向其发送消息来用作大多数传统的Win32组件的。Scintilla文档页面仅列出这些消息及其参数。main.cpp示例使用MacOSX样式的组件创建窗口,并使用scintilla->WndProc(SCI_STYLESETFORE, 0, 0x808080);
等行发送命令
我不会说它能满足你的所有需求,甚至不会说它在MacOSX上完美工作,你必须进行实验(或询问改编版的作者)才能确定
此外,Scintilla不会提供工具栏或侧边栏面板(这更属于应用程序本身)。但我认为它可以提供足够的通知来帮助您保持这些次要组件的上下文
您还需要为您的语法编写一个特定的lexer(此处为C++)。如果你看看其他lexer的工作原理,这并不难。也许你会发现一种语言足够接近,可以作为起点
也许感兴趣的还有一个功能,将文档的某些部分设置为只读,尽管我相信这还没有经过彻底的测试。
HTH。
闪烁体及其后代(无操作系统X)
但是,闪烁确实在OS X上工作。
你可以试试GTK+和GtkTextView
,或者Qt的QTextEdit
。
FLTK的TextEditor小部件就是您所需要的全部。它简单、直接、易于使用,具有utf8,您可以轻松地拥有文本样式。只需几行就可以拥有一个编辑器。检查/test/editor.cxx示例。它在OSX上也能完美工作。此外,您所需要的一切都在这里解释:http://www.fltk.org/doc-1.1/editor.html。
好吧,您也许可以使用tk——文本小部件应该很好而且很灵活——看看tcl/tk-wiki。
或者你可以选择一些嵌入式/游戏工具包(比如Agar),但我想,有编辑功能的文本小部件会更麻烦。
但对我来说,说你想做一个跨平台的C GUI,然后取消GTK似乎是浪费了很多时间和精力。你最终可能会切换语言或使用GTK。