haml 1.0.5 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of haml might be problematic. Click here for more details.

Files changed (92) hide show
  1. data/README +229 -0
  2. data/Rakefile +56 -60
  3. data/VERSION +1 -1
  4. data/bin/haml +4 -14
  5. data/bin/html2haml +89 -0
  6. data/bin/sass +8 -0
  7. data/init.rb +5 -1
  8. data/lib/haml.rb +643 -0
  9. data/lib/haml/buffer.rb +33 -30
  10. data/lib/haml/engine.rb +258 -75
  11. data/lib/haml/error.rb +43 -0
  12. data/lib/haml/exec.rb +181 -0
  13. data/lib/haml/filters.rb +89 -0
  14. data/lib/haml/helpers.rb +19 -5
  15. data/lib/haml/helpers/action_view_mods.rb +28 -4
  16. data/lib/haml/template.rb +13 -27
  17. data/lib/sass.rb +418 -0
  18. data/lib/sass/constant.rb +190 -0
  19. data/lib/sass/constant/color.rb +77 -0
  20. data/lib/sass/constant/literal.rb +51 -0
  21. data/lib/sass/constant/number.rb +87 -0
  22. data/lib/sass/constant/operation.rb +30 -0
  23. data/lib/sass/constant/string.rb +18 -0
  24. data/lib/sass/engine.rb +179 -0
  25. data/lib/sass/error.rb +35 -0
  26. data/lib/sass/plugin.rb +119 -0
  27. data/lib/sass/tree/attr_node.rb +44 -0
  28. data/lib/sass/tree/node.rb +29 -0
  29. data/lib/sass/tree/rule_node.rb +47 -0
  30. data/lib/sass/tree/value_node.rb +12 -0
  31. data/test/benchmark.rb +16 -19
  32. data/test/haml/engine_test.rb +220 -0
  33. data/test/{helper_test.rb → haml/helper_test.rb} +9 -8
  34. data/test/{mocks → haml/mocks}/article.rb +0 -0
  35. data/test/{results → haml/results}/content_for_layout.xhtml +0 -0
  36. data/test/{results → haml/results}/eval_suppressed.xhtml +0 -0
  37. data/test/haml/results/filters.xhtml +57 -0
  38. data/test/{results → haml/results}/helpers.xhtml +10 -0
  39. data/test/haml/results/helpful.xhtml +8 -0
  40. data/test/{results → haml/results}/just_stuff.xhtml +5 -0
  41. data/test/{results → haml/results}/list.xhtml +0 -0
  42. data/test/{results → haml/results}/original_engine.xhtml +1 -1
  43. data/test/{results → haml/results}/partials.xhtml +0 -0
  44. data/test/{results → haml/results}/silent_script.xhtml +0 -0
  45. data/test/{results → haml/results}/standard.xhtml +2 -1
  46. data/test/{results → haml/results}/tag_parsing.xhtml +0 -0
  47. data/test/{results → haml/results}/very_basic.xhtml +0 -0
  48. data/test/haml/results/whitespace_handling.xhtml +104 -0
  49. data/test/{rhtml → haml/rhtml}/standard.rhtml +4 -1
  50. data/test/{runner.rb → haml/runner.rb} +1 -1
  51. data/test/{template_test.rb → haml/template_test.rb} +28 -23
  52. data/test/{templates → haml/templates}/_partial.haml +0 -0
  53. data/test/{templates → haml/templates}/_text_area.haml +0 -0
  54. data/test/haml/templates/breakage.haml +8 -0
  55. data/test/{templates → haml/templates}/content_for_layout.haml +0 -0
  56. data/test/{templates → haml/templates}/eval_suppressed.haml +0 -0
  57. data/test/haml/templates/filters.haml +53 -0
  58. data/test/{templates → haml/templates}/helpers.haml +10 -1
  59. data/test/{templates → haml/templates}/helpful.haml +3 -0
  60. data/test/{templates → haml/templates}/just_stuff.haml +7 -0
  61. data/test/{templates → haml/templates}/list.haml +0 -0
  62. data/test/haml/templates/original_engine.haml +17 -0
  63. data/test/{templates → haml/templates}/partialize.haml +0 -0
  64. data/test/{templates → haml/templates}/partials.haml +0 -0
  65. data/test/{templates → haml/templates}/silent_script.haml +0 -0
  66. data/test/{templates → haml/templates}/standard.haml +3 -1
  67. data/test/{templates → haml/templates}/tag_parsing.haml +0 -0
  68. data/test/{templates → haml/templates}/very_basic.haml +0 -0
  69. data/test/haml/templates/whitespace_handling.haml +137 -0
  70. data/test/profile.rb +36 -18
  71. data/test/sass/engine_test.rb +87 -0
  72. data/test/sass/plugin_test.rb +103 -0
  73. data/test/sass/results/basic.css +9 -0
  74. data/test/sass/results/compact.css +5 -0
  75. data/test/sass/results/complex.css +86 -0
  76. data/test/sass/results/constants.css +12 -0
  77. data/test/sass/results/expanded.css +18 -0
  78. data/test/sass/results/nested.css +14 -0
  79. data/test/sass/templates/basic.sass +23 -0
  80. data/test/sass/templates/bork.sass +2 -0
  81. data/test/sass/templates/compact.sass +15 -0
  82. data/test/sass/templates/complex.sass +291 -0
  83. data/test/sass/templates/constants.sass +80 -0
  84. data/test/sass/templates/expanded.sass +15 -0
  85. data/test/sass/templates/nested.sass +15 -0
  86. metadata +98 -48
  87. data/REFERENCE +0 -662
  88. data/test/engine_test.rb +0 -93
  89. data/test/results/helpful.xhtml +0 -5
  90. data/test/results/whitespace_handling.xhtml +0 -51
  91. data/test/templates/original_engine.haml +0 -17
  92. data/test/templates/whitespace_handling.haml +0 -66
