国際化対応言語環境の利用ガイド

レンディションの作成

以下に示すプログラム例では「ArabicShaped」というタグを持つレンディションを使用して、XmNlabelString のタイプが XmCHARSET_TEXTXmLabel が作成されます。レンディションの作成には、「ar」(アラビア語ロケールのロケール名に対応) の XmNlayoutAttrObject が使用されます。また、その出力バッファには Numerals の値として NUMERALS_CONTEXTUAL を、ShapeCharset の値として「unicode-3.0」をそれぞれ指定するレイアウト修飾子文字列が使用されています。

ロケール固有のレイアウトモジュールにより、物理文字の出力バッファ内の入力テキストは 16 ビット Unicode 3.0 コードセットを使用して変換されます。下の例では入力テキストは ISO8859-6 で符号化されています。レイアウトロケールが明示的に指定されているため、ランタイムのロケール設定とは関係なく、このテキストは適切にレンダリングされます。

int n;
Arg args[10];
Widget w;
XmString labelString;
XmRendition rendition;
XmStringTag renditionTag;
XmRenderTable renderTable;
      /* alef lam baa noon taa - iso8859-6 */
labelString = XmStringGenerate("¥307¥344¥310¥346¥312¥", NULL
			                          XmCHARSET_TEXT, "ArabicShaped");
w = XtVaCreateManagedWidget("a label", xmLabelWidgetClass, parent,
                             XmNlabelString, labelString,
		                          XmNlabelType, XmSTRING,
                             NULL);
n = 0;
XtSetArg(args[n], XmNfontName, "-*-*-medium-r-normal-*-24-*-*-*-*-*-*-*");
      n++;
XtSetArg(args[n], XmNfontType, XmFONT_IS_XOC); n++;
XtSetArg(args[n], XmNlayoutAttrObject, "ar"); n++;
XtSetArg(args[n], XmNlayoutModifier, 
          "@ls numerals=:contextual, shapecharset=iso8859-6"); n++;
renditionTag = (XmStringTag) "ArabicShaped";
rendition = XmRenditionCreate(w, renditionTag, argcs
s, n);
renderTable = 
    XmRenderTableAddRenditions(NULL, &rendition, 1, XmREPLACE_MERGE);
XtVaSetValues(w, XmNrenderTable, renderTable, NULL);

レンディションの編集

以下に示すプログラム例では、TextField ウィジェットと RenderTable が 1 個の Rendition により作成されます。疑似リソース XmNlayoutAttrObjectXmNlayoutModifier は両方とも未指定の状態になっているため、デフォルト値 NULL が使用されます。このことは Rendition に関連付けされた LayoutObject が存在する場合、その LayoutObject がデフォルトのロケールのものであることを示しています。

サンプルプログラムが正しく機能するためには、使用するロケールのコードセットが ISO 8859-6 で、ロケール固有のレイアウトモードが IMPLICIT_BASIC アルゴリズムをサポートしている必要があります。コード例では、RenditionLayoutObjectImplicitAlg の値が RenditionXmNlayoutModifier の疑似リソース経由で変更されています。

int n;
Arg args[10];
Widget w;
	XmRendition rendition;
XmStringTag renditionTag;
XmRenderTable renderTable;
w = XmCreateTextField(parent, "text field", args, 0);
n = 0;
	XtSetArg(args[n], XmNfontName, "-*-*-medium-r-normal-*-24-*-*-*-*-*-*-*");
     n++;
	XtSetArg(args[n], XmNfontType, XmFONT_IS_XOC); n++;
renditionTag = (XmStringTag) "ArabicShaped";
rendition = XmRenditionCreate(w, renditionTag, args, n);
renderTable = 
    XmRenderTableAddRenditions(NULL, &rendition, 1, XmREPLACE_MERGE);
XtVaSetValues(w, XmNrenderTable, renderTable, NULL);
	....
n = 0;
XtSetArg(args[n], XmNlayoutModifier, "@ls implicitalg=basic");
     n++;
XmRenditionUpdate(rendition, args, n);

関連情報

XmDirectionXmText を参照してください。