WML 文件格式

用途

生成变量 UIL 编译器组件。

描述

小部件元语言功能( WML )用于根据小部件集生成用户界面语言(UIL)编译器的可变组件。 使用 WML 该工具,您可以为AIXwindows 控件集添加新的UIL控件支持,或为全新的控件集添加支持。

文件格式

WML 文件为ASCII格式文件,可使用任何标准文本编辑器进行修改。 它们位于 tools/wml 目录 WML 下,文件后缀为 .wml。 Motif AIXwindows 控件集的说明详见 文件 motif.wml。 这也是使用该 WML 功能时的默认 WML 文件。

在创建文件 WML 以添加新控件或修改控件特性时,您可以复制该 motif.wml 文件并进行修改。 如果要创建新的窗口小部件集以与 UIL 配合使用,请创建一个全新的文件。 无论哪种情况,该 motif.wml 文件都是语法的一个良好 WML 范例,在尝试编写自己的 WML 文件之前,它能帮助您熟悉该语言。

WML 文件具有与UIL结构相似的基本语法。 WML 语法由以下元素构成:

您可以在语法中的任何位置使用空格,制表符或换行符,只要它们不分割关键字或字符串即可。 注释以换行字符结束。 元素在语法中的顺序并不重要。

显示的窗口小部件元语言语法示例使用以下附加约定:

描述
[ ] 指示可选元素。
... 指示语法的元素可以重复的位置。
| 指示多个项中的选项。

注释

您可以在文件 WML 中添加注释。 注释具有以下语法:

[AnyElement]!AnyComment

注释以! 开头。 (惊叹号) ,并延伸至行末。 注释可以单独在一行上开始,也可以跟在另一个元素的任何部分之后。 注释并不会更改任何其他元素的含义。 例如:

!This is a comment
!   that spans two lines.
DataType   !This is a comment that follows code.

数据类型定义

数据类型定义 注册文件中使用的所有资源数据类型。 您必须注册文件 WML 中使用的所有数据类型。 数据类型定义具有以下语法:

DataType AnyDatatype [{InternalLiteral = InternalName | DocName = "String"; [...]}]; [...]

数据类型定义以 DataType 关键字开头。 DataType 关键字后面是可以使用以下内容修改的数据类型列表:

描述
InternalLiteral 强制数据类型名称的内部符号表字面值定义的值。 此修饰符仅用于规避硬编码到 UIL 编译器中的符号表定义,并且应该谨慎使用。
DocName 提供任意字符串以在文档中使用。 此字符串为数据类型提供不同的名称,或者为数据类型提供单个名称 (如果数据类型具有别名)。

例如:

DataType OddNumber {DocName="OddNumber";};
         NewString;

字符集定义

字符集定义 注册 AIXwindows Toolkit 名称和其他信息以获取 UIL 中使用的字符集名称。 字符集定义的语法如下所示:

AnyCharacterSetCharacterSet { [ 字体列表元素标签 | Xm字符集名称 ] = " 字符串 "; [ 别名 = " 字符串 "... ; | 方向 = [ 从左到右 | 从右到左 ] ; | 解析方向 = [ 从左到右 | 从右到左 ] ; | 字符大小 = [ 单字节 | 双字节 ] ; ] [... ] }; [... ]

字符集定义以 CharacterSet 关键字开头。 CharacterSet 关键字后面是可以使用以下内容修改的字符集列表:

描述
FontListElementTag | XmStringCharsetName 指定字符集合的名称。 指定的集合将成为所创建的复合字符串段的字符集组成部分。 必须指定这些字符集中的一个。
别名 指定字符集名的一个或多个别名。 每个别名都可以在 UIL 中使用以引用相同的字符集。
方向 指定使用此字符集所创建的复合字符串段的方向。 默认值为 LeftToRight.
ParseDirection 指定使用此字符集创建复合字符串段时对输入字符串进行语法分析的方向。 如果未指定此项,那么 方向 的值为缺省值。
CharacterSize 指定在使用此字符集创建的复合字符串段的每个字符中的字节数。 缺省值为 OneByte

