Haml の変更履歴

6.3.0

  • Turbo のために v6.1.3 で追加された Haml::RailsTemplate#default_format を削除 #1152, #1154 (議論)
    • 推奨される代替案については、リファレンスを参照してください。

6.2.5

  • Turbo のために v6.1.3 で追加された Haml::RailsTemplate#default_format を非推奨化 (議論)

6.2.4

  • case-in 文をサポート #1155

6.2.3

  • RDFa doctype のサポートを復活 #1147

6.2.2

  • Haml::BOOLEAN_ATTRIBUTES にカスタム属性を追加できるようにする #1148
  • aria-xxx: false をブール属性とみなす

6.2.1

  • 動的な aria 属性のレンダリングにおける v6.2.0 のバグを修正 #1149

6.2.0

  • C 拡張機能を削除 #1146

6.1.4

  • Haml::Util.escape_htmlERB::Escape が利用可能な場合はそれを使用するようにする #1145

6.1.3

  • Turbo 互換性のために Haml::RailsTemplate#default_format を追加 #1144

6.1.2

  • Rails テンプレートのパスを filename として使用 #1140

6.1.1

  • Ruby 3.1 のハッシュ短縮構文の空の出力を修正 #1083

6.1.0

  • = スクリプトでの to_s 呼び出しを最適化して削除
  • to_shtml_safe 文字列を返すオブジェクトのエスケープを修正 #1117

6.0.12

  • > および if-else ステートメントでの空白削除を修正 #1114

6.0.11

  • > および if ステートメントでの空白削除を修正 #1114

6.0.10

  • Haml 5 のようにテンプレートコンテキストで :erb フィルターを評価

6.0.9

  • sass-embedded をサポート #1112

6.0.8

  • 6.0.0 から機能していなかった HTML コメントでの補間をサポート #1107

6.0.7

  • Haml::Engine および Haml::Template は ArrayBuffer の代わりに StringBuffer を使用
    • 最近の Ruby バージョンでは、多くの場合、よりパフォーマンスが向上しているようです。
    • Haml::RailsTemplate は影響を受けません。

6.0.6

  • CRuby が Ruby 実装のフォールバックを誤って使用するのを防止
    • v6.0.3 と v6.0.4 で行ったことを元に戻しますが、Wasm は引き続きサポートします。

6.0.5

  • オブジェクト参照での #haml_object_ref のサポートを復活 #1097
    • これは 6.0.0 で削除され、このバージョンで再び追加されました。
  • remove_whitespace: true オプションの警告を停止。

6.0.4

2022 年 10 月 2 日にリリース (差分)。

  • 属性での % の解析失敗を修正 #1096
  • Wasm 用に C から Ruby への別のフォールバックを追加。

6.0.3

2022 年 9 月 28 日にリリース (差分)。

  • Wasm の場合、C 拡張機能が利用できない場合は Ruby にフォールバックします。

6.0.2

2022 年 9 月 28 日にリリース (差分)。

  • Rails で surroundsucceed、および precede の HTML セーフな引数のエスケープを解除 #1088

6.0.1

2022 年 9 月 23 日にリリース (差分)。

  • Rails での HTML セーフな補間のエスケープを解除 #1084
  • syntax_tree-haml 用に Haml 5 の AttributeParser.available? を復活 #1085

6.0.0

2022 年 9 月 21 日にリリース (差分)。

  • 実装を Hamlit に置き換え
    • Haml 6 は このベンチマーク で Haml 5 より約 1.7 倍高速です。
    • パーサーはそのままですが、それ以外のすべてが置き換えられます。
    • haml CLI インターフェースも置き換えられました。
    • Haml::Engine のインターフェースが変更されました。現在必要なのは Haml::Template である可能性が高いです。
      • 以前: Haml::Engine.new("%p Haml code!").render
      • 以後: Haml::Template.new { "%p Haml code!" }.render
    • ほとんどの Haml ヘルパーが削除されました。
      • Rails
        • 維持: find_and_reservepreservesurroundprecedesucceedcapture_haml
        • 削除: block_is_haml?flattenhaml_concathaml_indenthaml_taghaml_tag_ifhtml_attrshtml_escapeinit_haml_helpersis_haml?list_ofnon_hamltab_downtab_upwith_tabs
      • Tilt
        • 維持: preserve
        • 削除: block_is_haml?capture_hamlescape_oncefind_and_preserveflattenhaml_concathaml_indenthaml_taghaml_tag_ifhtml_attrshtml_escapeinit_haml_helpersis_haml?list_ofnon_hamlprecedesucceedsurroundtab_downtab_upwith_tabs
      • :ruby フィルター
        • 削除: haml_io
      • 削除されたヘルパーの代替
        • いくつかの単純なものは、元の定義をコピーすることで機能する可能性があります。
        • 一般的な HTML タグを生成するヘルパーについては、Rails の content_tag など、フレームワークが提供するものを使用することも検討してください。capture_haml にも同じことが当てはまります (例: Rails の capture)。
        • Haml::Buffer に依存するものは、設計上直接の代替手段がありません。それらはパフォーマンスを犠牲にして存在していました。ヘルパーを定義し、その中に String バッファーをインスタンス化し、そこに内容を追加して、= 内で呼び出す必要があります。
    • 次の属性と aria/data 属性のみがブール属性とみなされます。
      • allowfullscreenasyncautobufferautofocusautoplaycheckedcontrolsdefaultdeferdisableddownloadformnovalidatehiddeninertismapitemscopeloopmultiplemutednovalidateopenpubdatereadonlyrequiredreversedscopedseamlessselectedsortabletruespeedtypemustmatch
    • data および aria 属性のみが、ネストされたハッシュを使用してハイフン付き属性をレンダリングすることをサポートします。たとえば、data: { foo: 'bar' }data-foo="bar" になりますが、これは data/aria 以外の属性では機能しなくなります。
    • いくつかのレガシー Rails 統合が削除されました。
    • escape_html オプションのデフォルト値が true になりました。
    • - スクリプト行はキャプチャをサポートしなくなりました。ネストされたブロックを生成するには、= 行のみがサポートされています。
    • 同じ名前を持つ別の falsey data-* 属性で data 属性を上書きすることは、サポートされなくなりました。 #1105
    • :erb フィルターはテンプレートコンテキストで実行されません (6.0.10 で修正)。

5.2.2

2021 年 7 月 27 日にリリース (差分)。

  • Rails 6.1 の config.action_view.annotate_rendered_view_with_filenames = true をサポート

5.2.1

2020 年 11 月 30 日にリリース (差分)。

  • 属性の「複数行」サポートを改善して追加 #1043

5.2

2020 年 9 月 28 日にリリース (差分)。

  • TrueClass/FalseClass で #inspect がオーバーライドされている場合に、属性オプティマイザーでクラッシュする問題を修正 #972
  • プレーンテキストとして宣言されているテンプレートを HTML エスケープしない #1014 (ありがとうございます @cesarizu)
  • クラス名はアルファベット順に並べられなくなり、REFERENCE で規定されている新しい仕様に従うようになりました #306

5.1.2

