以下に示すプログラム例では、「ArabicShaped」というタグを持つ Rendition を使用して、XmNlabelString のタイプが XmCHARSET_TEXT の XmLabel が作成されます。Rendition の作成には、「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 により作成されます。擬似リソース XmNlayoutAttrObject および XmNlayoutModifier は両方とも未指定の状態になっているため、デフォルト値 NULL が使用されます。このことは Rendition に関連付けされたレイアウトオブジェクトが存在する場合、それがデフォルトロケールのものであることを示しています。
サンプルプログラムが正しく機能するためには、使用するロケールのコードセットが ISO 8859-6 で、ロケール固有のレイアウトモードが IMPLICIT_BASIC アルゴリズムをサポートしている必要があります。 コード例では、Rendition の LayoutObject の ImplicitAlg 値が Rendition の XmNlayoutModifier 擬似リソース経由で変更されています。
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);