Provided by: libmotif-dev_2.3.8-4_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)