Использование веревки в текстовых редакторах

Я читал о том, как мне создать текстовый редактор с нуля. Я сталкивался с различными структурами данных, такими как буферы гэпа, таблицы частей и веревки. Я могу понять, как другие будут работать на практике, и я понимаю преимущества веревки и как она работает логистически. Тем не менее, я не понимаю, как редактор будет использовать веревку. Позволь мне объяснить.

Допустим, у меня есть новый файл и введите "Hello world!". Я представляю, что каждое нажатие клавиши редактором будет связано с каждым персонажем. Однако со стороны логики программы я не вижу очевидного способа обработки каждого нового символа. Из того, что я понимаю, веревка полезна из-за того, что древовидная структура обеспечивает относительно недорогой поиск, вставку, добавление и удаление. Однако, если я обрабатываю ввод за символом, я должен иметь:

  1. Каждый узел будет одним символом
  2. Пусть каждый узел содержит X символов
  3. Каждый узел представляет собой полное слово, а узлы разбиваются на пробелы
  4. Каждый символ, набираемый каждые X, проходит через узел
  5. Что-то, о чем я еще не думал

Первый вариант, хотя и достаточно простой для реализации, кажется, не имеет особого смысла, и я не верю, что он наилучшим образом использует структуру каната. Второй вариант, кажется, только наполовину использует веревки, добавляя строку внутри узла, пока она не достигнет длины X. Третий вариант имеет ту же проблему, что и второй, но, по крайней мере, не разрывает строку на некоторой заданной длине. Вариант 4 даст результаты, подобные тем, что я вижу в большинстве примеров графиков для веревок, но на уровне реализации кажется кошмаром.

TL; DR: при использовании веревок в текстовом редакторе, что в идеале должно происходить между нажатием клавиши и тем символом, который появляется в дереве? Здесь будет достаточно либо псевдокода, либо просто объяснения высокого уровня.

2 ответа

Решение

Как я видел реализацию ROPE, она следует варианту 2. Вы можете проверить ниже реализацию. (Это не точная реализация текстового редактора) https://www.geeksforgeeks.org/ropes-data-structure-fast-string-concatenation/

Я бы рекомендовал проверить ссылку ниже и проверить структуру данных таблицы элементов для текстового редактора. http://www.averylaird.com/programming/the%20text%20editor/2017/09/30/the-piece-table/

После просмотра существующих реализаций веревки кажется, что вариант 2 - это то, как он используется на практике с текстовыми редакторами.

Другие вопросы по тегам