m17n ライブラリ 1.8.4
|
コード変換に用いられる構造体. [詳解]
#include <m17n.h>
フィールド | |
int | lenient |
int | last_block |
unsigned | at_most |
int | nchars |
int | nbytes |
enum MConversionResult | result |
union { | |
void * ptr | |
double dbl | |
char c [256] | |
} | status |
void * | internal_info |
コード変換に用いられる構造体.
コード変換に用いられる構造体。最初の3つのメンバは変換を制御する。
int MConverter::lenient |
厳密な変換が必要でない場合に値を 0 以外にする。 デフォルトでは、変換は厳密である。
変換が厳密とは、デコードの際には最初の不正なバイトでコンバータが止まること、 エンコードの際には変換されるコード系でサポートされない最初の文字でコンバータが止まることを指す。 これらの場合、MConverter->result
はそれぞれ MCONVERSION_RESULT_INVALID_BYTE
かMCONVERSION_RESULT_INVALID_CHAR
となる。
変換が厳密でない場合には、デコードの際の不正なバイトはそのバイトのまま残る。 またエンコードの際には、不正な文字が Unicode 文字の場合には "<U+XXXX>" に、そうでない場合には "<M+XXXXXX>" に置き換えられる。
int MConverter::last_block |
バイト列の終端のブロックをデコードする際、または文字列の終端のブロックをエンコードする際は、値を 0 以外にする。この値は以下のように変換に影響する。
デコーディングの際に最後の数バイトが正しいバイトシークエンスを形成するには短すぎる場合:
値が 0 でなければ、変換はそのシークエンスの最初のバイトにおいて、エラー (MCONVERSION_RESULT_INVALID_BYTE) で終る。
値が 0 ならば、変換は成功して終る。 問題の数バイトはキャリーオーバとしてコンバータに保持され、変換の続きを行う際に変換するバイト列の前に付けられる。
エンコーディングの際にコード系が文脈依存の場合、
値が 0 でなければ、コンテキストを最初に戻すためのバイト列がソースの文字とかかわりなく変換の結果生成されることがある。
値が 0 ならば、そのようなバイト列は生成されない。
unsigned MConverter::at_most |
0 でなければ、変換される最大の文字数を指定する。
int MConverter::nchars |
以下の3つのメンバは変換の結果を表すためのものである。
最近にデコード/エンコードされた文字数。
int MConverter::nbytes |
最近にデコード/エンコードされたバイト数。
enum MConversionResult MConverter::result |
コード変換の結果を示すコード。
void* MConverter::ptr |
double MConverter::dbl |
char MConverter::c[256] |
union { ... } MConverter::status |
コード変換の状況に関する種々の情報。内容はコード系のタイプによって異なる。 status
はどのような型へのキャストに対しても安全なようにメモリアラインされており、また最低256バイトのメモリ領域が使えるようになっている。
void* MConverter::internal_info |
このメンバは内部的に使用され、アプリケーションプログラムは触れてはならない。