Previous: , Up: Strings and Characters   [Contents][Index]


4.9 The Case Table

特別な大文字小文字テーブル(case table)をインストールすることにより、大文字小文字の変換をカスタマイズできます。大文字小文字テーブルは大文字と小文字の間のマッピングを指定します。大文字小文字テーブルはLispオブジェクトにたいする大文字小文字変換関数(前のセクションを参照してください)と、バッファー内のテキストに適用される関数の両方に影響します。それぞれのバッファーには大文字小文字テーブルがあります。新しいバッファーの大文字小文字テーブルを初期化するために使用される、標準の大文字小文字テーブル(standard case table)もあります。

大文字小文字テーブルは、サブタイプがcase-tableの文字テーブル(char-table。Char-Tablesを参照してください)です。この文字テーブルは、それぞれの文字を対応する小文字にマップします。大文字小文字テーブルは、関連するテーブルを保持する、3つの追加スロットをもちます:

upcase

upcase(大文字)テーブルは、それぞれの文字を対応する大文字にマップします。

canonicalize

canonicalize(正準化)テーブルは、大文字小文字に関連する文字セットのすべてを、その文字セットの特別なメンバーにマップします。

equivalences

equivalence(同値)テーブルは、大の字小文字に関連した文字セットのそれぞれを、そのセットの次の文字にマップします。

単純な例では、小文字へのマッピングを指定することだけが必要です。3つの関連するテーブルは、このマッピングから自動的に計算されます。

大文字と小文字が1対1で対応しない言語もいくつかあります。これらの言語では、2つの異なる小文字が、同じ大文字にマップされます。このような場合、大文字と小文字の両方にたいするマップを指定する必要があります。

追加のcanonicalizeテーブルは、それぞれの文字を、正準化された等価文字にマップします。大文字小文字に関連する任意の2文字は、同じ正準等価文字(canonical equivalent character)をもちます。たとえば‘a’と‘A’は大文字小文字変換に関係があるので、これらの文字は同じ正準等価文字(両方の文字が‘a’、または両方の文字が‘A’)をもつべきです。

追加のequivalencesテーブルは、各等価クラスの文字(同じ正準等価文字をもつ文字)を循環的にマップします(通常のASCIIでは、これは‘a’を‘A’に‘A’を‘a’にマップし、他の等価文字セットにたいしても同様にマップします)。

大文字小文字テーブルを構築する際は、canonicalizenilを指定できます。この場合、Emacsは大文字と小文字のマッピングで、このスロットを充填します。equivalencesにたいしてnilを指定することもできます。この場合、Emacsはcanonicalizeから、このスロットを充填します。実際に使用される大文字小文字テーブルでは、これらのコンポーネントは非nilです。canonicalizeを指定せずにequivalencesを指定しないでください。

以下は大文字小文字テーブルに作用する関数です:

Function: case-table-p object

この述語は、objectが有効な大文字小文字テーブルの場合は、非nilをreturnします。

Function: set-standard-case-table table

この関数は、tableを標準大文字小文字テーブルにして、これ以降に作成される任意のバッファーにたいしてこのテーブルが使用されます。

Function: standard-case-table

これは標準大文字小文字テーブル(standard case table)をreturnします。

Function: current-case-table

この関数は、カレントバッファーの大文字小文字テーブルをreturnします。

Function: set-case-table table

これはカレントバッファーの大文字小文字テーブルを、tableにセットします。

Macro: with-case-table table body…

with-case-tableマクロはカレント大文字小文字テーブルを保存してから、tableをカレント大文字小文字テーブルにセットし、その後にbodyフォームを評価してから、最後に大文字小文字テーブルをリストアします。return値は、bodyの最後のフォームの値です。throwまたはエラー(Nonlocal Exitsを参照してください)により異常終了した場合でも、大文字小文字テーブルはリストアされます。

ASCII文字の大文字小文字変換を変更する言語環境(language environment)がいくつかあります。たとえばTurkishの言語環境では、ASCII文字の‘I’にたいする小文字は、Turkishの“dotless i”です。これは、(ASCIIベースのネットワークプロトコル実装のような)ASCIIの通常の大文字小文字変換を要求するコードに干渉する可能性があります。このような場合は、変数ascii-case-tableにたいしてwith-case-tableマクロを使用します。これにより、変更されていないASCII文字セットの大文字小文字テーブルが保存されます。

Variable: ascii-case-table

ASCII文字セットにたいする大文字小文字テーブルです。すべての言語環境セッティングにおいて、これを変更するべきではありません。

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

Function: set-case-syntax-pair uc lc case-table

この関数は、対応する文字のペア(一方は大文字、もう一方は小文字)を指定します。

Function: set-case-syntax-delims l r case-table

この関数は文字lrを、大文字小文字不変区切り(case-invariant delimiter)mpマッチングペアにします。

Function: set-case-syntax char syntax case-table

この関数はcharを、構文syntaxの、大文字小文字不変(case-invariant)とします。

Command: describe-buffer-case-table

このコマンドは、カレントバッファーの大文字小文字テーブルの内容にたいする説明を表示します。