2019 年 8 月 6 日にリリース (差分)。

  • ParseNode#inspect のために文字列リテラルをフリーズ解除することにより、New Relic などの一部の環境でのクラッシュを修正。 #1016 (ありがとうございます Jalyna)

5.1.1

2019 年 5 月 25 日にリリース (差分)。

  • ruby 2.6.1-2.6.3 + haml 5.1.0 + rails < 5.1 + erubi で発生する NameError バグを修正。(Akira Matsuda)

5.1.0

2019 年 5 月 16 日にリリース (差分)。

  • Rails 6 のサポート #1008 (ありがとうございます Seb Jacobs)
  • haml 4 のデフォルトとの後方互換性のために escape_filter_interpolations オプションを追加 #984 (ありがとうございます Will Jordan)
  • 空の :javascript および :css フィルターブロックでのエラーを修正 #986 (ありがとうございます Will Jordan)
  • Haml::TempleEngine オプションで Haml::Options.defaults の変更を尊重 (Takashi Kokubun)
  • TempleEngine のコンパイル済み文字列リテラルをフリーズ解除 #983 (ありがとうございます Will Jordan)
  • パフォーマンス/メモリのさまざまな改善 #965#966#963 (ありがとうございます Dillon Welch)
  • すべての .rb ファイルで frozen_string_literal マジックコメントを有効化 #967 (ありがとうございます Dillon Welch)

5.0.4

2017 年 10 月 13 日にリリース (差分)。

  • 5.0.2 での haml -c --stdin のリグレッションを修正。 #958 (ありがとうございます Timo Göllner)
  • Ruby 2.5 のサポート (Ripper API の変更により機能していませんでした)。(Akira Matsuda)

5.0.3

2017 年 9 月 7 日にリリース (差分)。

  • 文字列リテラルを生成するために String#inspect の代わりに String#dump を使用します。(Takashi Kokubun)
  • Erubi のスーパークラスの不一致エラーを修正。 #952 (ありがとうございます Robin Daugherty)

5.0.2

2017 年 8 月 1 日にリリース (差分)。

  • 生成された Ruby コードが構文エラーの場合、haml -c を失敗させる。 #880 (Takashi Kokubun)
  • Sprockets 3 および :sass フィルターで発生する NoMethodError バグを修正。 #930 (ありがとうございます Gonzalez Maximiliano)
  • 複数行の内容を持つ list_of ヘルパーを修正。 #933 (ありがとうございます Benoit Larroque)
  • テキストエリアを修正するタイミングを変更することで、レンダリングパフォーマンスを最適化。 #941 (Takashi Kokubun)
  • 空の :ruby フィルターで TypeError を修正。 #942 (Takashi Kokubun)
  • 属性のソート順序の不整合を修正。(Takashi Kokubun)

5.0.1

2017 年 5 月 3 日にリリース (差分)。

  • 文字列補間を含む属性の解析を修正。 #917 #921
  • gem パッケージでのテストファイルの配布を停止し、Windows でのインストールを許可します。
  • ActionView でのみ、erb フィルターに ActionView の Erubi/Erubis ハンドラーを使用します。 #914

5.0.0

2017 年 4 月 26 日にリリース (差分)。

