C 跨平台编辑器控件

C 跨平台编辑器控件,c,user-interface,editor,cross-platform,C,User Interface,Editor,Cross Platform,我需要一个跨平台的编辑器控件,作为内部工具中的GUI部分使用。控制可能是商业性的,但价格合理 所需功能: 平台:Win32、OS X、Linux UTF-8支持 文本样式(或至少颜色)的细粒度运行时控件 漂亮的低级普通C API,没有通常可怕的膨胀 不应阻止我拥有这些功能(即使我必须自己实现它们): 撤消/重做 复制/粘贴 上下文菜单,取决于文本中的单击位置 工具栏,取决于光标在文本中的位置 侧栏面板,取决于光标在文本中的位置 事实上,以上要求的不是简单的控制,而是整个跨平台GUI库 放

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

所需功能:

  • 平台:Win32、OS X、Linux
  • UTF-8支持
  • 文本样式(或至少颜色)的细粒度运行时控件
  • 漂亮的低级普通C API,没有通常可怕的膨胀
  • 不应阻止我拥有这些功能(即使我必须自己实现它们):
    • 撤消/重做
    • 复制/粘贴
    • 上下文菜单,取决于文本中的单击位置
    • 工具栏,取决于光标在文本中的位置
    • 侧栏面板,取决于光标在文本中的位置
事实上,以上要求的不是简单的控制,而是整个跨平台GUI库

放弃的选项:

  • 闪烁体及其后代
  • FLTK
  • 福克斯工具包
  • gtksourceview
更新:

注意:我在这里插入了一些半书面的理由,我道歉。闪烁确实对OSX起作用。但是,如果我得到正确的结果,ScCurtLa的API是C++的。p> 用例:

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

顺便说一句,存储格式不是纯文本,而是上述逻辑树的内部表示形式(带有注释和空格等metainfo)

因此,我拥有所有必要的信息,可以自己以所需的颜色渲染文本。我不需要任何外部lexers等

闪烁体及其后代(无OS X)

但是,斯金特拉确实在OSX上工作



您可以尝试使用GTK+或Qt。

正如John所写,斯金特拉已知在OS X上运行。
现在,它不是一个富文本组件,如果这是您正在寻找的。它是一个源代码编辑器:您不能将任意颜色应用于任意文本段,它使用lexer来设置内容的样式

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

[编辑]感谢您添加用例

免责声明1:我不想“销售”斯金特拉,我只是想向您提供我熟悉的组件的信息,希望能帮助您……:-D
请注意,该页面列出了许多有趣的替代编辑组件(或者不有趣,其中许多仅适用于Win32)。
免责声明2:我没有在Win32平台之外使用闪烁体的经验

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

请注意,从设计上看,斯金特拉API非常有限:它最初是通过向其发送消息而被用作大多数传统的Win32组件的。该页面仅列出这些消息及其参数。main.cpp示例使用MacOS X样式的组件创建窗口,并发送命令行,如
scatinlla->WndProc(SCI_STYLESETFORE,0,0x8080)

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

嗯。

嗯, 您也许可以使用文本小部件——据说它很好而且灵活——来看看

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


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

FLTK的TextEditor小部件就是您所需要的。它简单、直接且易于使用,具有utf8,您可以轻松地拥有文本样式。只需几行就可以拥有一个编辑器。检查/test/editor.cxx示例。它在OSX上也能完美工作。此外,这里还解释了您所需要的一切:。

非常抱歉。OSX的注释刚刚滑入(以及FLTK的半书面原因)。GtkTextView:要在OS X上获得GTK+,您必须安装大量带有端口的软件包,我说得对吗?(至少我是这样做的。)对我来说太重了。2.QTextEdit:是C++ 1。不,在2使用框架安装程序:没有很多跨平台编辑器,你会很愚蠢地丢弃一个C++编写的。我增加了用例。关于Scintilla和Listel:对不起,我描述了我的情况很差。我不需要莱克瑟。我的数据结构非常严格(尽管对用户来说是自然语言文本),我从中了解所有需要的文本样式。编写lexer将是不必要的复杂。lexer:它们在闪烁体中是可选的,它们只是进行语法着色的标准方法。但是你可以完全不着色,或者使用另一种着色方式(客户端程序可以发送消息将任意样式应用于任何文本段)。我不知道你是否收到重要更新的通知,所以我写此评论是为了告诉你