Spec-Zone.ru › Elisp

Категории

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

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

Каждая категория имеет имя, которое является печатаемым символом ASCII в диапазоне ‘’ до ‘~’. Вы указываете имя категории при её определении с помощью define-category.

Таблица категорий фактически является таблицей символов (см. Таблицы символов). Элемент таблицы категорий с индексом c является набором категорий — bool-вектором — который указывает, к каким категориям принадлежит символ c. В этом наборе категорий, если элемент с индексом cat равен t, это означает, что категория cat является членом набора, и что символ c принадлежит категории cat.

Для следующих трёх функций необязательный аргумент table по умолчанию принимает значение текущей таблицы категорий буфера.

Функция: define-category char docstring &optional table

Эта функция определяет новую категорию с именем char и документацией docstring для таблицы категорий table.

Вот пример определения новой категории для символов, имеющих сильную направленность справа налево (см. Двунаправленный вывод) и использование её в специальной таблице категорий. Для получения информации о направленности символов пример кода использует свойство Unicode «bidi-class» (см. bidi-class).

(defvar special-category-table-for-bidi
  ;;     Make an empty category-table.
  (let ((category-table (make-category-table))
        ;; Create a char-table which gives the 'bidi-class' Unicode
        ;; property for each character.
        (uniprop-table
         (unicode-property-table-internal 'bidi-class)))
    (define-category ?R "Characters of bidi-class R, AL, or RLO"
                     category-table)
    ;; Modify the category entry of each character whose
    ;; 'bidi-class' Unicode property is R, AL, or RLO --
    ;; these have a right-to-left directionality.
    (map-char-table
     (lambda (key val)
       (if (memq val '(R AL RLO))
           (modify-category-entry key ?R category-table)))
     uniprop-table)
    category-table))
Функция: category-docstring category &optional table

Эта функция возвращает строку документации категории category в таблице категорий table.

(category-docstring ?a)
     ⇒ "ASCII"
(category-docstring ?l)
     ⇒ "Latin"
Функция: get-unused-category &optional table

Эта функция возвращает имя категории (символ), которое в данный момент не определено в table. Если все возможные категории используются в table, она возвращает nil.

Функция: category-table

Эта функция возвращает текущую таблицу категорий буфера.

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

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

Функция: standard-category-table

Эта функция возвращает стандартную таблицу категорий.

Функция: copy-category-table &optional table

Эта функция создаёт копию table и возвращает её. Если table не указан (или равен nil), возвращается копия стандартной таблицы категорий. В противном случае, возникает ошибка, если table не является таблицей категорий.

Функция: set-category-table table

Эта функция делает table таблицей категорий для текущего буфера. Возвращает table.

Функция: make-category-table

Создаёт и возвращает пустую таблицу категорий. В пустой таблице категорий не выделены никакие категории, и никакие символы не принадлежат ни одной категории.

Функция: make-category-set categories

Эта функция возвращает новый набор категорий — bool-вектор — чьё начальное содержимое состоит из категорий, перечисленных в строке categories. Элементы categories должны быть именами категорий; новый набор категорий имеет t для каждой из этих категорий и nil для всех остальных категорий.

(make-category-set "al")
     ⇒ #&128"\0\0\0\0\0\0\0\0\0\0\0\0\2\20\0\0"
Функция: char-category-set char

Эта функция возвращает набор категорий для символа char в таблице категорий текущего буфера. Это bool-вектор, который регистрирует, к каким категориям принадлежит символ char. Функция char-category-set не выделяет память, поскольку она возвращает тот же bool-вектор, что и в таблице категорий.

(char-category-set ?a)
     ⇒ #&128"\0\0\0\0\0\0\0\0\0\0\0\0\2\20\0\0"
Функция: category-set-mnemonics category-set

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

(category-set-mnemonics (char-category-set ?a))
     ⇒ "al"
Функция: modify-category-entry char category &optional table reset

Эта функция изменяет набор категорий char в таблице категорий table (по умолчанию, текущая таблица категорий буфера). char может быть символом или списком вида (min . max); в последнем случае функция изменяет наборы категорий для всех символов в диапазоне между min и max, включительно.

Обычно она изменяет набор категорий, добавляя category в него. Но если reset не равно nil, то она удаляет category вместо этого.

Команда: describe-categories &optional buffer-or-name

Эта функция описывает спецификации категорий в текущей таблице категорий. Она вставляет описания в буфер, а затем отображает этот буфер. Если buffer-or-name не равно nil, она описывает таблицу категорий этого буфера вместо этого.

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/Categories.html

Spec-Zone.ru

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