Как обычно реализуются текстовые редакторы?

Этот вопрос, вероятно, заставит меня показаться довольно невежественным. Это потому, что я.

Я просто думаю, что если бы я был гипотетически заинтересован в разработке собственного элемента управления графическим интерфейсом пользователя текстового редактора, виджета или того, что вы хотите называть (а я не такой), как бы я вообще сделал это?

Для новичка, такого как я, соблазн будет сохранить содержимое текстового редактора в виде строки, что кажется довольно дорогостоящим (не то чтобы я слишком хорошо знаком с тем, как строковые реализации различаются между одним языком / platform и следующий; но я знаю, что, например, в .NET они неизменяемы, поэтому частые манипуляции, такие как то, что вам нужно поддерживать в текстовом редакторе, были бы чрезвычайно расточительными, создавая один экземпляр строки за другим в очень быстрая смена).

Предположительно вместо этого используется некоторая изменяемая структура данных, содержащая текст; но выяснить, как может выглядеть эта структура, кажется мне немного сложной задачей. Произвольный доступ был бы хорош (я бы подумал бы , в конце концов, разве вы не хотите, чтобы пользователь мог прыгать в любое место текста?), Но затем я задаюсь вопросом о стоимости например, переход к середине огромного документа и немедленный ввод текста. Опять же, подход для новичков (скажем, вы храните текст как массив символов с изменяемым размером) приведет к очень плохой производительности, я думаю, поскольку с каждым символом, вводимым пользователем, будет огромный объем данных для «сдвига»

Так что, если бы мне пришлось гадать, я бы Предположим, что текстовые редакторы используют некую структуру, которая разбивает текст на более мелкие части (строки, может быть?), которые по отдельности составляют символьные массивы с произвольным доступом и сами по себе доступны случайным образом как дискретные фрагменты. Даже , что , кажется, должно быть довольно чудовищным упрощением, хотя, если оно хотя бы отдаленно близко для начала.

Конечно, я также понимаю, что может не быть a «стандартный» способ реализации текстовых редакторов; возможно, это сильно различается от одного редактора к другому. Но я подумал, так как это явно проблема, которую решали много, много раз, возможно, относительно общий подход появился на протяжении многих лет.

В любом случае, мне просто интересно узнать, есть ли у кого-нибудь какие-то знания по этой теме . Как я и сказал, Я определенно не собираюсь писать собственный текстовый редактор; Мне просто любопытно.

51
задан Dan Tao 28 October 2010 в 07:55
поделиться