WML Formato do arquivo

Propósito

Gera componentes de compiladores UIL variáveis.

Descrição

A funcionalidade de metalinguagem do widget ( WML ) é usada para gerar componentes alteráveis do compilador da linguagem da interface do usuário (UIL), dependendo do conjunto de widgets. Usando WML, você pode adicionar suporte ao novo widget UIL ao conjunto de widgets AIXwindows ou adicionar suporte a um conjunto de widgets totalmente novo.

Formato de Arquivo

WML Os arquivos são arquivos ASCII e podem ser modificados com qualquer editor de texto padrão. Eles são acessados pelo WML diretório tools/wml e têm a extensão .wml. O conjunto de widgets Motif AIXwindows é descrito no motif.wml arquivo. Este também é o arquivo WML padrão ao usar o WML recurso.

Ao criar um WML arquivo para adicionar novos widgets ou alterar as características dos widgets, você pode fazer uma cópia do motif.wml arquivo e modificá-lo. Se você estiver criando um novo conjunto de widgets para uso com UIL, crie um arquivo completamente novo. Em ambos os casos, o motif.wml arquivo é um bom exemplo de WML sintaxe e pode ajudar você a se familiarizar com a linguagem antes de tentar escrever seu próprio WML arquivo.

WML Os arquivos têm uma sintaxe básica semelhante em estrutura à UIL. WML A sintaxe é composta pelos seguintes elementos:

Você pode usar espaços, guias ou caracteres de nova linha em qualquer lugar em sintaxe, desde que não divida palavras-chave ou strings. Comentários terminam em um personagem de nova linha. A ordem dos elementos em sintaxe não é importante.

Os exemplos de sintaxe de meta-linguagem do widget mostrados utilizam as seguintes convenções adicionais:

Item Descrição
[ ] Indica elementos opcionais.
... Indica onde um elemento de sintaxe pode ser repetido.
| Indica uma escolha entre vários itens.

Comentários

Você pode incluir comentários no WML arquivo. Os comentários têm a seguinte sintaxe:

[AnyElement]!AnyComment

Comentários começam com um! (ponto de exclamação) e estender até o final da linha. Um comentário pode começar em uma linha por si mesmo ou seguir qualquer parte de outro elemento. Um comentário não altera o significado de qualquer outro elemento. Por exemplo:

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

Definições De Tipo De Dados

Definições do tipo de dados registre todos os tipos de dados de recursos utilizados no arquivo. Você deve registrar todos os tipos de dados usados em seu WML arquivo. As definições do tipo de dados possuem a seguinte sintaxe:

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

Uma definição de tipo de dados começa com a palavra-chave DataType . Após a palavra-chave DataType , há uma lista de tipos de dados que podem ser modificados com o seguinte:

Item Descrição
InternalLiteral Força o valor da definição literal de tabela de símbolos internos do nome do tipo de dados. Este modificador é usado apenas para contornar definições de tabela de símbolo hard-codificadas no compilador UIL e deve ser usado com moderação.
DocName Dá uma sequência arbitrária para uso na documentação. Esta string fornece um nome diferente para o tipo de dados ou um único nome para o tipo de dado se o tipo de dado tiver aliases.

Por exemplo:

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

Definições Do Conjunto De Caracteres

Definições do conjunto de caracteres registre o nome do kit de ferramentas AIXwindows e outras informações para os nomes de conjuntos de caracteres usados na UIL. As definições do conjunto de caracteres possuem a seguinte sintaxe:

CharacterSet AnyCharacterSet { [ TagElementoListaFontes | Nome do conjunto de caracteres XmString ] = "Cordão"; [ Alias = "Cordão" ... ; | Direção = [ Da esquerda para a direita | Da direita para a esquerda ] ; | Direção de Análise = [ Da esquerda para a direita | Da direita para a esquerda ] ; | Tamanho do caractere = [ UmByte | TwoByte ] ; ] [ ... ] } ; [ ... ]

Uma definição de conjunto de caracteres é iniciada com a palavra-chave CharacterSet Após a palavra-chave CharacterSet há uma lista de conjuntos de caracteres que podem ser modificados com o seguinte:

Item Descrição
FontListElementTag | XmStringCharsetName Especifica o nome do conjunto de caracteres. O conjunto especificado torna-se o componente de conjunto de caracteres do segmento de cadeia composta que é criado. Um desses conjuntos de caracteres deve ser especificado.
Alias Especifica uma ou mais aliases para o nome do conjunto de caracteres. Cada alias pode ser usado dentro do UIL para referir-se ao mesmo conjunto de caracteres.
Direção Especifica a direção de um segmento de cadeia composta criado usando este conjunto de caracteres. O padrão é LeftToRight.
ParseDirection Especifica a direção na qual uma string de entrada é analisada quando um segmento de string composto é criado usando este conjunto de caracteres. Se isso não for especificado, o valor de Direção é o padrão.
CharacterSize Especifica o número de bytes em cada caractere de um segmento de cadeia composta criado usando este conjunto de caracteres. O padrão é OneByte..

Um exemplo da sintaxe de definição de conjunto de caracteres é o seguinte:

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

Definições De Conjunto De Enumeração

Definições do conjunto de enumerações registre as constantes nomeadas usadas no AIXwindows Toolkit para especificar determinados valores de recursos. As definições do conjunto de enumerações possuem a seguinte sintaxe:

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

Uma definição de conjunto de enumeração é iniciada com a palavra-chave EnumerationSet Para cada conjunto de enumeração definido, é listado o nome e o tipo do recurso. O nome do recurso é o nome do recurso do Kit de ferramentas AIXwindows , com o prefixo XmN inicial removido e a letra inicial capitalizada. Por exemplo, o nome do recurso AIXwindows XmNrowColumnType Toolkit seria RowColumnType. O tipo de recurso é o tipo de dado para o recurso; para a maioria dos recursos, este é o tipo de dado inteiro. Seguindo o nome do recurso e do tipo está uma lista de nomes de valor de enumeração que podem ser usados como configurações para o recurso. Esses nomes são os mesmos do no AIXwindows Toolkit.

Um exemplo da sintaxe de definição do conjunto de enumerações é o seguinte:

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

Definições De Lista De Controle

Definições de lista de controle atribuem um nome a grupos de controles. Você pode usar essas listas de controle posteriormente nas definições de classe para simplificar a estrutura do seu WML arquivo. As definições de lista de controle possuem a seguinte sintaxe:

AnyControlListControlList [ { QualquerControle; [...] } ];

Uma definição de lista de controle começa com a palavra-chave ControlList Após a palavra-chave ControlList , há qualquer número de definições de lista de controle As definições de lista de controle são feitas de um nome de lista de controle seguido pelo conjunto de controles que representa. Por exemplo:

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

Cada controle especificado na lista de controle deve ser definido como uma classe no arquivo.

Definições De Classe

Definições de classe descrever uma determinada classe de widget. Incluso nesta descrição está sua posição na hierarquia de classes, função de conveniência do kit de ferramentas, recursos e controles. Deve haver uma definição de classe para cada widget ou gadget no conjunto de widgets desejado para o suporte no UIL. As definições de classe possuem a seguinte sintaxe:

Classe ClassName : MetaClass | Widget | Gadget [ { [ SuperClass = NomeDaClasse; | ParentClass = NomeDaClassePai; | InternalLiteral = NomeInterno; | Alias = Alias; | ConvenienceFunction = FunçãoDeConveniência; | WidgetClass = WidgetClass; | DocName = " String "; | DialogClass = Verdadeiro | Falso; | Recursos { AnyResourceName [ { Padrão = NovoValorPadrão; | Excluir = Verdadeiro | Falso; [...] } ]; [...] }; | Controles { QualquerNomeControle; [...] }; Filhos { QualquerNomeFilho; [...] }; [...] ] } ];

As definições de classe começam com a palavra-chave Classe . Para cada classe definida, o nome da classe e se a classe é uma metaclasse, widget ou gadget é listado. Cada definição de classe pode ser modificada usando o seguinte:

