下面的代码使用 Rendition(其标记为“ArabicShaped”)来创建 XmLabel(其 XmNlabelString 属于 XmCHARSET_TEXT 类型)。Rendition 是用 “ar” (对应于阿拉伯语语言环境的语言环境名称)的 XmNlayoutAttrObject 和布局修饰符字符串(为输出缓冲区指定 NUMERALS_CONTEXTUAL 的 Numerals 值和 “unicode-3.0.” 的 ShapeCharset 值)创建的
语言环境的特定布局模块将其输入文本转移到使用 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);
下面的代码用单个 Rendition 创建 TextField 小部件和 RenderTable。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);