本章では,charmapファイルと呼ばれる文字セット記述ファイルについて説明します。 このcharmapファイルは,文字エンコードとして文字シンボルを定義するもので, コード化文字セット,つまりコードセットに対するソース・ファイルです。
サポートされているすべてのコードセットは,固有のサブセットとしてPortable Character Set (PCS)を持ちます。PCSは,(標準シンボル名で一覧されている) 文字シンボル,およびその16進エンコードで構成されます。 表 3-1を参照してください。
charmapファイルは,次の要素で構成されています。
このセクション内の各宣言は,特殊シンボル名, 1つ以上のスペースまたはタブ文字,および値の順で構成されます。次のリストは, 宣言セクションに指定できる特殊シンボル名の説明です。
charmapファイルの定義の対象となるコードセット名を指定します。この値は, nl_langinfo (CODESET)サブルーチンで返される値を決定します。<code_set_name> が宣言されない場合,Portable Character Setの名前が使用されます。
<mb_cur_max>
コードセット内の文字の最大バイト数を指定します。値は1〜4の範 囲で有効です。省略時の値は1です。
<mb_cur_min>
コードセット内の文字の最小バイト数を指定します。 サポートされるコードセットはすべて,固有のサブセットとして Portable Character Setを持つため,この値は必ず1です。
<escape_char>
16進または8進表記のエンコードを示すエスケープ文字を指定します。 省略時の値はバックスラッシュ(\)です。
<comment_char>
charmapファイル内でのコメントを示すために使用される文字を指定します。 省略時の値は番号記号(#)です。
このヘッダは,文字シンボルとエンコードを対応させるセクションの先頭を指定します。
各文は,文字のシンボル名,およびその文字に対応するエンコードを指定します。 マッピング文は,次の形式で指定します。
<char_symbol> encoding
シンボル名は左山括弧(<)文字ではじまり,右山括弧(>)文字で終了します。 char_symbol (<および>で囲まれた名前)は,制御文字とスペース文字を除く, Portable Character Setのすべての文字を使用して指定できます。char_symbol に>を使用することもできます。この場合,最後の>を除くすべての>文字の前に, <escape_char>特殊シンボル名で指定されるエスケープ文字を指定します。
エンコードは1文字以上の文字定数で指定しますが,その最大文字数は, <mb_cur_max>特殊シンボル名で指定されます。エンコードは, 次の形式の10進数,8進数,または16進数の定数で指定します。
文字シンボル定義のサンプルを次に示します。
<A> \d65 #decimal constant <B> \x42 #hexadecimal constant <j10101> \x81\xA1 #multiple hexadecimal constants
シンボル名の範囲とこれに対応するエンコード値を定義することもできます。なお, 各シンボル名は,数値でない共通接頭辞を持ち,2番目のシンボル名の数値部分が, 最初のシンボル名の数値部分以上であることが必要です。この形式では, シンボル名値が,ゼロ文字以上の非数値文字,および1けた以上の 10進数の整数の順で構成されます。この指定形式は,一連のシンボル名を定義します。 たとえば,文字列 <j0101>...<j0104>は,シンボル名<j0101>, <j0102>,<j0103>,および <j0104>として,順に解釈されます。
シンボル名の範囲を定義する文の中で,指定されたエンコード値は, 範囲内の先頭のシンボル名の値に相当します。以降のシンボル名は, 昇順のエンコード値を持ちます。次にサンプル文を示します。
<j0101>...<j0104> \d129\d254
このサンプル文は,次のように解釈されます。
<j0101> \d129\d254 <j0102> \d129\d255 <j0103> \d130\d0 <j0104> \d130\d1
1つのシンボル名に対して複数のエンコードを割り当てることはできませんが, 文字によっては複数の共通名を持つため, 1つのエンコード値に対して複数の名前を作成することはできます。たとえば, .文字は,ピリオドと呼ぶこともあれば,終止符(full stop)と呼ぶこともあります。 両方の名前を,charmapファイルに指定できます。この例を次に示します。
<period> \x2e <full-stop> \x2e
コメントは,<comment_char> 特殊シンボル名で指定される文字で開始しなければなりません。 行全体がコメントの場合は,行の1桁目に,<comment_char> を指定することが必要です。
このトレーラは,マッピング文の終了を指定します。
サンプルcharmapファイルの一部を,次に示します。
CHARMAP <code_set_name> "ISO8859-1" <mb_cur_max> 1 <mb_cur_min> 1 <escape_char> \ <comment_char> # <NUL> \x00 <SOH> \x01 <STX> \x02 <ETX> \x03 <EOT> \x04 <ENQ> \x05 <ACK> \x06 <alert> \x07 <backspace> \x08 <tab> \x09 <newline> \x0a <vertical-tab> \x0b <form-feed> \x0c <carriage-return> \x0d END CHARMAP