5

我需要一个跨平台的编辑器控件来用作内部工具中的 GUI 部分。控制可能是商业性的,但价格合理。

所需功能:

  • 平台:Win32、OS X、Linux
  • UTF-8 支持
  • 对文本样式(或至少颜色)的细粒度运行时控制
  • 不错的低级纯 C API,没有通常可怕的膨胀
  • 不应该阻止我拥有这些功能(即使我必须自己实现它们):
    • 撤销重做
    • 复制粘贴
    • 上下文菜单,取决于文本中的点击位置
    • 工具栏,取决于文本中的光标位置
    • 侧边栏面板,取决于文本中的光标位置

实际上上面需要的不是简单的控制,而是整个跨平台的GUI库。

丢弃的选项:

  • 闪烁和后代
  • FLTK
  • 狐狸工具包
  • gtksourceview

更新:

注意:我在这里写了一些半写的丢弃推理,我很抱歉。Scintilla 确实可以在 OS X 上运行。但是,如果我理解正确,则 Scintilla 的 API 是 C++ 语言。

用例:

我的用例是编写自定义的“半刚性”逻辑编辑器,用户可以自由地复制粘贴,在他希望的地方添加评论,甚至如果他愿意,甚至可以直接输入文本。但是文本结构是逻辑树的一种严格的自然语言表示(本质上有点像 AST)。我计划编写一些类似智能感知(或类似代码模板)的东西作为主要创作工具(而不是手动输入逻辑)。

顺便说一句,存储格式不是纯文本,而是提到的逻辑树的内部表示(带有注释和空格等元信息)。

所以,我有所有必要的信息来自己渲染所需颜色的文本。我不需要任何外部词法分析器等。

4

4 回答 4

3

正如 John 所写,众所周知,Scintilla 可以在 OS X 上运行。
现在,它不是富文本组件,如果您正在寻找它的话。它是一个源代码编辑器:您不能将任意颜色应用于任意文本段,它使用词法分析器来设置内容样式。

你没有告诉我们你的用例是什么。

[编辑] 感谢您添加用例。

免责声明 1:我不会尝试“出售” Scintilla,我只是尝试向您提供有关我熟悉的组件的信息,希望对您有所帮助... :-D
请注意,相关站点页面列出了许多替代编辑可能有趣的组件(或不有趣,其中很多仅适用于 Win32)。
免责声明 2:我没有在 Win32 平台之外使用 Scintilla 的经验。

但是查看源代码树,我看到了一个 scintilla/macosx 文件夹。除此之外,它还有一个带有 main.cpp 文件的 SciTest 子文件夹。尽管它有扩展,但对我来说,它看起来很像纯 C。因此,它可以作为如何在 C 中使用 Scintilla 的示例。

请注意,在设计上,Scintilla API 非常有限:它最初被用作大多数传统的 Win32 组件,通过向其发送消息。Scintilla 文档页面仅列出了这些消息及其参数。main.cpp 示例使用 MacOS X 样式的组件创建窗口,并使用以下行发送命令scintilla->WndProc(SCI_STYLESETFORE, 0, 0x808080);

我不会声称它可以满足您的所有需求,甚至不会在 MacOS X 上完美运行,您必须进行试验(或询问改编的作者)才能确定。
此外,Scintilla 不会提供工具栏或侧边栏面板(这更多地属于应用程序本身)。但我认为它可以提供足够的通知来帮助您将这些侧面组件保持在上下文中。
您还需要为您的语法编写一个特定的词法分析器(此处为 C++)。如果你看看其他词法分析器是如何工作的,这并不难。也许你会找到一个足够接近的语言作为起点。
将文档的某些部分设置为只读的功能也许也很有趣,尽管我相信这还没有经过彻底的测试。

HTH。

于 2008-10-13T14:14:09.133 回答
2

闪烁和后代(无 OS X)

但是,scintilla 确实可以在 OS X 上运行。


您可以尝试使用 GTK+GtkTextView或 Qt 的QTextEdit.

于 2008-10-13T06:34:16.017 回答
2

FLTK 的 TextEditor 小部件就是您所需要的。它简单、直接且易于使用,具有 utf8,您可以轻松拥有文本样式。只需几行,您就可以拥有一个编辑器。检查 /test/editor.cxx 示例。它也可以在 OSX 上完美运行。此外,您需要的所有内容都在此处进行了说明:http: //www.fltk.org/doc-1.1/editor.html

于 2008-11-11T01:04:44.973 回答
1

好吧,您也许可以使用tk——文本小部件据说很好且灵活——看看tcl/tk wiki

或者你可以选择一些嵌入式/游戏工具包(如Agar)——但我想,有一个具有编辑功能的文本小部件会更麻烦。

但是说你想做一个跨平台的 C GUI 然后注销 GTK 对我来说似乎浪费了很多时间和精力。您可能最终会切换语言或使用 GTK。

于 2008-10-13T20:34:24.090 回答