Категории
Категории предоставляют альтернативный способ классификации символов синтаксически. Вы можете определить несколько категорий по мере необходимости, а затем независимо назначить каждый символ одной или нескольким категориям. В отличие от синтаксических классов, категории не являются взаимоисключающими; нормально, когда один символ принадлежит к нескольким категориям.
Каждый буфер имеет таблицу категорий, которая регистрирует, какие категории определены, а также какие символы принадлежат каждой категории. Каждая таблица категорий определяет свои собственные категории, но обычно они инициализируются путем копирования из стандартной таблицы категорий, так что стандартные категории доступны во всех режимах.
Каждая категория имеет имя, которое является печатаемым символом 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