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

4.10 ケーステーブル

専用のケーステーブルをインストールすることで、大文字・小文字の変換をカスタマイズできます。ケーステーブルは、大文字と小文字の対応関係を定義します。これは、Lispオブジェクト用の大文字・小文字変換関数(前節参照)と、バッファ内のテキストに適用される関数(Case Changes参照)の両方に影響します。各バッファにはケーステーブルが用意されており、また、新しいバッファのケーステーブルを初期化するために使用される標準ケーステーブルも存在します。

ケーステーブルとは、サブタイプが case-table である文字テーブル(文字テーブル を参照)のことです。この文字テーブルは、各文字を対応する小文字にマッピングします。また、関連するテーブルを保持する3つの追加スロットを備えています:

upcase

upcaseテーブルは、各文字を対応する大文字にマッピングします。

canonicalize

正準化テーブルは、大文字・小文字関連文字の集合に含まれるすべての文字を、当該集合の特定の要素にマッピングします。

equivalences

等価表は、ケース関連文字の集合の各文字を、同集合内の次の文字に対応付けます。

単純なケースでは、小文字へのマッピングを指定するだけでよく、関連する3つのテーブルはその1つから自動的に算出されます。

言語によっては、大文字と小文字が一対一に対応していない場合があります。同じ大文字に対応する小文字が2種類存在することもあります。このような場合には、小文字と大文字の両方の対応関係を指定する必要があります。

一部の文字には特別な大文字・小文字変換ルールが定義されており、デフォルトでは現在の大文字・小文字テーブルよりも優先されます。これらの文字には、Unicode標準で定義されたnil以外の文字プロパティspecial-uppercase、special-lowercase、またはspecial-titlecase(文字プロパティを参照)が付与されています。例として、U+00DF LATIN SMALL LETTER SHARP S, ß は、デフォルトではU+1E9E LATIN CAPITAL LETTER SHARP Sではなく、文字列"SS"に大文字変換されます。これらの文字に大文字・小文字テーブルの変換を強制的に適用させるには、対応するUnicodeプロパティをnilに設定してください:

 (upcase "ß")
  => "SS"
 (put-char-code-property ?ß 'special-uppercase nil)
 (upcase "ß")
  => "ẞ"

ケーステーブルの追加スロット canonicalize は、各文字を正準等価文字にマッピングします。大文字・小文字変換によって関連付けられる任意の2文字は、同一の正準等価文字を持ちます。例えば、‘a’ と ‘A’ は大文字・小文字変換によって関連付けられているため、同一の正準等価文字を持つはずです(その文字は、両者にとって ‘a’ か、あるいは ‘A’ のいずれかになります)。

追加スロット equivalences は、各同値類(同一の正準同値を持つ文字の集合)を巡回的に置換するマップです。(通常の ASCII の場合、これにより ‘a’ は ‘A’ に、‘A’ は ‘a’ にマッピングされ、同様の処理が各同値文字集合に対して行われます。)

ケーステーブルを作成する際、canonicalize に nil を指定すると、Emacs は小文字および大文字のマッピングからこのスロットを補完します。また、equivalences に nil を指定すると、Emacs は canonicalize からこのスロットを補完します。実際に使用されているケーステーブルでは、これらのコンポーネントは non-nil となります。canonicalize を指定せずに equivalences を指定しようとしないでください。

ケーステーブルを扱うための関数は以下の通りです。

関数: case-table-p object

この述語は、object が有効なケーステーブルである場合に non-nil を返します。

関数: set-standard-case-table table

この関数は table を標準ケーステーブルとして設定し、それ以降に作成されるすべてのバッファでこれが使用されるようにします。

関数: standard-case-table

これは標準的なケーステーブルを返します。

関数: current-case-table

この関数は、現在のバッファの大文字小文字テーブルを返します。

関数: set-case-table table

これにより、現在のバッファのケーステーブルがtableに設定されます。

マクロ: with-case-table table body…

with-case-table マクロは、現在のケーステーブルを保存し、table を現在のケーステーブルとし、body のフォームを評価し、最後にケーステーブルを復元します。戻り値は、body の最後のフォームの値です。throw による異常終了やエラーが発生した場合でも、ケーステーブルは復元されます(非局所終了を参照)。

言語環境によっては、ASCII文字の大文字・小文字変換を変更するものがあります。例えば、トルコ語環境では、ASCIIの大文字Iがトルコ語のドットなしi (‘ı’) に変換されます。これにより、ASCIIベースのネットワークプロトコルの実装など、通常のASCII大文字・小文字変換を必要とするコードに支障をきたす可能性があります。その場合は、ASCII文字セットの未変更の大文字・小文字変換テーブルを格納する変数ascii-case-tableを用いて、with-case-tableマクロを使用してください。

変数: ascii-case-table

ASCII 文字セットのケーステーブル。言語環境の設定によって変更されてはなりません。

以下の3つの関数は、非ASCII文字セットを定義するパッケージに便利なサブルーチンです。これらの関数は、指定されたケーステーブル case-table を変更するほか、標準構文テーブルも変更します。構文テーブルを参照してください。通常、これらの関数は標準ケーステーブルを変更するために使用します。

関数: set-case-syntax-pair uc lc case-table

この関数は、大文字と小文字の一組の対応する文字を指定します。

関数: set-case-syntax-delims l r case-table

この関数は、文字 l と r を、大文字小文字を区別しない区切り文字の対応ペアにします。

関数: set-case-syntax char syntax case-table

この関数は、char を大文字小文字を区別しない形式にし、構文を syntax とします。

コマンド: describe-buffer-case-table

このコマンドは、現在のバッファのケーステーブルの内容に関する説明を表示します。