下列程式碼建立一個 XmLabel其XmNlabelString為XmCHARSET_TEXT 類型,使用Rendition其標記為“ArabicShaped。” 該 Rendition是使用XmNlayoutAttrObject 的“ar”所建立(對應於阿拉伯語言環境的語言環境名稱)以及針對輸出緩衝區所指定的版面佈局修改符號字串NumeralsNUMERALS_CONTEXTUAL的值以及ShapeCharset “unicode-3.0”的值。
語言環境特定的版面佈局模組可將其輸入文字,轉換成使用 16 位元 Unicode 3.0 字碼集的實體字元編碼之輸出緩衝區。因為已經指定明確版面佈局語言環境,這段文字會獨立於執行階段語言環境設定適當地產生。在此範例中,輸入是使用 ISO 8859–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 widget 以及RenderTable使用單一的 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);