文字プロパティとは、文字の名前付き属性であり、テキスト処理や表示時にその文字がどのように振る舞い、どのように扱われるべきかを規定するものです。したがって、文字プロパティは文字のセマンティクスを規定する上で重要な要素となります。
概して、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が認識しているすべての文字プロパティの値型の一覧は以下の通りです。
nameUnicodeプロパティ Name に対応します。値は、英大文字 A から
Z、数字、スペース、およびハイフン ‘-’
文字からなる文字列です。未割り当てのコードポイントの場合、値は nil となります。
general-category ¶Unicodeプロパティ General_Category
に対応します。値は、文字の分類を2文字の略称で表したシンボルです。未割り当てのコードポイントの場合、値は Cn となります。
canonical-combining-classUnicodeプロパティ Canonical_Combining_Class
に対応します。値は整数です。未割り当てのコードポイントの場合、値は 0 となります。
bidi-class ¶UnicodeのBidi_Classプロパティに対応します。値は、その文字のUnicode方向タイプを名称とするシンボルです。Emacsは、表示用に双方向テキストを再配置する際にこのプロパティを使用します(双方向表示を参照)。未割り当てのコードポイントの場合、値はそのコードポイントが属するコードブロックによって異なります。ほとんどの未割り当てコードポイントはL(強L)という値になりますが、一部はAL(アラビア文字)またはR(強R)という値になります。
decompositionUnicodeプロパティ Decomposition_Type および Decomposition_Value に対応します。値はリストであり、その第1要素は small29
のような互換性フォーマットタグを表す記号である場合があります。その他の要素は、この文字の互換性分解シーケンスを示す文字です。分解シーケンスを持たない文字や、未割り当てのコードポイントの場合、値はその文字自体を唯一の要素とするリストとなります。
decimal-digit-valueNumeric_Type が ‘Decimal’ である文字の Unicode Numeric_Value プロパティに対応します。値は整数であり、文字に10進数の値がない場合は nil となります。未割り当てのコードポイントの場合、値は nil となり、これは NaN、すなわち
“not a number” を意味します。
digit-valueNumeric_Type が ‘Digit’ である文字の Unicode Numeric_Value
プロパティに対応します。値は整数です。このような文字の例としては、互換用の下付き・上付き数字が挙げられ、その値は対応する数値となります。数値を持たない文字や未割り当てのコードポイントの場合、値は
nil となり、これは NaN
を意味します。
numeric-valueNumeric_Type が ‘Numeric’ である文字の Unicode Numeric_Value
プロパティに対応します。このプロパティの値は数値です。このプロパティを持つ文字の例としては、分数、下付き文字、上付き文字、ローマ数字、通貨の分子、および丸囲み数字などが挙げられます。例えば、文字
U+2155 VULGAR FRACTION ONE FIFTH のこのプロパティの値は 0.2 です。数値を持たない文字や未割り当てのコードポイントの場合、値は nil となり、これは NaN を意味します。
mirrored ¶UnicodeのBidi_Mirroredプロパティに対応します。このプロパティの値は、YまたはNのいずれかの記号です。未割り当てのコードポイントの場合、値はNとなります。
mirroringUnicodeのBidi_Mirroring_Glyphプロパティに対応します。このプロパティの値は、そのグリフが文字のグリフの鏡像を表す文字、あるいは鏡像グリフが定義されていない場合はnilとなります。mirroredプロパティがNであるすべての文字は、mirroringプロパティとしてnilを持ちます。ただし、mirroredプロパティがYである文字の中には、鏡像グリフを持つ適切な文字が存在しないため、mirroringとしてnilを持つものもあります。Emacsはこのプロパティを使用して、適切な場合に文字の鏡像を表示します(双方向表示を参照)。未割り当てのコードポイントの場合、値はnilとなります。
paired-bracketUnicodeのBidi_Paired_Bracketプロパティに対応します。このプロパティの値は、文字の対になる括弧のコードポイントであり、文字が括弧文字でない場合はnilとなります。これにより、Unicode双方向アルゴリズムによって括弧のペアとして扱われる文字間のマッピングが確立されます。Emacsは、表示用の括弧や中括弧、およびその他の類似文字の並べ替え方法を決定する際にこのプロパティを使用します(双方向表示を参照)。
bracket-typeUnicode の Bidi_Paired_Bracket_Type
プロパティに対応します。paired-bracket プロパティが nil 以外である文字の場合、このプロパティの値はシンボルとなり、o(開き括弧文字用)または c(閉じ括弧文字用)のいずれかになります。paired-bracket プロパティが nil
である文字の場合、値はシンボル n (None) となります。paired-bracket と同様に、このプロパティは双方向表示に使用されます。
old-nameUnicodeのUnicode_1_Nameプロパティに対応します。値は文字列です。未割り当てのコードポイント、およびこのプロパティに値が設定されていない文字の場合、値はnilとなります。
iso-10646-commentUnicodeのISO_Commentプロパティに対応します。値は文字列またはnilのいずれかです。未割り当てのコードポイントの場合、値はnilとなります。
uppercaseUnicode の Simple_Uppercase_Mapping
プロパティに対応します。このプロパティの値は単一の文字です。未割り当てのコードポイントの場合、値は nil となり、これは文字そのものを意味します。
lowercaseUnicode の Simple_Lowercase_Mapping
プロパティに対応します。このプロパティの値は単一の文字です。未割り当てのコードポイントの場合、値は nil となり、これは文字そのものを意味します。
titlecaseUnicode の Simple_Titlecase_Mapping プロパティに対応します。タイトルケース
は、単語の先頭文字を大文字にする必要がある場合に使用される特殊な文字形式です。このプロパティの値は単一の文字です。未割り当てのコードポイントの場合、値は
nil となり、これは文字そのものを意味します。
special-uppercaseUnicodeの言語およびコンテキストに依存しない特殊な大文字化ルールに対応します。このプロパティの値は文字列(空の場合もあり)です。例えば、U+00DF
LATIN SMALL LETTER SHARP S の場合、値は "SS" となります。このマッピングは uppercase
プロパティ、ひいては現在のケーステーブルを上書きします。特別なマッピングがない文字の場合、値は nil となり、代わりに uppercase
プロパティを参照する必要があることを意味します。
special-lowercaseUnicodeの言語およびコンテキストに依存しない特殊な小文字化ルールに対応します。このプロパティの値は文字列(空の場合もあります)です。例えば、U+0130
LATIN CAPITAL LETTER I WITH DOT ABOVE の場合、値は "i\u0307"(すなわち、LATIN SMALL
LETTER I に続いて U+0307 COMBINING DOT ABOVE
が続く2文字の文字列)となります。このマッピングは lowercase
プロパティ、ひいては現在のケーステーブルを上書きします。特殊なマッピングがない文字の場合、値は nil となり、代わりに lowercase
プロパティを参照する必要があることを意味します。
special-titlecaseUnicodeの無条件特殊タイトルケース変換ルールに対応します。このプロパティの値は文字列(空の場合あり)です。例えば、U+FB01 LATIN SMALL LIGATURE FI の場合、値は "Fi" となります。このマッピングは titlecase
プロパティ、ひいては現在のケーステーブルを上書きします。特殊なマッピングがない文字の場合、値は nil となり、代わりに titlecase
プロパティを参照する必要があります。
この関数は、charのpropnameプロパティの値を返します。
(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
この関数は、プロパティ prop の value
の説明文字列、または value に説明がない場合は nil を返します。
(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
この関数は、文字 char のプロパティ propname の値として value を格納します。
この変数の値は、各文字についてそのUnicode General_Category
プロパティをシンボルとして指定する文字テーブル(文字テーブルを参照)です。
この変数の値は、Unicodeコード空間をスクリプト固有のブロックに分けるUnicode標準の分類に基づき、各文字について、その文字が属するスクリプト名のシンボルを指定するchar-tableです。このchar-tableには、すべてのスクリプトシンボルのリストを値とする追加のスロットが1つあり、そのため評価することができます。
(char-table-extra-slot char-script-table 0)
Emacsが認識しているすべてのスクリプトの一覧を取得する。なお、Emacsによる文字のスクリプト分類は、Unicode標準を1対1で反映しているわけではない点に注意されたい。例えば、Unicodeに「symbol」というスクリプトは存在しない。
この変数の値は、各文字が画面上で占める列数の幅を指定する文字テーブルです。
Unicode仕様では、これらのタグ名は‘<..>’という括弧で囲んで表記されますが、Emacsのタグ名には括弧が含まれません。例えば、Unicodeでは‘<small>’と指定されていますが、Emacsでは‘small’と表記されます。