Skip to content

Especificação da Linguagem de Marcação Hiper Texto, LMHT

License

NotificationsYou must be signed in to change notification settings

DesignLiquido/LMHT

Repository files navigation

LMHT


Acompanhe a Design Líquido nas redes sociais:

Especificação da Linguagem de Marcação Hiper Texto, LMHT.

LMHT nada mais é do que HTML em português, usando um arquivo de transformação XSL para mudar nomes de tags e atributos.

Por exemplo:

<lmht>
    <corpo>
        <titulo1>Isso é um título</titulo1>
        <p classe="minha-classe">Isto é um parágrafo.</p>
        <lista-simples>
            <item-lista>Itens podem ser adicionados usando a estrutura item-lista.</item-lista>
            <item-lista>Cada item da lista é transformado em um item li do HTML.</item-lista>
            <item-lista>Não apenas estrutura são modificadas, como também seus atributos.</item-lista>
        </lista-simples>
    </corpo>
</lmht>

Gera o equivalente em HTML:

<html>
    <body>
        <h1>Isso é um título</h1>
        <p class="minha-classe">Isto é um parágrafo.</p>
        <ul>
            <li>Itens podem ser adicionados usando a estrutura item-lista.</li>
            <li>Cada item da lista é transformado em um item li do HTML.</li>
            <li>Não apenas estrutura são modificadas, como também seus atributos.</li>
        </ul>
    </body>
</html>

Para testar a transformação XSL, use:

Por ser independente de linguagem, todos os arquivos de especificações podem ser usados com qualquer biblioteca de qualquer linguagem que implemente XSLT 1.0 ou superior.

  • Para uso de XSLT 1.0, use o arquivo lmht10.xslt;
  • Para uso de XSLT 2.0 ou superior, use o arquivo lmht.xslt.

Validação de arquivos em LMHT

Há também um arquivo XSD para validação de arquivos na extensão .lmht, que vive no diretório raiz deste repositório. Para validar seu arquivo LMHT usando XSD, basta adicionar à estrutura <lmht> a referência para o arquivo XSD da seguinte forma:

<lmht xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://raw.usercontent.com/DesignLiquido/LMHT/principal/lmht.xsd">
    ...
</lmht>

Para testar a validação online, use:

Veja mais abaixo como validar usando diferentes linguagens de programação.

Limitações

LMHT transforma para HTML5. Tags não compatíveis, que existam apenas em HTML4, não possuem uma estrutura correspondente em LMHT.

Não todos os valores de atributos são traduzidos. Quando há essa tradução, isso normalmente é especificado na Wiki de cada estrutura.

A estrutura <style> não é traduzida. O motivo disso é que <estilo> é usada para tradução, mas o que se espera dentro de <estilo> é código em FolEs.

Mapeamentos entre estruturas LMHT e tags HTML

Algumas tags HTML por ora não serão mapeadas:

  • <embed> é uma tag com várias alternativas, como <img>, <iframe>, <video> e <audio>. Essas tags são mapeadas, respectivamente, com as estruturas <imagem>, <subpágina>, <vídeo> e <áudio>.

Mais detalhes sobre as estruturas podem ser encontrados na nossa Wiki.

LMHTHTML
abreviacaoabbr
abreviaçãoabbr
aparteaside
areaarea
áreaarea
area-textotextarea
área-textotextarea
artigoarticle
aspasq
audioaudio
áudioaudio
botaobutton
botãobutton
cabecahead
cabeçahead
cabeca-tabelathead
cabeça-tabelathead
campoinput
camposfieldset
canvascanvas
celulatd
célulatd
citacaoblockquote
citaçãoblockquote
citarcite
codigocode
códigocode
colunacol
corpobody
corpo-tabelatbody
definicaodfn
definiçãodfn
detalhesdetails
divisaodiv
divisãodiv
enderecoaddress
endereçoaddress
envelope-textospan
escatelslot
etiquetalabel
excluidodel
excluídodel
exemplosamp
formularioform
formulárioform
grupo-colunascolgroup
grupo-opcoesoptgroup
grupo-opçõesoptgroup
grupo-tituloshgroup
grupo-títuloshgroup
imagemimg
inseridoins
invisiveltemplate
invisíveltemplate
italicoem
itálicoem
item-listali
ligacaoa
ligaçãoa
linhatr
linha-horizontalhr
lista-definicoesdl
lista-definiçõesdl
lista-definicoes/definicaodd
lista-definições/definiçãodd
lista-numeradaol
lista-pesquisaveldatalist
lista-pesquisáveldatalist
lista-simplesul
lmhthtml
marcamark
medidormeter
modaldialog
navegacaonav
navegaçãonav
negritostrong
objetoobject
opcaooption
opçãooption
pp
paragrafop
parágrafop
preformatadopre
principalmain
progressoprogress
quebra-linhabr
quebra-linha-oportunawbr
recursolink
resultadooutput
riscados
rodapefooter
rodapéfooter
rodape (para tabelas)tfoot
rodapé (para tabelas)tfoot
scriptscript
secaosection
seçãosection
selecaoselect
seleçãoselect
sem-scriptnoscript
sobrescritosup
sublinhadou
subscritosub
sumariosummary
sumáriosummary
tabelatable
tecladokbd
tempotime
termodt
texto-pequenosmall
titulo1h1
título1h1
titulo2h2
título2h2
titulo3h3
título3h3
titulo4h4
título4h4
titulo5h5
título5h5
titulo6h6
título6h6
variavelvar
variávelvar

