$ haml input_file.haml output_file.html
/ -------------------------------------------
/ Indenting
/ -------------------------------------------
/
  Because of the importance indentation has on how your code is rendered, the
  indents should be consistent throughout the document. Any differences in
  indentation will throw an error. It's common-practice to use two spaces,
  but it's really up to you, as long as they're constant.
/ -------------------------------------------
/ Comments
/ -------------------------------------------
/ This is what a comment looks like in Haml.
/
  To write a multi line comment, indent your commented code to be
  wrapped by the forward slash
-# This is a silent comment, which means it won't be rendered into the doc at all
/ -------------------------------------------
/ Html elements
/ -------------------------------------------
/ To write your tags, use the percent sign followed by the name of the tag
%body
  %header
    %nav
/ Notice no closing tags. The above code would output
  
    
  
/
  The div tag is the default element, so it can be omitted.
  You can define only class/id using . or #
  For example
%div.my_class
  %div#my_id
/ Can be written
.my_class
  #my_id
/ To add content to a tag, add the text directly after the declaration
%h1 Headline copy
/ To write multiline content, nest it instead
%p
  This is a lot of content that we could probably split onto two
  separate lines.
/
  You can escape html by using the ampersand and equals sign ( &= ). This
  converts html-sensitive characters (&, /, :) into their html encoded
  equivalents. For example
%p
  &= "Yes & yes"
/ would output 'Yes & yes'
/ You can unescape html by using the bang and equals sign ( != )
%p
  != "This is how you write a paragraph tag "
/ which would output 'This is how you write a paragraph tag '
/ CSS classes can be added to your tags either by chaining .classnames to the tag
%div.foo.bar
/ or as part of a Ruby hash
%div{:class => 'foo bar'}
/ Attributes for any tag can be added in the hash
%a{:href => '#', :class => 'bar', :title => 'Bar'}
/ For boolean attributes assign the value 'true'
%input{:selected => true}
/ To write data-attributes, use the :data key with its value as another hash
%div{:data => {:attribute => 'foo'}}
/ For Ruby version 1.9 or higher you can use Ruby's new hash syntax
%div{ data: { attribute: 'foo' } }
/ Also you can use HTML-style attribute syntax.
%a(href='#' title='bar')
/ And both syntaxes together
%a(href='#'){ title: @my_class.title }
/ -------------------------------------------
/ Inserting Ruby
/ -------------------------------------------
/
  To output a Ruby value as the contents of a tag, use an equals sign followed
  by the Ruby code
%h1= book.name
%p
  = book.author
  = book.publisher
/ To run some Ruby code without rendering it to the html, use a hyphen instead
- books = ['book 1', 'book 2', 'book 3']
/ Allowing you to do all sorts of awesome, like Ruby blocks
- books.shuffle.each_with_index do |book, index|
  %h1= book
  - if book do
    %p This is a book
    
/ Adding ordered / unordered list
%ul
  %li
    =item1
    =item2
/
  Again, no need to add the closing tags to the block, even for the Ruby.
  Indentation will take care of that for you.
/ -------------------------------------------
/ Inserting Table with bootstrap classes
/ -------------------------------------------
%table.table.table-hover
  %thead
    %tr
      %th Header 1
      %th Header 2
    
    %tr
      %td Value1
      %td value2
    
  %tfoot
    %tr
      %td
        Foot value
/ -------------------------------------------
/ Inline Ruby / Ruby interpolation
/ -------------------------------------------
/ Include a Ruby variable in a line of plain text using #{}
%p Your highest scoring game is #{best_game}
/ -------------------------------------------
/ Filters
/ -------------------------------------------
/
  Filters pass the block to another filtering program and return the result in Haml
  To use a filter, type a colon and the name of the filter
/ Markdown filter
:markdown
  # Header
  Text **inside** the *block*
/ The code above is compiled into
Header
Text inside the block
/ JavaScript filter
:javascript
  console.log('This is inline 
/
  There are many types of filters (:markdown, :javascript, :coffee, :css, :ruby and so on)
  Also you can define your own filters using Haml::Filters