--- /tmp/DOCMAN26tCd5P 2024-05-31 08:27:26.124326726 +0900
+++ /tmp/DOCMAN2Nqq4hB 2024-05-31 08:27:26.124326726 +0900
@@ -1,8 +1,10 @@
3. 文字集合の扱い
-skf での文字集合は、B-Right/V 以外の文字集合を扱う場合には、以下のように階層で管理される。
+skf での文字集合は、B-Right/V 以外の文字集合を扱う場合には、以下のように
+階層で管理される。
- (1) charset: 特定の文字を集めた集合の各要素に番号を振ったもの。いわゆる符号化文字集合。
+ (1) charset: 特定の文字を集めた集合の各要素に番号を振ったもの。いわゆる
+符号化文字集合。
ex) ASCII, JIS X 0208(1990) など
(2) codeset: charset を最大 6 つ組にして、名前を付けたもの
ex) euc-JP など
@@ -17,22 +19,34 @@
--show-supported-codeset で表示される文字集合
MIME で、エンコーディングとして指定される文字集合
- 以下、内部のハンドリングを順に説明する。B-Right/V の場合については別章で説明する。
+ 以下、内部のハンドリングを順に説明する。B-Right/V の場合については別章
+で説明する。
3.1 charset
- skf で使う charset の定義は、in_code_table.c で配列構造、名前の両方が定義されている。
- また、外部テーブルを読み込むものに関しては、関連 charset のみが dyn_table.c に定義されているが、文字集合に関する定義に関しては (過不足はあるが) in_code_table.c と同じ文字集合の定義である (使うフィールドの関係で、dyn_table.c の方には定義されていないものが多少ある)。また、charset は IANA 定義に即して全体が8種類に大別され、skf 内部では (種類、種類内の通番) の二パラメータで個々の charset を認識している。
+ skf で使う charset の定義は、in_code_table.c で配列構造、名前の両方が
+定義されている。
+ また、外部テーブルを読み込むものに関しては、関連 charset のみが dyn_table.
+c に定義されているが、文字集合に関する定義に関しては (過不足はあるが) in_code
+_table.c と同じ文字集合の定義である (使うフィールドの関係で、dyn_table.
+c の方には定義されていないものが多少ある)。また、charset は IANA 定義に
+即して全体が8種類に大別され、skf 内部では (種類、種類内の通番) の二パラ
+メータで個々の charset を認識している。
(1) IANA 定義 1-octet 94 文字集合
(2) IANA 定義 1-octet 96 文字集合
(3) IANA 定義 1-octet 94 文字中間バイトあり集合
(4) IANA 定義 マルチバイト 3-octet 94 文字集合
(5) IANA 定義 マルチバイト 4-octet 94 文字集合
- (6) マイクロソフト/IBM/Apple コードセット文字集合 (skf-1.95 以降でのみ存在)
+ (6) マイクロソフト/IBM/Apple コードセット文字集合 (skf-1.95 以降でのみ
+存在)
(7) その他の文字集合
(8) オーバレイ文字集合
-charset のエンコーディングは、上記のうちのどのカテゴリに属しているか、つぎに具体的な charset 名で、暗示的に指示され、構造体内には直接指定するための情報は持たない。また、各 charset は、内部に当該文字集合から Unicode に変換するためのテーブルを持つ。その内部構造体定義は、convert.h 定義の iso_byte_defs である。定義を以下に示す。
+charset のエンコーディングは、上記のうちのどのカテゴリに属しているか、つ
+ぎに具体的な charset 名で、暗示的に指示され、構造体内には直接指定するた
+めの情報は持たない。また、各 charset は、内部に当該文字集合から Unicode
+に変換するためのテーブルを持つ。その内部構造体定義は、convert.h 定義の
+iso_byte_defs である。定義を以下に示す。
/* --------------------------------------------------------------- */
struct iso_byte_defs { /* coded charset definitions */
@@ -50,41 +64,65 @@
};
3.1.1 defschar
- IANA 定義の文字集合に関しては、呼び出しシーケンスの最終文字 (指示文字) であり、それ以外では skf 内部で定義したものである。この文字は、skf で外部テーブルを読み込む際のテーブルファイル名の一部として使用される。
+ IANA 定義の文字集合に関しては、呼び出しシーケンスの最終文字 (指示文字)
+ であり、それ以外では skf 内部で定義したものである。この文字は、skf で外
+部テーブルを読み込む際のテーブルファイル名の一部として使用される。
3.1.2 char_width
1,2,4 のいずれかであり、各々以下の意味である。3.1.3 を参照のこと。
- 1: 元文字集合は 1-octet であり、変換先の Unicode のコード位置は U+10000 未満
- 2: 元文字集合は複数バイトであり、変換先の Unicode のコード位置は U+10000 未満
- 4: 元文字集合は複数バイトであり、変換先の Unicode のコード位置は U+10000 超
+ 1: 元文字集合は 1-octet であり、変換先の Unicode のコード位置は U+10000
+ 未満
+ 2: 元文字集合は複数バイトであり、変換先の Unicode のコード位置は U+10000
+ 未満
+ 4: 元文字集合は複数バイトであり、変換先の Unicode のコード位置は U+10000
+ 超
3.1.3 unitbl, uniltbl
- 元文字集合の番号を添字として用い、Unicode の符号位置を引くためのテーブル。速度の関係で、変換先に U+10000 以上の符号位置が含まれる場合を uniltbl に (skf_ucode の配列)、そうでない場合を unitbl に (unsigned short の配列) に格納する。上記の 3.1.2 の定義と整合性がとれていない場合はクラッシュするので、新規に定義する場合は注意。
+ 元文字集合の番号を添字として用い、Unicode の符号位置を引くためのテーブ
+ル。速度の関係で、変換先に U+10000 以上の符号位置が含まれる場合を uniltbl
+ に (skf_ucode の配列)、そうでない場合を unitbl に (unsigned short の配
+列) に格納する。上記の 3.1.2 の定義と整合性がとれていない場合はクラッシ
+ュするので、新規に定義する場合は注意。
3.1.4 table_len
- 3.1.3 のテーブルの配列の要素数。C 流に 0-origin であることに注意。元文字集合が 1-octet の場合は通常 128 (その他の文字集合では 256 の場合がある)、マルチバイト集合の場合は符号依存。
+ 3.1.3 のテーブルの配列の要素数。C 流に 0-origin であることに注意。元文
+字集合が 1-octet の場合は通常 128 (その他の文字集合では 256 の場合がある)、
+マルチバイト集合の場合は符号依存。
3.1.5 is_kana
- その charset の持つ文字属性を設定するためのフィールドである。また、入力テーブルのファイル名の生成に用いる文字属性を指定する。詳細は convert.h 参照。
+ その charset の持つ文字属性を設定するためのフィールドである。また、入
+力テーブルのファイル名の生成に用いる文字属性を指定する。詳細は convert.
+h 参照。
3.1.6 lang
- その文字集合の意図している言語を指定する。iso-639-1 に、skf 内部で使用するための作業用「言語」を加えたものである。定義は skf.h 中で行われている。大別して以下の 4 種類がある。
+ その文字集合の意図している言語を指定する。iso-639-1 に、skf 内部で使用
+するための作業用「言語」を加えたものである。定義は skf.h 中で行われてい
+る。大別して以下の 4 種類がある。
- 1) iso-639-1 定義のもの: 名前二文字を、ラテン大文字二字で記載
+ 1) iso-639-1 定義のもの: 名前二文字を、ラテン大文字二字で記載
2) L_NU ('NU'): 言語ニュートラルであることを示す
- L_UNI, L_NUN: Unicode 判定での言語ニュートラルを示す
- 3) M_**: 強言語であることを示す。言語の扱いの節参照のこと。
- 4) そのほか: 言語混在を示す定義がいくつか存在する。
+ L_UNI, L_NUN: Unicode 判定での言語ニュートラルを示す
+ 3) M_**: 強言語であることを示す。言語の扱いの節参照
+のこと。
+ 4) そのほか: 言語混在を示す定義がいくつか存在する。
3.1.7 desc, cname
- desc はその文字集合の (説明付きの) 正式名。cname は文字集合として参照されるときの代表名として使われる名称。cname は原則として IANA character set, rfc-1345, Microsoft 社 Internet Explorer 文字集合名を、この順序の優先順位でベースとして定義している。alias は、過去の経緯から skf.c で定義されている。
+ desc はその文字集合の (説明付きの) 正式名。cname は文字集合として参照
+されるときの代表名として使われる名称。cname は原則として IANA character
+set, rfc-1345, Microsoft 社 Internet Explorer 文字集合名を、この順序の優
+先順位でベースとして定義している。alias は、過去の経緯から skf.c で定義
+されている。
3.1.8 hook
- unitbl、uniltbl を動的に生成する文字集合の場合、テーブルを実際に生成するための関数を指すポインタ。この値が NULL でないとき、そのテーブルを最初に使用する際に、使用前にこのポインタの指す関数が引数なしで呼ばれる。
+ unitbl、uniltbl を動的に生成する文字集合の場合、テーブルを実際に生成す
+るための関数を指すポインタ。この値が NULL でないとき、そのテーブルを最初
+に使用する際に、使用前にこのポインタの指す関数が引数なしで呼ばれる。
3.2 codeset
- skf で使用する codeset は、out_code_table.c 中で構造体定義されており、入出力両方で用いる。構造体の定義は以下の通りで、定義自体は convert.h にある。
+ skf で使用する codeset は、out_code_table.c 中で構造体定義されており、
+入出力両方で用いる。構造体の定義は以下の通りで、定義自体は convert.h に
+ある。
/* --------------------------------------------------------------- */
struct in_codeset_defs {
@@ -125,18 +163,34 @@
};
3.2.1 g0def, g1def, g2def, g3def, g0adef, ogldef
- codeset で使用する charset を定義する。g0def, g1def, g2def, g3def は、順に iso-2022 の G0, G1, G2, G3 に当該 codeset で初期設定されている charset を示す。g0adef は iso-2022-jp での JIS X 0208 のように、G0 に呼び出して切り変え使用することを前提とする charset を設定する。
- ogldef は、ラテン文字部を出力する際に用いる charset である。入力サイドでは用いない。
+ codeset で使用する charset を定義する。g0def, g1def, g2def, g3def は、
+順に iso-2022 の G1, G2, G3, G4 に当該 codeset で初期設定されている charset
+ を示す。g0adef は iso-2022-jp での JIS X 0208 のように、G0 に呼び出して
+切り変え使用することを前提とする charset を設定する。
+ ogldef は、ラテン文字部を出力する際に用いる charset である。入力サイド
+では用いない。
+ また、g0def には1バイト文字集合のみ指定可能である。
実際の出力に関しては、出力生成に関する章を参照のこと。
3.2.2 encode, alt_encode
- 出力時のエンコーディング方法を指定するパラメータの一つ。encode は、出力時に使うルーチンの指定と、そのルーチンに与えるパラメータ指定の両方に使われ、このパラメータに所定のマスクを行った値が、出力制御変数である conv_cap にセットされる。alt_encode は現在未使用。
+ 出力時のエンコーディング方法を指定するパラメータの一つ。encode は、出
+力時に使うルーチンの指定と、そのルーチンに与えるパラメータ指定の両方に使
+われ、このパラメータに所定のマスクを行った値が、出力制御変数である conv_cap
+ にセットされる。alt_encode は現在未使用。
3.2.3 omap_typ
- 入出力時のエンコーディング方法を指定するパラメータの一つ。omap_typ で指定するのは、3.2.1 で指定した各テーブルのハンドリング方法である。現在はパラメータとして値をセットしているが、1.9x (<=1.95) では内部では未使用。
-
-3.2.4 o_iso_ascii_index, o_iso_latin_index, o_iso_symbol_index, o_iso_kana_index, o_iso_cjk_a_index, o_iso_kanji_index, o_iso_y_index, o_iso_hngl_index, o_iso_compat_index, o_iso_cjk_b_index, o_iso_cjk_c_index, o_iso_prv_index, o_iso_his_index, o_iso_note_index, o_iso_alt_index;
- 出力用の、Unicode から対象文字集合への変換テーブルを指定する。値は、対応する領域に対する変換テーブルを格納する構造体配列へのインデックス、または -1 (テーブルがないことを示す) である。テーブルは領域毎に分かれており、対応領域は以下の通り。
+ 入出力時のエンコーディング方法を指定するパラメータの一つ。omap_typ で
+指定するのは、3.2.1 で指定した各テーブルのハンドリング方法である。現在は
+パラメータとして値をセットしているが、1.9x (<=1.95) では内部では未使用。
+
+3.2.4 o_iso_ascii_index, o_iso_latin_index, o_iso_symbol_index, o_iso_kana_in
+dex, o_iso_cjk_a_index, o_iso_kanji_index, o_iso_y_index, o_iso_hngl_index,
+ o_iso_compat_index, o_iso_cjk_b_index, o_iso_cjk_c_index, o_iso_prv_index,
+ o_iso_his_index, o_iso_note_index, o_iso_alt_index;
+ 出力用の、Unicode から対象文字集合への変換テーブルを指定する。値は、対
+応する領域に対する変換テーブルを格納する構造体配列へのインデックス、また
+は -1 (テーブルがないことを示す) である。テーブルは領域毎に分かれており、
+対応領域は以下の通り。
o_iso_ascii_index: U+000000 - U+00007f
o_iso_latin_index: U+0000a0 - U+001fff
o_iso_symbol_index: U+002000 - U+002fff
@@ -154,21 +208,32 @@
o_iso_alt_index: 予備
3.2.5 o_patch
- 出力テーブルを動的に生成する codeset の、出力パッチテーブルを指すポインタである。charset 側と異なり関数ではない。パッチテーブルの構造については、テーブル生成の章参照。
+ 出力テーブルを動的に生成する codeset の、出力パッチテーブルを指すポイ
+ンタである。charset 側と異なり関数ではない。パッチテーブルの構造について
+は、テーブル生成の章参照。
3.2.6 oconv_type
- 出力テーブルのファイル名の生成に用いる文字属性を指定する。実際の文字集合の文字属性と不一致となっている場合があるので注意。oconv.h に詳細定義がある。
+ 出力テーブルのファイル名の生成に用いる文字属性を指定する。実際の文字集
+合の文字属性と不一致となっている場合があるので注意。oconv.h に詳細定義が
+ある。
3.2.7 lang
- その文字集合の意図している言語を指定する。iso-639-1 に、skf 内部で使用するための作業用「言語」を加えたものである。定義は skf.h 中で行われており、charset の定義に優先する。大別して以下の 4 種類がある。
+ その文字集合の意図している言語を指定する。iso-639-1 に、skf 内部で使用
+するための作業用「言語」を加えたものである。定義は skf.h 中で行われてお
+り、charset の定義に優先する。大別して以下の 4 種類がある。
- 1) iso-639-1 定義のもの: 名前二文字を、ラテン大文字二字で記載
+ 1) iso-639-1 定義のもの: 名前二文字を、ラテン大文字二字で記載
2) L_NU ('NU'): 言語ニュートラルであることを示す
- L_UNI, L_NUN: Unicode 判定での言語ニュートラルを示す
- 3) M_**: 強言語であることを示す。言語の扱いの節参照のこと。
- 4) そのほか: 言語混在を示す定義がいくつか存在する。
+ L_UNI, L_NUN: Unicode 判定での言語ニュートラルを示す
+ 3) M_**: 強言語であることを示す。言語の扱いの節参照
+のこと。
+ 4) そのほか: 言語混在を示す定義がいくつか存在する。
3.2.8 desc, cname
- desc はその文字集合の (説明付きの) 正式名。cname は文字集合として参照されるときの代表名として使われる名称。cname は原則として IANA character set, rfc-1345, Microsoft 社 Internet Explorer 文字集合名を、この順序の優先順位でベースとして定義している。MIME の検索には原則として cname を用い、Alias は skf.c で ic, oc 用の指定文字列と合わせて定義されている。
+ desc はその文字集合の (説明付きの) 正式名。cname は文字集合として参照
+されるときの代表名として使われる名称。cname は原則として IANA character
+set, rfc-1345, Microsoft 社 Internet Explorer 文字集合名を、この順序の優
+先順位でベースとして定義している。MIME の検索には原則として cname を用い、Ali
+as は skf.c で ic, oc 用の指定文字列と合わせて定義されている。