破壊的な変更

  • Haml は Ruby 2.0.0 以上を必要とするようになりました。
  • Rails 3 は公式の Ruby on Rails のメンテナンスポリシーに合わせてサポートされなくなりました。Rails 3 を使用したい場合は、Haml 4 を使用してください。(Tee Parham)
  • :ugly オプションを削除 (#894)
  • haml コマンドのデバッグオプション (-d) は Haml コードを実行するのではなく、生成された Ruby 構文のエラーをチェックするようになりました。
  • Haml::Engine からパーサー/コンパイラアクセサーを削除します。代わりに、Haml::Engine#initialize オプションまたは Haml::Template.options を変更してください。(Takashi Kokubun)
  • 動的な引用符のサポートを削除し、escape_html/escape_attrs の場合は常に ' をエスケープします。また、エスケープされた結果はわずかに変更され、常に同じ文字に統一されます。(Takashi Kokubun)
  • 属性内の改行を保持しないでください。(Takashi Kokubun)
  • フィルター内の補間されたコードを HTML エスケープします。 #770 (Matt Wildig)

      :javascript
        #{JSON.generate(foo: "bar")}
      Haml 4 output: {"foo":"bar"}
      Haml 5 output: {&quot;foo&quot;:&quot;bar&quot;}
    

追加

  • トレースオプションを追加します。有効にすると、Haml は生成元の Haml ソースファイルへのパスを示す data-trace 属性を各タグに出力します。ありがとうございます Alex Babkin
  • 別の要素で条件付きでラップされたブロックをレンダリングするために haml_tag_if を追加 (Matt Wildig)
  • Rails 5.1 Erubiテンプレートハンドラーをサポート。
  • Sprockets 3をサポート。 Sam DaviesJeremy Veneziaに感謝します。
  • 全体的なパフォーマンスとメモリ使用量の改善。(Akira Matsuda)
  • Ripperで属性値を解析し、静的な属性を事前にレンダリングします。(Takashi Kokubun)
  • 属性のレンダリングを約3倍高速化。(Takashi Kokubun)
  • temple gemを依存関係として追加し、Haml::TempleEngineクラスを作成。Haml::Compilerの一部のメソッドをHaml::TempleEngineに移行。(Takashi Kokubun)

修正済み

  • 属性のマージに関する修正。古いスタイルの属性ハッシュで属性メソッド(またはリテラルのネストされたハッシュ)が使用され、さらに(非静的な)新しいスタイルのハッシュがある場合にエラーが発生する問題を修正。この修正により、特定の状況で異なる動作をする可能性があります。詳細については、コミットメッセージを参照してください。(Matt Wildig)
  • escape_onceが16進数参照を尊重するように修正。(Matt Wildig)
  • 属性ハッシュをマージする際に、「data」属性を特別扱いしないように修正。(Matt Wildig and Norman Clarke)
  • html_safeモードで動作していなかった#@fooおよび#$fooスタイルの補間を修正。(Akira Matsuda)
  • タグのクラス名として@を使用できるように修正。Joe Bartlettに感謝します。
  • 属性名に無効な文字が含まれている場合にHaml::InvalidAttributeNameErrorを発生させるように修正。(Takashi Kokubun)
  • ActionView::OutputBufferの初期化時に予期しない例外を無視しないように修正。(Takashi Kokubun)

4.0.7

2015年8月10日にリリース(差分)。

  • textareaの空白処理を修正するために使用される正規表現のパフォーマンスを大幅に改善(Stan Huに感謝します)。

4.0.6

2014年12月1日にリリース(差分)。

  • Ruby 1.8.7での「regexp has invalid interval」警告を修正(Elia Schitoに感謝します)。

4.0.5

2014年1月7日にリリース(差分)。

  • haml_concatがhaml_tagの呼び出し後にエスケープされていないHTMLを追加する問題を修正。
  • HAMLの:uglyオプションが「true」の場合、ActionView::Helpers::CaptureHelper::captureが何も返さないブロックを渡されたときに、ビューバッファ全体を返すバグを修正(Mircea Moiseに感謝します)。

4.0.4

2013年11月5日にリリース(差分)。

  • RailsではなくRails::Railtieを確認するように修正(Konstantin Shabanovに感謝します)。
  • suppress_evalでリテラルの「#」を使用できるようにパーサーを修正。(Matt Wildig)
  • Helpers#escape_onceがフリーズされた文字列で動作するように修正(Railsで置き換えとして機能するERB::Util.html_escape_onceと同様)。(Patrik Metzmacherに感謝します)。
  • マイナーなテストの修正(Mircea Moiseに感謝します)。

4.0.3

2013年5月21日にリリース(差分)。

  • 新しいバージョンのRailsのErubisハンドラーとの互換性。
  • Tilt 1.4.xとの互換性のためにErubisハンドラーを修正。
  • html_escapeの小さなパフォーマンス最適化。(Lachlan Sylvesterに感謝します)
  • ドキュメントの修正。
  • リファレンスから除外されていた一部のヘルパーメソッドをドキュメント化。(Shane Rileyに感謝します)

4.0.2

2013年4月5日にリリース(差分)。

  • 古いバージョンのTiltのバグを回避するためにErubisを明示的にrequireするように修正。
  • Railsビューで:erbフィルターが重複したコンテンツを出力する問題を修正。(Jori Hardmanに感謝します)
  • capture_hamlによって作成されるオブジェクトを減らすために範囲をスライスに置き換えました。(Tieg Zahariaに感謝します)
  • 一部のドキュメントを修正/改善。

4.0.1

2013年3月21日にリリース(差分)。

  • より一般的なソリューションを優先して、Rails 3.2.3+ textareaハックを削除。
  • 一部のパフォーマンスの低下を修正。
  • Rails 4のtext_areaヘルパーメソッドのサポートを修正。
  • シングルトンオブジェクトでのデータ属性の平坦化を修正。(Alisdair McDiarmidに感謝します)
  • sass-rails 4.0 betaのサポートを修正。(Ryunosuke SATOに感謝します)
  • Railsイニシャライザーで設定されたユーザーオプションが上書きされないように、Railtieで「haml/template」をロード
  • HamlをActionViewで使用できるようにするために、haml/templateでRailsに依存しないように修正。(Hunter Haydelに感謝します)

4.0.0

  • Haml実行可能ファイルが--autocloseオプションを受け付けるようになりました。自動的に閉じられるタグのリストを指定できます。

  • :rubyフィルターは、スレッドセーフではないため、Hamlドキュメントに$stdoutをリダイレクトしなくなりました。代わりに、ドキュメントに書き込むIOオブジェクトであるhaml_ioローカル変数を提供します。

  • HTML5が、XHTMLではなくデフォルトの出力形式になりました。これはすでにRails 3以上ではデフォルトであったため、多くのユーザーは違いに気づかないでしょう。

  • :sassフィルターは、新しい:lessおよび:scssフィルターと同様に、その出力をstyleタグでラップするようになりました。:coffeeフィルターは、その出力をscriptタグでラップします。

  • Hamlは、Rails 3以上およびRuby 1.8.7以上のみをサポートするようになりました。Rails 2とRuby 1.8.6のサポートが必要な場合は、バグ修正のためにメンテナンスが続けられるHaml 3.1.xを使用してください。

  • :javascriptおよび:cssフィルターは、形式がhtml4またはhtml5の場合、CDATAタグを追加しなくなりました。これは、cdataオプションをtrueに設定することで上書きできます。CDATAタグは、形式がxhtmlの場合に常に付与されます。

  • HTML2Hamlは、創造的に「html2haml」と名付けられた別のgemに抽出されました。

  • :erbフィルターは、XSSの安全性を確保するためにRailsの安全な出力バッファを使用するようになりました。

  • Hamlの内部がリファクタリングされ、パーサー、コンパイラー、オプション処理をすべてEngineモジュールに含めるのではなく、独立したクラスに移動しました。Hamlを拡張または比較的簡単に変更するために、Haml::Optionsで独自のカスタムHamlパーサーまたはコンパイラークラスを指定することもできます。

  • :hyphenate_data_attrsオプションを追加しました。これは、HTML5データキーのアンダースコアをハイフンに変換します。これは3.1からの言語変更であり、デフォルトで有効になっています。(Andrew Smithに感謝します)

  • すべてのハッシュ属性値は、キーに関係なく、HTML5データとして扱われるようになりました。以前は「data」キーのみがこのように扱われていました。任意のキーを許可することで、他の用途の中でも、Aria属性にこの機能を簡単に使用できるようになりました。(Elvin Efendiに感謝します)

  • Hamlタグの周りのすべての空白を常に削除するremove_whitespaceオプションを追加しました。(Tim van der Horstに感謝します)

  • Hamlは、深くネストされたデータ属性ハッシュを平坦化するようになりました。例えば

    .foo{:data => {:a => "b", :c => {:d => "e", :f => "g"}}}

    は以下のようにレンダリングされます

    <div class='foo' data-a='b' data-c-d='e' data-c-f='g'></div>

    (Péter Pál Kosztaに感謝します)

  • サードパーティのテンプレートエンジンに依存するフィルターは、Tiltを使用して実装されるようになりました。いくつかの新しいフィルター、つまりSCSS(:scss)、LessCSS、(:less)、およびCoffeescript(:coffee/:coffeescript)が追加されました。

    「公式」フィルターのリストは意図的に小さく保たれていますが、Hamlには、他のTiltベースのテンプレートエンジンのサポートを簡単に加えることができるヘルパーメソッドが付属しています。

    4.0以降、Hamlには、Nokogiri、Yajl、Markabyなどの有用ではあるが使用頻度の低いフィルターとヘルパーを含む「haml-contrib」gemも同梱されます。

  • #idよりも優先して、#to_keyが存在する場合は、それに基づいてオブジェクト参照を生成します。

  • パフォーマンスの改善。(Chris Healdに感謝します)

  • ヘルパーlist_ofは、リスト項目の属性にレンダリングされる追加の引数を取ります。(Iain Barnettに感謝します)

  • some_method?で終わる行がRubyの複数行になるようにパーサーを修正しました。(Brad Edigerに感謝します)

  • レンダリングされたテンプレートのmime_typeが「text/xml」の場合は、常に:xhtml形式を使用します。(Stephen Bannaschに感謝します)

  • html2hamlに--html-attributesオプションが含まれるようになりました。(Stefan Natchevに感謝します)

  • ループでの内部空白の削除を修正。(Richard Michaelに感謝します)

  • 属性内で二重引用符とアポストロフィをエスケープする際に、HTMLエンティティではなく数値文字参照を使用するように修正。これにより、Internet Explorer 9より前のバージョンで発生する一部のバグを回避できます。(Doug Mayerに感謝します)

  • 複数行のサイレントコメントを修正:Hamlでは以前は、複数行のサイレントコメント内で自由なインデントを許可していませんでした。

  • Railsでの部分レイアウトの順序に関するバグを修正。(Sam Pohlenzに感謝します)

  • スクリプト評価を抑制するコマンドラインオプションを追加。

  • SassおよびSCSSフィルター内でRailsのアセットヘルパーを使用できるようになりました。そのためには、通常、assets gemグループから移動して、sass-railsが本番環境でロードされていることを確認する必要があります。

  • Hamlプロジェクトは、セマンティックバージョニングを使用するようになりました。

3.2.0

Haml 3.2シリーズは3.2.0.rc.4までしかリリースされませんでしたが、プロジェクトがセマンティックバージョニングを採用したときにHaml 4.0に名前が変更されました。

3.1.8

  • ネストされたブロックで例外から報告された行番号に関する修正(Grant Hutchins&Sabrina Staedtに感謝します)。

3.1.7

  • Sass 3.2.xとの互換性に関する修正。(Michael Westbomに感謝します)。

3.1.6

  • インデントモードでは、保存されたタグを含むバッファを再インデントしないでください。また、Rails 3.2.3のtextareaヘルパーに対するより良い回避策を提供します。

3.1.5

  • 属性値をエスケープするときにRailsのhtml_safeフラグを尊重します(Gerad Suyderhoudに感謝します)。

  • Rails 3.2.3 textareaヘルパーの修正(James Colemanらに感謝します)。

3.1.4

  • Hamlのラベル付きFormBuilder#blockの使用を修正。
  • 動的属性を持つ自己終了タグの後のインデントを修正。

3.1.3

  • 部分レイアウトが2回表示されないように修正。

3.1.2

  • ActionView #captureヘルパーがHamlテンプレートで使用されているが、ブロック内でHamlが実行されていない場合、キャプチャされたバッファではなく、ブロックの値を返すように修正。

  • コメント内にテキストがネストされているときにエラーをスローしないように修正。

  • html2hamlを修正。

  • 場合によってはRails SafeBuffersで破壊的な変更が実行される問題を修正。

  • 名前付き/キーワードエンティティではなく、属性値の置換に文字コードエンティティを使用します。

3.1.1

  • ベンダーのSassをバージョン3.1.0に更新します。

3.1.0

  • :format:html5に設定されている場合、フィルターによって生成された<script>および<style>タグにtype属性を追加しないように修正。

  • :escape_attrsオプションを追加しました。これにより、属性がエスケープされないまま(HamlにPHPディレクティブを埋め込むなど)にしたり、#escape_onceされるのではなく常にエスケープしたりできるように修正。これは、コマンドラインから--no-escape-attrsを使用して使用することもできます。

  • コマンドラインからカスタムフィルターをロードできるように修正。

後方互換性がない変更点 - 必ずお読みください!

  • haml実行可能ファイルの--railsフラグを削除。このフラグはRails 2.0以降必要ありません。既存のRails 2.0インストールは引き続き動作します。

  • Hpricot 0.7のサポートを終了。0.8はほぼ2年間リリースされています。

3.0.25

GitHubでタグ付け.

  • Hpricotがhaml/htmlの前にロードされている場合でも、HTMLからHamlへの変換がRuby内で動作するように修正。

3.0.24

GitHubでタグ付け.

  • html2hamlが、ブロック内にネストされたサイレントスクリプト式に対してHamlを正しく生成するようになりました。

  • IronRubyの互換性。これは一種のハックです。IronRubyはバージョンを1.9と報告しますが、エンコーディングAPIをサポートしていないため、代わりに1.8として扱います。

3.0.23

GitHubでタグ付け.

  • Ruby 1.9.2で実行可能ファイルを実行するときに、ロードできないモジュールのエラーメッセージを修正しました。

  • 古いスタイルと新しいスタイルの属性を組み合わせるときのエラーを修正。

3.0.22

GitHubでタグ付け.

  • caseの後、whenの前に空行を許可。

  • vendor/sassを削除しました。これは誤ってgemに紛れ込んでおり、Herokuユーザーに問題を引き起こしていました(Jacques Crockerに感謝します)。

  • Rails 3.1テンプレートハンドラーAPIをサポートします。

3.0.21

GitHubでタグ付け.

  • パーミッションエラーを完全に修正。

3.0.20

GitHubでタグ付け.

  • 一部のパーミッションエラーを修正。

3.0.19

GitHubでタグ付け.

  • Ruby 1.9.2での:encodingオプションを修正。

  • HTMLエスケープが有効になっているときの補間されたifステートメントを修正。

  • --unix-newlinesフラグがUnixで動作するように修正しました。Unixではこれは何もしません。

3.0.18

GitHubでタグ付け.

  • JRuby環境下でのbundlerとの互換性のために、gemspec内でrakeを必須としないようにしました。 Gordon McCreight氏に感謝します。

  • インストール時の煩わしいRDocエラーを解消しました。

  • haml-railsがインストールされている場合に、Railsモジュールへの参照を明確化しました。

  • haml_tagのバグを修正し、重複した属性が追加されたり、data-属性が機能しなくなる問題を解決しました。

  • Rails 3の最終版との互換性。

3.0.17

GitHubでタグ付け.

  • mingwをWindowsとしてカウントするようにしました。

3.0.16

GitHubでタグ付け.

  • html2hamlのERB解析バグを修正し、ERBブロックがHamlでインデントなしで残ることがあった問題を解決しました。

  • 変数に値が代入されたif文とcase文の解析を修正しました。ただし、これは依然として悪いスタイルです。

  • ヘルパー内で文字列を返すブロックが渡された場合のform_forform_tagを修正しました。

3.0.15

GitHubでタグ付け.

バージョン3.0.14と3.0.15の間で、Hamlには変更はありませんでした。

3.0.14

GitHubでタグ付け.

  • CSSスタイルのクラスとIDにコロンを含めることを許可しました。

  • if文に関する不明瞭なバグを修正しました。

Rails 3のサポート

  • Rails 3で提供されなくなった#returningメソッドを使用しないようにしました。

3.0.13

GitHubでタグ付け.

Rails 3のサポート

Rails 3 beta 4より前のバージョンに対するサポートは削除されました。まだアップグレードしていない場合は、Rails 3.0.0.beta4にアップグレードしてください。

小さな改善点

  • エンコーディング宣言を含むフリーズされた文字列を適切に処理するようにしました。

3.0.12

GitHubでタグ付け.

Rails 3のサポート

どうやら、前のバージョンは、特定のgemの組み合わせによる一貫性のないロード順序のために、Rails 3で新しいエキサイティングな方法で壊れていたようです。3.0.12では、その不整合を回避し、完全にRails 3と互換性があるはずです。

非推奨: Rails 3 Beta 3

Rails 3.0.0.beta.3に対するHamlのサポートは非推奨となりました。Haml 3.0.13は3.0.0.beta.4のみをサポートします。

3.0.11

GitHubでタグ付け.

3.0.10

GitHubでタグ付け.

Appengine-JRubyのサポート

Hamlインストールの場所を決定する方法が、appengine-jrubyで使用されるJRubyのバージョンを壊さないようにしました。

バグ修正

  • 単一行のコメントがhtml2hamlで正しく処理されるようになりました。

3.0.9

GitHubでタグ付け.

バージョン3.0.8と3.0.9の間で、Hamlには変更はありませんでした。Gemcutterのバグにより、gemが正しくアップロードされませんでした。

3.0.8

GitHubでタグ付け.

  • Rails 3より前のRailsバージョンに関するバグを修正しました。

3.0.7

GitHubでタグ付け.

エンコーディングのサポート

Haml 3.0.7では、テンプレートのエンコーディングを宣言するためのRubyスタイルの-# coding:コメントのサポートが追加されました。詳細については、リファレンスを参照してください。

また、:encodingオプションが設定されていない場合、Hamlの動作がわずかに変更されました。デフォルトで"utf-8"とするのではなく、ソースドキュメントのエンコーディングをデフォルトとし、このエンコーディングが"us-ascii"の場合にのみ"utf-8"に戻るようにしました。

haml実行可能ファイルも、エンコーディングを指定するための-Eオプションを受け入れるようになりました。これはRubyの-Eオプションと同じように機能します。

その他の変更

  • Rails 3で実行する場合は、デフォルトで:html5形式を使用するようにしました。これは、Rails 3もデフォルトでHTML5を使用するためです。

バグ修正

  • <span>foo</span>のようなものをHaml用に生成する場合は、- succeed(機能しない)ではなく= succeedを使用するようにしました。

3.0.6

GitHubでタグ付け.

Rails 2.3.7のサポート

このリリースでは、Rails 2.3.7を完全にサポートしています。

Rails 2.3.6のサポートを削除

Rails 2.3.6は、XSS保護とHamlとのインターフェースに関連するさまざまなバグを抱えてリリースされました。これらのバグに対する修正を含むRails 2.3.7が直後にリリースされました。したがって、HamlはRails 2.3.6をサポートしなくなり、それを使用している場合は2.3.7にアップグレードする必要があります。

Rails 2.3.6でHamlを使用しようとすると、エラーが発生します。

3.0.5

GitHubでタグ付け.

Rails 2.3.6のサポート

このリリースでは、Rails 2.3.6のさまざまなバグを回避し、Hamlを完全な互換性を持たせました。

Rails 3のサポート

Rails 3の#captureヘルパーが、その値をテンプレートに直接出力しないようにしました。

3.0.4

GitHubでタグ付け.

バージョン3.0.3と3.0.4の間で、Hamlには変更はありませんでした。

3.0.3

GitHubでタグ付け.

Rails 3のサポート

Railsのロードエラーをデバッグしやすくするために、Sassのロード時にRails.rootnilの場合にエラーが発生するようにしました。以前は、これによりパスが誤って設定されるだけでした。

3.0.2

GitHubでタグ付け.

バージョン3.0.1と3.0.2の間で、Hamlには変更はありませんでした。

3.0.1

GitHubでタグ付け.

Railsへのインストール

RailsにHamlをインストールするためにhaml --railsは不要になりました。Rails 3の場合はGemfileにgem "haml"を追加するだけで済み、以前のバージョンの場合はconfig/environment.rbconfig.gem "haml"を追加するだけで済みます。

haml --railsは引き続き機能しますが、非推奨となりエラーメッセージが表示されます。Hamlの次のバージョンでは機能しません。

Railsのテスト速度

テストの実行速度を向上させるために、Railsのテスト環境では:uglyオプションがデフォルトでオンになりました。

3.0.0

GitHubでタグ付け.

後方互換性がない点: 必ず読んでください!

  • putsヘルパーが削除されました。代わりにHaml::Helpers#haml_concatを使用してください。

より便利な複数行

最後の行を除いて、各行がカンマで終わる限り、Rubyコードを複数行にわたってラップできるようになりました。たとえば

= link_to_remote "Add to cart",
    :url => { :action => "add", :id => product.id },
    :update => { :success => "cart", :failure => "error" }

haml_taghaml_concatの改善

CSSセレクタを使用するhaml_tag

haml_tagヘルパーは、標準のHamlコードと同じクラス/IDの省略形を使用した文字列を受け入れることができるようになりました。手動で指定されたクラスとIDの属性は、標準のHamlコードと同様にマージされます。たとえば

haml_tag('#foo') #=> <div id='foo' />
haml_tag('.bar') #=> <div class='bar' />
haml_tag('span#foo.bar') #=> <span class='bar' id='foo' />
haml_tag('span#foo.bar', :class => 'abc') #=> <span class='abc bar' id='foo' />
haml_tag('span#foo.bar', :id => 'abc') #=> <span class='bar' id='abc_foo' />

乾杯、S. Burkhard

複数行のコンテンツを持つhaml_tag

haml_tagヘルパーは、複数行のコンテンツを持つタグのフォーマットもより適切に行うようになりました。タグに複数のレベルのコンテンツがある場合、そのコンテンツはタグの下にインデントされます。たとえば

haml_tag(:p, "foo\nbar") #=>
  # <p>
  #   foo
  #   bar
  # </p>

複数行のコンテンツを持つhaml_tag

同様に、haml_concatヘルパーは、複数行のコンテンツを適切にインデントします。たとえば

haml_tag(:p) {haml_concat "foo\nbar"} #=>
  # <p>
  #   foo
  #   bar
  # </p>

:uglyを使用するhaml_taghaml_concat

:uglyオプションが有効になっている場合、haml_tagとhaml_concatは引数のインデントを行いません。

基本タグの改善

  • オブジェクトにhaml_object_refメソッドを実装することにより、特定のオブジェクトのオブジェクト参照に使用される名前をカスタマイズできるようになりました。このメソッドは、生成されたクラスとIDでオブジェクトのクラス名の代わりに使用される文字列を返す必要があります。 Tim Carey-Smith氏に感謝します。

  • すべての属性値は、文字列以外の型でもかまいません。それらの#to_sメソッドが呼び出され、文字列に変換されます。以前は、これはclass以外の属性でのみ機能していました。

:class:id属性がRuby配列を受け入れる

属性ハッシュでは、:class属性は、要素が文字列に変換されて結合される配列を受け入れるようになりました。`" "`同様に、:id属性は、要素が文字列に変換されて"_"で結合される配列を受け入れるようになりました。配列は最初にフラット化され、trueと評価されない要素はすべて取り除かれます。たとえば

.column{:class => [@item.type, @item == @sortcol && [:sort, @sortdir]] }

は、次のいずれかとしてレンダリングできます。

class="column numeric sort ascending"
class="column numeric"
class="column sort descending"
class="column"

@item.type"numeric"nilか、@item == @sortcolかどうか、@sortdir"ascending""descending"かによって異なります。

単一の値も指定できます。その値がfalseと評価された場合は無視されます。それ以外の場合は文字列に変換されます。たとえば

.item{:class => @item.is_empty? && "empty"}

は、次のいずれかとしてレンダリングできます。

class="item"
class="item empty"

Ronen Barzel氏に感謝します。

HTML5カスタムデータ属性

ハッシュ値を持つ:dataという名前の属性を作成すると、HTML5カスタムデータ属性が生成されます。たとえば

%div{:data => {:author_id => 123, :post_id => 234}}

は、次のようにコンパイルされます。

<div data-author_id='123' data-post_id='234'></div>

John Reilly氏に感謝します。

より強力な:autocloseオプション

:attributesオプションは、自己終了させるタグを指定する正規表現を受け入れることができるようになりました。

--double-quote-attributesオプション

Haml実行可能ファイルには、属性にシングルクォートではなくダブルクォートを使用させる--double-quote-attributesオプション(短縮形: -q)が追加されました。 Charles Roper氏に感謝します。

:cssフィルター

Hamlは、フィルター処理されたテキストを<style>とCDATAタグで囲む:cssフィルターをサポートするようになりました。

haml-spec統合

多くのさまざまなHaml実装の基本機能との互換性を維持するために、haml-specプロジェクトからのクロス実装テストを標準のHamlテストスイートに追加しました。

Ruby 1.9のサポート

  • Hamlとhtml2hamlは、テンプレートのエンコーディングに無効なバイトシーケンスを含むテンプレートが与えられた場合に、行番号と問題のある文字を含む、より説明的なエラーを生成するようになりました。

  • Hamlとhtml2hamlは、バイトオーダーマークを持つUnicodeドキュメントを受け入れるようになりました。

Railsのサポート

  • form_for=で使用されている場合、またはform_tag=とブロックで使用されている場合、それらは-で使用する必要があることを説明するエラーを発生するようになりました。これはHaml::Helpers#haml_concatの動作に似ており、一部のユーザーにとっていくつかの難しいバグを解消することを願っています。

Ripのサポート

Hamlは、Ripパッケージ管理システムと互換性があるようになりました。 Josh Peek氏に感謝します。

html2hamlの改善

  • ERB内のRubyブロックがサポートされるようになりました。Hamlコードは適切にインデントされ、endが削除されます。これには、ブロックを持つメソッドや、ifbegincaseなどのすべての言語構造が含まれます。たとえば

    <% content_for :footer do %>
      <p>Hi there!</p>
    <% end %>
    

    は、次のように変換されます。

    - content_for :footer do
      %p Hi there!
    

    このアイデアを思いつき、コードの最初の草案を作成してくれたJack Chen氏とDr. Nic Williams氏に感謝します。

  • インラインHTMLテキストノードがインラインHamlテキストに変換されるようになりました。たとえば、<p>foo</p>%p fooになり、以前は次のようになっていました。

    %p
      foo
    

    インラインコメント、およびERBモードで実行中のインラインERBについても同様です。<p><%= foo %></p>%p= fooになります。

  • テキストに含まれるERBは、Ruby補間として変換されるようになりました。たとえば

    <p>
      Foo <%= bar %> baz!
      Flip <%= bang %>.
    </p>
    

    は、次のように変換されます。

    %p
      Foo #{bar} baz!
      Flip #{bang}.
    
  • <script>タグが:javascriptフィルターに、<style>タグが:cssフィルターに変換されるようになりました。また、インデントが保持されます。たとえば

    <script type="text/javascript">
      function foo() {
        return 12;
      }
    </script>
    

    は、次のように変換されます。

    :javascript
      function foo() {
        return 12;
      }
    
  • <pre>タグと<textarea>タグが:preserveフィルターに変換されるようになりました。たとえば

    <pre>Foo
      bar
        baz</pre>
    

    は、次のように変換されます。

    %pre
      :preserve
        Foo
          bar
            baz
    
  • 自己終了タグ(<br />など)が、自己終了Hamlタグ(%br/など)に変換されるようになりました。

  • IE条件付きコメントが正しく解析されるようになりました。

  • 属性が、中括弧内にスペースがない、より標準的な形式で出力されるようになりました(例: %p{:foo => "bar"}%p{ :foo => "bar" }の代わりに)。

  • #.を含むIDとクラスが、文字列属性として出力されるようになりました(例: %p{:class => "foo.bar"})。

  • 属性は、決定論的な順序を維持するためにソートされるようになりました。

  • インラインフォーマットを使用する場合、必要に応じて>または#succeedが挿入されます。

  • 複数行のERBステートメントが適切にインデントされるようになり、コンテンツのないものは削除されます。

小さな改善点

  • :uglyを使用する場合、capture_hamlが高速になりました。 Alf Mikula氏に感謝します。

  • RDFaドキュメントタイプのショートカットを追加します。

2.2.24

GitHubでタグ付け.

  • ActiveModelフォーム要素にエラーフォーマットが適用されるのを妨げないようにしました。

  • Rails 3.0.0.beta.3で、form_forブロックが適切にインデントされるようにしました。

  • Rails 3.0.0.beta.3で、dynamic_formプラグインのバグをアクティブにしないようにしました。これにより、そのメソッドがロードされなくなります。

2.2.23

GitHubでタグ付け.

  • Hamlがインストールされた状態でRailsでrake gemsが実行されたときにクラッシュしないようにしました。 Florian Frank氏に感謝します。

  • 補間を含むフィルターで\nを削除しないようにしました。

  • あの煩わしい"regexp match /.../n against to UTF-8 string"警告を抑制しました。

2.2.22

GitHubでタグ付け.

  • Railtieを追加して、HamlとSassがRails 3で自動的にロードされるようにしました。 Daniel Neighman氏に感謝します。

  • Rails 3で文字列を返すform_forのようなメソッドで-を使用した場合に非推奨メッセージを追加します。これは、Rails 3に存在するのと同じ非推奨です。

  • フィルターが使用されている場合、行番号が正しく報告されるようにします。

  • Herokuのような読み取り専用ファイルシステムでgemspecのロードがクラッシュしないようにします。

  • 例えばRails 3ベータ版で、form_forのようなメソッドがnilを返した場合にクラッシュしないようにします。

  • Rails 3ベータ版のRJS機能との互換性。

2.2.21

GitHubでタグ付け.

  • Haml::Versionにおけるgitリビジョンレポートのいくつかのバグを修正します。特に、git gcが最近呼び出された場合や、様々なファイルが欠落している場合でも動作します。

  • Rakefile内のHamlリポジトリ内のファイルを読み込むときは、常に__FILE__を使用します。このバグレポートによると、これによりHamlがBundlerでより良く動作するはずです。

  • ユーザーのフィードバックに基づいて、- endのエラーメッセージをもう少し直感的にします。

  • Rails 3でテンプレートに連結するのではなく、文字列を返すform_forのようなメソッドとの互換性。

  • ブロックの間インデントレベルを設定するwith_tabsヘルパーを追加します。

2.2.20

GitHubでタグ付け.

  • Rails 2.3.5でRailsのXSS保護を使用している場合、form_tag RailsヘルパーがHTMLセーフとして正しくマークされるようになりました。

  • defined?の呼び出しは、非常に古いバージョン(1.2.x)でRailsのオートローディングを妨害すべきではありません。

  • Rails 3.0ベータ版で、ブロックとレイアウトを使用したActionViewのrenderメソッドの呼び出しが機能しないバグを修正します。

  • Rails 3.0ベータ版で、Haml::Helpers#haml_concatへのネストされた呼び出しの終了タグが不適切にエスケープされるバグを修正します。

2.2.19

GitHubでタグ付け.

  • RailsのXSSサポートとの統合におけるバグを修正します。特に、safe_concatを正しくオーバーライドします。

2.2.18

GitHubでタグ付け.

  • Rails 3で使用される新しいXSS保護APIをサポートします。

  • Rails 3.0で実行している場合は、RAILS_ENVではなくRails.envを使用します。Duncan Grazierに感謝します。

  • WindowsでUnixスタイルの改行を出力するための--unix-newlinesフラグをすべての実行可能ファイルに追加します。

  • :erbフィルターのいくつかのバグを修正します。エラー報告で正しい行番号が使用されていることを確認し、複数行の式を許可します。

  • #を含むHTMLスタイルの属性の解析バグを修正します。

2.2.17

GitHubでタグ付け.

  • html2hamlを使用した場合のHTML5 doctypeのコンパイルを修正します。

  • Sassオプションのnil値は、エラーを発生させるのではなく、無視されるようになりました。

2.2.16

GitHubでタグ付け.

  • ActionView::TemplateErrorActionView::TemplateHandlerなどへの参照を抽象化します。これらはすべてRails 3.0でActionView::Template::*に名前が変更されました。

2.2.15

GitHubでタグ付け.

  • コンテンツがなく、その後にelse句が続くifステートメントを許可します。例:

    • if foo
    • else bar

2.2.14

GitHubでタグ付け.

  • Ruby 1.9で非ASCII文字を含む属性をエスケープするときに警告を出力しないようにします。

  • html2hamlでXHTML Strict doctypeを解析するときにクラッシュしないようにします。

  • doctype宣言として!!! 5を使用することにより、XHTMLドキュメントでHTML5 doctypeをサポートします。

2.2.13

GitHubでタグ付け.

  • 非ASCIIバイトシーケンスを含むテンプレートでも、:encoding => "ascii-8bit"を指定できるようにします。これにより、ASCIIエンコーディングとしてマークされた非ASCII入力が与えられた場合にHamlテンプレートがクラッシュしないようにします。

  • html2hamlで使用されるHpricot 0.8.2との非互換性を修正しました。

2.2.12

GitHubでタグ付け.

バージョン2.2.11と2.2.12の間でHamlに変更はありませんでした。

2.2.11

GitHubでタグ付け.

  • XSS保護で、文字列以外の値が渡された場合にHTMLエスケープがエラーを発生させるバグを修正しました。これは、XSS保護が無効になっている場合のHTMLエスケープには影響しないことに注意してください。

  • 外側の空白削除におけるバグを修正しました。空白のみのRuby文字列がそれらを超えた空白削除をブロックしていました。

  • コンパイルされたHamlコード内で発生した例外からHaml出力バッファのリセットを保護するためにensureを使用します。

  • loudスクリプト(=)内でエラーがスローされた場合に表示されるエラー行番号のバグを修正します。これはいくつかの最適化を無効にするため最善の解決策ではありませんが、大きな影響はないはずであり、最適化はバージョン2.4で再び有効になることを願っています。

  • プラグインスケルトンがインストールされ、rake gems:installが実行された場合にクラッシュしないようにします。

  • RAILS_ROOTを直接使用しないようにします。これはRails 3.0では存在しなくなりました。代わりに、これをHaml::Util.rails_rootとして抽象化します。この変更により、Hamlはこの執筆時点ではedge Railsと完全に互換性があります。

2.2.10

GitHubでタグ付け.

  • 動的属性を持ち、コンテンツがない要素で、開始タグと終了タグの間隔が広すぎるバグを修正しました。

  • rails/init.rbinit.rbのロードから変更し、代わりにコンテンツを基本的にコピーするようにしました。これにより、適切なバインディングをHaml.init_railsに転送できます。

  • Hamlが、他のすべてのプラグインがロードされた後にのみXSS保護統合を有効にしようとするようにします。これにより、Hamlがgemで、rails_xssプラグインが使用されている場合に正常に機能します。

  • Hamlテンプレートの戻り値をHTMLセーフとしてマークします。これにより、HamlパーシャルがRailsのXSS保護で機能します。

2.2.9

GitHubでタグ付け.

  • 特定の状況下で、Hamlのテキストが誤ったバッファに連結されるバグを修正しました。これは、captureのようなメソッドを使用する場合、主にRailsで問題でした。

  • 行に補間があり、:escape_htmlオプションが有効になっている場合に、テンプレートテキストがエスケープされるバグを修正しました。例えば

    Foo &lt; Bar #{"<"} Baz
    

    :escape_htmlを使用した場合、以下のようにレンダリングされていました。

    Foo &amp;lt; Bar &lt; Baz
    

    しかし、現在は以下のようにレンダリングされます。

    Foo &lt; Bar &lt; Baz
    

Rails XSS保護

Haml 2.2.9は、Railsバージョン2.3.5以降のXSS保護をサポートしています。これにはいくつかの要素があります。

  • XSS保護が有効になっている場合、Hamlの:escape_htmlオプションはデフォルトでtrueに設定されます。

  • HTMLセーフとして宣言された文字列は、#html_escapeヘルパーや、:escape_htmlが無効になっている場合の&=を含め、Hamlによってエスケープされません。

  • HTMLを生成するHamlヘルパーはHTMLセーフとしてマークされ、HTMLセーフでない場合は入力をエスケープします。

2.2.8

GitHubでタグ付け.

  • HTMLエスケープと奇妙なUnicodeのナンセンスに関する潜在的なXSS問題を修正しました。これは、少し前にRailsで修正された問題と同じです。

2.2.7

GitHubでタグ付け.

  • ERB属性値がHamlに変換される前にHTMLアンエスケープされていなかったhtml2hamlの問題を修正しました。

  • #{}がHamlに変換される前にエスケープされていなかったhtml2hamlの問題を修正しました。

  • 自動的に空白が保持されるタグのリストに<code>を追加します。

  • サイレントスクリプトでendの後にコードが続くバグを修正しました。タグの下にネストされている場合、エラーがスローされなくなりました。

  • 内側の空白削除と条件付き文のバグを修正しました。条件付き文のelseなどの句が適切に空白削除されるようになりました。

2.2.6

GitHubでタグ付け.

  • html2hamlの依存関係をロードできない場合のエラーメッセージが--traceオプションを尊重するようにしました。

  • Rubyファイルの__FILE__定数が相対パスである場合(TextMateで時々発生するようです(Karl Vargaに感謝します))、クラッシュしないようにします。

  • 実行可能ファイルの--version文字列に「Sass」を追加します。

  • 静的属性でコンマが省略されている場合(例: %p{:foo => "bar" :baz => "bang"})に例外を発生させます。

2.2.5

GitHubでタグ付け.

  • 条件付きコメントを開くときに生成された末尾の空白を取り除きました(Norman Clarkeに感謝します)。

  • 数値IDが属性として与えられた場合のCSS ID連結を修正しました。(Norman Clarkeに感謝します)。

  • 文字列での「-end」の使用に関するいくつかのバグを修正しました。

2.2.4

GitHubでタグ付け.

  • コードが後に続く場合に、サイレントスクリプトでendを使用できるようにします。例:

    - form_for do
      ...
    - end if @show_form
    

    これはあまり良いスタイルではありませんが、一貫性のためにサポートしています。

  • haml --rails経由でインストールした場合に、require 'rubygems'をinit.rbの先頭に追加しないようにします。これは必要ではなく、実際にはhaml/templateがロードされるとすぐに上書きされます。

2.2.3

GitHubでタグ付け.

Haml 2.2.3は、Jan Ulbrichのおかげで、Google AppEngine用のJRubyバンドルツールのサポートを追加しました。

2.2.2

GitHubでタグ付け.

Haml 2.2.2はマイナーなバグ修正リリースであり、いくつかの注目すべき変更があります。まず、haml_concat=で使用するとエラーが発生するようになりました。これは常に不正な動作であり、実際には機能したことがありませんでした。唯一の違いは、エラーが明確に表示されるようになったことです。次に、特に新しい属性構文では、Ruby 1.9がより完全にサポートされるようになりました。3番目に、:escape_htmlオプションが有効になっており、#{}補間が使用されている場合、フィルターはエスケープされなくなりました。

2.2.1

GitHubでタグ付け.

Haml 2.2.1はマイナーなバグ修正リリースです。

2.2.0

GitHubでタグ付け.

Haml 2.2は、言語にいくつかの新機能を追加し、いくつかのバグを修正し、パフォーマンスを大幅に向上させました(特に:uglyを有効にして実行する場合)。

構文の変更

HTMLスタイルの属性構文

Haml 2.2では、HTML構文に基づいた新しい属性構文が導入されました。例:

%a(href="https://haml.dokyumento.jp" title="Haml's so cool!")
  %img(src="/images/haml.png" alt="Haml")

これには主に2つの理由があります。まず、ハッシュスタイルの構文は非常にRuby固有です。現在、多くの言語でHamlの実装があり、それぞれにハッシュ(または辞書、連想配列などと呼ばれるもの)の独自の構文があります。HTML構文はすべてに採用されるため、必要な言語で安心してHamlを使用できます。

次に、ハッシュスタイルの構文は非常に冗長です。%img{:src => "/images/haml.png", :alt => "Haml"}%img(src="/images/haml.png" alt="Haml")よりも8文字長いです。Hamlはテンプレートをすばやく簡単に書くことを目的としています。HTMLスタイルの属性はそれに大いに役立つはずです。

引用符を省略することで、Ruby変数を属性値として使用できます。ローカル変数またはインスタンス変数を使用できます。例:

%a(title=@title href=href) Stuff

これは次のものと同じです。

%a{:title => @title, :href => href} Stuff

属性を区切るコンマがないため、より複雑な式は許可されていません。ただし、#{}補間を使用して、複雑な式をHTMLスタイルの属性に挿入できます。

%span(class="widget_#{@widget.number}")

複数行の属性

一般的に、Hamlは個々の要素を1行に保とうとします。さらに行にあふれるための複数行構文がありますが、短い行を推奨するために、意図的に使いにくくしています。

ただし、オーバーフローが合理的な場合が1つあります。属性です。多くの場合、タグには単に多くの属性があり、この場合、オーバーフローを許可するのが理にかなっています。属性ハッシュを複数行に拡張できるようになりました。

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

これはHTMLスタイルの属性でも機能します。

    %script(type="text/javascript"
        src="javascripts/script_#{2 + 7}")

ハッシュスタイルの属性の場合、改行はコンマの後に来る必要があることに注意してください。

ユニバーサル補間

Haml 2.0では、== を使用して、#{} を使ってテキスト行内にRubyコードを挿入できました。Haml 2.2では、== は不要になり、#{} は任意のテキストで使用できるようになりました。例えば、

%p This is a really cool #{h what_is_this}!
But is it a #{h what_isnt_this}?

さらに、挿入されたコードをエスケープしたり、エスケープ解除するには、行の先頭にそれぞれ & または ! を追加するだけで済みます。

%p& This is a really cool #{what_is_this}!
& But is it a #{what_isnt_this}?

柔軟なインデント

Hamlは従来、ユーザーに2つのスペースでのインデントを使用することを要求していました。これは普遍的なRubyスタイルであり、依然として強く推奨されています。しかし、Hamlは現在、任意の数のスペースやタブをインデントに使用することを許可しています。ただし、以下の条件を満たす必要があります。

  • タブとスペースを混在させないこと
  • インデントはドキュメント内で一貫していること

新しいオプション

:ugly

:uglyオプションは厳密には新しいものではありません。ネストが深いテンプレートのレンダリングの苦痛を軽減するためにHaml 2.0で導入されました。しかし、Haml 2.2では大幅に強化されました。以前はできなかったあらゆる種類のパフォーマンス最適化を行うようになり、その使用はHamlのパフォーマンスを劇的に向上させます。Railsのproduction環境ではデフォルトで有効になっており、他のフレームワークのproduction環境でも強く推奨されます。

:encoding

このオプションは、Ruby 1.9で実行する際のHamlテンプレートのエンコーディングを指定します。デフォルトはEncoding.default_internalまたは"utf-8"です。これは、非ASCII入力データを扱う際に奇妙なエンコーディングエラーが発生しないようにするのに役立ちます。

非推奨

Haml::Helpers#puts

このヘルパーは、Kernel#putsメソッドと競合するという明白な理由から、非推奨となっています。私がこの名前を選んだことを恥じています。代わりに haml_concat を使用して、私の恥を免じてください。

= haml_tag

多くの人が誤って「= haml_tag」を使用しています。これは常に間違っていました。haml_tagはテンプレートに直接出力するため、「- haml_tag」として使用する必要があります。現在、=を使用するとエラーが発生します。

互換性

Rails

Haml 2.2は、Rails 2.0.6から最新のエッジリビジョン783db25まで、完全に互換性があります。

Ruby 1.9

Haml 2.2はRuby 1.9とも完全に互換性があります。Ruby 1.9スタイルの属性ハッシュをサポートし、エンコーディング関連の問題を処理します(:encodingオプションを参照)。

フィルター

:markdown

Markdownフィルターには多数の改善があります。HamlはRedClothの劣悪なMarkdown実装を使用しようとしなくなりました。代わりに、主要なすべてのMarkdown実装を探します:RDiscountRPeg-MarkdownMarukuBlueCloth

:cdata

テキストをCDATAタグでラップする:cdataフィルターが追加されました。

:sass

:sassフィルターは、Sass::Pluginで設定されたオプション(利用可能な場合)を使用するようになりました。

実行可能ファイル

haml

haml実行可能ファイルは、ruby実行可能ファイルと同じように動作する-rおよび-Iフラグを受け入れるようになりました。これにより、コマンドラインからHamlを使用する際にヘルパーファイルをロードできます。

また、Hamlがテンプレートから生成するRubyコードを出力する--debugフラグも受け入れます。これは私自身の利便性のためですが、興味深いかもしれません。

html2haml

html2haml実行可能ファイルは大幅に改善されました。これらの多くはバグ修正ですが、いくつかの機能もあります。1つには、CDATAタグを理解し、ERBファイルを自動検出するようになりました。さらに、「- end」のみを含む行はHamlエラーになりました。html2hamlがすべてのRubyブロックを適切に解析することは不可能であるため、これは作者が対処すべきブロックがあるという信号として機能します。

その他

XHTML Mobile DTD

Haml 2.2はXHTML MobileのDTDをサポートしています:!!! Mobile

YARD

この変更ログを含むHaml 2.2のすべてのドキュメントは、YARDに移動されました。YARDは優れたドキュメントシステムであり、Marukuでドキュメントを作成できます。これは素晴らしいことです。