国际语言环境指南

创建绘制

下面的代码使用 Rendition(其标记为“ArabicShaped”)来创建 XmLabel(其 XmNlabelString 属于 XmCHARSET_TEXT 类型)。Rendition 是用 “ar” (对应于阿拉伯语语言环境的语言环境名称)的 XmNlayoutAttrObject 和布局修饰符字符串(为输出缓冲区指定 NUMERALS_CONTEXTUALNumerals 值和 “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 小部件和 RenderTableXmNlayoutAttrObject XmNlayoutModifier 伪资源均未指定,因此缺省为 NULL。 该值意味着与 Rendition 关联的布局对象属于缺省语言环境(如果有的话)。

要使此示例正常工作,该语言环境必须设置为其代码集是 ISO 8859-6 并且特定于该语言环境的布局模块可支持 IMPLICIT_BASIC 算法的语言环境。Rendition LayoutObjectImplicitAlg 值已通过 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);