当前位置:  开发笔记 > 编程语言 > 正文

编辑文本缓冲区

如何解决《编辑文本缓冲区》经验,为你挑选了5个好方法。

好的,这是一个有点厚颜无耻的问题.我想构建一个简单的文本编辑器(使用我自己的文本模式屏幕处​​理).我只想要一个可用于表示文本缓冲区的数据结构的好例子,以及一些简单的char/text插入/删除示例.我自己可以处理所有其余代码(文件i/o,控制台i/o等).一个很好的简单编辑器源的链接将很棒(C或C++).



1> Tim Farley..:

我曾经为一家主要产品是文本编辑器的公司工作.虽然我主要使用脚本语言,但编辑器本身的内部设计自然是讨论的主要话题.

它似乎分解为两个普遍的思路.一个是您自己存储每一行​​,然后将它们链接在链接列表或您满意的其他整体数据结构中.优点是任何面向行的编辑操作(例如删除整行,或移动文件中的行块)实现起来都是微不足道的,因此快速闪电.缺点是加载和保存文件需要更多的工作,因为你必须遍历整个文件并构建这些数据结构.

当时的另一个思路是尝试将文字保持在一起而不管换行时的断线,只有在编辑时才需要将它们分开.优点是文件的未编辑大块可以很容易地被发送到文件.如此简单的编辑加载文件,更改一行并保存文件,速度非常快.缺点是面向行或列块操作的执行非常耗时,因为您必须解析这些文本并移动大量数据.

我们始终坚持以线路为导向的设计,无论价值多少,我们的产品被认为是当时最快的编辑之一.



2> hazzen..:

"四人帮"一书(设计模式)有一个基于GUI的文本编辑器,因为它是示例的主要来源,是一本值得拥有的书.

一般的"纯文本"编辑器可能使用绳索,这是SGI的STL 实现的.基本上,它们是字符缓冲区的链接列表.这样,插入/删除字符涉及更改较小的缓冲区和一些指针,而不是将整个文档存储在单个缓冲区中并且必须移动所有内容.



3> Ben Straub..:

这是2008年.不要写文本编辑器; 你正在重新开火.

还在?我不确定这是否适用或您计划支持哪些平台,但Neatpad系列教程是开始考虑编写文本编辑器的好地方.他们专注于Win32作为基础平台,但许多经验教训将适用于任何地方.


即使在2008年,即使在2008年,大多数文本编辑都吮吸+1 :(
TextMate编辑的程序员通过不听你的方式赚了很多钱.

4> Qwertie..:

我最喜欢的解决方案是间隙缓冲区,因为它非常容易实现并具有良好的摊销效率.只需使用单个字符数组,将区域指定为间隙.一旦理解了这个概念,代码就会自然地遵循.

您还需要辅助数组[vector ]来跟踪每行开头的索引 - 以便您可以轻松提取特定的文本行.只有在间隙移动或插入/移除换行符时才需要更新辅助阵列.



5> 小智..:

这两个在线文档为文本编辑器提供了一个小的,但有用的"知名"数据结构/技术的聚宝盆.

    文本序列的数据结构描述并实验分析了一些数据结构,倾向于将片表作为所选择的数据结构.然而,Net.wisdom似乎倾向于差距缓冲区,因为它足以进行文本编辑,并且更容易实现/调试.

    "文本编辑工艺"(www.finseth.com/craft/)是一项较旧的工作,不仅仅涉及数据结构,还面向Emacs风格的编辑器; 但这些概念通常很有用.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有