WML - Man Page

The widget meta-language file format for creating uil compilers

Description

The widget meta-language facility (WML) is used to generate the components of the user interface language (UIL) compiler that can change depending on the widget set​. Using WML you can add support in UIL for new widgets to the Motif widget set or for a totally new widget set​.

File

WML files are ASCII files that you can modify with any standard text editor​. They are accessed in the tools/wml directory by WML​. By convention WML files have the suffix ​.wml​. The Motif widget set is described in the motif​.wml file​. This is also the default WML file when using the WML facility​.

When adding new widgets or changing widget characteristics, you should start with a copy of the motif​.wml file​. If you are creating a new widget set for use with UIL, you should start from scratch​. In either case the motif​.wml file is a good example of WML syntax, and you should familiarize yourself with it before writing your own WML file​.

WML files have a simple syntax, similar in structure to UIL​. It is made up of the following elements:

  ·

Comments

  ·

Data Type Definitions

  ·

Character Set Definitions

  ·

Enumeration Set Definitions

  ·

Control List Definitions

  ·

Class Definitions

  ·

Child Definitions

  ·

Resource Definitions

You can use space, tabs, or newlines anywhere in the syntax, as long as you do not split up keywords or strings, except that comments end at a newline​. The order of elements is not important to the syntax​.

This description uses the following additional conventions to describe the syntax of the widget meta-language:

[  ]

Indicates optional elements​.

​.​.​.

Indicates where an element of syntax can be repeated​.

|

Indicates a choice among multiple items​.

Comments

You can include comments in the WML file​. Comments have the following syntax:

[any​.element]!any​.comment

Comments begin with an exclamation point and extend to the end of the line​. A comment can begin on a line by itself or follow any part of another element​. A comment does not change the meaning of any other element​. For example:

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

Data Type Definitions

Data type definitions register all the resource data types used in the file​. You must register all the data types used in your WML file​. Data type definitions have the following syntax:

DataType
     any​.datatype [{ InternalLiteral = internal​.name |
          DocName = "string"; [​.​.​.]}];
     [​.​.​.]

A data type definition begins with the keyword DataType​. Following the DataType keyword is a list of data types that can be further modified with

InternalLiteral

This forces the value of the internal symbol table literal definition of the data type name​. This modifier is only used to get around symbol table definitions hard coded into the UIL compiler​. It should rarely be used​.

DocName

This gives an arbitrary string for use in the documentation​. This string is meant to supply a different name for the data type for use in the documentation, or a single name for the data type if the data type has aliases​.

For example:

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

Character Set Definitions

Character set definitions register the Motif Toolkit name and other information for the character set names used in UIL​. Character set definitions have the following syntax:

CharacterSet
     any​.character​.set
          { [ FontListElementTag | XmStringCharsetName ] = "string";
               [ Alias = "string" ​.​.​.; |
               Direction = [ LeftToRight | RightToLeft ]; |
               ParseDirection = [ LeftToRight | RightToLeft ]; |
               CharacterSize = [ OneByte | TwoByte ]; ]
               [ ​.​.​. ] };
     [ ​.​.​. ]

A character set definition begins with the keyword CharacterSet​. Following the CharacterSet keyword is a list of character sets that can be further modified with

FontListElementTag | XmStringCharsetName

Specifies the name of the character set, which will become the character set component of a compound string segment created using this character set​. This modifier is required​.

Alias

Specifies one or more aliases for the character set name​. Each alias can be used within UIL to refer to the same character set​.

Direction

Specifies the direction of a compound string segment created using this character set​. The default is LeftToRight​.

ParseDirection

Specifies the direction in which an input string is parsed when a compound string segment is created using this character set​. The default is whatever Direction is specified​.

CharacterSize

Specifies the number of bytes in each character of a compound string segment created using this character set​. The default is OneByte​.

For example:

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; };

Enumeration Set Definitions

Enumeration set definitions register the named constants used in the Motif Toolkit to specify some resource values​. Enumeration set definitions have the following syntax:

EnumerationSet
     resource​.name: resource​.type
          { enum​.value​.name; [ ​.​.​. ] };

An enumeration set definition begins with the keyword EnumerationSet​. For each enumeration set defined, the name and type of the resource are listed​. The resource name is the Motif Toolkit resource name, with the beginning XmN removed and with the initial letter capitalized​. For example, the name of the Motif Toolkit resource XmNrowColumnType is RowColumnType​. The resource type is the data type for the resource; for most resources, this is integer​. Following the resource name and type is a list of names of enumeration values that can be used as settings for the resource​. These names are the same as those in the Motif Toolkit​.

For example:

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

Enumeration sets also support Boolean values​.

Control List Definitions

Control list definitions assign a name to groups of controls​. You can use these control lists later in class definitions to simplify the structure of your WML file​. Control list definitions have the following syntax:

ControlList
     any​.control​.list [{ any​.control; [​.​.​.]}];

A control list definition starts with the ControlList keyword​. Following the ControlList keyword are any number of control list definitions​. Control list definitions are made up of a control list name followed by the set of controls it represents​. For example:

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

