# NAME Text::Haml - Haml Perl implementation # SYNOPSIS use Text::Haml; my $haml = Text::Haml->new; my $html = $haml->render('%p foo'); # <p>foo</p> $html = $haml->render('= $user', user => 'friend'); # <div>friend</div> # Use Haml file $html = $haml->render_file('tmpl/index.haml', user => 'friend'); # DESCRIPTION [Text::Haml](https://metacpan.org/pod/Text::Haml) implements Haml [http://haml-lang.com/docs/yardoc/file.HAML\_REFERENCE.html](http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html) specification. [Text::Haml](https://metacpan.org/pod/Text::Haml) passes specification tests written by Norman Clarke http://github.com/norman/haml-spec and supports only cross-language Haml features. Do not expect Ruby specific things to work. # ATTRIBUTES [Text::Haml](https://metacpan.org/pod/Text::Haml) implements the following attributes: ## `append` Holds the string of code that is appended to the generated Perl code. ## `code` Holds the Perl code. ## `compiled` Holds compiled code. ## `encoding` $haml->encoding('utf-8'); Default is utf-8. ## `escape` Escape subroutine presented as string. Default is $haml->escape(<<'EOF'); my $s = shift; return unless defined $s; $s =~ s/&/&/g; $s =~ s/</</g; $s =~ s/>/>/g; $s =~ s/"/"/g; $s =~ s/'/'/g; return $s; EOF ## `escape_html` $haml->escape_html(0); Switch on/off Haml output html escaping. Default is on. ## `filters` Holds filters. ## `format` $haml->format('xhtml'); Supported formats: xhtml, html, html5. Default is xhtml. ## `namespace` Holds the namespace under which the Perl package is generated. ## `prepend` Holds the string of code that is prepended to the generated Perl code. ## `vars` Holds the variables that are passed during the rendering. ## `vars_as_subs` When options is **NOT SET** (by default) passed variables are normal Perl variables and are used with `$` prefix. $haml->render('%p $var', var => 'hello'); When this option is **SET** passed variables are Perl lvalue subroutines and are used without `$` prefix. $haml->render('%p var', var => 'hello'); But if you declare Perl variable in a block, it must be used with `$` prefix. $haml->render('<<EOF') - my $foo; %p= $foo EOF ## `helpers` helpers => { foo => sub { my $self = shift; my $string = shift; $string =~ s/r/z/; return $string; } } Holds helpers subroutines. Helpers can be called in Haml text as normal Perl functions. See also add\_helper. ## `helpers_arg` $haml->helpers_args($my_context); First argument passed to the helper ([Text::Haml](https://metacpan.org/pod/Text::Haml) instance by default). ## `error` $haml->error; Holds the last error. ## `tape` Holds parsed haml elements. ## `path` Holds path of Haml templates. Current directory is a default. If you want to set several paths, arrayref can also be set up. This way is the same as [Text::Xslate](https://metacpan.org/pod/Text::Xslate). ## `cache` Holds cache level of Haml templates. 1 is a default. 0 means "Not cached", 1 means "Checked template mtime" and 2 means "Used always cached". This way is the same as [Text::Xslate](https://metacpan.org/pod/Text::Xslate). ## `cache_dir` Holds cache directory of Haml templates. $ENV{HOME}/.text\_haml\_cache is a default. Unless $ENV{HOME}, File::Spec->tempdir was used. This way is the same as [Text::Xslate](https://metacpan.org/pod/Text::Xslate). # METHODS ## `new` my $haml = Text::Haml->new; ## `add_helper` $haml->add_helper(current_time => sub { time }); Adds a new helper. ## `add_filter` $haml->add_filter(compress => sub { $_[0] =~ s/\s+/ /g; $_[0]}); Adds a new filter. ## `build` $haml->build(@_); Builds the Perl code. ## `compile` $haml->compile; Compiles parsed code. ## `interpret` $haml->interpret(@_); Interprets compiled code. ## `parse` $haml->parse('%p foo'); Parses Haml string building a tree. ## `render` my $text = $haml->render('%p foo'); my $text = $haml->render('%p var', var => 'hello'); Renders Haml string. Returns undef on error. See error attribute. ## `render_file` my $text = $haml->render_file('foo.haml', var => 'hello'); A helper method that loads a file and passes it to the render method. Since "%\_\_\_\_vars" is used internally, you cannot use this as parameter name. # PERL SPECIFIC IMPLEMENTATION ISSUES ## String interpolation Despite of existing string interpolation in Perl, Ruby interpolation is also supported. $haml->render('%p Hello #{user}', user => 'foo') ## Hash keys When declaring tag attributes `:` symbol can be used. $haml->render("%a{:href => 'bar'}"); Perl-style is supported but not recommented, since your Haml template won't work with Ruby Haml implementation parser. $haml->render("%a{href => 'bar'}"); ## Using with Data::Section::Simple When using the Data::Section::Simple, you need to unset the variable `encoding` in the constructor or using the `encoding` attribute of the Text::Haml: use Data::Section::Simple qw/get_data_section/; my $vpath = get_data_section; my $haml = Text::Haml->new(cache => 0, path => $vpath, encoding => ''); # or #my $haml = Text::Haml->new(cache => 0, path => $vpath); #$haml->encoding(''); # encoding attribute my $index = $haml->render_file('index.haml'); say $index; __DATA__ @@ index.haml %strong текст see [https://metacpan.org/pod/Data::Section::Simple#utf8-pragma](https://metacpan.org/pod/Data::Section::Simple#utf8-pragma) # DEVELOPMENT ## Repository http://github.com/vti/text-haml # AUTHOR Viacheslav Tykhanovskyi, `vti@cpan.org`. # CREDITS In order of appearance: Nick Ragouzis Norman Clarke rightgo09 Breno G. de Oliveira (garu) Yuya Tanaka Wanradt Koell (wanradt) Keedi Kim Carlos Lima Jason Younker TheAthlete # COPYRIGHT AND LICENSE Copyright (C) 2009-2013, Viacheslav Tykhanovskyi. This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.