Spec-Zone.ru › Elisp

Таблицы символов

Таблица символов во многом похожа на вектор, за исключением того, что индексация в ней выполняется по кодам символов. В качестве индекса таблицы символов можно использовать любой допустимый код символа без модификаторов. Доступ к элементам таблицы символов осуществляется с помощью aref и aset, как и для любого массива. Кроме того, таблица символов может содержать дополнительные слоты для хранения данных, не связанных с определёнными кодами символов. Подобно векторам, при вычислении таблицы символов считаются константами; они могут содержать элементы любого типа.

У каждой таблицы символов есть подтип — символ, который служит двум целям:

  • Подтип позволяет легко определить назначение таблицы символов. Например, таблицы отображения — это таблицы символов с display-table в качестве подтипа, а таблицы синтаксиса — таблицы символов с syntax-table в качестве подтипа. Подтип можно запросить с помощью функции char-table-subtype, описанной ниже.
  • Подтип определяет количество дополнительных слотов в таблице символов. Это количество задаётся свойством символа char-table-extra-slots, относящимся к подтипу (см. Свойства символов); его значением должно быть целое число от 0 до 10. Если у подтипа нет такого свойства символа, в таблице символов нет дополнительных слотов.

У таблицы символов может быть родительская таблица — другая таблица символов. В этом случае, если для определённого символа c в таблице символов указано nil, она наследует значение, заданное в родительской таблице. Иными словами, (aref char-table c) возвращает значение из родительской таблицы char-table, если в самой таблице char-table указано nil.

У таблицы символов также может быть значение по умолчанию. В этом случае (aref char-table c) возвращает значение по умолчанию, если в таблице символов не указано никакое другое значение, отличное от nil.

Функция: make-char-table subtype &optional init

Возвращает новую таблицу символов с подтипом subtype (символом). Каждый элемент инициализируется значением init, по умолчанию равным nil. Изменить подтип таблицы символов после её создания нельзя.

Аргумент для указания длины таблицы символов отсутствует, поскольку любая таблица символов позволяет использовать в качестве индекса любой допустимый код символа.

Если у subtype есть свойство символа char-table-extra-slots, оно задаёт количество дополнительных слотов в таблице символов. Это значение должно быть целым числом от 0 до 10; в противном случае make-char-table вызывает ошибку. Если у subtype нет свойства символа char-table-extra-slots (см. Списки свойств), в таблице символов нет дополнительных слотов.

Функция: char-table-p object

Эта функция возвращает t, если object — таблица символов, и nil в противном случае.

Функция: char-table-subtype char-table

Эта функция возвращает символ подтипа char-table.

Для доступа к значениям по умолчанию в таблице символов нет специальной функции. Для этого используйте char-table-range (см. ниже).

Функция: char-table-parent char-table

Эта функция возвращает родительскую таблицу для char-table. Родительской таблицей всегда является либо nil, либо другая таблица символов.

Функция: set-char-table-parent char-table new-parent

Эта функция задаёт new-parent в качестве родительской таблицы для char-table.

Функция: char-table-extra-slot char-table n

Эта функция возвращает содержимое дополнительного слота n (нумерация начинается с нуля) таблицы char-table. Количество дополнительных слотов в таблице символов определяется её подтипом.

Функция: set-char-table-extra-slot char-table n value

Эта функция сохраняет значение value в дополнительном слоте n (нумерация начинается с нуля) таблицы char-table.

Таблица символов может задавать значение элемента для отдельного кода символа, а также значение для целого набора символов.

Функция: char-table-range char-table range

Эта функция возвращает значение, заданное в таблице char-table для диапазона символов range. Возможны следующие варианты range:

nil

Обозначает значение по умолчанию.

char

Обозначает элемент для символа char (если char — допустимый код символа).

(from . to)

Ячейка cons обозначает все символы включительного диапазона «[from..to]». В этом случае функция возвращает значение для символа, заданного параметром from.

Функция: set-char-table-range char-table range value

Эта функция задаёт в таблице char-table значение для диапазона символов range. Возможны следующие варианты range:

nil

Обозначает значение по умолчанию.

t

Обозначает весь диапазон кодов символов.

char

Обозначает элемент для символа char (если char — допустимый код символа).

(from . to)

Ячейка cons обозначает все символы включительного диапазона «[from..to]».

Функция: map-char-table function char-table

Эта функция вызывает функцию function для каждого элемента таблицы char-table, значение которого не равно nil. Функция function вызывается с двумя аргументами: ключом и значением. Ключ может быть аргументом range функции char-table-range — допустимым символом или ячейкой cons (from . to), задающей диапазон символов с одинаковым значением. Значение — это то, что возвращает (char-table-range char-table key).

В совокупности пары «ключ — значение», переданные функции function, описывают все значения, хранящиеся в таблице char-table.

Возвращаемое значение всегда равно nil; чтобы вызовы map-char-table были полезны, функция function должна иметь побочные эффекты. Например, ниже показано, как просмотреть элементы таблицы синтаксиса:

(let (accumulator)
   (map-char-table
    (lambda (key value)
      (setq accumulator
            (cons (list
                   (if (consp key)
                       (list (car key) (cdr key))
                     key)
                   value)
                  accumulator)))
    (syntax-table))
   accumulator)
⇒
(((2597602 4194303) (2)) ((2597523 2597601) (3))
 ... (65379 (5 . 65378)) (65378 (4 . 65379)) (65377 (1))
 ... (12 (0)) (11 (3)) (10 (12)) (9 (0)) ((0 8) (3)))

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

Spec-Zone.ru

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