@@ -1,93 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'test/unit'
4
- require File.dirname(__FILE__) + '/../lib/haml/engine'
5
-
6
- class EngineTest < Test::Unit::TestCase
7
-
8
- def render(text, options = {})
9
- Haml::Engine.new(text, options).to_html
10
- end
11
-
12
- def test_empty_render_should_remain_empty
13
- assert_equal('', render(''))
14
- end
15
-
16
- # This is ugly because Hashes are unordered; we don't always know the order
17
- # in which attributes will be returned.
18
- # There is probably a better way to do this.
19
- def test_attributes_should_render_correctly
20
- assert_equal("<div class='atlantis' style='ugly'>\n</div>", render(".atlantis{:style => 'ugly'}").chomp)
21
- rescue
22
- assert_equal("<div style='ugly' class='atlantis'>\n</div>", render(".atlantis{:style => 'ugly'}").chomp)
23
- end
24
-
25
- def test_ruby_code_should_work_inside_attributes
26
- author = 'hcatlin'
27
- assert_equal("<p class='3'>foo</p>", render("%p{:class => 1+2} foo").chomp)
28
- end
29
-
30
- def test_nil_should_render_empty_tag
31
- assert_equal("<div class='no_attributes'>\n</div>",
32
- render(".no_attributes{:nil => nil}").chomp)
33
- end
34
-
35
- def test_strings_should_get_stripped_inside_tags
36
- assert_equal("<div class='stripped'>This should have no spaces in front of it</div>",
37
- render(".stripped This should have no spaces in front of it").chomp)
38
- end
39
-
40
- def test_one_liner_should_be_one_line
41
- assert_equal("<p>Hello</p>", render('%p Hello').chomp)
42
- end
43
-
44
- def test_long_liner_should_not_print_on_one_line
45
- assert_equal("<div>\n #{'x' * 51}\n</div>", render("%div #{'x' * 51}").chomp)
46
- end
47
-
48
- def test_multi_render
49
- engine = Haml::Engine.new("%strong Hi there!")
50
- assert_equal("<strong>Hi there!</strong>\n", engine.to_html)
51
- assert_equal("<strong>Hi there!</strong>\n", engine.to_html)
52
- assert_equal("<strong>Hi there!</strong>\n", engine.to_html)
53
- end
54
-
55
- # Options tests
56
-
57
- def test_stop_eval
58
- assert_equal("", render("= 'Hello'", :suppress_eval => true))
59
- end
60
-
61
- def test_attr_wrapper
62
- assert_equal("<p strange=*attrs*>\n</p>\n", render("%p{ :strange => 'attrs'}", :attr_wrapper => '*'))
63
- assert_equal("<p escaped='quo\"te'>\n</p>\n", render("%p{ :escaped => 'quo\"te'}", :attr_wrapper => '"'))
64
- assert_equal("<p escaped=\"q'uo&quot;te\">\n</p>\n", render("%p{ :escaped => 'q\\'uo\"te'}", :attr_wrapper => '"'))
65
- assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n", render("!!! XML", :attr_wrapper => '"'))
66
- end
67
-
68
- def test_locals
69
- assert_equal("<p>Paragraph!</p>\n", render("%p= text", :locals => { :text => "Paragraph!" }))
70
- end
71
-
72
- def test_precompiled
73
- precompiled = <<-END
74
- def _haml_render
75
- _hamlout = @haml_stack[-1]
76
- _erbout = _hamlout.buffer
77
-
78
- _hamlout.open_tag("p", 0, nil, true, "", nil, nil, false)
79
- @haml_lineno = 1
80
- haml_temp = "Haml Rocks Socks"
81
- haml_temp = _hamlout.push_script(haml_temp, 1, false)
82
- _hamlout.close_tag("p", 0)
83
- end
84
- END
85
-
86
- assert_equal("<p>Haml Rocks Socks</p>\n", render("%h1 I shall not be rendered", :precompiled => precompiled))
87
- end
88
-
89
- def test_comps
90
- assert_equal(-1, "foo" <=> nil)
91
- assert_equal(1, nil <=> "foo")
92
- end
93
- end
@@ -1,5 +0,0 @@
1
- <div class='article' id='article_1'>
2
- <h1>Hello</h1>
3
- <div>World</div>
4
- </div>
5
- <div class='article full' id='article_1'>boo</div>
@@ -1,51 +0,0 @@
1
- <div id='whitespace_test'>
2
- <div class='text_area_test_area'>
3
- <textarea>Oneline</textarea>
4
- </div>
5
- <textarea>BLAH
6
- </textarea>
7
- <div class='text_area_test_area'>
8
- <textarea>Two&#x000A;lines</textarea>
9
- </div>
10
- <textarea>BLAH
11
- </textarea>
12
- <div class='text_area_test_area'>
13
- <textarea>Oneline</textarea>
14
- </div>
15
- <textarea>BLAH&#x000A;</textarea>
16
- <div class='text_area_test_area'>
17
- <textarea>Two&#x000A;lines</textarea>
18
- </div>
19
- <textarea>BLAH&#x000A;</textarea>
20
- <div id='flattened'>
21
- <div class='text_area_test_area'>
22
- <textarea>Two&#x000A;lines</textarea>
23
- </div>
24
- <textarea>BLAH&#x000A;</textarea>
25
- </div>
26
- </div>
27
- <div class='hithere'>
28
- Foo bar
29
- <pre>foo bar</pre>
30
- <pre>foo&#x000A;bar</pre>
31
- <p><pre>foo&#x000A;bar</pre></p>
32
- <p>
33
- foo
34
- bar
35
- </p>
36
- <pre>&#x000A; ___&#x000A; ,o88888&#x000A; ,o8888888'&#x000A; ,:o:o:oooo. ,8O88Pd8888"&#x000A; ,.::.::o:ooooOoOoO. ,oO8O8Pd888'"&#x000A; ,.:.::o:ooOoOoOO8O8OOo.8OOPd8O8O"&#x000A; , ..:.::o:ooOoOOOO8OOOOo.FdO8O8"&#x000A; , ..:.::o:ooOoOO8O888O8O,COCOO"&#x000A; , . ..:.::o:ooOoOOOO8OOOOCOCO"&#x000A; . ..:.::o:ooOoOoOO8O8OCCCC"o&#x000A; . ..:.::o:ooooOoCoCCC"o:o&#x000A; . ..:.::o:o:,cooooCo"oo:o:&#x000A; ` . . ..:.:cocoooo"'o:o:::'&#x000A; .` . ..::ccccoc"'o:o:o:::'&#x000A; :.:. ,c:cccc"':.:.:.:.:.'&#x000A; ..:.:"'`::::c:"'..:.:.:.:.:.' http://www.chris.com/ASCII/&#x000A; ...:.'.:.::::"' . . . . .'&#x000A; .. . ....:."' ` . . . ''&#x000A; . . . ...."'&#x000A; .. . ."' -hrr-&#x000A; .&#x000A;&#x000A;&#x000A; It's a planet!&#x000A;%strong This shouldn't be bold!&#x000A;</pre>
37
- <strong>This should!</strong>
38
- <textarea>
39
- ___ ___ ___ ___&#x000A; /\__\ /\ \ /\__\ /\__\&#x000A; /:/ / /::\ \ /::| | /:/ /&#x000A; /:/__/ /:/\:\ \ /:|:| | /:/ /&#x000A; /::\ \ ___ /::\~\:\ \ /:/|:|__|__ /:/ /&#x000A; /:/\:\ /\__\ /:/\:\ \:\__\ /:/ |::::\__\ /:/__/&#x000A; \/__\:\/:/ / \/__\:\/:/ / \/__/~~/:/ / \:\ \&#x000A; \::/ / \::/ / /:/ / \:\ \&#x000A; /:/ / /:/ / /:/ / \:\ \&#x000A; /:/ / /:/ / /:/ / \:\__\&#x000A; \/__/ \/__/ \/__/ \/__/&#x000A;&#x000A; Many&#x000A; thanks&#x000A; to&#x000A; http://www.network-science.de/ascii/&#x000A;
40
- <strong>indeed!</strong>
41
- </textarea>
42
- </div>
43
- <div class='foo'>
44
- 13
45
- <textarea>&#x000A;a&#x000A;</textarea><textarea>&#x000A;b&#x000A;</textarea><textarea>&#x000A;c&#x000A;</textarea>
46
- </div>
47
- <pre>
48
- foo&#x000A;
49
- bar
50
- </pre>
51
-
@@ -1,17 +0,0 @@
1
- !!!
2
- %html
3
- %head
4
- %title Stop. HAML time
5
- #content
6
- %h1 This is a title!
7
- %p Lorem ipsum dolor sit amet, consectetur adipisicing elit
8
- %p{:class => 'foo'} Cigarettes!
9
- %h2 Man alive!
10
- %ul.things
11
- %li Slippers
12
- %li Shoes
13
- %li Bathrobe
14
- %li Coffee
15
- %pre
16
- This is some text that's in a pre block!
17
- Let's see what happens when it's rendered! What about now, since we're on a new line?
@@ -1,66 +0,0 @@
1
- #whitespace_test
2
- = render :file => "_text_area.haml", :locals => { :value => "Oneline" }
3
- = render :file => "_text_area.haml", :locals => { :value => "Two\nlines" }
4
- ~ render :file => "_text_area.haml", :locals => { :value => "Oneline" }
5
- ~ render :file => "_text_area.haml", :locals => { :value => "Two\nlines" }
6
- #flattened~ render :file => "_text_area.haml", :locals => { :value => "Two\nlines" }
7
- .hithere
8
- ~ "Foo bar"
9
- ~ "<pre>foo bar</pre>"
10
- ~ "<pre>foo\nbar</pre>"
11
- %p~ "<pre>foo\nbar</pre>"
12
- %p~ "foo\nbar"
13
- %pre~
14
- ___
15
- ,o88888
16
- ,o8888888'
17
- ,:o:o:oooo. ,8O88Pd8888"
18
- ,.::.::o:ooooOoOoO. ,oO8O8Pd888'"
19
- ,.:.::o:ooOoOoOO8O8OOo.8OOPd8O8O"
20
- , ..:.::o:ooOoOOOO8OOOOo.FdO8O8"
21
- , ..:.::o:ooOoOO8O888O8O,COCOO"
22
- , . ..:.::o:ooOoOOOO8OOOOCOCO"
23
- . ..:.::o:ooOoOoOO8O8OCCCC"o
24
- . ..:.::o:ooooOoCoCCC"o:o
25
- . ..:.::o:o:,cooooCo"oo:o:
26
- ` . . ..:.:cocoooo"'o:o:::'
27
- .` . ..::ccccoc"'o:o:o:::'
28
- :.:. ,c:cccc"':.:.:.:.:.'
29
- ..:.:"'`::::c:"'..:.:.:.:.:.' http://www.chris.com/ASCII/
30
- ...:.'.:.::::"' . . . . .'
31
- .. . ....:."' ` . . . ''
32
- . . . ...."'
33
- .. . ."' -hrr-
34
- .
35
-
36
-
37
- It's a planet!
38
- %strong This shouldn't be bold!
39
- %strong This should!
40
- %textarea
41
- ~
42
- ___ ___ ___ ___
43
- /\__\ /\ \ /\__\ /\__\
44
- /:/ / /::\ \ /::| | /:/ /
45
- /:/__/ /:/\:\ \ /:|:| | /:/ /
46
- /::\ \ ___ /::\~\:\ \ /:/|:|__|__ /:/ /
47
- /:/\:\ /\__\ /:/\:\ \:\__\ /:/ |::::\__\ /:/__/
48
- \/__\:\/:/ / \/__\:\/:/ / \/__/~~/:/ / \:\ \
49
- \::/ / \::/ / /:/ / \:\ \
50
- /:/ / /:/ / /:/ / \:\ \
51
- /:/ / /:/ / /:/ / \:\__\
52
- \/__/ \/__/ \/__/ \/__/
53
-
54
- Many
55
- thanks
56
- to
57
- http://www.network-science.de/ascii/
58
- %strong indeed!
59
- .foo
60
- ~ 13
61
- ~ ['a', 'b', 'c'].map do |a|
62
- - "<textarea>\n#{a}\n</textarea>"
63
- %pre
64
- ~
65
- foo
66
- bar