# Haml

Haml (HTML Abstraction Markup Language) ist eine unter der MIT-Lizenz veröffentlichte vereinfachte Auszeichnungssprache, die benutzt wird, um auf klare und einfache Art das XHTML eines Web-Dokuments zu beschreiben, ohne dabei mittels Inline-Codierung ausführbaren Programmcode hineinmischen zu müssen. Es wurde entwickelt, um viele der Schwächen traditioneller Template-Mechanismen zu vermeiden und um Markup-Sprache möglichst elegant zu machen. Haml fungiert als Ersatz für Inline-Template-Mechanismen, wie sie bei PHP, JSP, RHTML oder ASP üblich sind. Haml vermeidet die Notwendigkeit, XHTML explizit in Templates zu codieren, weil es selbst eine Beschreibung für XHTML mit einigem Code für dynamischen Inhalt ist.
Zum Umfang von Haml gehörte mit Sass auch ein Analogon zu CSS. Heute werden aber Sass und Haml getrennt entwickelt, versioniert und ausgeliefert.

## Prinzipien
### Auszeichnungssprachen sollten schön sein

    Auszeichnungssprachen sollten nicht nur einfach als Werkzeug benutzt werden, um Webbrowser dazu zu bringen, eine Seite in der Art darzustellen, wie der Autor sie dargestellt haben möchte. Diese Darstellung ist nicht das einzige, was die Leute sehen müssen. Sie müssen die Auszeichnungssprache sehen, ändern und verstehen. Deshalb sollte die Auszeichnungssprache genauso benutzerfreundlichen und angenehm wie das im Webbrowser dargestellte Ergebnis sein.

### Auszeichnungssprachen sollten DRY sein

    XHTML enthält viele Wiederholungen. Die meisten Elemente müssen zweimal angegeben werden, einmal vor und einmal nach ihrem Inhalt. ERB fügt sogar noch mehr Wiederholung und unnötige Zeichen hinzu. Haml vermeidet dies alles, indem es sich auf die Einrückung und nicht auf den Text verlässt, um zu bestimmen, wo Elemente und Codeblöcke beginnen und enden. Die führt nicht nur zu kleineren Templates, es macht den Code auch lesbarer und „sauberer“.

### Auszeichnungssprachen sollten korrekt eingerückt werden

    Eine der großen Schwierigkeiten mit traditionellen Template-Sprachen ist, dass sie nicht nur darauf verzichten, die Verwendung einer konsequenten und konsistenten Einrückung zu ermutigen, sondern dass sie dieser sogar oft im Wege stehen. Es ist oft schwierig oder unmöglich, eine brauchbare Einrückung anzuwenden. Dies führt oft zu verwirrendem und unlesbarem XHTML. Haml formatiert die Tags so, dass sie immer sauber eingerückt sind und die darunter liegende Struktur des Dokuments wiedergeben.

### Die XHTML-Struktur sollte klar sein

    XML und XHTML sind Formate, die für die Idee des strukturierten Dokuments ins Leben gerufen wurden. Diese Struktur ist in diesen Auszeichnungssprachen wiedergegeben und sollte auch in gleicher Weise in einer Meta-Auszeichnungssprache wie Haml zu sehen sein. Weil Hamls Logik auf der Einrückung der Unterelemente basiert, wird diese Struktur auf natürliche Weise bewahrt, wobei sie für menschliche Leser viel einfacher und logischer zu erfassen ist.

## Nachteile

* In Haml hat Leerraum eine essentielle Bedeutung. Haml verlässt sich auf konsistente Einrückungen. Tabulator- und Leerzeichen müssen über das ganze Dokument hinweg konsistent eingesetzt werden.
* Es gibt (noch) keine WYSIWYG-Editoren für Haml, während solche in großer Zahl für XHTML und HTML verfügbar sind. Aber die wachsende Gemeinschaft der Haml-Anwender hat ein Bündel von Zusätzen zu vielen gängigen integrierten Entwicklungsumgebungen, wie zum Beispiel Eclipse (einschließlich populärer davon abgeleiteter Werkzeuge wie RadRails oder Aptana), jEdit, NetBeans und Editoren wie TextMate, Emacs oder Vim, hervorgebracht. Diese erlauben es Entwicklern, Haml in einer Umgebung zu editieren, die die Einrückungen und die Syntax berücksichtigt.

## Beispiel

Anmerkung: Man beachte bitte, dass dieses Beispiel nicht zwingend den heutigen Entwicklungsstand von Haml wiedergibt.
Der obige Haml-Text sollte das folgende XHTML ergeben:

## Implementierungen

Die offizielle Haml-Implementierung wurde für Ruby mit Plugins für Ruby on Rails und Merb entwickelt, aber die Ruby-Implementierung funktioniert auch unabhängig (ohne Rails und ohne Merb).
Es existieren auch Implementierungen in anderen Programmiersprachen:
* GHRML (Python)
* HamlPy (Python)
* LuaHaml (Lua)
* MonoRail NHaml (ASP.NET)
* NHaml (.NET)
* Fammel (PHP)
* pHAML (PHP)
* phamlp (PHP)
* phpHaml (PHP5)
* haml-js (JavaScript)
* Text::Haml (Perl)
* Scalate (Scala)
* JHaml (Java)

## Entwicklung

Haml wurde im Mai 2006 von Hampton Catlin erfunden. Er entwickelt zusammen mit Nathan Weizenbaum die Codebasis weiter.