Spec-Zone.ru › Elisp

Свойства символов

Свойство символа — это именованный атрибут символа, который определяет его поведение и то, как с ним следует обращаться при обработке и отображении текста. Таким образом, свойства символов — важная часть описания семантики символов.

В целом Emacs следует стандарту Unicode при реализации свойств символов. В частности, Emacs поддерживает модель свойств символов Unicode, а база свойств символов Emacs создана на основе базы данных символов Unicode (UCD). Подробное описание свойств символов Unicode и их значений см. в главе «Свойства символов» стандарта Unicode. В этом разделе предполагается, что вы уже знакомы с этой главой стандарта Unicode и хотите применить полученные знания в программах на Emacs Lisp.

В Emacs у каждого свойства есть имя — символ — и множество возможных значений, типы которых зависят от свойства; если у символа нет определённого свойства, его значение — nil. Как правило, имена свойств символов в Emacs получают из соответствующих свойств Unicode: их записывают строчными буквами и заменяют каждый символ «_» дефисом «-». Например, Canonical_Combining_Class становится canonical-combining-class. Однако иногда мы сокращаем имена, чтобы упростить их использование.

Некоторые кодовые точки остаются неназначенными в UCD — они не соответствуют никакому символу. Стандарт Unicode определяет значения свойств по умолчанию для таких кодовых точек; они указаны ниже для каждого свойства.

Ниже приведён полный список типов значений для всех свойств символов, известных Emacs:

name

Соответствует свойству Unicode Name. Значение — строка, состоящая из латинских заглавных букв от A до Z, цифр, пробелов и дефисов «-». Для неназначенных кодовых точек значение — nil.

general-category

Соответствует свойству Unicode General_Category. Значение — символ, имя которого представляет собой двухбуквенное сокращение классификации символа. Для неназначенных кодовых точек значение — Cn.

canonical-combining-class

Соответствует свойству Unicode Canonical_Combining_Class. Значение — целое число. Для неназначенных кодовых точек значение равно нулю.

bidi-class

Соответствует свойству Unicode Bidi_Class. Значение — символ, имя которого соответствует Unicode-типу направления символа. Emacs использует это свойство при изменении порядка двунаправленного текста для отображения (см. Отображение двунаправленного текста). Для неназначенных кодовых точек значение зависит от блока кодов, к которому принадлежит кодовая точка: большинство неназначенных кодовых точек получают значение L (сильное L), но некоторые получают значения AL (арабская буква) или R (сильное R).

decomposition

Соответствует свойствам Unicode Decomposition_Type и Decomposition_Value. Значение — список, первым элементом которого может быть символ, обозначающий тег форматирования совместимости, например small; остальные элементы — символы, задающие последовательность разложения этого символа для совместимости. Для символов, у которых нет последовательностей разложения, и для неназначенных кодовых точек значение представляет собой список из одного элемента — самого символа.

decimal-digit-value

Соответствует свойству Unicode Numeric_Value для символов, у которых значение свойства Numeric_Type равно «Decimal». Значение — целое число или nil, если у символа нет значения десятичной цифры. Для неназначенных кодовых точек значение — nil, что означает NaN, или «не число».

digit-value

Соответствует свойству Unicode Numeric_Value для символов, у которых значение свойства Numeric_Type равно «Digit». Значение — целое число. К таким символам относятся, например, цифры в нижнем и верхнем индексах, совместимые с обычными цифрами; их значения соответствуют обычным числам. Для символов без числового значения и для неназначенных кодовых точек значение — nil, что означает NaN.

numeric-value

Соответствует свойству Unicode Numeric_Value для символов, у которых значение свойства Numeric_Type равно «Numeric». Значение этого свойства — число. К символам с этим свойством относятся дроби, цифры в нижнем и верхнем индексах, римские цифры, числители валют и числа в кружках. Например, значение этого свойства для символа U+2155 VULGAR FRACTION ONE FIFTH — 0.2. Для символов без числового значения и для неназначенных кодовых точек значение — nil, что означает NaN.

mirrored

Соответствует свойству Unicode Bidi_Mirrored. Значение этого свойства — символ Y или N. Для неназначенных кодовых точек значение — N.

mirroring

Соответствует свойству Unicode Bidi_Mirroring_Glyph. Значение этого свойства — символ, глиф которого является зеркальным отражением глифа данного символа, или nil, если зеркальный глиф не определён. У всех символов, для которых свойство mirrored имеет значение N, свойство nil имеет значение mirroring; однако у некоторых символов, для которых свойство mirrored имеет значение Y, значение свойства nil также равно mirroring, поскольку подходящих символов с зеркальными глифами не существует. Emacs использует это свойство для отображения зеркальных отражений символов, когда это необходимо (см. Отображение двунаправленного текста). Для неназначенных кодовых точек значение — nil.

paired-bracket

Соответствует свойству Unicode Bidi_Paired_Bracket. Значение этого свойства — кодовая точка парной скобки символа или nil, если символ не является скобкой. Это свойство устанавливает соответствие между символами, которые алгоритм двунаправленного текста Unicode считает парными скобками; Emacs использует его, чтобы определить, как изменить порядок скобок, фигурных скобок и других подобных символов при отображении (см. Отображение двунаправленного текста).

