ayuminのあまり更新しないBlog

筆不精なのでめったに更新しません

Hamlリファレンス

なんとなく気が向いたので途中まで訳してみた。
だいたい20%くらいまで。続きはまた今度やる。

原文はこちらをご覧ください

Haml(XHTML Abstraction Markup language)

Haml はあらゆるwebドキュメントをインラインコードを用いずにXHTMLでクリアでシンプルに記述するマークアップ言語です。Hamlの機能はPHP、ERB、ASPなどのテンプレートシステムの代替となります。HamlではXHTMLコードをテンプレートに記述する必要はありません。なぜならばそれはXHTMLコードの動的なコンテンツを生成する抽象記述だからです。

特徴

Hamlをつかう

Hamlは3つの方法で使用することができます。Railsプラグイン、標準Rubyモジュール、コマンドラインツール。3つの方法で共通する最初のステップはHaml gemをインストールすることです。

  gem install haml

Railsプラグインとして使用するには下記のコマンドを実行します。

  haml --rails path/to/rails/app

インストールされたら、すべてのviewファイルはHamlを使用して".html.haml"にコンパイルされます。

Hamlコマンドラインから実行するには、以下のコマンドを実行するだけです。

  haml input.haml output.html

Hamlテンプレートの中ではERBのようにいくつかの方法でインスタンス変数にアクセスすることができます。ヘルパーモジュールはHamlの中でも使用可能です。例えば(これはRailsの例ですがMarbでも同じ原理です)

  # file: app/controllers/movies_controller.rb

  class MoviesController < ApplicationController
    def index
      @title = "Teen Wolf"
    end
  end
  # file: app/views/movies/index.haml

  #content
   .title
     %h1= @title
     = link_to 'Home', home_url

これは以下のようにコンパイルされます。

  <div id='content'>
    <div class='title'>
      <h1>Teen Wolf</h1>
      <a href='/'>Home</a>
    </div>
  </div>

Rubyモジュール

HamlRailsActionViewから切り離して使用することもできます。そのためにはRubyGemsを使用してHamlをインストールします。

  gem install haml

hamlRubyコードの中で使用するには下記のようにHaml::Engineを使用します。

  require 'rubygems'
  require 'haml'
  engine = Haml::Engine.new("%p Haml code!")
  engine.render #=> "<p>Haml code!</p>\n"

Hamlの文字の意味

特定の場所に置かれたいくつもの文字がHamlに異なるタイプのレンダリングを指示します。

XHTMLタグ

これらの文字はXHTMLタグを生成します。

%

パーセント文字は行の先頭に記述されます。それに続く文字列は要素名となり、修正の機会、(下記をみてください)空白、テキストは要素の内部に出力されます。

  %one
    %two
      %three Hey there

これは以下のようにコンパイルされます。

  <one>
    <two>
      <three>Hey there</three>
    </two>
  </one>

すべての文字列はが有効な要素名として解釈されます。Hamlは自動的にその要素名の開きタグと閉じタグを生成します。

{}

中カッコはRubyのハッシュで、要素の属性を指定します。それはRubyのハッシュと同じように評価され、その中でロジックを記述することもできます。またローカル変数も使用できます。属性の中でクオートされた文字列は適切なエスケープシーケンスで置換されます。ハッシュはタグの定義の後に置かれます。

例:

  %head{ :name => "doc_head" }
    %script{ 'type' => "text/" + "javascript",
             :src   => "javascripts/script_#{2 + 7}" }

これは以下のようにコンパイルされます。

  <head name='doc_head'>
    <script src='/docs/rdoc/javascripts/script_9' type='text/javascript'>
    </script>
  </head>
属性を返すメソッド

ハッシュを返すRubyメソッド呼び出しはハッシュの代用とすることができます。例えばHaml::Helpersは下記のように定義されています。

  def html_attrs(lang = 'en-US')
    {:xmlns => "http://www.w3.org/1999/xhtml", 'xml:lang' => lang, :lang => lang}
  end

これによってHamlで以下のように書くことができます。

  %html{html_attrs('fr-fr')}

これは以下のようにコンパイルされます。

  <html lang='fr-fr' xml:lang='fr-fr' xmlns='http://www.w3.org/1999/xhtml'>
  </html>

他にもあなたが好きなメソッドを属性を返すメソッドとして使用することができます。
Ruby引数のようにコンマで分離して記述します。メソッドの返り値のハッシュは左から右の方向に一緒に連結されてひとつのハッシュになります。例えばあなたが下記のようにhash1とhash2定義し

  def hash1
    {:bread => 'white', :filling => 'peanut butter and jelly'}
  end

  def hash2
    {:bread => 'whole wheat'}
  end

これをhamlで下記のように記述した場合には

  %sandwich{hash1, hash2, :delicious => true}/

以下のようにコンパイルされます。

 <sandwich bread='whole wheat' delicious='true' filling='peanut butter and jelly' />

Hamlの属性リストはRubyメソッド呼び出しと同じ文法規則をもつことに注意してください。これはすべての属性を返すメソッドメソッドはハッシュリテラルの前に無くてはならないことを意味します。

*1:どう訳せばいいかわからんっ