1
0
Fork 0
mirror of https://github.com/haml/haml.git synced 2022-11-09 12:33:31 -05:00

Support erb filter

This commit is contained in:
Takashi Kokubun 2015-10-28 22:45:54 +09:00
parent 4967bfae99
commit 39cfba9309
7 changed files with 26 additions and 14 deletions

View file

@ -100,7 +100,7 @@ module Hamlit
when :script
node.children.empty? && !nuke_inner_whitespace?(node)
when :filter
!%w[ruby].include?(node.value[:name])
!%w[ruby].freeze.include?(node.value[:name])
else
false
end

View file

@ -2,6 +2,7 @@ require 'hamlit/filters/base'
require 'hamlit/filters/tilt_base'
require 'hamlit/filters/coffee'
require 'hamlit/filters/css'
require 'hamlit/filters/erb'
require 'hamlit/filters/escaped'
require 'hamlit/filters/less'
require 'hamlit/filters/javascript'
@ -26,6 +27,7 @@ module Hamlit
register :coffee, Coffee
register :coffeescript, Coffee
register :css, Css
register :erb, Erb
register :escaped, Escaped
register :less, Less
register :javascript, Javascript

View file

@ -4,7 +4,7 @@ module Hamlit
def compile(node)
temple = [:multi]
temple << [:static, "<script>\n".freeze]
temple << compile_with_tilt(node, 'coffee')
temple << compile_with_tilt(node, 'coffee', indent_width: 2)
temple << [:static, "</script>".freeze]
temple
end

View file

@ -0,0 +1,9 @@
module Hamlit
class Filters
class Erb < TiltBase
def compile(node)
compile_with_tilt(node, 'erb')
end
end
end
end

View file

@ -4,7 +4,7 @@ module Hamlit
def compile(node)
temple = [:multi]
temple << [:static, "<style>\n".freeze]
temple << compile_with_tilt(node, 'less')
temple << compile_with_tilt(node, 'less', indent_width: 2)
temple << [:static, "</style>".freeze]
temple
end

View file

@ -3,28 +3,29 @@ require 'tilt'
module Hamlit
class Filters
class TiltBase < Base
def self.render(name, source)
def self.render(name, source, indent_width: 0)
text = ::Tilt["t.#{name}"].new { source }.render
text.gsub!(/^/, ' '.freeze)
return text if indent_width == 0
text.gsub!(/^/, ' '.freeze * indent_width)
end
private
def compile_with_tilt(node, name)
def compile_with_tilt(node, name, indent_width: 0)
if Haml::Util.contains_interpolation?(node.value[:text])
dynamic_compile(node, name)
dynamic_compile(node, name, indent_width: indent_width)
else
static_compile(node, name)
static_compile(node, name, indent_width: indent_width)
end
end
def static_compile(node, name)
[:static, TiltBase.render(name, node.value[:text])]
def static_compile(node, name, indent_width: 0)
[:static, TiltBase.render(name, node.value[:text], indent_width: indent_width)]
end
def dynamic_compile(node, name)
def dynamic_compile(node, name, indent_width: 0)
source = Haml::Util.unescape_interpolation(node.value[:text])
[:dynamic, "::Hamlit::Filters::TiltBase.render('#{name}', #{source})"]
[:dynamic, "::Hamlit::Filters::TiltBase.render('#{name}', #{source}, indent_width: #{indent_width})"]
end
end
end

View file

@ -3,8 +3,7 @@ describe Hamlit::Filters do
describe '#compile' do
it 'renders erb filter' do
skip
assert_render(<<-HAML, <<-HTML, compatible_only: [], error_with: :faml)
assert_render(<<-HAML, <<-HTML, compatible_only: :haml, error_with: :faml)
:erb
<% if true %>
ok
@ -13,6 +12,7 @@ describe Hamlit::Filters do
<% end %>
HAML
ok
HTML
end
end