bracket-type

Соответствует свойству Unicode Bidi_Paired_Bracket_Type. Для символов, у которых свойство paired-bracket не равно nil, значением этого свойства является символ o (для открывающих скобок) или c (для закрывающих скобок). Для символов, у которых свойство paired-bracket равно nil, значением является символ n (None). Как и paired-bracket, это свойство используется при отображении двунаправленного текста.

old-name

Соответствует свойству Unicode Unicode_1_Name. Значение — строка. Для неназначенных кодовых точек и символов, у которых нет значения этого свойства, значение — nil.

iso-10646-comment

Соответствует свойству Unicode ISO_Comment. Значение — строка или nil. Для неназначенных кодовых точек значение — nil.

uppercase

Соответствует свойству Unicode Simple_Uppercase_Mapping. Значение этого свойства — один символ. Для неназначенных кодовых точек значение — nil, то есть сам символ.

lowercase

Соответствует свойству Unicode Simple_Lowercase_Mapping. Значение этого свойства — один символ. Для неназначенных кодовых точек значение — nil, то есть сам символ.

titlecase

Соответствует свойству Unicode Simple_Titlecase_Mapping. Заглавная форма — особая форма символа, используемая, когда первую букву слова нужно сделать заглавной. Значение этого свойства — один символ. Для неназначенных кодовых точек значение — nil, то есть сам символ.

special-uppercase

Соответствует специальным правилам преобразования в верхний регистр Unicode, не зависящим от языка и контекста. Значение этого свойства — строка (которая может быть пустой). Например, для U+00DF LATIN SMALL LETTER SHARP S значением является "SS". Это преобразование переопределяет свойство uppercase и, следовательно, текущую таблицу регистра. Для символов без специального преобразования значением является nil, что означает, что вместо этого следует обратиться к свойству uppercase.

special-lowercase

Соответствует специальным правилам преобразования в нижний регистр Unicode, не зависящим от языка и контекста. Значение этого свойства — строка (которая может быть пустой). Например, для U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE значением является "i\u0307" (то есть строка из двух символов: LATIN SMALL LETTER I, за которым следует U+0307 COMBINING DOT ABOVE). Это преобразование переопределяет свойство lowercase и, следовательно, текущую таблицу регистра. Для символов без специального преобразования значением является nil, что означает, что вместо этого следует обратиться к свойству lowercase.

special-titlecase

Соответствует безусловным специальным правилам преобразования в заглавную форму Unicode. Значение этого свойства — строка (которая может быть пустой). Например, для U+FB01 LATIN SMALL LIGATURE FI значением является "Fi". Это преобразование переопределяет свойство titlecase и, следовательно, текущую таблицу регистра. Для символов без специального преобразования значением является nil, что означает, что вместо этого следует обратиться к свойству titlecase.

Функция: get-char-code-property char propname

Эта функция возвращает значение свойства propname символа char.

(get-char-code-property ?\s 'general-category)
     ⇒ Zs
(get-char-code-property ?1 'general-category)
     ⇒ Nd
;; U+2084
(get-char-code-property ?\N{SUBSCRIPT FOUR}
                        'digit-value)
     ⇒ 4
;; U+2155
(get-char-code-property ?\N{VULGAR FRACTION ONE FIFTH}
                        'numeric-value)
     ⇒ 0.2
;; U+2163
(get-char-code-property ?\N{ROMAN NUMERAL FOUR}
                        'numeric-value)
     ⇒ 4
(get-char-code-property ?\( 'paired-bracket)
     ⇒ 41  ; closing parenthesis
(get-char-code-property ?\) 'bracket-type)
     ⇒ c
Функция: char-code-property-description prop value

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

(char-code-property-description 'general-category 'Zs)
     ⇒ "Separator, Space"
(char-code-property-description 'general-category 'Nd)
     ⇒ "Number, Decimal Digit"
(char-code-property-description 'numeric-value '1/5)
     ⇒ nil
Функция: put-char-code-property char propname value

Эта функция сохраняет value как значение свойства propname для символа char.

Переменная: unicode-category-table

Значение этой переменной — таблица символов (см. Таблицы символов), которая задаёт для каждого символа его свойство Unicode General_Category в виде символа.

Переменная: char-script-table

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

(char-table-extra-slot char-script-table 0)

и получить список всех письменностей, известных Emacs. Обратите внимание, что классификация символов по письменностям в Emacs не полностью совпадает с классификацией стандарта Unicode; например, в Unicode нет письменности «symbol».

Переменная: char-width-table

Значение этой переменной — таблица символов, которая задаёт ширину каждого символа в столбцах экрана, занимаемых им при отображении.

Переменная: printable-chars

Значение этой переменной — таблица символов, которая указывает для каждого символа, является ли он печатным. Иными словами, если вычисление (aref printable-chars char) возвращает t, символ является печатным; если результат — nil, символ не является печатным. Определение печатного символа совпадает с определением класса символов «[:print:]» в регулярных выражениях; см. Классы символов.

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/Character-Properties.html

Spec-Zone.ru

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