Skip to content

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.githubusercontent.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.

LMHT HTML
abreviacao abbr
abreviação abbr
aparte aside
area area
área area
area-texto textarea
área-texto textarea
artigo article
aspas q
audio audio
áudio audio
botao button
botão button
cabeca head
cabeça head
cabeca-tabela thead
cabeça-tabela thead
campo input
campos fieldset
canvas canvas
celula td
célula td
citacao blockquote
citação blockquote
citar cite
codigo code
código code
coluna col
corpo body
corpo-tabela tbody
definicao dfn
definição dfn
detalhes details
divisao div
divisão div
endereco address
endereço address
envelope-texto span
escatel slot
etiqueta label
excluido del
excluído del
exemplo samp
formulario form
formulário form
grupo-colunas colgroup
grupo-opcoes optgroup
grupo-opções optgroup
grupo-titulos hgroup
grupo-títulos hgroup
imagem img
inserido ins
invisivel template
invisível template
italico em
itálico em
item-lista li
ligacao a
ligação a
linha tr
linha-horizontal hr
lista-definicoes dl
lista-definições dl
lista-definicoes/definicao dd
lista-definições/definição dd
lista-numerada ol
lista-pesquisavel datalist
lista-pesquisável datalist
lista-simples ul
lmht html
marca mark
medidor meter
modal dialog
navegacao nav
navegação nav
negrito strong
objeto object
opcao option
opção option
p p
paragrafo p
parágrafo p
preformatado pre
principal main
progresso progress
quebra-linha br
quebra-linha-oportuna wbr
recurso link
resultado output
riscado s
rodape footer
rodapé footer
rodape (para tabelas) tfoot
rodapé (para tabelas) tfoot
script script
secao section
seção section
selecao select
seleção select
sem-script noscript
sobrescrito sup
sublinhado u
subscrito sub
sumario summary
sumário summary
tabela table
teclado kbd
tempo time
termo dt
texto-pequeno small
titulo1 h1
título1 h1
titulo2 h2
título2 h2
titulo3 h3
título3 h3
titulo4 h4
título4 h4
titulo5 h5
título5 h5
titulo6 h6
título6 h6
variavel var
variável var

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))

Releases

No releases published

Packages

No packages published

Languages