Item Descrição
SuperClass Indica o nome da classe pai. Apenas a raiz da hierarquia não especifica uma super classe.
ParentClass Indica o nome da classe pai criada automaticamente do widget, se um existir. Isso permite que os recursos para a classe pai criada automaticamente sejam utilizados nesta definição de classe. Por exemplo, XmBulletinBoardDialog cria tanto um XmBulletinBoard quanto um XmDialogShell. Para acessar os recursos da classe XmDialogShell pai, especifique-a aqui.
InternalLiteral Força o valor da definição literal de tabela de símbolos internos do nome da classe. Este modificador é usado apenas para contornar definições de tabela de símbolo hard-codificadas no compilador UIL e deve ser usado com moderação.
Alias Indica nomes de classes alternativas para uso em uma especificação UIL.
ConvenienceFunction Indica o nome da função de conveniência de criação para esta classe. Todas as classes de widget e dispositivo devem ter ConvenienceFunction especificado.
WidgetClass Indica a classe de widget associada de classes do tipo gadget. Esse valor atualmente não é reconhecido.
DocName Define uma cadeia arbitrária para uso na documentação. Esse valor atualmente não é reconhecido.
DialogClass Indica se a classe é uma classe de diálogo. Esse valor atualmente não é reconhecido.
Recursos Lista os recursos da classe de widgets. Esta palavra-chave pode ser modificada ainda mais com o seguinte:
Padrão Especifica um novo valor padrão para este recurso. Os valores de inadimplência de recursos geralmente são configurados na definição de recursos. Se um valor padrão do recurso herdado for alterado pela classe, o novo valor padrão deve ser anotado aqui.
Excluir Especifica se um recurso herdado deve ser excluído da lista de recursos da classe. O valor padrão é False.
Filhos Lista os nomes das crianças criadas automaticamente desta classe. Isso permite que essas crianças sejam acessadas no arquivo UIL.
Controles Lista os controles que a classe de widget permite. Os controles podem ser outras classes ou uma lista de controle a partir da lista de definição de controle.

Um exemplo do uso do tipo de dados precedentes e definições de lista de controle é mostrado:

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

Definições De Criança

As definições de criança registram as classes de filhos criados automaticamente. As crianças criadas automaticamente são referenciadas em outro lugar em um arquivo UIL usando a palavra-chave Crianças dentro de uma definição de classe. As definições de criança têm a seguinte sintaxe:

Filho ChildName : NomeDaClasse; [...]

ChildName é o nome do filho criado automaticamente e ClassName é o nome da classe desse filho

Definições de recurso

As definições de recursos descrevem um determinado recurso. Incluso nesta descrição é o seu tipo e valor padrão. Cada nova referência de recurso em uma definição de classe deve ter uma definição de recurso. As definições de recursos possuem a seguinte sintaxe:

Recurso ResourceName : Argumento | Motivo | Restrição | SubResource [{[ Tipo = Tipo ; | ResourceLiteral = ResourceLiteral ; | InternalLiteral = InternalName ; | Alias = Alias ; | Relacionado = Relacionado ; | Padrão = Padrão ; | DocName = DocumentName ; | [...]}] [...]

As definições de recursos começam com a palavra-chave Recurso . Para cada definição de recurso, é listado o nome do recurso e se o recurso é um argumento, razão, restrição ou subrecurso.

Item Descrição
Argumento Indica um recurso padrão.
Razão Indica um recurso de callback.
Limitação Indica um recurso de restrição.
SubResource Esse valor atualmente não é reconhecido.

Uma definição de recurso pode ser modificada com o seguinte:

Item Descrição
Tipo Indica o tipo de dado do recurso. O tipo de dado especificado deve ser listado na definição do tipo de dados.
ResourceLiteral Indica a palavra-chave usada no arquivo UIL para referencia o recurso. Em AIXwindows, o nome do recurso é igual ao nome literal do recurso (ResourceLiteral)
InternalLiteral Força o valor da definição literal de tabela de símbolos internos do nome do recurso. Este modificador é usado apenas para contornar definições de tabela de símbolo hard-codificadas no compilador UIL e deve ser usado com moderação.
Alias Indica nomes alternativos para os recursos utilizados em uma especificação UIL.
Relacionados Campo de propósito especial que permite recursos que atuam como um contador para que os recursos atuais sejam relacionados ao recurso. UIL configura automaticamente o valor desse recurso relacionado para o número de itens na instância compilada do tipo ResourceName .
Padrão Indica o valor padrão do recurso.
DocName Define uma cadeia arbitrária para uso na documentação. Esse valor atualmente não é reconhecido.

Um exemplo do uso de tipo de dados, lista de controle e definições de classe é mostrado:

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