## 5.0.1
Released on May 3, 2017
([diff](https://github.com/haml/haml/compare/v5.0.0...v5.0.1)).
* Fix parsing attributes including string interpolation. [#917](https://github.com/haml/haml/pull/917) [#921](https://github.com/haml/haml/issues/921)
* Stop distributing test files in gem package and allow installing on Windows.
* Use ActionView's Erubi/Erubis handler for erb filter only on ActionView. [#914](https://github.com/haml/haml/pull/914)
## 5.0.0
Released on April 26, 2017
([diff](https://github.com/haml/haml/compare/4.0.7...v5.0.0)).
Breaking Changes
* Haml now requires Ruby 2.0.0 or above.
* Rails 3 is no longer supported, matching the official
[Maintenance Policy for Ruby on Rails](http://weblog.rubyonrails.org/2013/2/24/maintenance-policy-for-ruby-on-rails/).
(Tee Parham)
* The `haml` command's debug option (`-d`) no longer executes the Haml code, but
rather checks the generated Ruby syntax for errors.
* Drop parser/compiler accessor from `Haml::Engine`. Modify `Haml::Engine#initialize` options
or `Haml::Template.options` instead. (Takashi Kokubun)
* Drop dynamic quotes support and always escape `'` for `escape_html`/`escape_attrs` instead.
Also, escaped results are slightly changed and always unified to the same characters. (Takashi Kokubun)
* Don't preserve newlines in attributes. (Takashi Kokubun)
* HTML escape interpolated code in filters.
[#770](https://github.com/haml/haml/pull/770)
(Matt Wildig)
:javascript
#{JSON.generate(foo: "bar")}
Haml 4 output: {"foo":"bar"}
Haml 5 output: {"foo":"bar"}
Added
* Add a tracing option. When enabled, Haml will output a data-trace attribute on each tag showing the path
to the source Haml file from which it was generated. Thanks [Alex Babkin](https://github.com/ababkin).
* Add `haml_tag_if` to render a block, conditionally wrapped in another element (Matt Wildig)
* Support Rails 5.1 Erubi template handler.
* Support Sprockets 3. Thanks [Sam Davies](https://github.com/samphilipd) and [Jeremy Venezia](https://github.com/jvenezia).
* General performance and memory usage improvements. (Akira Matsuda)
* Analyze attribute values by Ripper and render static attributes beforehand. (Takashi Kokubun)
* Optimize attribute rendering about 3x faster. (Takashi Kokubun)
* Add temple gem as dependency and create `Haml::TempleEngine` class.
Some methods in `Haml::Compiler` are migrated to `Haml::TempleEngine`. (Takashi Kokubun)
Fixed
* Fix for attribute merging. When an attribute method (or literal nested hash)
was used in an old style attribute hash and there is also a (non-static) new
style hash there is an error. The fix can result in different behavior in
some circumstances. See the [commit message](e475b015d3)
for detailed info. (Matt Wildig)
* Make escape_once respect hexadecimal references. (Matt Wildig)
* Don't treat the 'data' attribute specially when merging attribute hashes. (Matt Wildig and Norman Clarke)
* Fix #@foo and #$foo style interpolation that was not working in html_safe mode. (Akira Matsuda)
* Allow `@` as tag's class name. Thanks [Joe Bartlett](https://github.com/redoPop).
* Raise `Haml::InvalidAttributeNameError` when attribute name includes invalid characters. (Takashi Kokubun)
* Don't ignore unexpected exceptions on initializing `ActionView::OutputBuffer`. (Takashi Kokubun)
Problems found locating distfiles:
Package cabocha: missing distfile cabocha-0.68.tar.bz2
Package convertlit: missing distfile clit18src.zip
Package php-enchant: missing distfile php-enchant/enchant-1.1.0.tgz
Otherwise, existing SHA1 digests verified and found to be the same on
the machine holding the existing distfiles (morden). All existing
SHA1 digests retained for now as an audit trail.
# Haml Changelog
=======
## 4.0.5
Released on Jan 7, 2014 ([diff](https://github.com/haml/haml/compare/4.0.4...4.0.5)).
* Fix haml_concat appending unescaped HTML after a call to haml_tag.
* Fix for bug whereby when HAML :ugly option is "true",
ActionView::Helpers::CaptureHelper::capture returns the whole view buffer
when passed a block that returns nothing (thanks [Mircea
Moise](https://github.com/mmircea16)).
## 4.0.4
Released on November 5, 2013 ([diff](https://github.com/haml/haml/compare/4.0.3...4.0.4)).
* Check for Rails::Railtie rather than Rails (thanks [Konstantin Shabanov](https://github.com/etehtsea)).
* Parser fix to allow literal '#' with suppress_eval (Matt Wildig).
* Helpers#escape_once works on frozen strings (as does
ERB::Util.html_escape_once for which it acts as a replacement in
Rails (thanks [Patrik Metzmacher](https://github.com/patrik)).
* Minor test fix (thanks [Mircea Moise](https://github.com/mmircea16)).
## 4.0.3
Released May 21, 2013 ([diff](https://github.com/haml/haml/compare/4.0.2...4.0.3)).
* Compatibility with newer versions of Rails's Erubis handler.
* Fix Erubis handler for compatibility with Tilt 1.4.x, too.
* Small performance optimization for html_escape.
(thanks [Lachlan Sylvester](https://github.com/lsylvester))
* Documentation fixes.
* Documented some helper methods that were left out of the reference.
(thanks [Shane Riley](https://github.com/shaneriley))
## 4.0.2
Released April 5, 2013 ([diff](https://github.com/haml/haml/compare/4.0.1...4.0.2)).
* Explicitly require Erubis to work around bug in older versions of Tilt.
* Fix :erb filter printing duplicate content in Rails views.
(thanks [Jori Hardman](https://github.com/jorihardman))
* Replace range with slice to reduce objects created by `capture_haml`.
(thanks [Tieg Zaharia](https://github.com/tiegz))
* Correct/improve some documentation.
## 4.0.1
Released March 21, 2013 ([diff](https://github.com/haml/haml/compare/4.0.0...4.0.1)).
* Remove Rails 3.2.3+ textarea hack in favor of a more general solution.
* Fix some performance regressions.
* Fix support for Rails 4 `text_area` helper method.
* Fix data attribute flattening with singleton objects.
(thanks [Alisdair McDiarmid](https://github.com/alisdair))
* Fix support for sass-rails 4.0 beta.
(thanks [Ryunosuke SATO](https://github.com/tricknotes))
* Load "haml/template" in Railtie in order to prevent user options set in a
Rails initializer from being overwritten
* Don't depend on Rails in haml/template to allow using Haml with ActionView
but without Rails itself. (thanks [Hunter Haydel](https://github.com/wedgex))
## 4.0.0
* The Haml exectutable now accepts an `--autoclose` option. You can now
specify a list of tags that should be autoclosed
* The `:ruby` filter no longer redirects $stdout to the Haml document, as this
is not thread safe. Instead it provides a `haml_io` local variable, which is
an IO object that writes to the document.
* HTML5 is now the default output format rather than XHTML. This was already
the default on Rails 3+, so many users will notice no difference.
* The :sass filter now wraps its output in a script tag, as do the new :less and
:scss filters. The :coffee filter wraps its output in a script tag.
* Haml now supports only Rails 3 and above, and Ruby 1.8.7 and above. If you
still need support for Rails 2 and Ruby 1.8.6, please use Haml 3.1.x which
will continue to be maintained for bug fixes.
* The :javascript and :css filters no longer add CDATA tags when the format is
html4 or html5. This can be overridden by setting the `cdata` option to
`true`. CDATA tags are always added when the format is xhtml.
* HTML2Haml has been extracted to a separate gem, creatively named "html2haml".
* The `:erb` filter now uses Rails's safe output buffer to provide XSS safety.
* Haml's internals have been refactored to move the parser, compiler and options
handling into independent classes, rather than including them all in the
Engine module. You can also specify your own custom Haml parser or compiler
class in Haml::Options in order to extend or modify Haml reasonably easily.
* Add an {file:REFERENCE.md#hyphenate_data_attrs-option `:hyphenate_data_attrs`
option} that converts underscores to hyphens in your HTML5 data keys. This is
a language change from 3.1 and is enabled by default.
(thanks to [Andrew Smith](https://github.com/fullsailor))
* All Hash attribute values are now treated as HTML5 data, regardless of key.
Previously only the "data" key was treated this way. Allowing arbitrary keys
means you can now easily use this feauture for Aria attributes, among other
uses.
(thanks to [Elvin Efendi](https://github.com/ElvinEfendi))
* Added `remove_whitespace` option to always remove all whitespace around Haml
tags. (thanks to [Tim van der Horst](https://github.com/vdh))
* Haml now flattens deeply nested data attribute hashes. For example:
`.foo{:data => {:a => "b", :c => {:d => "e", :f => "g"}}}`
would render to:
`<div class='foo' data-a='b' data-c-d='e' data-c-f='g'></div>`
(thanks to [Péter Pál Koszta](https://github.com/koszta))
* Filters that rely on third-party template engines are now implemented using
[Tilt](github.com/rtomayko/tilt). Several new filters have been added, namely
SCSS (:scss), LessCSS, (:less), and Coffeescript (:coffee/:coffeescript).
Though the list of "official" filters is kept intentionally small, Haml comes
with a helper method that makes adding support for other Tilt-based template
engines trivial.
As of 4.0, Haml will also ship with a "haml-contrib" gem that includes useful
but less-frequently used filters and helpers. This includes several additional
filters such as Nokogiri, Yajl, Markaby, and others.
* Generate object references based on `#to_key` if it exists in preference to
`#id`.
* Performance improvements.
(thanks to [Chris Heald](https://github.com/cheald))
* Helper `list_of` takes an extra argument that is rendered into list item
attributes.
(thanks [Iain Barnett](http://iainbarnett.me.uk/))
* Fix parser to allow lines ending with `some_method?` to be a Ruby multinline.
(thanks to [Brad Ediger](https://github.com/bradediger))
* Always use :xhtml format when the mime_type of the rendered template is
'text/xml'.
(thanks to [Stephen Bannasch](https://github.com/stepheneb))
* html2haml now includes an `--html-attributes` option.
(thanks [Stefan Natchev](https://github.com/snatchev))
* Fix for inner whitespace removal in loops.
(thanks [Richard Michael](https://github.com/richardkmichael))
* Use numeric character references rather than HTML entities when escaping
double quotes and apostrophes in attributes. This works around some bugs in
Internet Explorer earlier than version 9.
(thanks [Doug Mayer](https://github.com/doxavore))
* Fix multiline silent comments: Haml previously did not allow free indentation
inside multline silent comments.
* Fix ordering bug with partial layouts on Rails.
(thanks [Sam Pohlenz](https://github.com/spohlenz))
* Add command-line option to suppress script evaluation.
* It's now possible to use Rails's asset helpers inside the Sass and SCSS
filters. Note that to do so, you must make sure sass-rails is loaded in
production, usually by moving it out of the assets gem group.
* The Haml project now uses [semantic versioning](http://semver.org/).
## 3.2.0
The Haml 3.2 series was released only as far as 3.2.0.rc.4, but then was
renamed to Haml 4.0 when the project adopted semantic versioning.
## 3.1.8
* Fix for line numbers reported from exceptions in nested blocks
(thanks to Grant Hutchins & Sabrina Staedt).
3.1.1
* Update the vendored Sass to version 3.1.0.
3.1.0
* Don't add a type attribute to <script> and <style> tags generated by
filters when :format is set to :html5.
* Add an :escape_attrs option that allows attributes to either remain
unescaped (for things like embedding PHP directives in Haml) or to be always
escaped rather than #escape_onced. This can also be used from the command
line via --no-escape-attrs.
* Allow custom filters to be loaded from the command line.
Backwards Incompatibilities - Must Read!
* Get rid of the --rails flag for the haml executable. This flag hasn't been
necessary since Rails 2.0. Existing Rails 2.0 installations will continue to
work.
* Drop support for Hpricot 0.7. 0.8 has been out for nearly two years.
3.0.25
Tagged on GitHub.
* HTML-to-Haml conversion now works within Ruby even if Hpricot is loaded
before haml/html.
3.0.24
Tagged on GitHub.
* html2haml now properly generates Haml for silent script expressions
nested within blocks.
* IronRuby compatibility. This is sort of a hack: IronRuby reports its
version as 1.9, but it doesn¡Çt support the encoding APIs, so we treat
it as 1.8 instead.
3.0.23
Tagged on GitHub.
* Fix the error message for unloadable modules when running the
executables under Ruby 1.9.2.
* Fix an error when combining old-style and new-style attributes.
3.0.22
Tagged on GitHub.
* Allow an empty line after case but before when.
* Remove vendor/sass, which snuck into the gem by mistake and was causing
trouble for Heroku users (thanks to Jacques Crocker).
* Support the Rails 3.1 template handler API.
3.0.21
Tagged on GitHub.
* Fix the permissions errors for good.
3.0.20
Tagged on GitHub.
* Fix some permissions errors.
3.0.19
Tagged on GitHub.
* Fix the :encoding option under Ruby 1.9.2.
* Fix interpolated if statement when HTML escaping is enabled.
* Allow the --unix-newlines flag to work on Unix, where it¡Çs a no-op.
* Use lang/ruby/gem.mk instead of misc/rubygems/rubygem.mk.
* Add LICENSE.
* Remove default value of GEM_BUILD.
* Add CONFLICTS since it will install the same name commands both
ruby18 and ruby19 based packages.
Changes may be too many, please refer http://haml-lang.com/ in detail.
Pkgsrc changes:
- adjust PLIST
Upstream changes:
* 2.2.23
[haml/sass] Don’t crash when rake gems is run in Rails with Haml
installed. Thanks to Florian Frank.
[haml ]Don’t remove \n in filters with interpolation.
[haml] Silence those annoying "regexp match /.../n against to UTF-8 string"
warnings.
[sass] When raising a file-not-found error, add a list of load paths that were
checked.
[sass] If an import isn’t found for a cached Sass file and the :full_exception
option is enabled, print the full exception rather than raising it.
[sass] Fix a bug with a weird interaction with Haml, DataMapper, and Rails 3
that caused some tag helpers to go into infinite recursion.
* 2.2.22
[haml/sass] Add a railtie so Haml and Sass will be automatically loaded
in Rails 3. Thanks to Daniel Neighman.
[haml] Add a deprecation message for using - with methods like form_for that
return strings in Rails 3. This is the same deprecation that exists in
Rails 3.
[haml] Make sure line numbers are reported correctly when filters are being
used.
[haml/sass] Make loading the gemspec not crash on read-only filesystems like
Heroku’s.
[haml] Don’t crash when methods like form_for return nil in, for example, Rails
3 beta.
[haml] Compatibility with Rails 3 beta’s RJS facilities.
* 2.2.21
[haml/sass] Fix a few bugs in the git-revision-reporting in
Haml::Version#version. In particular, it will still work if git gc has
been called recently, or if various files are missing.
[hamll/sass] Always use __FILE__ when reading files within the Haml repo
in the Rakefile. According to this bug report, this should make Haml
work better with Bundler.
[haml] Make the error message for - end a little more intuitive based on user
feedback.
[haml] Compatibility with methods like form_for that return strings rather than
concatenate to the template in Rails 3.
[haml] Add a with_tabs helper, which sets the indentation level for the
duration of a block.
* 2.2.20
[haml] The form_tag Rails helper is now properly marked as HTML-safe when using
Rails’ XSS protection with Rails 2.3.5.
[haml/sass] Calls to defined? shouldn’t interfere with Rails’
autoloading in very old versions (1.2.x).
[haml] Fix a bug where calls to ActionView’s render method with blocks and
layouts wouldn’t work under the Rails 3.0 beta.
[haml] Fix a bug where the closing tags of nested calls to
Haml::Helpers#haml_concat were improperly escaped under the Rails 3.0
beta.
[sass] If the cache file for a given Sass file is corrupt because it
doesn’t have enough content, produce a warning and read the Sass file
rather than letting the exception bubble up. This is consistent with
other sorts of sassc corruption handling.
* 2.2.19
[haml] Fix a bug with the integration with Rails’ XSS support. In particular,
correctly override safe_concat.
[sass] There were no changes made to Sass between versions 2.2.18 and
2.2.19.
* 2.2.18
[haml] Support the new XSS-protection API used in Rails 3.
[haml/sass] Use Rails.env rather than RAILS_ENV when running under Rails
3.0. Thanks to Duncan Grazier.
[haml] Add a --unix-newlines flag to all executables for outputting Unix-style
newlines on Windows.
[haml] Fix a couple bugs with the :erb filter: make sure error reporting uses
the correct line numbers, and allow multi-line expressions.
[haml] Fix a parsing bug for HTML-style attributes including #.
[sass] Support :line_numbers as an alias for :line_comments, since
that’s what the docs have said forever. Similarly, support
--line-numbers as a command-line option.
[sass] Add a --unix-newlines flag to all executables for outputting
Unix-style newlines on Windows.
[sass] Add a :unix_newlines option for Sass::Plugin for outputting
Unix-style newlines on Windows.
[sass] Fix the --cache-location flag, which was previously throwing
errors. Thanks to tav.
[sass] Allow comments at the beginning of the document to have arbitrary
indentation, just like comments elsewhere. Similarly, comment parsing is
a little nicer than before.
* 2.2.17
[haml] Fix compilation of HTML5 doctypes when using html2haml.
[sass] nil values for Sass options are now ignored, rather than raising
errors.
[sass] When the :full_exception option is false, raise the error in Ruby
code rather than swallowing it and printing something uninformative.
[sass] Fixed error-reporting when something goes wrong when loading Sass
using the sass executable. This used to raise a NameError because
Sass::SyntaxError wasn’t defined. Now it’ll raise the correct exception
instead.
[sass] Report the filename in warnings about selectors without
properties.
[sass] Fix a bug that appears when Plugin template locations have
multiple trailing slashes. Thanks to Jared Grippe.
[sass] Must Read! When @import is given a filename without an extension,
the behavior of rendering a CSS @import if no Sass file is found is
deprecated. In future versions, @import foo will either import the
template or raise an error.
* 2.2.16
[haml] Abstract out references to ActionView::TemplateError,
ActionView::TemplateHandler, etc. These have all been renamed to
ActionView::Template::* in Rails 3.0.
[sass] Fixed a bug where modules containing user-defined Sass functions
weren’t made available when simply included in Sass::Script::Functions
(Functions needed to be re-included in Functions::EvaluationContext).
Now the module simply needs to be included in Sass::Script::Functions.
* 2.2.15
[haml] Allow if statements with no content followed by else clauses. For
example:
- if foo - else bar
[sass] Added Sass::Script::Color#with for a way of setting color
channels that’s easier than manually constructing a new color and is
forwards-compatible with alpha-channel colors (to be introduced in Sass
2.4).
[sass] Added a missing require in Sass that caused crashes when it was
being run standalone.
* 2.2.14
[haml] Don’t print warnings when escaping attributes containing
non-ASCII characters in Ruby 1.9.
[haml] Don’t crash when parsing an XHTML Strict doctype in html2haml.
[haml] Support the HTML5 doctype in an XHTML document by using !!! 5 as the
doctype declaration.
[sass] All Sass functions now raise explicit errors if their inputs are of the incorrect type.
[sass] Allow the SassScript rgb() function to take percentages in addition to numerical values.
[sass] Fixed a bug where SassScript strings with # followed by #{} interpolation didn’t evaluate the interpolation.
[sass] SassScript Ruby API
These changes only affect people defining their own Sass functions
using Sass::Script::Functions.
Sass::Script::Color#value attribute is deprecated. Use
Sass::Script::Color#rgb instead. The returned array is now frozen as
well.
Add an assert_type function that’s available to
Sass::Script::Functions. This is useful for typechecking the inputs
to functions.
[sass] Rack Support
Sass 2.2.14 includes Rack middleware for running Sass, meaning that
all Rack-enabled frameworks can now use Sass. To activate this, just
add
require 'sass/plugin/rack'
use Sass::Plugin::Rack
to your config.ru. See the Sass::Plugin::Rack documentation for more
details.
Upstream changes:
* 2.2.13 Haml
Allow users to specify :encoding => "ascii-8bit" even for templates
that include non-ASCII byte sequences. This makes Haml templates
not crash when given non-ASCII input that’s marked as having an
ASCII encoding.
Fixed an incompatibility with Hpricot 0.8.2, which is used for
html2haml.
* 2.2.13 Sass
There were no changes made to Sass between versions 2.2.12 and
2.2.13.
* 2.2.12 Haml
There were no changes made to Haml between versions 2.2.11 and
2.2.12.
* 2.2.12 Sass
Fix a stupid bug introduced in 2.2.11 that broke the Sass Rails
plugin.
* 2.2.11 Haml
Fixed a bug with XSS protection where HTML escaping would raise an
error if passed a non-string value. Note that this doesn’t affect
any HTML escaping when XSS protection is disabled.
Fixed a bug in outer-whitespace nuking where whitespace-only Ruby
strings blocked whitespace nuking beyond them.
Use ensure to protect the resetting of the Haml output buffer against
exceptions that are raised within the compiled Haml code.
Fix an error line-numbering bug that appeared if an error was thrown
within loud script (=). This is not the best solution, as it disables
a few optimizations, but it shouldn’t have too much effect and the
optimizations will hopefully be re-enabled in version 2.4.
Don’t crash if the plugin skeleton is installed and rake gems:install
is run.
Don’t use RAILS_ROOT directly. This no longer exists in Rails 3.0.
Instead abstract this out as Haml::Util.rails_root. This changes
makes Haml fully compatible with edge Rails as of this writing.
* 2.2.11 Sass
Added a note to errors on properties that could be pseudo-classes
(e.g. :focus) indicating that they should be backslash-escaped.
Automatically interpret properties that could be pseudo-classes as
such if :property_syntax is set to :new.
Fixed css2sass’s generation of pseudo-classes so that they’re
backslash-escaped.
Don’t crash if the Haml plugin skeleton is installed and rake
gems:install is run.
Don’t use RAILS_ROOT directly. This no longer exists in Rails 3.0.
Instead abstract this out as Haml::Util.rails_root. This changes
makes Haml fully compatible with edge Rails as of this writing.
Make use of a Rails callback rather than a monkeypatch to check for
stylesheet updates in Rails 3.0+.
Pkgsrc changes:
- Update HOMEPAGE
- Build using gemspec
Upstream changes:
A lot! Please see http://haml-lang.com/docs/yardoc/HAML_CHANGELOG.md.html
for the list of changes since version 2.2.0. The changes from version
1.8.2 to version 2.0.10 are a little bit more difficult to get, it
seems you have to explore the commit logs of haml's git repository
or the haml mailing list.
Haml is a markup language that's used to cleanly and simply describe
the XHTML of any web document without the use of inline code, using
indentation rather than closing tags and allowing Ruby to be embedded
with ease. Haml functions as a replacement for inline page templating
systems such as PHP, ASP, and ERB, the templating language used in
most Ruby on Rails applications. However, Haml avoids the need for
explicitly coding XHTML into the template, because it itself is a
description of the XHTML, with some code to generate dynamic content.