Bibliotecas por linguagem

Transformações por linguagem

.NET em geral (C#, VB.NET, IronPython, PowerShell)

A forma mais fácil de testar é pelo PowerShell, mas esse exemplo pode ser facilmente replicado para as demais linguagens.

$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
$xslt.load("lmht.xslt");
$xslt.Transform("exemplo.lmht", "exemplo.html");

Para uma transformação reversa (de HTML para LMHT), use:

$xsltReverso = New-Object System.Xml.Xsl.XslCompiledTransform;
$xsltReverso.load("lmht-reverso.xslt");
$xsltReverso.Transform("exemplo.html", "exemplo-reverso.lmht");

Groovy e outras linguagens na JVM

Usando groovysh:

xslt = new File("lmht.xslt").getText()
stringReader = new StringReader(xslt)
stringSource = new javax.xml.transform.stream.StreamSource(stringReader)
transformer = javax.xml.transform.TransformerFactory.newInstance().newTransformer(stringSource)
exemplo = new File("exemplo.lmht").getText()
html = new FileOutputStream("exemplo.html")
transformer.transform(new javax.xml.transform.stream.StreamSource(new StringReader(exemplo)), new javax.xml.transform.stream.StreamResult(html))

Exemplo funciona para Groovy e Java, com as devidas adaptações.

JavaScript ou Node.js

Pode ser utilizado xslt3, que usa a saxon-js.

Um comando para PowerShell pode ser o seguinte:

xslt3 "-s:exemplo.lmht" "-xsl:lmht.xslt" "-o:exemplo.html" -t

Para bash, zsh, etc., não é necessário usar as aspas duplas.

xslt3 -s:exemplo.lmht -xsl:lmht.xslt -o:exemplo.html -t

Python

Primeiro instale o pacote lxml.

import lxml.etree as ET

arquivo_lmht = ET.parse("exemplo.lmht")
xslt = ET.parse("lmht.xslt")
transform = ET.XSLT(xslt)
conteudo_html = transform(arquivo_lmht)
conteudo_html.write("exemplo.html", encoding="utf-8")

Ruby

Primeiro instale o pacote ruby-xslt. Essa biblioteca reclama da versão 2.0 do XSL, mas faz a transformação assim mesmo.

require 'xml/xslt'

xslt.xml = "exemplo.lmht"
xslt.xsl = "lmht.xslt"
xslt.save('exemplo.html')

Bibliotecas de validação por linguagem

.NET em geral (C#, VB.NET, IronPython, PowerShell)

Abaixo temos um exemplo de como validar um arquivo usando PowerShell:

$leitorSchema = New-Object System.Xml.XmlTextReader "lmht.xsd"
[scriptblock] $funcaoParaLidarComExcecoes = { Write-Error $args[1].Exception }
$schema = [System.Xml.Schema.XmlSchema]::Read($leitorSchema, $funcaoParaLidarComExcecoes)

$xml = New-Object System.Xml.XmlDocument
$xml.Schemas.Add($schema) | Out-Null
$xml.Load("exemplo.lmht")
$xml.Validate(
{
    throw ([PsCustomObject] @{
        SchemaFile = "lmht.xsd"
        XmlFile = "exemplo.lmht"
        Exception = $args[1].Exception
    })
})
$leitorSchema.Close()

Python

Primeiro instale o pacote lxml.

from lxml import etree

xmlschema_doc = etree.parse("lmht.xsd")
xmlschema = etree.XMLSchema(xmlschema_doc)

xml_doc = etree.parse("exemplo.lmht")
print(xmlschema.validate(xml_doc))

About

Especificação da Linguagem de Marcação Hiper Texto, LMHT

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages