drnic-haml 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. data/.yardopts +5 -0
  2. data/CONTRIBUTING +4 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +347 -0
  5. data/REVISION +1 -0
  6. data/Rakefile +371 -0
  7. data/VERSION +1 -0
  8. data/VERSION_NAME +1 -0
  9. data/bin/css2sass +7 -0
  10. data/bin/haml +9 -0
  11. data/bin/html2haml +7 -0
  12. data/bin/sass +8 -0
  13. data/extra/haml-mode.el +663 -0
  14. data/extra/sass-mode.el +205 -0
  15. data/extra/update_watch.rb +13 -0
  16. data/init.rb +8 -0
  17. data/lib/haml.rb +40 -0
  18. data/lib/haml/buffer.rb +307 -0
  19. data/lib/haml/engine.rb +301 -0
  20. data/lib/haml/error.rb +22 -0
  21. data/lib/haml/exec.rb +470 -0
  22. data/lib/haml/filters.rb +341 -0
  23. data/lib/haml/helpers.rb +560 -0
  24. data/lib/haml/helpers/action_view_extensions.rb +40 -0
  25. data/lib/haml/helpers/action_view_mods.rb +176 -0
  26. data/lib/haml/herb.rb +96 -0
  27. data/lib/haml/html.rb +308 -0
  28. data/lib/haml/precompiler.rb +997 -0
  29. data/lib/haml/shared.rb +78 -0
  30. data/lib/haml/template.rb +51 -0
  31. data/lib/haml/template/patch.rb +58 -0
  32. data/lib/haml/template/plugin.rb +71 -0
  33. data/lib/haml/util.rb +244 -0
  34. data/lib/haml/version.rb +64 -0
  35. data/lib/sass.rb +24 -0
  36. data/lib/sass/css.rb +423 -0
  37. data/lib/sass/engine.rb +491 -0
  38. data/lib/sass/environment.rb +79 -0
  39. data/lib/sass/error.rb +162 -0
  40. data/lib/sass/files.rb +133 -0
  41. data/lib/sass/plugin.rb +170 -0
  42. data/lib/sass/plugin/merb.rb +57 -0
  43. data/lib/sass/plugin/rails.rb +23 -0
  44. data/lib/sass/repl.rb +58 -0
  45. data/lib/sass/script.rb +55 -0
  46. data/lib/sass/script/bool.rb +17 -0
  47. data/lib/sass/script/color.rb +183 -0
  48. data/lib/sass/script/funcall.rb +50 -0
  49. data/lib/sass/script/functions.rb +199 -0
  50. data/lib/sass/script/lexer.rb +191 -0
  51. data/lib/sass/script/literal.rb +177 -0
  52. data/lib/sass/script/node.rb +14 -0
  53. data/lib/sass/script/number.rb +381 -0
  54. data/lib/sass/script/operation.rb +45 -0
  55. data/lib/sass/script/parser.rb +222 -0
  56. data/lib/sass/script/string.rb +12 -0
  57. data/lib/sass/script/unary_operation.rb +34 -0
  58. data/lib/sass/script/variable.rb +31 -0
  59. data/lib/sass/tree/comment_node.rb +84 -0
  60. data/lib/sass/tree/debug_node.rb +30 -0
  61. data/lib/sass/tree/directive_node.rb +70 -0
  62. data/lib/sass/tree/for_node.rb +48 -0
  63. data/lib/sass/tree/if_node.rb +54 -0
  64. data/lib/sass/tree/import_node.rb +69 -0
  65. data/lib/sass/tree/mixin_def_node.rb +29 -0
  66. data/lib/sass/tree/mixin_node.rb +48 -0
  67. data/lib/sass/tree/node.rb +252 -0
  68. data/lib/sass/tree/prop_node.rb +106 -0
  69. data/lib/sass/tree/root_node.rb +56 -0
  70. data/lib/sass/tree/rule_node.rb +220 -0
  71. data/lib/sass/tree/variable_node.rb +34 -0
  72. data/lib/sass/tree/while_node.rb +31 -0
  73. data/rails/init.rb +1 -0
  74. data/test/benchmark.rb +99 -0
  75. data/test/haml/engine_test.rb +1129 -0
  76. data/test/haml/helper_test.rb +282 -0
  77. data/test/haml/html2haml_test.rb +258 -0
  78. data/test/haml/markaby/standard.mab +52 -0
  79. data/test/haml/mocks/article.rb +6 -0
  80. data/test/haml/results/content_for_layout.xhtml +12 -0
  81. data/test/haml/results/eval_suppressed.xhtml +9 -0
  82. data/test/haml/results/filters.xhtml +62 -0
  83. data/test/haml/results/helpers.xhtml +93 -0
  84. data/test/haml/results/helpful.xhtml +10 -0
  85. data/test/haml/results/just_stuff.xhtml +68 -0
  86. data/test/haml/results/list.xhtml +12 -0
  87. data/test/haml/results/nuke_inner_whitespace.xhtml +40 -0
  88. data/test/haml/results/nuke_outer_whitespace.xhtml +148 -0
  89. data/test/haml/results/original_engine.xhtml +20 -0
  90. data/test/haml/results/partial_layout.xhtml +5 -0
  91. data/test/haml/results/partials.xhtml +21 -0
  92. data/test/haml/results/render_layout.xhtml +3 -0
  93. data/test/haml/results/silent_script.xhtml +74 -0
  94. data/test/haml/results/standard.xhtml +162 -0
  95. data/test/haml/results/tag_parsing.xhtml +23 -0
  96. data/test/haml/results/very_basic.xhtml +5 -0
  97. data/test/haml/results/whitespace_handling.xhtml +89 -0
  98. data/test/haml/rhtml/_av_partial_1.rhtml +12 -0
  99. data/test/haml/rhtml/_av_partial_2.rhtml +8 -0
  100. data/test/haml/rhtml/action_view.rhtml +62 -0
  101. data/test/haml/rhtml/standard.rhtml +54 -0
  102. data/test/haml/spec_test.rb +44 -0
  103. data/test/haml/template_test.rb +217 -0
  104. data/test/haml/templates/_av_partial_1.haml +9 -0
  105. data/test/haml/templates/_av_partial_1_ugly.haml +9 -0
  106. data/test/haml/templates/_av_partial_2.haml +5 -0
  107. data/test/haml/templates/_av_partial_2_ugly.haml +5 -0
  108. data/test/haml/templates/_layout.erb +3 -0
  109. data/test/haml/templates/_layout_for_partial.haml +3 -0
  110. data/test/haml/templates/_partial.haml +8 -0
  111. data/test/haml/templates/_text_area.haml +3 -0
  112. data/test/haml/templates/action_view.haml +47 -0
  113. data/test/haml/templates/action_view_ugly.haml +47 -0
  114. data/test/haml/templates/breakage.haml +8 -0
  115. data/test/haml/templates/content_for_layout.haml +8 -0
  116. data/test/haml/templates/eval_suppressed.haml +11 -0
  117. data/test/haml/templates/filters.haml +66 -0
  118. data/test/haml/templates/helpers.haml +95 -0
  119. data/test/haml/templates/helpful.haml +11 -0
  120. data/test/haml/templates/just_stuff.haml +83 -0
  121. data/test/haml/templates/list.haml +12 -0
  122. data/test/haml/templates/nuke_inner_whitespace.haml +32 -0
  123. data/test/haml/templates/nuke_outer_whitespace.haml +144 -0
  124. data/test/haml/templates/original_engine.haml +17 -0
  125. data/test/haml/templates/partial_layout.haml +3 -0
  126. data/test/haml/templates/partialize.haml +1 -0
  127. data/test/haml/templates/partials.haml +12 -0
  128. data/test/haml/templates/render_layout.haml +2 -0
  129. data/test/haml/templates/silent_script.haml +40 -0
  130. data/test/haml/templates/standard.haml +42 -0
  131. data/test/haml/templates/standard_ugly.haml +42 -0
  132. data/test/haml/templates/tag_parsing.haml +21 -0
  133. data/test/haml/templates/very_basic.haml +4 -0
  134. data/test/haml/templates/whitespace_handling.haml +87 -0
  135. data/test/haml/util_test.rb +92 -0
  136. data/test/linked_rails.rb +12 -0
  137. data/test/sass/css2sass_test.rb +294 -0
  138. data/test/sass/engine_test.rb +956 -0
  139. data/test/sass/functions_test.rb +126 -0
  140. data/test/sass/more_results/more1.css +9 -0
  141. data/test/sass/more_results/more1_with_line_comments.css +26 -0
  142. data/test/sass/more_results/more_import.css +29 -0
  143. data/test/sass/more_templates/_more_partial.sass +2 -0
  144. data/test/sass/more_templates/more1.sass +23 -0
  145. data/test/sass/more_templates/more_import.sass +11 -0
  146. data/test/sass/plugin_test.rb +229 -0
  147. data/test/sass/results/alt.css +4 -0
  148. data/test/sass/results/basic.css +9 -0
  149. data/test/sass/results/compact.css +5 -0
  150. data/test/sass/results/complex.css +87 -0
  151. data/test/sass/results/compressed.css +1 -0
  152. data/test/sass/results/expanded.css +19 -0
  153. data/test/sass/results/import.css +29 -0
  154. data/test/sass/results/line_numbers.css +49 -0
  155. data/test/sass/results/mixins.css +95 -0
  156. data/test/sass/results/multiline.css +24 -0
  157. data/test/sass/results/nested.css +22 -0
  158. data/test/sass/results/parent_ref.css +13 -0
  159. data/test/sass/results/script.css +16 -0
  160. data/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  161. data/test/sass/results/subdir/subdir.css +3 -0
  162. data/test/sass/results/units.css +11 -0
  163. data/test/sass/script_test.rb +261 -0
  164. data/test/sass/templates/_partial.sass +2 -0
  165. data/test/sass/templates/alt.sass +16 -0
  166. data/test/sass/templates/basic.sass +23 -0
  167. data/test/sass/templates/bork1.sass +2 -0
  168. data/test/sass/templates/bork2.sass +2 -0
  169. data/test/sass/templates/bork3.sass +2 -0
  170. data/test/sass/templates/compact.sass +17 -0
  171. data/test/sass/templates/complex.sass +307 -0
  172. data/test/sass/templates/compressed.sass +15 -0
  173. data/test/sass/templates/expanded.sass +17 -0
  174. data/test/sass/templates/import.sass +11 -0
  175. data/test/sass/templates/importee.sass +19 -0
  176. data/test/sass/templates/line_numbers.sass +13 -0
  177. data/test/sass/templates/mixins.sass +76 -0
  178. data/test/sass/templates/multiline.sass +20 -0
  179. data/test/sass/templates/nested.sass +25 -0
  180. data/test/sass/templates/nested_bork1.sass +2 -0
  181. data/test/sass/templates/nested_bork2.sass +2 -0
  182. data/test/sass/templates/nested_bork3.sass +2 -0
  183. data/test/sass/templates/parent_ref.sass +25 -0
  184. data/test/sass/templates/script.sass +101 -0
  185. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  186. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  187. data/test/sass/templates/subdir/subdir.sass +6 -0
  188. data/test/sass/templates/units.sass +11 -0
  189. data/test/test_helper.rb +44 -0
  190. metadata +298 -0
