@aldexnotproger

Как ориентироваться в Gap buffer?

Привет.
Хочу написать консольный текстовый редактор на ncurses и Си.
В качестве структуры данных для хранения текста хочу использовать Gap buffer, при этом возникает вопрос: как в нем ориентироваться. Я имею ввиду, при передвижении курсора по экрану я должен вычислять строку и колонну, также курсор не должен выходить за пределы строки. Мне не понятно как это сделать, может лучше поискать другую структуру данных?
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
Сделать с gap-буфером можно, информацию о позиции курсора храните отдельно при изменении позиции курсора меняете позицию gap, в общем-то оно на это и рассчитано.
Я не знаю, как принято реализовывать в реальных текстовых редакторах, я бы сделал структуру похожую на btree без ключа
https://ru.wikipedia.org/wiki/B-%D0%B4%D0%B5%D1%80...
в каждом узле хранить либо указатель на фрагмент текста + его длину либо признак конца абзаца/спецсимвола либо ссылку на другой узел. Каждый фрагмент и строку хранить отдельным узлом.
Фактически это возможность иметь неограниченное количество гапов в произвольных местах без необходимости их двигать. Как бонус, такая структура легко позволяет делать навигацию, undo/redo, т.к. каждая запись хранится отдельным узлом copy, paste и все остальное что обычно требуется. Поддержать форматированный текст так же очень легко, достаточно добавить признаки форматирования как еще один тип узла.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы