共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)

ローカライズされたテキストのクライアント間通信規約

次の情報は、コンポーネントがテキスト・データと通信するために ICCC (クライアント間通信規約) を使用する方法を説明し、ICCC 選択が実行される方法を理解するためのガイドラインを示します。XmText ウィジェット、XmTextField ウィジェット、dtterm コマンドはこのガイドラインを厳守しています。

ツールキットは国際化対応 ICCC 準拠のために拡張されています。XmTextXmTextField、およびdtterm の選択機構は、どの選択トランザクションでもデータとデータ・エンコーディングが確実に適切に一致するように拡張されています。これには標準的なカット・アンド・ペースト操作が含まれます。

アプリケーションの記述にツールキットを使用する開発者に対して、ツールキットはアプリケーションを ICCC 準拠にすることができます。しかし、ツールキット・ベースのアプリケーションと通信するアプリケーションを開発するためにその他の ICCC に準拠していないツールキットを使用する可能性のある開発者に対しては、以下の説明が役に立ちます。

所有側の選択

どんな所有側でも、XA_TARGETS がローカライズされたテキストで要求された場合、少なくとも次のアトム・リストを返します。

XA_TEXT が要求されると、所有側はテキストを属性セットのエンコーディング型と共に現在のロケールのコード・セットへそのまま返します (データ変換は行われません)。ロケールのコード・セットの名前を表すアトムが作成されます。

COMPOUND_TEXT が要求されると、所有側はローカライズされたテキストをコンパウンド・テキストに変換し、それを属性型 COMPOUND_TEXT で渡します。

XA_STRING が要求されると、所有側はローカライズされたテキストを XA_STRING に変換しようとします。テキスト文字列の中に XA_STRING に変換できない文字がある場合は、このオペレーションは失敗します。


注 -

XA_STRING は ISO8859-1 であるように定義されています。


選択の要求側

要求側は、テキスト・データが選択の所有側と通信されるとき、まず XA_TARGET を要求します。

次に、要求側は次のうち 1 つのアトムを次の優先順位で検索します。

要求側のロケールのコード・セットがターゲットの 1 つに一致する場合は、要求側はそのコード・セットを表すアトムを使用して要求を実行します。XA_TEXT アトムは、その他のアトムが見つからない場合にだけ使用されます。所有側が自分のエンコーディングを表す型と共に属性を返すので、要求側は自分のロケールのコード・セットに変換しようとします。

COMPOUND_TEXT または XA_STRING の型が要求された場合、要求側は XmbTextPropertyToTextList() 関数か XwcTextPropertyToTextList() 関数を使用して、テキストを要求側の現在のロケールのコード・セットに正しく変換しようとします。このような関数は、所有側クライアントと要求側クライアントが異なるコード・セットの下で実行しているときに使用されます。

COMPOUND_TEXT または XA_STRING から変換する場合、すべてのテキスト・データが変換を保証されるわけではありません。所有側と要求側の間で共通の文字だけが変換されます。

XmClipboard

XmClipboard も、XmText ウィジェットと XmTextField ウィジェットと共に、ICCC 準拠になるよう拡張されています。XmText ウィジェットと XmTextField ウィジェットを介してテキストがクリップボード上に置かれるとき、次の ICCC プロトコルが実行されます。

XmText ウィジェットと XmTextField ウィジェットを介してテキストがクリップボードから取り出されるとき、そのテキストは COMPOUND_TEXT または XA_STRING から現在のロケールのエンコーディングに変換されます。クリップボードのすべてのテキストは、コンパウンド・テキスト形式か文字列形式のいずれかであると想定されます。


注 -

テキストがクリップボード上に直接置かれるとき、アプリケーションは、形式またはアトム形式のエンコーディング型を、クリップボードに置くテキストと共に指定する必要があります。同様に、テキストがクリップボードから直接取り出される場合も、取り出す側のアプリケーションは、クリップボードのデータがどのようにエンコードされているかを見るために形式を確認して、適切なアクションを取る必要があります。


ウィンドウ・マネージャへウィンドウのタイトルとアイコン名を渡す

VendorShell クラスの XtNtitleEncoding リソースと XtNiconNameEncoding リソースのデフォルトは、None に設定されます。これは libXm.a ライブラリ使用時にのみ実行されます。libXt.a ライブラリはリソースのデフォルトとして XA_STRING を維持します。

これは、テキスト (タイトルとアイコン名) がローカライズされているという前提のもと、デフォルトで XmNtitle リソースと XmNiconName リソースがコンパウンド・テキストのような標準 ICCC 形式に変換されるように実行されます。

ユーザは XtNtitleEncoding リソースと XtNiconNameEncoding リソースを設定しない方が良いと思われます。その代わりに、XtNtitle リソースと XtNiconName リソースが、必ず実行中のクライアントの現在アクティブなロケールのエンコーディングでエンコードされた文字列であるようにしてください。None 値が使用される場合は、ツールキットはローカライズされたテキストを標準の ICCC 形式に変換します (通信されるエンコーディングは COMPOUND_TEXT または XA_STRING です)。 XtNtitleEncoding リソースと XtNiconNameEncoding リソースが設定されている場合は、 XtNtitle リソースと XtNiconName リソースはどんな方法でも変換されず、指定されたエンコーディングでウィンドウ・マネージャに通信されます。

通信されているウィンドウ・マネージャが ICCC 準拠だと想定すると、そのウィンドウ・マネージャはエンコーディング型 COMPOUND_TEXT か、XA_STRING か、あるいはその両方を使用できます。

XmBulletinBoard ウィジェット・クラスの XmNdialogTitle リソースを設定するとき、charset セグメントに制限があることに注意してください。X コンソーシアムの標準コンパウンド・テキスト・エンコーディングではない charset か、XmFONTLIST_DEFAULT_TAG に関連付けられていない charset の場合、テキスト・セグメントはローカライズされたテキストとして処理されます。ローカライズされたテキストは、ウィンドウ・マネージャに通信される前に、コンパウンド・テキストか、ISO8859-1 に変換されます。

ウィンドウ・マネージャは、クライアントから渡されたクライアントのタイトルとアイコン名を、現在のロケールのエンコーディングに常に変換できるように拡張されています。XmStringXmFONTLIST_DEFAULT_TAG 識別子を使用して作成されます。このように、クライアントのタイトルとアイコン名は、常にウィンドウ・マネージャのフォント・リストのデフォルトのフォント・リスト・エントリで描画されます。


注 -

これにより、コード・セットは異なるが文字セットが似ているクライアントが、タイトルをウィンドウ・マネージャに通信することが可能になります。たとえば、PC コード・クライアントと ISO8859-1 クライアントの両方が、ウィンドウ・マネージャのコード・セットに関係なくタイトルを表示できます。