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

リソースファイルのレンダーテーブルの作成

適切に国際化されたアプリケーションではレンディションおよびレンダーテーブルを、リソースファイルに指定すべきです。レンダーテーブルがファイルとして指定される場合、プログラムの実行ファイルはロケールごとの特定の要求に依存しなくなるため、ロケールの要求に応じて簡単にカスタマイズを行うことができます。

レンダーテーブルをリソースファイルとして指定する場合、次の構文が用いられます。resource_spec:[tag[, tag]*]

ここで tag には、レンディションの XmNtag リソースに適した文字列を指定します。

この行により、指定に従って 1 つまたは複数のレンディションを含む最初のレンダーテーブルが作成されます。レンディションは指定されたタグに添付されます。

resource_spec[*|.] rendition[*|.]resource_name: value

以下の例では、XmRendition に関連付けられた CTL リソースのうち、リソースファイルを使用して設定できるものを紹介します。レイアウトオブジェクトを有効にするには、fontTypeFONT_IS_XOC に設定されている必要があります。@ls を使って指定された layoutModifier はレンディションオブジェクトによりレイアウトオブジェクトに受け渡されます。

layoutModifier を使ってレイアウトオブジェクト上に設定可能なリソースの完全な一覧については、『CAE Specification: Portable Layout Services: Context-dependent and Directional Text』(The Open Group: Feb 1997; ISBN 1-85912-142-X; document number C616) を参照してください。


例 6–3 アプリケーションにおけるレンダーテーブルの作成

レンダーテーブルを作成するには、テーブルを構成するレンディションがアプリケーションプログラムにより少なくとも 1 個は作成されている必要があります。XmRenderTableAddRenditions() 関数は新しいレンディションをレンダーテーブルに追加します。新しいレンダーテーブルを作成するには、既存のレンダーテーブル名の代わりに NULL を引数に指定して XmRenderTableAddRenditions() 関数を使用します。

以下に示すプログラム例では、XmNfontTypeXmFONT_IS_XOC に設定して作成されたレンディションを使用してレンダーテーブルが作成されます。

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=nominal:contextual, shapecharset=iso8859-6"); n++;
renditionTag = (XmStringTag) "ArabicShaped";
rendition = XmRenditionCreate(w, renditionTag, args, n);
renderTable = 
    XmRenderTableAddRenditions(NULL, &rendition, 1, XmREPLACE);
XtVaSetValues(w, XmNrenderTable, renderTable, NULL);