Spec-Zone.ru › Elisp

Почему свойства текста не являются интервалами

Некоторые редакторы, поддерживающие добавление атрибутов к тексту в буфере, позволяют пользователю указывать интервалы внутри текста и добавлять свойства к этим интервалам. Эти редакторы позволяют пользователю или программисту определять начало и конец отдельных интервалов. Мы намеренно предоставили другой интерфейс в Emacs Lisp, чтобы избежать определённого парадоксального поведения, связанного с модификацией текста.

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

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

Предположим, мы попытаемся решить эту проблему, объединяя два интервала при вставке текста. Это работает нормально, если буфер изначально представлял собой один интервал. Но предположим, что у нас есть два смежных интервала с одинаковыми свойствами, и мы удаляем текст одного интервала и вставляем его обратно. Та же функция объединения интервалов, которая спасает в другом случае, вызывает проблемы в этом: после вставки у нас остаётся всего один интервал. Ещё раз, редактирование не сохраняет различие между одним интервалом и двумя.

Вставка текста на границе между интервалами также поднимает вопросы, на которые нет удовлетворительного ответа.

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

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

Emacs также предоставляет явные интервалы как функцию представления; см. Наложения.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Not-Intervals.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API