GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Character-Properties.html ・ emacs-doc.conao3.com

34.6 文字プロパティ

文字プロパティとは、文字の名前付き属性であり、テキスト処理や表示時にその文字がどのように振る舞い、どのように扱われるべきかを規定するものです。したがって、文字プロパティは文字のセマンティクスを規定する上で重要な要素となります。

概して、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 に対応します。値は整数です。未割り当てのコードポイントの場合、値は 0 となります。

bidi-class

UnicodeのBidi_Classプロパティに対応します。値は、その文字のUnicode方向タイプを名称とするシンボルです。Emacsは、表示用に双方向テキストを再配置する際にこのプロパティを使用します(双方向表示を参照)。未割り当てのコードポイントの場合、値はそのコードポイントが属するコードブロックによって異なります。ほとんどの未割り当てコードポイントはL(強L)という値になりますが、一部はAL(アラビア文字)またはR(強R)という値になります。

decomposition

Unicodeプロパティ Decomposition_Type および Decomposition_Value に対応します。値はリストであり、その第1要素は small29 のような互換性フォーマットタグを表す記号である場合があります。その他の要素は、この文字の互換性分解シーケンスを示す文字です。分解シーケンスを持たない文字や、未割り当てのコードポイントの場合、値はその文字自体を唯一の要素とするリストとなります。

decimal-digit-value

Numeric_Type が ‘Decimal’ である文字の Unicode Numeric_Value プロパティに対応します。値は整数であり、文字に10進数の値がない場合は nil となります。未割り当てのコードポイントの場合、値は nil となり、これは NaN、すなわち “not a number” を意味します。

digit-value

Numeric_Type が ‘Digit’ である文字の Unicode Numeric_Value プロパティに対応します。値は整数です。このような文字の例としては、互換用の下付き・上付き数字が挙げられ、その値は対応する数値となります。数値を持たない文字や未割り当てのコードポイントの場合、値は nil となり、これは NaN を意味します。

numeric-value

Numeric_Type が ‘Numeric’ である文字の Unicode Numeric_Value プロパティに対応します。このプロパティの値は数値です。このプロパティを持つ文字の例としては、分数、下付き文字、上付き文字、ローマ数字、通貨の分子、および丸囲み数字などが挙げられます。例えば、文字 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であるすべての文字は、mirroringプロパティとしてnilを持ちます。ただし、mirroredプロパティがYである文字の中には、鏡像グリフを持つ適切な文字が存在しないため、mirroringとしてnilを持つものもあります。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 が続く2文字の文字列)となります。このマッピングは lowercase プロパティ、ひいては現在のケーステーブルを上書きします。特殊なマッピングがない文字の場合、値は nil となり、代わりに lowercase プロパティを参照する必要があることを意味します。

special-titlecase

Unicodeの無条件特殊タイトルケース変換ルールに対応します。このプロパティの値は文字列(空の場合あり)です。例えば、U+FB01 LATIN SMALL LIGATURE FI の場合、値は "Fi" となります。このマッピングは titlecase プロパティ、ひいては現在のケーステーブルを上書きします。特殊なマッピングがない文字の場合、値は nil となり、代わりに titlecase プロパティを参照する必要があります。

関数: get-char-code-property char propname

この関数は、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
関数: char-code-property-description prop value

この関数は、プロパティ 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
関数: put-char-code-property char propname value

この関数は、文字 char のプロパティ propname の値として value を格納します。

変数: unicode-category-table

この変数の値は、各文字についてそのUnicode General_Category プロパティをシンボルとして指定する文字テーブル(文字テーブルを参照)です。

変数: char-script-table

この変数の値は、Unicodeコード空間をスクリプト固有のブロックに分けるUnicode標準の分類に基づき、各文字について、その文字が属するスクリプト名のシンボルを指定するchar-tableです。このchar-tableには、すべてのスクリプトシンボルのリストを値とする追加のスロットが1つあり、そのため評価することができます。

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

Emacsが認識しているすべてのスクリプトの一覧を取得する。なお、Emacsによる文字のスクリプト分類は、Unicode標準を1対1で反映しているわけではない点に注意されたい。例えば、Unicodeに「symbol」というスクリプトは存在しない。

変数: char-width-table

この変数の値は、各文字が画面上で占める列数の幅を指定する文字テーブルです。

変数: printable-chars

この変数の値は、各文字について印字可能か否かを指定する文字テーブルです。つまり、(aref printable-chars char) を評価した結果が t であればその文字は印字可能であり、nil であれば印字不可能です。印字可能な文字の定義は、正規表現における ‘[:print:]’ 文字クラスと同様です。文字クラスを参照してください。


脚注

(29)

Unicode仕様では、これらのタグ名は‘<..>’という括弧で囲んで表記されますが、Emacsのタグ名には括弧が含まれません。例えば、Unicodeでは‘<small>’と指定されていますが、Emacsでは‘small’と表記されます。