Previous: Case Conversion, Up: Strings and Characters


4.9 大文字小文字テーブル

特別な大文字小文字テーブル(case table)をインストールすれば、 大文字小文字変換をカスタマイズできます。 大文字小文字テーブルは、大文字と小文字の対応関係を指定します。 このテーブルは、Lispオブジェクトの大文字小文字変換関数(前節参照)と バッファ内のテキストに作用する大文字小文字変換関数(see Case Changes)の 両方に影響します。 各バッファごとに大文字小文字テーブルがあります。 新たなバッファの大文字小文字テーブルを初期化するために使う 標準の大文字小文字テーブルもあります。

大文字小文字テーブルは、サブタイプがcase-tableである 文字テーブル(see Char-Tables)です。 この文字テーブルは、各文字を対応する小文字に対応付けます。 これには3つの追加スロットがあり、関連するテーブルを保持します。

upcase
upcase(大文字)テーブルは、各文字を対応する大文字に対応付ける。
canonicalize
canonicalize(正則)テーブルは大文字小文字に関連する1組の文字群を その文字群の特定のメンバに対応付ける。
equivalences
equivalences(同値)テーブルは、大文字小文字に関連する1組の文字群の各要素を その文字群内のつぎの文字に対応付ける。

単純な場合、必要なことは、小文字への対応付けを指定するだけです。 関連する3つのテーブルはこの対応付けから自動的に計算されます。

言語によっては、大文字と小文字の対応関係が1対1でないことがあります。 2つの異なる小文字が同じ大文字に対応することがあります。 このような場合、大文字から小文字への対応付けと、 小文字から大文字への対応付けの両方を指定する必要があります。

追加のテーブルcanonicalize(正則)は、各文字を正則文字に対応付けます。 2つの任意の文字が大文字小文字変換で関連付けられている場合、 その2つの文字は同一の正則文字を持ちます。 たとえば、‘a’と‘A’は、大文字小文字変換で関連付けられているので、 これらは同一の正則文字を持つはずです (両方の文字に対して‘a’であるか、両方の文字に対して‘A’である)。

追加のテーブルequivalences(同値)は、 同じ正則クラス(同一の正則文字を持つ文字群)の文字を巡回して対応付けます。 (普通のASCIIでは、‘a’を‘A’に対応付け、 ‘A’を‘a’に対応付ける。 各正則クラスについても同様。)

大文字小文字テーブルを作成するときには、 canonicalize(正則)にはnilを指定できます。 そうすると、Emacsはこのスロットを小文字と大文字の対応付けから埋めます。 equivalences(同値)にもnilを指定できます。 そうすると、Emacsはこのスロットをcanonicalize(正則)から埋めます。 実際に使用している大文字小文字テーブルでは、 これらの要素はnil以外です。 canonicalize(正則)を指定せずに equivalences(同値)を指定しないでください、

つぎに、大文字小文字テーブルを操作する関数を示します。

— Function: case-table-p object

この述語は、objectが正しい 大文字小文字テーブルならばnil以外を返す。

— Function: set-standard-case-table table

この関数は、tableを標準の大文字小文字テーブルとし、 これ以降に作成する任意のバッファに使用できるようにする。

— Function: standard-case-table

これは、標準の大文字小文字テーブルを返す。

— Function: current-case-table

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

— Function: set-case-table table

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

以下の3つ関数は、非ASCII文字集合を定義するパッケージ向けの 便利なサブルーティンです。 これらは、指定した大文字小文字テーブルcase-tableを変更します。 さらに、標準の構文テーブルも変更します。 See Syntax Tables。 普通、標準の大文字小文字テーブルを変更するためにこれらの関数を使います。

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

この関数は対応する大文字と小文字を指定する。

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

この関数は、文字lrを 大文字小文字不変区切りの対応する対にする。

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

この関数は、charを構文syntaxの大文字小文字不変にする。

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

このコマンドは、カレントバッファの大文字小文字テーブルの内容を記述する。