Each control specified in the control list must be defined as a class in the file​.

Class Definitions

Class definitions describe a particular widget class including its position in the class hierarchy, toolkit convenience function, resources, and controls​. There should be one class definition for each widget or gadget in the widget set you want to support in UIL​. Class definitions have the following syntax:

Class class​.name: MetaClass | Widget | Gadget
     [{[
     SuperClass = class​.name; |
     ParentClass = parent​.class​.name; |
     InternalLiteral = internal​.name; |
     Alias = alias; |
     ConvenienceFunction = convenience​.function; |
     WidgetClass = widget​.class; |
     DocName = "string"; |
     DialogClass = True | False; |
     Resources { any​.resource​.name [{
               Default = new​.default​.value; |
               Exclude = True |
               False;
               [​.​.​.]} ];
          [​.​.​.]}; |
     Controls { any​.control​.name; [​.​.​.]};
     Children { any​.child​.name; [​.​.​.] };
     [​.​.​.]
     ]}];

Class definitions start with the Class keyword​. For each class defined, the name of the class and whether the class is a metaclass, widget, or gadget is listed​. Each class definition can be further modified with the keywords described in the following list​.

SuperClass

This indicates the name of the parent class​. Only the root of the hierarchy does not specify a SuperClass​.

ParentClass

This indicates the name of the widget​'s automatically created parent class if one exists​. This allows resources for that automatically created class to be used in instances of this class​. For example, XmBulletinBoardDialog creates both an XmBulletinBoard and an XmDialogShell​. To access the resources of the XmDialogShell parent class it must be specified here​.

InternalLiteral

This forces the value of the internal symbol table literal definition of the class name​. This modifier is only used to get around symbol table definitions hard coded into the UIL compiler​. It should rarely be used​.

Alias

This indicates alternate names for the class for use in a UIL specification​.

ConvenienceFunction

This indicates the name of the creation convenience function for this class​. All widget and gadget classes must have a ConvenienceFunction​.

WidgetClass

This indicates the associated widget class of gadget type classes​. Presently, nothing is done with this value​.

DocName

This defines an arbitrary string for use in the documentation​. Presently, nothing is done with this value​.

DialogClass

This indicates whether the class is a dialog class​. Presently, nothing is done with this value​.

Resources

This lists the resources of the widget class​. This keyword can be further modified with

Default

This specifies a new default value for this resource​. Resource default values are usually set in the resource definition​. If an inherited resource​'s default value is changed by the class, the new default value should be noted here​.

Exclude

This specifies whether an inherited resource should be excluded from the resource list of the class​. Exclude is False by default​.

Children

This lists the names of the automatically created children of this class, so that those children can be accessed in the UIL file​.

Controls

This lists the controls that the widget class allows​. The controls can be other classes or a control list from the control list definition​.

The following example uses the examples from the data type definitions and control list definitions above​.

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

Child Definitions

Child definitions register the classes of automatically created children​. Automatically created children are referenced elsewhere in a uil file using the Children keyword within a class definition​. Child definitions have the following syntax:

Child child​.name : class​.name; [​.​.​.]

Where child​.name is the name of the automatically created child and class​.name is the name of the class of that child​.

Resource Definitions

Resource definitions describe a particular resource including its type, and default value​. There should be a resource definition for each new resource referenced in the class definitions​. Resource definitions have the following syntax:

Resource
     resource​.name: Argument | Reason | Constraint | SubResource
          [{[
          Type = type;
          [ResourceLiteral = resource​.literal; ]
          [InternalLiteral = internal​.name; ]
          [Alias = alias; ]
          [Related = related; ]
          [Default = default; ]
          [DocName = doc​.name; ]
          [​.​.​.]}]
     [​.​.​.]

Resource definitions start with the Resource keyword​. For each resource definition, the name of the resource and whether the resource is an argument, reason, constraint or subresource is listed​.

Argument

Indicates a standard resource

Reason

Indicates a callback resource

Constraint

Indicates a constraint resource

SubResource

Presently, nothing is done with this value

The resource definition can be further modified with the following keywords:

Type

This indicates the data type of the resource​. It must be listed in the data type definition​.

ResourceLiteral

This indicates the keyword used in the UIL file to reference the resource​. In Motif, the resource name is the same as the ResourceLiteral​.

InternalLiteral

This forces the value of the internal symbol table literal definition of the resource name​. This modifier is only used to get around symbol table definitions hard coded into the UIL compiler​. It should rarely be used​.

Alias

This indicates alternate names for the resource for use in a UIL specification​.

Related

This is a special purpose field that allows resources that act as a counter for the current resources to be related to the resource​. UIL automatically sets the value of this related resource to the number of items in the compiled instance of type resource​.name​.

Default

This indicates the default value of the resource​.

DocName

This defines an arbitrary string for use in the documentation​. Presently, nothing is done with this value​.

The following example uses the examples from the data type definitions, control list definitions and class definitions above​.

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