Эта статья предоставляет недостаточный контекст для тех, кто не знаком с предметом . Май 2012 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) ( |
Часть стола является структура данных , как правило , используется для представления ряда редактирует на текстовом документе . Создается начальная ссылка (или «диапазон») на весь исходный файл, а последующие вставки и удаления создаются как комбинации одной, двух или трех ссылок на разделы исходного документа или диапазонов, связанных с более ранними. вставки. [1]
Обычно текст исходного документа хранится в одном неизменяемом блоке, а текст каждой последующей вставки сохраняется в новых неизменяемых блоках. Поскольку даже удаленный текст по-прежнему включается в таблицу элементов, это упрощает выполнение многоуровневой или неограниченной отмены с таблицей элементов, чем с альтернативными структурами данных, такими как буфер промежутков .
Эта структура данных была изобретена Дж. Стротером Муром . [2]
Описание [ править ]
В этом описании мы используем буфер как неизменяемый блок для хранения содержимого.
Таблица штук состоит из трех столбцов: [1]
- Какой буфер
- Начальный индекс в буфере
- Длина в буфере
Помимо таблицы, для обработки правок используются два буфера:
- « Исходный буфер »: буфер исходного текстового документа. Этот буфер доступен только для чтения.
- « Добавить буфер »: буфер во временный файл. Этот буфер предназначен только для добавления.
Операции [ править ]
Индекс [ править ]
Определение:
Index(i)
вернуть символ в позиции i
Чтобы получить i-й символ, считывается соответствующая запись в таблице штук.
Пример [ править ]
Учитывая следующие буферы и таблицу штук:
Буфер | Содержание |
---|---|
Исходный файл | ipsum sit amet |
Добавить файл | Lorem deletedtext dolor |
Который | Начальный индекс | Длина |
---|---|---|
Добавлять | 0 | 6 |
Оригинал | 0 | 6 |
Добавлять | 18 | 5 |
Оригинал | 6 | 9 |
Чтобы получить доступ к i- му символу, ищется соответствующая запись в таблице штук.
Например, чтобы получить значение Index(15)
, извлекается 3-я запись таблицы частей. Это связано с тем, что третья запись описывает символы от 12 до 16 (первая запись описывает символы от 0 до 5, следующая - от 6 до 11). Запись в таблице элементов инструктирует программу искать символы в буфере « добавить файл », начиная с индекса 18 в этом буфере. Относительный индекс в этой записи 15-12 = 3, который добавляется к начальной позиции записи в буфере, чтобы получить индекс буквы: 3 + 18 = 21. Значение Index(15)
- 21-й символ "добавить". файл "буфер", который представляет собой символ "о".
Для буферов и таблицы деталей, приведенных выше, показан следующий текст:
Lorem ipsum dolor sit amet
Вставить [ изменить ]
Вставка символов в текст состоит из:
- Добавление символов в буфер «добавить файл» и
- Обновление записи в таблице штук (разбиение записи на две или три)
Удалить [ редактировать ]
Удаление включает только изменение соответствующей записи в таблице штук.
Использование [ править ]
Некоторые текстовые редакторы используют внутреннюю таблицу фрагментов в ОЗУ, включая Bravo , [1] Abiword , [3] [4] [5] Atom [6] и Visual Studio Code . [7]
Функция «быстрого сохранения» в некоторых версиях Microsoft Word использует таблицу элементов для формата файла на диске. [2]
Для представления текстовых файлов на диске в системе Oberon используется метод цепочки блоков, который позволяет частям одного документа указывать на текст, хранящийся в другом документе, аналогично включению .[8]
См. Также [ править ]
- Веревка (информатика)
- Промежуточный буфер , структура данных, обычно используемая в текстовых редакторах, которая позволяет выполнять эффективные операции вставки и удаления, сгруппированные в одном месте.
Ссылки [ править ]
- ^ a b c Кроули, Чарльз (1998-06-10). «Структуры данных для текстовых последовательностей - 6.4 Метод таблицы элементов» (PDF) . Архивировано из оригинального (PDF) 23 февраля 2018 года. Цитировать журнал требует
|journal=
( помощь ) - ^ а б Дэвид Лу. "Что было сделано с использованием Таблицы предметов?" . ( обсуждение )
- ^ «Разработка AbiWord: Фон таблицы элементов» .
- ^ Джеймс Браун. «Цепочки частей: разработка и реализация текстового редактора Win32» .
- ^ Хоакин Куэнка Абела. «Улучшение таблицы пьес AbiWord» .
- ^ "Новая реализация буфера Atom с поддержкой параллелизма"
- ^ "Примечания к выпуску VS Code 1.21 ( исходный код )
- ^ Никлаус Вирт, Юрг Гуткнехт. «Проект Оберон: Дизайн операционной системы и компилятора». Архивировано 12 апреля 2013 г. на Wayback Machine . 2005. с. 90.