{{Infobox programming language
| name = Haml
| logo =
| alumni = [https://github.com/nex3 Natalie Weizenbaum]、
| designer = [http://nick-walsh.com/ Nick Walsh]
| developer =
| programming_language = Ruby
| latest_release_version = 5.2.1
| latest_release_date =
| operating_system = 跨平台
| paradigm =
| license = {{plainlist|
- [https://github.com/haml/haml/blob/master/MIT-LICENSE MIT许可证]
- [https://unspace.ca/ Unspace Interactive]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同样使用.(点)表示CSS的类,使开发人员可以轻松使用这种标记。
Hello, World例子
Haml的最简单的Hello World实现像是这样:
Haml作为命令行工具
%p{:class => "sample", :id => "welcome"} Hello, World!
得到这样的HTML代码:
Hello, World!
为运行Haml代码,必须已安装,如使用下列命令 Haml以gem安装:
gem install haml
Haml代码若以Hello.haml为文件名保存,则可以这样运行:
haml Hello.haml
Haml作为Ruby on Rails附加项
要用Ruby使用Haml,Ruby的Gemfile应该包含此行:
gem 'haml'
类似eRuby,Haml也可以访问局部变量(在同一个文件中以Ruby代码声明)。此例子使用一个Ruby控制器文件为例。
- file: app/controllers/messages_controller.rb
class MessagesController
- file: app/views/messages/index.html.haml
#welcome
%p= @message
将得到:
Hello, World!
Haml作为Ruby模块
要独立于Rails和[http://guides.rubyonrails.org/action_view_overview.html ActionView]使用Haml,安装haml gem,在Gemfile中包含它,然后简单的在Ruby脚本中导入[Usage: require 'haml'],或者以-rubygems标志调用Ruby直譯器。
welcome = Haml::Engine.new("%p Hello, World!")
welcome.render
输出:
Hello, World!
[http://haml.info/docs/yardoc/Haml/Engine.html Haml::Engine]是一个Haml类。
基本例子
Haml使用空格缩进(两个空格)来表示标签的嵌套和识别给定标签的范围。这取代打开、闭合的标签对系统,从而符合DRY并使其看上去更清晰(容易阅读)。下列例子展示了Haml与eRuby(嵌入式Ruby)的差异。
由上述代码示例呈现的HTML代码如下所示:
Cookie
Desserts
Made from dough and sugar. Usually circular in shape and has about 400 calories.
两者的关键差异是:
- Haml不像eRuby那样,每个元素都有开始与结束
- eRuby语法看上去很像、更像HTML,而Haml更像CSS。
- Haml使用缩进来嵌套标签元素,而eRuby使用与HTML相同的表示法
- 在Haml属性中,class、id可以用.和#表示class和id关键字。Haml使用%标示一个HTML元素,而eRuby中使用<>。
嵌入Ruby代码的例子
注意:这是一个简单的预览示例,可能不能体现此语言的目前版本。
!!!
%html{ :xmlns => "http://www.w3.org/1999/xhtml", :lang => "en", "xml:lang" => "en"}
%head
%title BoBlog
%meta{"http-equiv" => "Content-Type", :content => "text/html; charset=utf-8"}
%link{"rel" => "stylesheet", "href" => "main.css", "type" => "text/css"}
%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:
BoBlog
BoBlog
Bob's Blog
Halloween
Tuesday, October 31, 2006
Happy Halloween, glorious readers! I'm going to a party this evening... I'm very excited.
New Rails Templating Engine
Friday, August 11, 2006
There's a very cool new Templating Engine out for Ruby on Rails. It's called Haml.
All content copyright © Bob
实现
Haml的官方实现已经以Ruby插件形式内置在Ruby on Rails和中,该Ruby实现也能够独立使用。Haml可以轻松配合其他语言使用。下列是各种语言对Haml的实现:
- [https://github.com/k0kubun/hamlit hamlit (Ruby)]
- [https://github.com/jessemiller/HamlPy HamlPy (Python)]
- [https://github.com/norman/lua-haml LuaHaml (Lua)]
- [https://web.archive.org/web/20080608081951/http://weblogs.asp.net/mirvodasergey/archive/2008/06/02/introducing-monorail-nhaml.aspx MonoRail NHaml (ASP.NET)]
- [https://code.google.com/p/nhaml/ NHaml (.NET)]
- [https://web.archive.org/web/20100303124319/http://wiki.github.com/dxw/Fammel/ Fammel (PHP)]
- [https://web.archive.org/web/20110417115303/http://haml-to-php.com/ HAML-TO-PHP (PHP5)]
- [http://phaml.sourceforge.net/ pHAML (PHP)]
- [https://code.google.com/p/phamlp/ phamlp (PHP)]
- [http://phphaml.sourceforge.net phpHaml (PHP5)]
- [https://github.com/arnaud-lb/MtHaml Multi target HAML (PHP5.3)]
- [https://github.com/creationix/haml-js haml-js (JavaScript)]
- [https://metacpan.org/module/Text::Haml Text::Haml (Perl)]
- [https://web.archive.org/web/20100216131951/http://scalate.fusesource.org/index.html Scalate (Scala)]
- [https://github.com/raymyers/JHaml JHaml (Java)]
- [https://github.com/lvivski/hart Hart (Dart)]
- [https://github.com/Unspeakable/cl-haml cl-haml (Common Lisp)]
参见
- BBCode
- eRuby
*
- Ruby
- Ruby on Rails
- YAML
- Sass – 一种类似的面向CSS的系统,也是由Catlin设计。
- – 另一种有类似功能的模板语言
*
参考资料
外部链接
*
** [http://haml.info/tutorial.html Haml tutorial]
- [https://learnxinyminutes.com/docs/haml/ Learn Haml (basic)]
*
- [http://phphaml.sourceforge.net/ phpHaml],面向PHP的Haml实现
- [https://groups.google.com/forum/?hl=en#!forum/haml Haml Google讨论组]
- [http://weblog.rubyonrails.org/2007/1/19/haml-1-0 Haml 1.0],Ruby on Rails博客上的公告
评论 (0)