Свойство символа (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.
Эта функция возвращает значение свойства 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
Эта функция возвращает строку описания свойства 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
Эта функция сохраняет value как значение свойства propname для символа char.
Значение этой переменной — это таблица символов (см. Таблицы символов), которая определяет для каждого символа его свойство Unicode General_Category в виде символа.
Значение этой переменной — это таблица символов, которая определяет для каждого символа символ, имя которого соответствует скрипту, к которому принадлежит символ, согласно классификации Unicode по скриптовым блокам. Эта таблица символов имеет одну дополнительную ячейку, значение которой — список всех символов скриптов. Обратите внимание, что классификация Emacs символов по скриптам не является точным отражением стандарта Unicode, например, в Unicode нет скрипта «symbol».
Значение этой переменной — это таблица символов, которая определяет ширину каждого символа в столбцах, которые он займет на экране.
Значение этой переменной — это таблица символов, которая определяет для каждого символа, является ли он печатным. То есть, если вычисление (aref printable-chars char) возвращает t, символ печатный, а если возвращает nil, то не печатный.
В спецификации Unicode эти имена тегов записываются в кавычках ‘<...>’, но в Emacs имена тегов не включают кавычки; например, Unicode указывает ‘<small>’, тогда как Emacs использует ‘small’.