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:
parent
d9da2a0c3c
commit
ed1c9edb37
3 changed files with 16 additions and 36 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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<b>c\n") }
|
specify { assert_render('a#{"<b>"}c', "a<b>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
|
||||||
|
|
Loading…
Add table
Reference in a new issue