在高级语言中,文本编辑器的数据结构在哪里



我读到文本编辑器中大量使用数据结构。但在我看来,如果我用高级语言编写一个简单的文本编辑器,那么me就不需要使用任何数据结构。

例如,在Java中,我可以使用Swing的JTextAreagetText()方法将字符串保存到文件中。基本上,我有一个简单的文本编辑器,没有数据结构。

我猜用于编辑的数据结构是在JTextArea本身中实现的。这是正确的吗?或者数据结构是否更低;也就是说,操作系统在哪里接受来自键盘的数据进入缓冲区?那么,有人能帮助我理解数据结构是在什么抽象级别实现的吗?

文本编辑器中的关键数据结构是保存文本的结构。这篇文章很好地总结了人们为文本编辑器选择的结构类型。这篇文章很旧,但今天仍然很有意义。

对于某些类型的操作来说,非常简单的数据结构(如字符数组(往往太慢,比如在已经很长的文档开头插入一个字符,因为最终会移动或复制大量数据。大多数数据结构通过巧妙地将文档划分为块来减少或限制移动的数据量。我链接的文章有详细信息。

使用一些更高级的数据结构的另一个原因是为了更简单地实现undo和redo等功能。一些数据结构可以很容易地保留已删除的文本,这样就可以通过更改一些指针或偏移量,很容易地将文档恢复到以前的状态。

附加的数据结构可以帮助设置文本格式,但这些数据结构通常更适合文档编辑器(如Word(,而不是文本编辑器。

JTextArea(以及其他平台中的类似功能(本质上是文本编辑器,它们可能使用我链接到的文章中的一种数据结构

如果你想在这个级别上编写一个文本编辑器,而不是使用现有的编辑器,你需要实现几种类型的功能:

  1. 将文本从文件加载到数据结构中,然后再次将其保存出来
  2. 响应修改文本的按键。例如,如果用户键入字母键,则需要将该字母插入到当前位置的文本数据结构中。如果他们按下退格键,则需要移除一个角色。等等
  3. 在屏幕上显示文档。您必须不断地将窗口坐标映射到文本序列中的一个点,反之亦然。例如,如果用户单击鼠标,则需要将单击的(x,y(坐标转到文本序列中的某个位置。根据布局的复杂程度,您可能可以实时计算,但通常有一个额外的数据结构作为文本序列和窗口坐标之间的映射会有所帮助。当然,如果文本发生更改或窗口调整大小,则必须更新该数据结构

最新更新