42.21.1 Функции абстрактного отображения

В этом подразделе ewoc и node обозначают структуры, описанные выше (см. Абстрактное отображение), а data обозначает произвольный объект Lisp, используемый как элемент данных.

Функция: ewoc-create pretty-printer &optional header footer nosep

Эта функция создаёт и возвращает новый ewoc без узлов (и, следовательно, без элементов данных). pretty-printer должна быть функцией, которая принимает один аргумент — элемент данных того типа, который вы планируете использовать в этом ewoc, — и вставляет его текстовое описание в точке с помощью insert (и никогда insert-before-markers, поскольку это помешало бы внутренним механизмам пакета Ewoc).

Обычно после заголовка, нижнего колонтитула и текстового описания каждого узла автоматически вставляется новая строка. Если nosep не равен nil, новая строка не вставляется. Это может быть полезно, например, для отображения всего ewoc в одной строке или для того, чтобы сделать узлы невидимыми, организовав так, чтобы pretty-printer ничего не делала для этих узлов.

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

Функция: ewoc-buffer ewoc

Эта функция возвращает буфер, в котором ewoc поддерживает свой текст.

Функция: ewoc-get-hf ewoc

Эта функция возвращает ячейку cons (header . footer), составленную из заголовка и нижнего колонтитула ewoc.

Функция: ewoc-set-hf ewoc header footer

Эта функция устанавливает заголовок и нижний колонтитул ewoc в строки header и footer соответственно.

Функция: ewoc-enter-first ewoc data
Функция: ewoc-enter-last ewoc data

Эти функции добавляют новый узел, инкапсулирующий data, помещая его соответственно в начало или в конец цепочки узлов ewoc.

Функция: ewoc-enter-before ewoc node data
Функция: ewoc-enter-after ewoc node data

Эти функции добавляют новый узел, инкапсулирующий data, в ewoc соответственно перед или после node.

Функция: ewoc-prev ewoc node
Функция: ewoc-next ewoc node

Эти функции возвращают соответственно предыдущий и следующий узел относительно node в ewoc.

Функция: ewoc-nth ewoc n

Эта функция возвращает узел в ewoc, находящийся по индексу n, начиная с нуля. Отрицательное n означает отсчёт с конца. ewoc-nth возвращает nil, если n вне допустимого диапазона.

Функция: ewoc-data node

Эта функция извлекает данные, инкапсулированные в node, и возвращает их.

Функция: ewoc-set-data node data

Эта функция устанавливает данные, инкапсулированные в node, в значение data.

Функция: ewoc-locate ewoc &optional pos guess

Эта функция определяет узел в ewoc, который содержит точку (или pos, если он указан), и возвращает этот узел. Если в ewoc нет узлов, она возвращает nil. Если pos находится перед первым узлом, она возвращает первый узел; если pos находится после последнего узла, она возвращает последний узел. Необязательный третий аргумент guess должен быть узлом, который, вероятно, находится рядом с pos; это не изменяет результат, но ускоряет выполнение функции.

Функция: ewoc-location node

Эта функция возвращает начальную позицию node.

Функция: ewoc-goto-prev ewoc arg
Функция: ewoc-goto-next ewoc arg

Эти функции перемещают точку соответственно на arg-й узел назад или вперёд в ewoc. ewoc-goto-prev не перемещает точку, если она уже находится на первом узле или если ewoc пуст, тогда как ewoc-goto-next перемещает точку за последний узел, возвращая nil. За исключением этого особого случая, эти функции возвращают узел, на который переместилась точка.

Функция: ewoc-goto-node ewoc node

Эта функция перемещает точку в начало node в ewoc.

Функция: ewoc-refresh ewoc

Эта функция заново генерирует текст ewoc. Она работает путём удаления текста между заголовком и нижним колонтитулом, т. е. всех представлений элементов данных, а затем последовательного вызова функции pretty-printer для каждого узла по порядку.

Функция: ewoc-invalidate ewoc &rest nodes

Эта функция аналогична ewoc-refresh, за исключением того, что обновляются только nodes в ewoc, а не весь набор.

Функция: ewoc-delete ewoc &rest nodes

Эта функция удаляет каждый узел из nodes в ewoc.

Функция: ewoc-filter ewoc predicate &rest args

Эта функция вызывает predicate для каждого элемента данных в ewoc и удаляет те узлы, для которых predicate возвращает nil. Любые args передаются в predicate.

Функция: ewoc-collect ewoc predicate &rest args

Эта функция вызывает predicate для каждого элемента данных в ewoc и возвращает список тех элементов, для которых predicate возвращает не nil. Элементы в списке упорядочены так же, как в буфере. Любые args передаются в predicate.

Функция: ewoc-map map-function ewoc &rest args

Эта функция вызывает map-function для каждого элемента данных в ewoc и обновляет те узлы, для которых map-function возвращает не nil. Любые args передаются в map-function.