Analisando Marcação de Formatação

O uso mais eficiente do controle FormText é quando as tags de formatação são incluídas no texto. A tag raiz esperada é form. Ela pode ter um ou mais filhos que podem ser <p> ou <li>. Qualquer uma delas pode ter texto normal, texto entre tags <b> ou <span>, imagens, links e controle SWT. Imagens são declaradas utilizando <img href="image key"/> (sem conteúdo), enquanto link são expressos utilizando <a href="href">text</a>.

Algumas das tags mencionadas acima têm atributos adicionais. A tag <a> pode aceitar nowrap="true" para evitar que o link seja agrupado na nova linha. A tag <p> pode ter atributo vspace="false" (true por padrão) que inclui espaço adicional entre parágrafos. A tag <li> tem mais atributos:

As tags que afetam a aparência do texto normal são <b> (funciona como o esperado) e <span>. A última permite alterar a fonte e/ou a cor do texto dentro da tag. Finalmente, quebras de linha temporárias podem ser incluídas utilizando a tag <br/> (observe que isso é XML, portanto você não pode utilizar <br> aberto como no HTML).

Desde o release 3.1, FormText pode ser utilizado para misturar widgets do SWT dentro de texto, hyperlinks e imagens. Os controles de SWT são criados como filhos de FormText, o que torna o FormText um gerenciador de layout inferior, com instrução sobre onde colocar o controle relativo ao texto incorporado diretamente no XML.

Um tema comum que pode ser observado é que FormText não é responsável por carregar imagens, fontes, links resolvidos ou cores. Isso não é um navegador e é muito melhor separar problemas e simplesmente designar imagens e cores gerenciadas em outro lugar. Os links e imagens simplesmente têm o atributo 'href' para fazer referência a eles. Para links, o valor desse atributo será fornecido no evento do hyperlink quando os listeners forem notificados. As imagens precisam ser registradas com o controle de texto utilizando a chave 'href' correspondente. Dessa forma, o controle não precisa se preocupar sobre o carregamento das imagens, ele as tem na tabela hash e pode renderizá-las imediatamente.

Uma abordagem semelhante foi utilizada para cores e fontes. As cores já são manipuladas pelo toolkit, portanto você pode alocar quantas desejar utilizando uma chave exclusiva e valores de RGB, chamando o toolkit.getColors().createColor(). O que sobra é configurar todas as cores referidas na tag 'span' para que o controle possa utilizá-las durante a renderização.