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

Support haml-like recursive nuking

This commit is contained in:
Takashi Kokubun 2015-10-25 23:20:28 +09:00
parent d9da2a0c3c
commit ed1c9edb37
3 changed files with 16 additions and 36 deletions

View file

@ -56,8 +56,15 @@ module Hamlit
end end
def nuke_inner_whitespace?(node) def nuke_inner_whitespace?(node)
return false if node.type != :tag case
node.value[:nuke_inner_whitespace] when node.type == :tag
node.value[:nuke_inner_whitespace] ||
(node.parent && nuke_inner_whitespace?(node.parent))
when node.parent.nil?
false
else
nuke_inner_whitespace?(node.parent)
end
end end
def nuke_prev_whitespace?(node) def nuke_prev_whitespace?(node)
@ -91,7 +98,7 @@ module Hamlit
when :comment, :filter, :plain, :tag when :comment, :filter, :plain, :tag
true true
when :script when :script
node.children.empty? node.children.empty? && !nuke_inner_whitespace?(node)
else else
false false
end end

View file

@ -65,7 +65,7 @@ describe Hamlit::Engine do
HTML HTML
end end
it 'skips empty lines' do it 'ignores empty lines' do
assert_render(<<-HAML, <<-HTML) assert_render(<<-HAML, <<-HTML)
%span %span
@ -237,7 +237,6 @@ describe Hamlit::Engine do
end end
it 'removes whitespaces inside block script' do it 'removes whitespaces inside block script' do
skip
assert_render(<<-HAML, <<-HTML) assert_render(<<-HAML, <<-HTML)
%span< %span<
= 2.times do = 2.times do
@ -249,7 +248,6 @@ describe Hamlit::Engine do
end end
it 'removes whitespace inside script inside silent script' do it 'removes whitespace inside script inside silent script' do
skip
assert_render(<<-HAML, <<-HTML) assert_render(<<-HAML, <<-HTML)
.bar< .bar<
- 3.times do - 3.times do
@ -260,7 +258,6 @@ describe Hamlit::Engine do
end end
it 'removes whitespace inside script recursively' do it 'removes whitespace inside script recursively' do
skip
assert_render(<<-HAML, <<-HTML) assert_render(<<-HAML, <<-HTML)
.foo< .foo<
- 1.times do - 1.times do
@ -274,26 +271,23 @@ describe Hamlit::Engine do
end end
it 'does not remove whitespace after string interpolation' do it 'does not remove whitespace after string interpolation' do
assert_render(<<-'HAML', <<-HTML, compatible_only: :faml) assert_render(<<-'HAML', <<-HTML, compatible_only: :haml)
%div< %div<
#{'hello'} #{'hello'}
world world
HAML HAML
<div>hello <div>helloworld</div>
world</div>
HTML HTML
end end
it 'removes whitespace inside script inside silent script' do it 'removes whitespace inside script inside silent script' do
skip assert_render(<<-HAML, <<-HTML, compatible_only: :haml)
assert_render(<<-HAML, <<-HTML, compatible_only: :faml)
.bar< .bar<
- 1.times do - 1.times do
= '1' = '1'
= '2' = '2'
HAML HAML
<div class='bar'>1 <div class='bar'>12</div>
2</div>
HTML HTML
end end
end end

View file

@ -3,7 +3,6 @@ describe Hamlit::Engine do
describe 'text' do describe 'text' do
it 'renders string interpolation' do it 'renders string interpolation' do
skip
assert_render(<<-'HAML', <<-HTML) assert_render(<<-'HAML', <<-HTML)
#{ "a#{3}a" }a" #{["1", 2]} b " ! #{ "a#{3}a" }a" #{["1", 2]} b " !
a#{{ a: 3 }} a#{{ a: 3 }}
@ -29,7 +28,6 @@ describe Hamlit::Engine do
end end
it 'renders == operator' do it 'renders == operator' do
skip
assert_render(<<-'HAML', <<-HTML) assert_render(<<-'HAML', <<-HTML)
=== ===
== = == =
@ -44,7 +42,6 @@ describe Hamlit::Engine do
end end
it 'renders !== operator' do it 'renders !== operator' do
skip
assert_render(<<-'HAML', <<-HTML) assert_render(<<-'HAML', <<-HTML)
== #{'<a>'} == #{'<a>'}
!== #{'<a>'} !== #{'<a>'}
@ -206,25 +203,7 @@ describe Hamlit::Engine do
specify { assert_render(%q{'"!@$%^&*|=#{1}1#{1}2}, %Q{'"!@$%^&*|=1112\n}) } specify { assert_render(%q{'"!@$%^&*|=#{1}1#{1}2}, %Q{'"!@$%^&*|=1112\n}) }
specify { assert_render('あ#{1}', "あ1\n") } specify { assert_render('あ#{1}', "あ1\n") }
specify { assert_render('あ#{"い"}う', "あいう\n") } specify { assert_render('あ#{"い"}う', "あいう\n") }
specify { skip; assert_render('a#{"<b>"}c', "a&lt;b&gt;c\n") } specify { assert_render('a#{"<b>"}c', "a&lt;b&gt;c\n") }
end
describe 'illegal inputs' do
it 'rejects an invalid tag' do
skip
expect { render_string(<<-HAML.unindent) }.
% a
HAML
to raise_error(Hamlit::SyntaxError, 'Invalid tag: "% a".')
end
it 'rejects an invalid tag' do
skip
expect { render_string(<<-HAML.unindent) }.
%.foo
HAML
to raise_error(Hamlit::SyntaxError, 'Invalid tag: "%.foo".')
end
end end
end end
end end