Этот вопрос, вероятно, заставит меня звучать довольно невежественным. Это потому, что я есть.
Я просто думаю, если бы я был гипотетически заинтересован в разработке моего собственного текстового редактора GUI-управления, виджета или того, что вы хотите назвать (что мне не нравится), как бы я это сделал?
Искушение новичком, таким как я, состояло в том, чтобы хранить содержимое текстового редактора в виде строки, что кажется довольно дорогостоящим (не то, что я слишком хорошо знаком с тем, как строковые реализации отличаются между одним языком/платформой и следующий, но я знаю, что в .NET, например, они неизменяемы, поэтому частые манипуляции, такие как то, что вам нужно будет поддерживать в текстовом редакторе, будут великолепно расточительными, построив один экземпляр строки за другим очень быстро Последовательность).
Предположительно вместо этого используется некоторая изменчивая структура данных, содержащая текст; но выяснение того, как выглядит эта структура, поражает меня как нечто сложное. Случайный доступ был бы хорошим (я бы подумал, в любом случае, разве вы не хотите, чтобы пользователь мог прыгать в любом месте в тексте?), Но потом я задаюсь вопросом о стоимости, скажем, навигации где-то в середине огромного документа и сразу начинает печатать. Опять же, подход новичков (скажем, вы сохраняете текст как изменяемый размер массива символов) приведет к очень низкой производительности, я думаю, как и каждый персонаж, набранный пользователем, было бы огромное количество данных для "сдвига", более.
Итак, если бы я должен был догадаться, я бы предположил, что текстовые редакторы используют какую-то структуру, которая разбивает текст на меньшие части (строки, может быть?), которые индивидуально содержат массивы символов со случайным доступом и которые сами по себе беспорядочно доступны в виде дискретных кусков. Даже похоже, что это должно быть довольно чудовищное упрощение, хотя, если оно даже отдаленно близко к началу.
Конечно, я также понимаю, что не может быть "стандартного" способа реализации текстовых редакторов; возможно, это сильно меняется от одного редактора к другому. Но я подумал, что, поскольку это явно проблема, которая решалась много, много раз, возможно, относительно распространенный подход всплыл на протяжении многих лет.
В любом случае, мне просто интересно узнать, есть ли у кого-нибудь знания по этой теме. Как я уже сказал, я определенно не хочу писать свой собственный текстовый редактор; Мне просто интересно.