複合文字列とフォント・リスト
MINERVA superseeded IF/Prolog. Please see http://www.ifcomputer.co.jp/MINERVA for details.

We discontinued to sell IF/Prolog Dec 31. 2003. For current customers, we continue to provide professional support for IF/Prolog until Dec 31, 2008.

複合文字列は、文字列の、言語に依存しないコード化ができるように設計されています。これらは、以下の異なるコンポーネントから構築されます。

文字セット指定子 方向指定子 テキスト (行)分離記号

フォント・リストは、文字セットとフォントの間のマッピングです。

複合文字列とフォント・リストは、マルチフォント/マルチ行文字列を作成するのに使用されます。

OSF/MotifのIF/Prolog言語バインディングでは、複合文字列やフォント・リストを結合したり分解するための特別な関数は必要ありません。これは、Prologのリストがそれらを直接表現できるからです。

複合文字列とフォント・リストのProlog表現は、xtSetValues/2を使ってwidgetのリソースを設定したり、xtGetValues/2を使ってwidgetのリソースを取得するのに使用されます。また、widgetのクラスの外部関数に対応する述語のパラメータとしても使用されます。

Prologからある述語に値を引き渡す時には、必要ならばフォント・リストと文字列に対して、リソースファイル中で使用されている文字列形式を使用することができます。この場合には、アトムが使用されます。

複合文字列はProlog中で、以下のコンポーネントの項のリストによって表現されます。

text(Text) AnyText [ Text_1, Text_2, ... ] charset(Charset) direction(Direction) separator

Text: アトム、可視文字列 AnyText: アトム(Textと同様だが、separatorを除く文字列) テキストのリスト: アトム、分離記号によって分離された可視文字列 Charset: アトム。ある文字セットに対する任意の名前、あるいは定数xmDefaultCharacterSet Direction: アトム。string_direction_l_to_r, string_direction_r_to_lのいずれか

例題: [ charset(chset1), text(text1), separator, charset(chset1), text(text2) ]

フォント・リストはProlog中では、FontName = CharacterSetのリストによって表現されます。

FontName: アトム、使用可能なサーバ・フォント名 CharacterSet: アトム、複合文字列中で使用される任意名

注意: xtGetValue/2によって得られたフォント・リストの値は、Prolog表現に変換されません。それは、フォント・リストの分解はC言語側でも行なえないからです。その代わりに、隠蔽された(opaque)アトムがアプリケーションに引き渡されます。これは後続のxtSetValues/2でのみ使用でき、フォント・リストをあるwidgetから別のwidgetへ引き渡すことを可能にします。

xmCvtXmStringToCT( +XmString, ?CompoundString) xmCvtCTToXmStringToCT( +CompoundString, ?XmString)

XmCvtXmStringToCT(),XmCvtCTToXmString()と同様の働きをします。

複合テキストを複合文字列に、あるいは逆に複合文字列を複合テキストに変換します。

?- xmInitialize(Toplevel, Toplevel, demo, [], []).

Toplevel = applicationShell_1

yes ?- xtCreateManagedWidget(pushButton, pushButton, xmPushButtonWidgetClass, applicationShell_1, [ labelString(label), fontList(fixed) ]).

yes ?- xtRealizeWidget(applicationShell_1).

yes ?- xtLoopWhileEvents. yes ?- xtLoopWhileEvents.

yes ?- xtSetValue(pushButton, labelString([ charset(c1), text(zeile1), separator, direction(string_direction_r_to_l), charset(c2), text(zeile2) ])).

yes ?- xtLoopWhileEvents. yes ?- xtLoopWhileEvents.

yes ?- xtGetValue(pushButton, labelString(CompoundString)).

CompoundString = [....]

yes ?- xtSetValue(pushButton, fontList(['*adobe*--14*'=c1, '*adobe*--18*'=c2])).

yes ?- xtLoopWhileEvents. yes ?- xtLoopWhileEvents.

?- _


戻る 続く..