Provided by: libmotif-dev_2.3.8-3.1build1_amd64 bug

NAME

       WML — The widget meta-language file format for creating uil compilers "widget meta-language" "WML"

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

                                                                                                          WML(5)