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

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

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

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 (Нет). Как и 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. Заглавный регистр (Title case) — это специальная форма символа, используемая, когда первый символ слова должен быть заглавным. Значение этого свойства — один символ. Для неназначенных кодовых точек значение равно 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" (то есть строке из 2 символов, состоящей из 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  ; закрывающая скобка
(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 по скриптовым блокам. Эта таблица символов имеет одну дополнительную ячейку, значение которой — список всех символов скриптов. Обратите внимание, что классификация Emacs символов по скриптам не является точным отражением стандарта Unicode, например, в Unicode нет скрипта «symbol».

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

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

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

Значение этой переменной — это таблица символов, которая определяет для каждого символа, является ли он печатным. То есть, если вычисление (aref printable-chars char) возвращает t, символ печатный, а если возвращает nil, то не печатный.


Примечания

(26)

В спецификации Unicode эти имена тегов записываются в кавычках ‘<...>’, но в Emacs имена тегов не включают кавычки; например, Unicode указывает ‘<small>’, тогда как Emacs использует ‘small’.