標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 | z/OS V1R2 |
#include <sys/layout.h>
int m_wtransform_layout(LayoutObject layout_object,
const wchar_t *InpBuf,
const size_t InpSize,
void *OutBuf,
size_t *Outsize,
size_t *InpToOut,
size_t *OutToInp,
unsigned char *Property,
size_t *InpBufIndex);
m_wtransform_layout() 関数は、Visual (MVS™) と Implicit (z/OS® UNIX) フォーマット間のデータの双方向 (Bidi) 変換処理に対するサポートの一部を構成しています。初期サポートは、アラビア語とヘブライ語のデータ用です。
入力テキストと出力テキストは、どちらもワイド文字ストリングです。m_wtransform_layout() 関数は、InpBuf の入力テキストを、layout_object の現行レイアウト値に従って変換します。
値のタイプが LayoutTextDescriptor であるレイアウト値は、InpBuf および OutBuf 引数の属性を示しています。InpBuf と OutBuf の両方の属性が同じ場合は、その特定のレイアウト値については、NULL 変換が実行されます。
InpBuf 引数は、処理されるソース・テキストを指定します。InpBuf は、内部状態をリセットする必要がある場合を除いて、NULL にすることはできません。
InpSize 引数は、変換によって処理される InpBuf 内の文字数です。この値は、変換後も変わっていません。-1 に設定された InpSize は、InpBuf のテキストが NULL コード・エレメントによって区切られることを示します。InpSize が -1 に設定されていない場合は、入力バッファーに NULL エレメントを入れることができます。これは、例えば、NULL で分離した幾つかのストリングのワン・ショット 変換に使用できます。
各バイトには、InpBufIndex が指すエレメントから始まる、InpBuf 内の対応するエレメントの、関連 Property 情報が入ります。
各 property バイトの右端の 4 ビットには、双方向環境の情報が入り (ActiveDirectional が True の場合)、NestingLevels を示します。0 ~ 15 の可能な値によって、InpBufIndex が指すエレメントから始まる、InpBuf 内の対応するエレメントのネスト・レベルを表します。ActiveDirectional が False の場合、NestingLevels ビットの内容は無視されます。
各 property バイトの左端のビットには、複合文字環境の新規セル・インディケーター が入ります。これは、新規セルの先頭に変換される InpBuf のエレメントについては値 1 に、ゼロ長 の複合文字エレメントが非複合文字と同じプレゼンテーション・セルにグループ化されるときには値 0 になります。この場合も、property の各エレメントは、InpBufIndex が指すエレメントから始まる、InpBuf 内のエレメントに対応しています (必ずしも、InpBuf の先頭ではない点を思い出してください)。
変換プロパティーが必要ない場合は、引数 Property を NULL にできます。
property の使用は、将来、他の環境の別の使用法に対応して拡張することができます。
変換が終わったときには、変換されなかった InpBuf 内の最初のエレメントへのオフセットが、InpBufIndex に入っています。サブストリング全体が正常に変換されると、InpBufIndex は、InpSize に定義された量だけ増分されます。
これらの各出力引数は、NULL にして、その特定の引数については出力が不要であることを指定できますが、意味のある作業を実行するためには、少なくとも 1 つの引数を非 NULL にする必要があります。
上記の可能な出力のほかに、layout_object は、変換関数の呼び出前後の方向状態を保持します。方向状態は、レイアウト値 TypeOfText、Orientation または ImplicitAlg のいずれかが、m_setvalues_layout() の呼び出しによって変更されるたびに、初期状態にリセットされます。
layout_object 引数は、m_create_layout() 関数から戻される LayoutObject を指定します。
OutBuf 引数は、変換後のデータを含みます。この引数を NULL ポインターとして指定し、変換データが不要であることを示すことができます。OutBuf 引数のエンコードは、layout_object に定義された ShapeCharset レイアウト値に左右されます。ActiveShapeEditing レイアウト値が設定されていない場合 (False)、OutBuf のエンコードは、layout_object に定義された LayoutObject に関連付けられたロケールのコード・セットと同じになることが保証されています。
入力時に、OutSize 引数によって出力バッファーのサイズをワイド文字の数で指定します。出力バッファーは、変換結果が十分に入る大きさにする必要があります。出力バッファーが小さいと、実行される変換は一部分だけになります。ActiveShapeEditing レイアウト値が設定されている場合 (True)、 OutBuf には、少なくとも InpSize に ShapeCharsetSize を乗算した結果が入る大きさを割り振る必要があります。
OutSize 引数にゼロが指定されているときは、関数が、変換後のテキストが入る出力バッファーのサイズを計算し、その結果をこのフィールドに入れて戻します。InpBuf および OutBuf に指定されたバッファーの内容、および InpBufIndex の値は変更されません。
OutSize = NULL の場合、EINVAL エラー条件が戻されます。
InpToOut 引数は、NULL ポインターでない場合には、InpBufIndex が指す値から、バッファー内のサブストリングの最後までである、InpBuf と同じワイド文字数の値の配列を指します。
出力時には、InpToOut の n 番目の値が、InpBuf の n 番目のワイド文字に対応しています。この値は、InpBuf の n 番目のワイド文字にある、変換後の ShapeCharset エレメントを示す、OutBuf のインデックス (ワイド文字単位) です。
InpBuf から OutBuf へのインデックス配列が必要でなければ、InpToOut には NULL を指定できます。
OutToInp 引数は、NULL ポインターでない場合には、OutBuf に含まれるのと同じワイド文字数の値の配列を指します。出力時には、OutToInp の n 番目の値が、OutBuf の n 番目のワイド文字に対応しています。この値は、OutBuf の n 番目のバイトにある論理コード・エレメントを示す、InpBufIndex によって指されるワイド文字で始まる、InpBuf 内のインデックスです。
OutBuf から InpBuf へのインデックス配列が必要でなければ、OutToInp には NULL を指定できます。
コード・エレメントのリオーダーなしでテキスト・ストリングの形状化を実行するには、layout_object に、TEXT_VISUAL に設定された入出力レイアウト値 TypeOfText を設定し、Orientation のインとアウトの両方に同じ値を設定する必要があります。
正常に実行された場合、m_wtransform_layout() は 0 を戻します。