@@ -0,0 +1,8 @@
1
+ %p
2
+ %h1 Hello!
3
+ = "lots of lines"
4
+ - raise "Oh no!"
5
+ %p
6
+ this is after the exception
7
+ %strong yes it is!
8
+ ho ho ho.
@@ -0,0 +1,8 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %body
5
+ #yieldy
6
+ = yield :layout
7
+ #nosym
8
+ = yield
@@ -0,0 +1,11 @@
1
+ = "not me!"
2
+ = "nor me!"
3
+ - haml_concat "not even me!"
4
+ %p= "NO!"
5
+ %p~ "UH-UH!"
6
+ %h1 Me!
7
+ #foo
8
+ %p#bar All
9
+ %br/
10
+ %p.baz This
11
+ Should render
@@ -0,0 +1,66 @@
1
+ %style
2
+ - width = 5 + 17
3
+ :sass
4
+ p
5
+ :border
6
+ :style dotted
7
+ :width #{width}px
8
+ :color #ff00ff
9
+ h1
10
+ :font-weight normal
11
+
12
+ :test
13
+ This
14
+ Should
15
+ Not
16
+ Print
17
+
18
+ %p
19
+ :javascript
20
+ function newline(str) {
21
+ return "\n" + str;
22
+ }
23
+
24
+ :plain
25
+ This
26
+ Is
27
+ Plain
28
+ Text
29
+ %strong right?
30
+ \#{not interpolated}
31
+ \\#{1 + 2}
32
+ \\\#{also not}
33
+ \\
34
+
35
+ - last = "noitalo"
36
+ %p
37
+ %pre
38
+ :preserve
39
+ This pre is pretty deeply
40
+ nested.
41
+ Does #{"interp" + last.reverse} work?
42
+ :preserve
43
+ This one is, too.
44
+ Nested, that is.
45
+
46
+ - num = 10
47
+ %ul
48
+ :erb
49
+ <% num.times do |c| %>
50
+ <li><%= (c+97).chr %></li>
51
+ <% end %>
52
+ <% res = 178 %>
53
+
54
+ .res= res
55
+
56
+ = "Text!"
57
+
58
+ - var = "Hello"
59
+ :ruby
60
+ printf "%s, World!\n", var
61
+ print "How are you doing today?\n"
62
+
63
+ :escaped
64
+ <div class="foo">
65
+ <p>I think &mdash; or do I?</p>
66
+ </div>
@@ -0,0 +1,95 @@
1
+ = h("&&&&&&&&&&&") # This is an ActionView Helper... should load
2
+ - foo = capture do # This ActionView Helper is designed for ERB, but should work with haml
3
+ %div
4
+ %p.title Title
5
+ %p.text
6
+ Woah this is really crazy
7
+ I mean wow,
8
+ man.
9
+ - 3.times do
10
+ = foo
11
+ %p foo
12
+ - tab_up
13
+ %p reeeeeeeeeeeeeeeeeeeeeeeeeeeeeeally loooooooooooooooooong
14
+ - tab_down
15
+ .woah
16
+ #funky
17
+ = capture_haml do
18
+ %div
19
+ %h1 Big!
20
+ %p Small
21
+ / Invisible
22
+ = capture do
23
+ .dilly
24
+ %p foo
25
+ %h1 bar
26
+ = surround '(', ')' do
27
+ %strong parentheses!
28
+ = precede '*' do
29
+ %span.small Not really
30
+ click
31
+ = succeed '.' do
32
+ %a{:href=>"thing"} here
33
+ %p baz
34
+ - haml_buffer.tabulation = 10
35
+ %p boom
36
+ - concat "foo\n"
37
+ - haml_buffer.tabulation = 0
38
+ -#
39
+ -# ActionPack pre-2.0 has weird url_for issues here.
40
+ - if ActionPack::VERSION::MAJOR < 2
41
+ :plain
42
+ <p>
43
+ <form action="" method="post">
44
+ </p>
45
+ <div>
46
+ <form action="" method="post">
47
+ <div><input name="commit" type="submit" value="save" /></div>
48
+ <p>
49
+ @foo =
50
+ value one
51
+ </p>
52
+ Toplevel? false
53
+ <p>
54
+ @foo =
55
+ value three
56
+ </p>
57
+ </form>
58
+ <form action="" method="post">
59
+ Title:
60
+ <input id="article_title" name="article[title]" size="30" type="text" value="Hello" />
61
+ Body:
62
+ <input id="article_body" name="article[body]" size="30" type="text" value="World" />
63
+ </form>
64
+ </div>
65
+ - else
66
+ %p
67
+ = form_tag ''
68
+ %div
69
+ - form_tag '' do
70
+ %div= submit_tag 'save'
71
+ - @foo = 'value one'
72
+ = test_partial 'partial'
73
+ - form_for :article, @article, :url => '' do |f|
74
+ Title:
75
+ = f.text_field :title
76
+ Body:
77
+ = f.text_field :body
78
+ = list_of({:google => 'http://www.google.com'}) do |name, link|
79
+ %a{ :href => link }= name
80
+ %p
81
+ - haml_concat "foo"
82
+ %div
83
+ - haml_concat "bar"
84
+ - haml_concat "boom"
85
+ baz
86
+ - haml_concat "boom, again"
87
+ - haml_tag :table do
88
+ - haml_tag :tr do
89
+ - haml_tag :td, {:class => 'cell'} do
90
+ - haml_tag :strong, "strong!"
91
+ - haml_concat "data"
92
+ - haml_tag :td do
93
+ - haml_concat "more_data"
94
+ - haml_tag :hr
95
+ - haml_tag :div, ''
@@ -0,0 +1,11 @@
1
+ %div[@article]
2
+ %h1= @article.title
3
+ %div= @article.body
4
+ #id[@article] id
5
+ .class[@article] class
6
+ #id.class[@article] id class
7
+ %div{:class => "article full"}[@article]= "boo"
8
+ %div{'class' => "article full"}[@article]= "moo"
9
+ %div.articleFull[@article]= "foo"
10
+ %span[@not_a_real_variable_and_will_be_nil]
11
+ Boo
@@ -0,0 +1,83 @@
1
+ !!! XML
2
+ !!! XML ISO-8859-1
3
+ !!! XML UtF-8 Foo bar
4
+ !!!
5
+ !!! 1.1
6
+ !!! 1.1 Strict
7
+ !!! Strict foo bar
8
+ !!! FRAMESET
9
+ %strong{:apos => "Foo's bar!"} Boo!
10
+ == Embedded? false!
11
+ == Embedded? #{true}!
12
+ - embedded = true
13
+ == Embedded? #{embedded}!
14
+ == Embedded? #{"twice! #{true}"}!
15
+ == Embedded? #{"one"} af"t"er #{"another"}!
16
+ %p== Embedded? false!
17
+ %p== Embedded? #{true}!
18
+ - embedded = true
19
+ %p== Embedded? #{embedded}!
20
+ %p== Embedded? #{"twice! #{true}"}!
21
+ %p== Embedded? #{"one"} af"t"er #{"another"}!
22
+ = "stuff followed by whitespace"
23
+
24
+ - if true
25
+
26
+ %strong block with whitespace
27
+ %p
28
+ \Escape
29
+ \- character
30
+ \%p foo
31
+ \yee\ha
32
+ / Short comment
33
+ /
34
+ This is a block comment
35
+ cool, huh?
36
+ %strong there can even be sub-tags!
37
+ = "Or script!"
38
+ -# Haml comment
39
+ -#
40
+ Nested Haml comment
41
+ - raise 'dead'
42
+ %p{ :class => "" } class attribute should appear!
43
+ %p{ :gorbachev => nil } this attribute shouldn't appear
44
+ /[if lte IE6] conditional comment!
45
+ /[if gte IE7]
46
+ %p Block conditional comment
47
+ %div
48
+ %h1 Cool, eh?
49
+ /[if gte IE5.2]
50
+ Woah a period.
51
+ = "test" |
52
+ "test" |
53
+ -# Hard tabs shouldn't throw errors.
54
+
55
+ - case :foo
56
+ - when :bar
57
+ %br Blah
58
+ - when :foo
59
+ %br
60
+ - case :foo
61
+ - when :bar
62
+ %meta{ :foo => 'blah'}
63
+ - when :foo
64
+ %meta{ :foo => 'bar'}
65
+ %img
66
+ %hr
67
+ %link
68
+ %script Inline content
69
+ %br
70
+ Nested content
71
+ %p.foo{:class => true ? 'bar' : 'baz'}[@article] Blah
72
+ %p.foo{:class => false ? 'bar' : ''}[@article] Blah
73
+ %p.qux{:class => 'quux'}[@article] Blump
74
+ == #{"Woah inner quotes"}
75
+ %p.dynamic_quote{:quotes => "single '", :dyn => 1 + 2}
76
+ %p.dynamic_self_closing{:dyn => 1 + 2}/
77
+ %body
78
+ :plain
79
+ hello
80
+ %div
81
+
82
+ %img
83
+
@@ -0,0 +1,12 @@
1
+ !Not a Doctype!
2
+ %ul
3
+ %li a
4
+ %li b
5
+ %li c
6
+ %li d
7
+ %li e
8
+ %li f
9
+ %li g
10
+ %li h
11
+ %li i
12
+
@@ -0,0 +1,32 @@
1
+ %p
2
+ %q< Foo
3
+ %p
4
+ %q{:a => 1 + 1}< Foo
5
+ %p
6
+ %q<= "Foo\nBar"
7
+ %p
8
+ %q{:a => 1 + 1}<= "Foo\nBar"
9
+ %p
10
+ %q<
11
+ Foo
12
+ Bar
13
+ %p
14
+ %q{:a => 1 + 1}<
15
+ Foo
16
+ Bar
17
+ %p
18
+ %q<
19
+ %div
20
+ Foo
21
+ Bar
22
+ %p
23
+ %q{:a => 1 + 1}<
24
+ %div
25
+ Foo
26
+ Bar
27
+
28
+ -# Regression test
29
+ %p
30
+ %q<= "foo"
31
+ %q{:a => 1 + 1}
32
+ bar
@@ -0,0 +1,144 @@
1
+ %p
2
+ %p
3
+ %q>
4
+ Foo
5
+ %p
6
+ %p
7
+ %q{:a => 1 + 1}>
8
+ Foo
9
+ %p
10
+ %p
11
+ %q> Foo
12
+ %p
13
+ %p
14
+ %q{:a => 1 + 1}> Foo
15
+ %p
16
+ %p
17
+ %q>
18
+ = "Foo"
19
+ %p
20
+ %p
21
+ %q{:a => 1 + 1}>
22
+ = "Foo"
23
+ %p
24
+ %p
25
+ %q>= "Foo"
26
+ %p
27
+ %p
28
+ %q{:a => 1 + 1}>= "Foo"
29
+ %p
30
+ %p
31
+ %q>
32
+ = "Foo\nBar"
33
+ %p
34
+ %p
35
+ %q{:a => 1 + 1}>
36
+ = "Foo\nBar"
37
+ %p
38
+ %p
39
+ %q>= "Foo\nBar"
40
+ %p
41
+ %p
42
+ %q{:a => 1 + 1}>= "Foo\nBar"
43
+ %p
44
+ %p
45
+ - tab_up
46
+ foo
47
+ %q>
48
+ Foo
49
+ bar
50
+ - tab_down
51
+ %p
52
+ %p
53
+ - tab_up
54
+ foo
55
+ %q{:a => 1 + 1}>
56
+ Foo
57
+ bar
58
+ - tab_down
59
+ %p
60
+ %p
61
+ - tab_up
62
+ foo
63
+ %q> Foo
64
+ bar
65
+ - tab_down
66
+ %p
67
+ %p
68
+ - tab_up
69
+ foo
70
+ %q{:a => 1 + 1}> Foo
71
+ bar
72
+ - tab_down
73
+ %p
74
+ %p
75
+ - tab_up
76
+ foo
77
+ %q>
78
+ = "Foo"
79
+ bar
80
+ - tab_down
81
+ %p
82
+ %p
83
+ - tab_up
84
+ foo
85
+ %q{:a => 1 + 1}>
86
+ = "Foo"
87
+ bar
88
+ - tab_down
89
+ %p
90
+ %p
91
+ - tab_up
92
+ foo
93
+ %q>= "Foo"
94
+ bar
95
+ - tab_down
96
+ %p
97
+ %p
98
+ - tab_up
99
+ foo
100
+ %q{:a => 1 + 1}>= "Foo"
101
+ bar
102
+ - tab_down
103
+ %p
104
+ %p
105
+ - tab_up
106
+ foo
107
+ %q>
108
+ = "Foo\nBar"
109
+ bar
110
+ - tab_down
111
+ %p
112
+ %p
113
+ - tab_up
114
+ foo
115
+ %q{:a => 1 + 1}>
116
+ = "Foo\nBar"
117
+ bar
118
+ - tab_down
119
+ %p
120
+ %p
121
+ - tab_up
122
+ foo
123
+ %q>= "Foo\nBar"
124
+ bar
125
+ - tab_down
126
+ %p
127
+ %p
128
+ - tab_up
129
+ foo
130
+ %q{:a => 1 + 1}>= "Foo\nBar"
131
+ bar
132
+ - tab_down
133
+ %p
134
+ %p
135
+ %q>
136
+ %p
137
+ %p
138
+ %q>/
139
+ %p
140
+ %p
141
+ %q{:a => 1 + 1}>
142
+ %p
143
+ %p
144
+ %q{:a => 1 + 1}>/