Haml es un lenguage de marcas principalmente usado con Ruby, que de forma simple y limpia describe el HTML de cualquier documento web sin el uso de código en linea. Es una alternativa popular respecto a usar el lenguage de plantilla de Rails (.erb) y te permite embeber código Ruby en tus anotaciones.
Apunta a reducir la repetición en tus anotaciones cerrando los tags por ti, basándose en la estructura de identación de tu código. El resultado es una anotación bien estructurada, que no se repite, lógica y fácil de leer.
También puedes usar Haml en un proyecto independiente de Ruby, instalando la gema Haml en tu máquina y usando la línea de comandos para convertirlo en html.
$ haml archivo_entrada.haml archivo_salida.html
```haml
/ -------------------------------------------
/ Identación
/ -------------------------------------------
/
Por la importancia que la identación tiene en cómo tu código es traducido,
la identación debe ser consistente a través de todo el documento. Cualquier
diferencia en la identación lanzará un error. Es una práctica común usar dos
espacios, pero realmente depende de tí, mientras sea consistente.
/ -------------------------------------------
/ Comentarios
/ -------------------------------------------
/ Así es como un comentario se ve en Haml.
/
Para escribir un comentario multilínea, identa tu código a comentar de tal forma
que sea envuelto por por una barra.
-# Este es un comentario silencioso, significa que no será traducido al código en absoluto
/ -------------------------------------------
/ Elementos Html
/ -------------------------------------------
/ Para escribir tus tags, usa el signo de porcentaje seguido por el nombre del tag
%body
%header
%nav
/ Nota que no hay tags de cierre. El código anterior se traduciría como
<body>
<header>
<nav></nav>
</header>
</body>
/ El tag div es un elemento por defecto, por lo que pueden ser escritos simplemente así
.foo
/ Para añadir contenido a un tag, añade el texto directamente después de la declaración
%h1 Headline copy
/ Para escribir contenido multilínea, anídalo.
%p
Esto es mucho contenido que podríamos dividirlo en dos
líneas separadas.
/
Puedes escapar html usando el signo ampersand y el signo igual ( &= ).
Esto convierte carácteres sensibles en html a su equivalente codificado en html.
Por ejemplo
%p
&= "Sí & si"
/ se traduciría en 'Sí & si'
/ Puedes desescapar html usando un signo de exclamación e igual ( != )
%p
!= "Así es como se escribe un tag párrafo <p></p>"
/ se traduciría como 'Así es como se escribe un tag párrafo <p></p>'
/ Clases CSS puedes ser añadidas a tus tags, ya sea encadenando .nombres-de-clases al tag
%div.foo.bar
/ o como parte de un hash Ruby
%div{:class => 'foo bar'}
/ Atributos para cualquier tag pueden ser añadidos en el hash