我想制作自己的源代码编辑器,有哪些好的选择?

时间:2010-10-31 19:47:03

标签: c++ qt notepad++ scintilla qtextedit

我已经拥有了那些从未提供过简单内容的数十位编辑:

  • 区分类型关键字和指令关键字,以便我可以在其上添加不同的颜色。
  • 使用像qt gtk等标准GUI库的跨平台(记事本++,是的,我几乎讨厌你)。
  • 足够的键盘快捷键,如重复行,注释选择和体面的查找替换。
  • 体面的任务缓和功能,例如单击数字线边距以选择整条线。
  • Scintilla或其他足够强大的词法分析器可以突出显示不同的东西,因为大脑编译代码是一回事,很快就会发现眼睛看到的重要内容是什么。

我只想支持非常基本的语言,如C,C ++,也许是Python,而不是HTML或CSS。

Scintilla是一个很好的选择,只是突出这些语言,并且是一个真正需要的词法分析器吗?

QT不足以编写一个文本编辑器,比如我想做的那个吗?我知道有QScintilla,但是有一个原因我不应该使用集成词法分析器的lib吗?为什么Scintilla这么好的lib?

QT对于这样的编辑器来说是个不错的选择吗? (我还想在编辑器中强制嵌入ProFont以消除操作系统之间任何不情愿的字体问题。)

编辑: 简而言之,我想制作一个编辑器,只有与notepad ++相同的语法高亮功能。这是我的主要目标,使用QScintilla可能比我想象的要困难一些......

EDIT2: 好吧,我发现textadept,它不是那么知名,但非常棒。我没有设法制作我的词法分析器,因为我在Windows下做了其他的事情,不幸的是它在mac上很慢。显然,mac没有任何Scite官方版本。

8 个答案:

答案 0 :(得分:6)

在任何想象中,C ++都不是一种“非常基本的语言”。

为什么你真的想这样做?那里有许多开源代码编辑器。

答案 1 :(得分:4)

如果您必须编写自己的编辑器,我建议您查看其他开源编辑器,并检查您将哪些部分移植到编辑器中。

移植现有的工作和测试代码通常比编写自己的代码并对其进行调试要好得多。

在仔细阅读了几位认真的开源编辑:Emacs,Eclips,CodeBlocks,CodeLight等之后,我相信你会开始改变主意从头开始编写一个编辑器。

- 托马斯马修斯 My Info

答案 2 :(得分:1)

如果你真的想这样做(听起来好像很多)我会看一下ANTLR解析代码。您可以从他们的ANTLRWorks显示中获得一些想法。 将解析树链接到显示器可能是相当多的工作,所以我会看到像Eclipse这样的IDE平台必须提供什么

答案 3 :(得分:1)

你对Java好吗?

如果是这样,请选择Eclipse技术: SWTJFace 。后者为您提供了具有许多功能的 org.eclipse.jface.text 包。然后你可以根据它轻松地滚动自己的编辑器。 (我更喜欢基于Eclipse的编辑器,基于Scintilla,我相信它们往往更先进,功能更丰富,但这是我个人的观点。)

但是,您可能希望更进一步,为您的应用程序使用Eclipse RCP framework ...但是为什么不使用Eclipse IDE本身,只需添加您想要的任何插件。

Eclipse代码库非常庞大,取决于您希望重用的代码。

答案 4 :(得分:1)

我已经尝试为我正在进行的项目做类似的事情,我查看了QScintilla并且不得不将其从我的项目中移除,因为当你嵌入{{1}时我无法控制小部件图像的分辨率,它似乎将文本描绘成一个图像,这就是我们所看到的,我玩的是增加了QGraphicsView的平滑度并改善了它但仍然没有 - 去。

所以我在QT的代码库中找到了一个简单的代码编辑器,如果你看的话,每次安装QT都会附带它 成:

QFont

如果你转到我想要嵌入代码编辑器的C:\Qt\4.7.3\src\scripttools\debugging\qscriptedit.h C:\Qt\4.7.3\src\scripttools\debugging\qscriptedit.cpp 的源代码:检查我是如何获得语法荧光笔和自动完成的:

此小部件使用随qt一起提供的qscriptedit小部件,您可以将自己的关键字添加到文件的语法高亮显示器以及自动完成下拉列表中。

这是标题scriptwidget.h,实施scriptwidget.cpp可作为整个project code的一部分。

下一个阶段是调查QTCreator并查看他们已经拥有的代码(如果不是大多数这些功能)在您编译他们的版本之后,只需找到添加小mod的位置,您可能会越来越接近简单的代码编辑器。

祝你在这个方向上好运,如果找到解决方案请发送,:) 单挑局要注意上面的存储库链接,如果我找到了第一种方法,我可能会追你回答。

答案 5 :(得分:0)

就像其他人所说的那样,它可能比它的价值更麻烦,但如果你真的想这样做,Qt是一个很好的选择,因为它是跨平台的。使用QSyntaxHighlighter进行关键字/类型突出显示,并充分利用Qt对键盘快捷键的支持。

答案 6 :(得分:0)

我会花一些力气试验emacs颜色主题包和各种语言模式;看看你是否可以弯曲口齿以做你想做的事。你几乎可以肯定。在我看来,emacs和你的一些努力会让你成为你的终极编辑器(记住emacs真的只是一个DIY编辑器工具包)。如果你不能将emacs弯曲成你想要的形状,那么你就可以花费很多精力来编写自己的形状。

答案 7 :(得分:0)

使用C,QT和Lua之类的东西作为脚本引擎。