MSymbol mconv_define_coding |
( |
const char * |
name, |
|
|
MPlist * |
plist, |
|
|
int(*)(MConverter *) |
resetter, |
|
|
int(*)(const unsigned char *, int, MText *, MConverter *) |
decoder, |
|
|
int(*)(MText *, int, int, unsigned char *, int, MConverter *) |
encoder, |
|
|
void * |
extra_info | |
|
) |
| | |
|
関数 mconv_define_coding() は、新しいコード系を定義し、それを name という名前のシンボル経由でアクセスできるようにする。 plist では定義するコード系のパラメータを以下のように指定する。
-
キーが
Mtype で値がシンボルの時
値はコード系のタイプを表し、Mcharset, Mutf, Miso_2022, Mnil のいずれかでなくてはならない。
タイプが Mcharset ならば extra_info は無視される。
タイプが Mutf ならば extra_info は MCodingInfoUTF へのポインタでなくてはならない。
タイプが Miso_2022ならば extra_info は MCodingInfoISO2022 へのポインタでなくてはならない。
タイプが Mnil ならば、引数 resetter, decoder, encoder を与えなくてはならない。extra_info は無視される。 それ以外の場合にはこれらは NULL でよく、 m17n ライブラリが適切なデフォルト値を与える。
-
キーが Mcharsets で値が plist の時
値はこのコード系でサポートされる文字セットのリストである。plistのキーは Msymbol、値は文字セットを示すシンボルでなくてはならない。
-
キーが Mflags 値が plist の時
タイプが Miso_2022 ならば、この値は, ISO 2022 インタプリタ用の制御フラッグを示す。plist のキーは Msymbol であり、値は以下のいずれかである。
-
キーが Mdesignationで値が plist の時
タイプが Miso_2022 ならば、値は各文字をどのように指示するかを示す。 plist のキーは Minteger、値は集合(graphic register) を示す数字である。N番目の要素の値は、文字セットリストの N 番目の文字セットに対応する。値が 0..3 であれば、文字セットがすでに G0..G3 に指示 されている。
値が負(-4..-1) であれば、初期状態では文字セットがどこにも指示されていないこと、必要な際には G0..G3 のそれぞれに指示することを意味する。
-
キーが Minvocationで値が plist の時
タイプが Miso_2022 ならば、値は各集合をどのように呼び出すかを示す。 plist の長さは 1 ないし 2 である。plist のキーは Minteger、値は集合(graphic register)を示す数字である。 最初の要素の値が図形文字集合左半面に呼び出される集合を示す。 plist の長さが 1 ならば、右半面には何も呼び出されない。 そうでければ、2つめの要素の値が図形文字集合右半面に呼び出される集合を示す。
-
キーが Mcode_unit で値が整数値の時
タイプが Mutf ならば、値はコードユニットのビット長であり、8, 16, 32 のいずれかである。
-
キーが Mbom で値がシンボルの時
タイプが Mutf でコードユニットのビット長が 16 か 32ならば、値は BOM (Byte Order Mark) を使用するかどうかを示す。値がデフォルト値の Mnil ならば、使用しない。値が Mmaybe ならばデコード時に BOM があるかどうかを調べる。それ以外ならば使用する。
-
キーが Mlittle_endian で値がシンボルの時
タイプが Mutf でコードユニットのビット長が 16 か 32 ならば、値はエンコードが little endian かどうかを示す。値がデフォルト値の Mnil ならば big endian であり、そうでなければ little endian である。
resetter はこのコード系用のコンバータを初期状態にリセットする関数へのポインタである。 この関数はコンバータオブジェクトへのポインタという1引数をとる。
decoder はバイト列をこのコード系に従ってデコードする関数へのポインタである。 この関数は以下の4引数をとる。
- デコードするバイト列へのポインタ
- デコードすべきバイト数
- デコード結果の文字を付加する M-text へのポインタ
- コンバータオブジェクトへのポインタ
decoder は成功したときには 0 を、失敗したときには -1 を返さなくてはならない。
encoder は M-text をこのコード系に従ってエンコードする関数へのポインタである。 この関数は以下の6引数をとる。
- エンコードするM-text へのポインタ
- M-text のエンコード開始位置
- M-text のエンコード終了位置
- 生成したバイトを保持するメモリ領域へのポインタ
- メモリ領域のサイズ
- コンバータオブジェクトへのポインタ
encoder は成功したときには 0 を、失敗したときには -1 を返さなくてはならない。
extra_info はコーディグシステムに関する追加情報を含むデータ構造へのポインタである。 このデータ構造の型 type に依存する。
- 戻り値:
処理に成功すれば mconv_define_coding() は name という名前のシンボルを返す。 エラーが検出された場合は Mnil を返し、外部変数 merror_code にエラーコードを設定する。
- エラー:
MERROR_CODING
|
|
関数 mconv_resolve_coding() は symbol がコード系を示していればそれを返す。 そうでなければコード系の名前として symbol を正規化し、それがコード系を表していれば正規化した symbol を返す。 そうでなければMnil を返す。 |
int mconv_list_codings |
( |
MSymbol ** |
symbols |
) |
|
|
関数 mchar_list_codings() は、コード系を示すシンボルを並べた配列を作り、 symbols でポイントされた場所にこの配列へのポインタを置き、配列の長さを返す。 |
|
関数 mconv_stream_converter() は、コード系 name 用のコードコンバータを作る。このコードコンバータは、ストリーム fp に結び付けられる。 これ以降のデコードおよびエンコードは、このストリームに対して行なわれる。
name は Mnil であってもよい。この場合は現在のロケール (LC_CTYPE) に関連付けられたコード系が使われる。
- 戻り値:
- もし処理が成功すれば、mconv_stream_converter() は作成したコードコンバータを返す。そうでなければ
NULL を返し、外部変数 merror_code にエラーコードを設定する。
- エラー:
MERROR_SYMBOL , MERROR_CODING
- 参照:
- mconv_buffer_converter()
|
|
関数 mconv_putc() は、コードコンバータ converter に現在結び付けられているバッファ領域あるいはストリームに文字 c を書き出す。文字のエンコードには converter のエンコーダが用いられる。実際に書き出されたバイト数は、converter のメンバー nbytes にセットされる。converter の内部状態は必要に応じて更新される。
- 戻り値:
- 処理が成功すれば、mconv_putc() は c を返す。エラーが検出された場合は
EOF を返し、外部変数 merror_code にエラーコードを設定する。
- エラー:
MERROR_CODING , MERROR_IO , MERROR_CHAR
- 参照:
- mconv_getc(), mconv_ungetc(), mconv_gets()
|
|
関数 mconv_gets() は、コードコンバータ converter に現在結び付けられているバッファ領域あるいはストリームから 1 行を読み込む。 バイト列のデコードには converter のデコーダが用いられる。デコードされた文字列は M-text mt の末尾に追加される。元のバイト列の終端改行文字は追加されない。 converter の内部状態は必要に応じて更新される。
- 戻り値:
- 処理が成功すれば、mconv_gets() は変更された mt を返す。もし1文字も読まずに EOF に遭遇した場合は、mt を変更せずにそのまま返す。エラーが検出された場合は
NULL を返し、 merror_code にエラーコードを設定する。
- エラー:
MERROR_CODING
- 参照:
- mconv_getc(), mconv_ungetc(), mconv_putc()
|
|