Haml

Haml（HTML Abstraction Markup Language，HTML抽象标记语言）是一种模板系统，它可以避免在Web文档中内嵌代码，使HTML更简易和干净。Haml为HTML中提供了一些动态内容的灵活性。类似其他Web语言（如PHP、ASP、JSP）和模板系统（如eRuby），Haml也嵌入一些在运行时执行的代码并生成HTML代码，从而提供一些动态内容。为运行Haml代码，文件需要采用.haml扩展名。这些文件类似.erb或eRuby文件，这有助于在开发网络应用程序时嵌入Ruby代码。在解析代码注释时，Haml采用与Ruby 1.9或之后版本相同的规则。Haml只能理解兼容ASCII的编码（例如UTF-8），而不能理解不兼容ASCII的UTF-16与UTF-32。Haml可以在命令行界面中使用，也可以作为一个单独的Ruby模块或在一个Ruby on Rails应用程序中使用，这使Haml可用于广泛的应用程序。
历史.
Haml最早由于2006年发布，它的成果领先于其他几个人。他的动机是使HTML更简单、清晰和易于使用。自2006年以来，它已随新版本发布而多次修订。2012年4月，Haml的维护由Norman Clarke接手。Natalie Weizenbaum致力于使Haml可以在Ruby应用程序中使用，而品牌与设计则由Nick Walsh完成。目前的维护团队中还有Matt Wildig、Akira Matsuda和Tee Parham。
特性.
Haml的发展有四项原则。
用户友好的标记.
置标语言如果遵循下列特征，那么它则用户友好：
DRY.
标记语言应坚持不重复自身（DRY）原则。它应该：
精巧缩进.
有良好缩进的标记语言可以改善外观、使阅读器易于读取，并有助确定元素的开始与结束位置。
清晰结构.
有清晰结构的标记语言有助于代码维护和理解最终结果的逻辑。Haml在这方面是否提供了有差异的优势，这点尚不清晰。
例子.
Haml标记在语法上类似CSS。例如，Haml同样使用codice_1（点）表示CSS的类，使开发人员可以轻松使用这种标记。
Hello, World例子.
Haml的最简单的Hello World实现像是这样：
Haml作为命令行工具.
%p{:class =&gt; "sample", :id =&gt; "welcome"} Hello, World!
得到这样的HTML代码：
&lt;p class="sample" id="welcome"&gt;Hello, World!&lt;/p&gt;
为运行Haml代码，必须已安装，如使用下列命令 codice_2以gem安装：
 gem install haml
Haml代码若以codice_3为文件名保存，则可以这样运行：
 haml Hello.haml
Haml作为Ruby on Rails附加项.
要用Ruby使用Haml，Ruby的codice_4应该包含此行：
 gem 'haml'
类似eRuby，Haml也可以访问局部变量（在同一个文件中以Ruby代码声明）。此例子使用一个Ruby控制器文件为例。
class MessagesController &lt; ApplicationController
 def index
 @message = "Hello, World!"
 end
end
 %p= @message
将得到：
&lt;div id="welcome"&gt;
 &lt;p&gt;Hello, World!&lt;/p&gt;
&lt;/div&gt;
Haml作为Ruby模块.
要独立于Rails和ActionView使用Haml，安装codice_5 gem，在codice_4中包含它，然后简单的在Ruby脚本中导入codice_7，或者以codice_8标志调用Ruby直译器。
welcome = Haml::Engine.new("%p Hello, World!")
welcome.render
输出：
&lt;p&gt;Hello, World!&lt;/p&gt;
Haml::Engine是一个Haml类。
基本例子.
Haml使用空格缩进（两个空格）来表示标签的嵌套和识别给定标签的范围。这取代打开、闭合的标签对系统，从而符合DRY并使其看上去更清晰（容易阅读）。下列例子展示了Haml与eRuby（嵌入式Ruby）的差异。
由上述代码示例呈现的HTML代码如下所示：
&lt;div class="category"&gt;
 &lt;div class="recipes"&gt;
 &lt;h1&gt;Cookie&lt;/h1&gt;
 &lt;h3&gt;Desserts&lt;/h3&gt;
 &lt;/div&gt;
 &lt;div&gt;
 &lt;h4&gt;Made from dough and sugar. Usually circular in shape and has about 400 calories.&lt;/h4&gt;
 &lt;/div&gt;
&lt;/div&gt;
两者的关键差异是：
嵌入Ruby代码的例子.
注意：这是一个简单的预览示例，可能不能体现此语言的目前版本。
 %head
 %title BoBlog
 %body
 #header
 %h1 BoBlog
 %h2 Bob's Blog
 #content
 - @entries.each do |entry|
 .entry
 %h3.title= entry.title
 %p.date= entry.posted.strftime("%A, %B %d, %Y")
 %p.body= entry.body
 #footer
 %p
 All content copyright © Bob
上述Haml产生这个XHTML：
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'&gt;
 &lt;head&gt;
 &lt;title&gt;BoBlog&lt;/title&gt;
 &lt;meta content='text/html; charset=utf-8' http-equiv='Content-Type' /&gt;
 &lt;link href="/stylesheets/main.css" media="screen" rel="Stylesheet" type="text/css" /&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div id='header'&gt;
 &lt;h1&gt;BoBlog&lt;/h1&gt;
 &lt;h2&gt;Bob's Blog&lt;/h2&gt;
 &lt;/div&gt;
 &lt;div id='content'&gt;
 &lt;div class='entry'&gt;
 &lt;h3 class='title'&gt;Halloween&lt;/h3&gt;
 &lt;p class='date'&gt;Tuesday, October 31, 2006&lt;/p&gt;
 &lt;p class='body'&gt;
 Happy Halloween, glorious readers! I'm going to a party this evening... I'm very excited.
 &lt;/p&gt;
 &lt;/div&gt;
 &lt;div class='entry'&gt;
 &lt;h3 class='title'&gt;New Rails Templating Engine&lt;/h3&gt;
 &lt;p class='date'&gt;Friday, August 11, 2006&lt;/p&gt;
 &lt;p class='body'&gt;
 There's a very cool new Templating Engine out for Ruby on Rails. It's called Haml.
 &lt;/p&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div id='footer'&gt;
 &lt;p&gt;
 All content copyright © Bob
 &lt;/p&gt;
 &lt;/div&gt;
 &lt;/body&gt;
&lt;/html&gt;
实现.
Haml的官方实现已经以Ruby插件形式内置在Ruby on Rails和中，该Ruby实现也能够独立使用。Haml可以轻松配合其他语言使用。下列是各种语言对Haml的实现：