字符集定义语法的一个示例如下所示:

CharacterSet
   iso_latin1
                 { XmStringCharsetName = "ISO8859-1";
                                  Alias = "ISOLatin1"; } ;
   iso_hebrew_lr
                 { XmStringCharsetName = "ISO8859-8";
                                  Alias = "iso_latin8_lr";
                                  Direction = RightToLeft;
                                  ParseDirection = LeftToRight; } ;
   ksc_korean
                 { XmStringCharsetName = "KSC5601.1987-0";
                                  CharacterSize = TwoByte; };

枚举集定义

枚举集定义 注册 AIXwindows Toolkit 中使用的命名常量以指定特定资源值。 枚举集定义具有以下语法:

EnumerationSet ResourceName : ResourceType { EnumerationValueName ; [...] };

枚举集定义以 EnumerationSet 关键字开头。 对于定义的每个枚举集,将列出资源的名称和类型。 资源名称是 AIXwindows Toolkit 资源名称,其开头的 XmN 前缀已除去,首字母大写。 例如, AIXwindows Toolkit 资源的名称 XmNrowColumnType 应为 RowColumnType. 资源类型是资源的数据类型; 对于大多数资源来说,这是整数数据类型。 在资源名称和类型后面是可以用作资源设置的枚举值名称的列表。 这些名称与 AIXwindows Toolkit 中的那些名称相同。

枚举集定义语法的一个示例如下所示:

EnumerationSet
   RowColumnType: integer
        { XmWORK_AREA; XmMENU_BAR; XmMENU_POPUP;
          XmMENU_PULLDOWN; XmMENU_OPTION; };

控制列表定义

控制列表定义 将名称分配给控件组。 您可以在后续的类定义中使用这些控制列表,以简化文件的 WML 结构。 控制列表定义具有以下语法:

AnyControlListControlList [ { AnyControl; [...] } ];

控制列表定义以 ControlList 关键字开头。 ControlList 关键字后面是任意数量的控制列表定义。 控制列表定义由一个控制列表名称后跟它所代表的控制集组成。 例如:

ControlList
        Buttons {PushButton;
                RadioButton;
                CascadeButton;
                NewCascadebutton; } ;

必须将控制列表中指定的每个控件定义为文件中的类。

类定义

类定义 描述特定窗口小部件类。 包含在此描述中的是它在类层次结构,工具箱便利功能,资源和控件中的位置。 对于要在 UIL 中支持的窗口小部件集中的每个窗口小部件或小配件,应该有一个类定义。 类定义具有以下语法:

ClassName : MetaClass | 控件 | 小部件 [ { [ SuperClass = 类名; | ParentClass = 父类名; | InternalLiteral = 内部名; | 别名 = 别名; | ConvenienceFunction = 便捷函数; | WidgetClass = WidgetClass ; | DocName = " 字符串 "; | DialogClass = | 假; | 资源 { AnyResourceName [ { 默认值 = 新默认值; | 排除 = | 假; [...] } ]; [...] }; | 控件 { 任意控件名; [...] }; 子元素 { 任意子元素名; [...] }; [...] ] } ];

类定义以 关键字开头。 对于定义的每个类,都将列出类的名称以及该类是元类,窗口小部件还是小配件。 可以使用以下方法修改每个类定义:

