Data structures 在文本编辑器中使用rope

Data structures 在文本编辑器中使用rope,data-structures,logic,text-editor,ropes,Data Structures,Logic,Text Editor,Ropes,我正在阅读如何从头开始制作一个文本编辑器。我遇到了各种不同的数据结构,如间隙缓冲区、工件表和rope。我可以理解其他人在实践中是如何工作的,我也理解rope的好处以及它在后勤方面是如何工作的。然而,我不明白一个编辑实际上是如何使用rope的。让我解释一下 假设我有一个新文件并输入“Hello world!”。我会想象编辑每次按键都会处理每个角色。然而,从程序逻辑的角度来看,我看不出处理每个新字符的明显方式。据我所知,rope非常有用,因为树结构允许相对低成本的搜索、插入、附加和删除。但是,如果我

我正在阅读如何从头开始制作一个文本编辑器。我遇到了各种不同的数据结构,如间隙缓冲区、工件表和rope。我可以理解其他人在实践中是如何工作的,我也理解rope的好处以及它在后勤方面是如何工作的。然而,我不明白一个编辑实际上是如何使用rope的。让我解释一下

假设我有一个新文件并输入“Hello world!”。我会想象编辑每次按键都会处理每个角色。然而,从程序逻辑的角度来看,我看不出处理每个新字符的明显方式。据我所知,rope非常有用,因为树结构允许相对低成本的搜索、插入、附加和删除。但是,如果我一个字符接一个字符地处理输入,我是否需要:

  • 每个节点都可以是单个字符
  • 让每个节点容纳X个字符
  • 每个节点都是一个完整的单词,节点以空格分隔
  • 每X时间内键入的每个字符都会到达一个节点
  • 一些我还没有想到的事情
  • 第一个选项虽然很容易实现,但似乎没有多大意义,我不相信它能最好地利用绳索结构。第二个选项似乎只使用了一半的rope,它将rope附加到节点内的字符串,直到它达到X长度。第三个选项与第二个选项存在相同的问题,但至少不会在某个设定长度处打断字符串。选项4将给出与我在大多数rope示例图中看到的结果类似的结果,但在实现级别上似乎是一场噩梦


    TL;DR:在文本编辑器中使用ropes时,理想情况下,在按下一个键和该字符出现在树中之间会发生什么?在这里,无论是伪代码还是高级解释都足够了。

    在查看了rope的现有实现之后,选项2似乎是如何在文本编辑器中实际使用的。

    正如我看到的rope的实现一样,它遵循选项2。 您可以检查以下实现。(它不是精确的文本编辑器实现)

    我建议检查下面的链接,并检查文本编辑器的工件表数据结构。

    这是习近平的绳索,它使用一个向量在叶子中存储511-1024(ish)字节。