描述
SuperClass 指示父级类的名称。 只有层次结构的根才不会指定超类。
ParentClass 指示窗口小部件自动创建的父类 (如果存在) 的名称。 这允许在这个类定义中使用自动创建的父类的资源。 例如,同时 XmBulletinBoardDialog 创建一个 XmBulletinBoard 和一个 XmDialogShell。 要 XmDialogShell 访问父类的资源,请在此处指定它。
InternalLiteral 强制提供类名的内部符号表字面值定义的值。 此修饰符仅用于规避硬编码到 UIL 编译器中的符号表定义,并且应该谨慎使用。
别名 指示要在 UIL 规范中使用的备用类名。
ConvenienceFunction 指示此类的创建便利函数的名称。 所有窗口小部件和小配件类都必须指定 ConvenienceFunction
WidgetClass 指示小配件类型类的关联窗口小部件类。 当前无法识别此值。
DocName 定义要在文档中使用的任意字符串。 当前无法识别此值。
DialogClass 指示类是否为对话框类。 当前无法识别此值。
Resources 列示窗口小部件类的资源。 此关键字可使用以下内容进一步修改:
缺省值 指定此资源的新缺省值。 通常在资源定义中设置资源缺省值。 如果继承的资源的缺省值由类更改,那么应该在此处注明新的缺省值。
排除 指定是否应从类的资源列表中排除所继承的资源。 缺省值为 False。
儿童 列示此类的自动创建的子代的名称。 这将允许在 UIL 文件中访问这些子代。
控制符 列出窗口小部件类允许的控件。 这些控件可以是其他类,也可以是控件定义列表中的控件列表。

显示了上述数据类型和控制列表定义的用法的示例:

Class
   TopLevelWidget : MetaClass
        {
        Resources
                {
                XtbNfirstResource;
                XtbNsecondResource;
                };
        };
   NewWidget : Widget
        {
        SuperClass = TopLevelWidget;
        ConvenienceFunction =
                XtbCreateNewWidget;
        Resources
        {
        XtbNnewResource;
        XtbNfirstResource
                {Default="XtbNEW_VALUE";};
        XtbNsecondResource
                {Exclude=True;};
        };
        Controls
        {
        NewWidget;
        Buttons;
        };
        };

子定义

子定义注册自动创建的子代的类。 在类定义中使用 儿童 关键字在 UIL 文件中的其他位置引用自动创建的子代。 子定义具有以下语法:

子类 ChildName 类名 [...]

ChildName 是自动创建的子代的名称, ClassName 是该子代的类的名称。

资源定义

资源定义描述特定资源。 此描述中包含其类型和缺省值。 类定义中的每个新资源引用都应该具有资源定义。 资源定义具有以下语法:

资源 ResourceName : 自变量 | Reason | Constraint | SubResource [{[ Type = Type ; | ResourceLiteral = ResourceLiteral ; | InternalLiteral = InternalName ; | Alias = Alias ; | 相关 = 相关 ; | 缺省值 = 缺省值 ; | DocName = DocumentName ; | [...]}] [...]

资源定义以 资源 关键字开头。 对于每个资源定义,将列出资源的名称以及该资源是自变量,原因,约束还是子资源。

描述
argument 指示标准资源。
原因 指示回调资源。
约束 (Constraint) 指示约束资源。
SubResource 当前无法识别此值。

可以使用以下内容来修改资源定义:

描述
TYPE 指示该资源的数据类型。 指定的数据类型必须列示在数据类型定义中。
ResourceLiteral 指示在 UIL 文件中用于引用该资源的关键字。 在 AIXwindows中,资源名称与资源文字名称 (ResourceLiteral) 相同。
InternalLiteral 强制提供资源名称的内部符号表字面值定义的值。 此修饰符仅用于规避硬编码到 UIL 编译器中的符号表定义,并且应该谨慎使用。
别名 指示 UIL 规范中使用的资源的备用名称。
相关 特殊用途字段,允许作为当前资源的计数器的资源与该资源相关。 UIL 会自动将此相关资源的值设置为 ResourceName 类型的已编译实例中的项数。
缺省值 指示该资源的缺省值。
DocName 定义要在文档中使用的任意字符串。 当前无法识别此值。

以下显示了数据类型,控制列表和类定义的用法示例:

Resource
   XtbNfirstResource : Argument
        { Type = OddNumber;
          Default = "XtbOLD_VALUE";};
   XtbNsecondResource : Argument
        { Type = NewString;
          Default = "XtbNEW_STRING";};
   XtbNnewResource : Argument
        { Type = OddNumber;
          Default = "XtbODD_NUMBER";};