haml 4.0.7 → 5.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +36 -0
  3. data/.gitignore +19 -0
  4. data/.gitmodules +3 -0
  5. data/.yardopts +2 -3
  6. data/CHANGELOG.md +146 -4
  7. data/FAQ.md +4 -14
  8. data/Gemfile +16 -0
  9. data/MIT-LICENSE +2 -2
  10. data/README.md +90 -47
  11. data/REFERENCE.md +160 -74
  12. data/Rakefile +44 -63
  13. data/TODO +24 -0
  14. data/benchmark.rb +70 -0
  15. data/haml.gemspec +45 -0
  16. data/lib/haml/.gitattributes +1 -0
  17. data/lib/haml/attribute_builder.rb +219 -0
  18. data/lib/haml/attribute_compiler.rb +237 -0
  19. data/lib/haml/attribute_parser.rb +150 -0
  20. data/lib/haml/buffer.rb +12 -175
  21. data/lib/haml/compiler.rb +110 -320
  22. data/lib/haml/engine.rb +34 -41
  23. data/lib/haml/error.rb +28 -24
  24. data/lib/haml/escapable.rb +77 -0
  25. data/lib/haml/exec.rb +38 -20
  26. data/lib/haml/filters.rb +22 -27
  27. data/lib/haml/generator.rb +42 -0
  28. data/lib/haml/helpers/action_view_extensions.rb +4 -2
  29. data/lib/haml/helpers/action_view_mods.rb +45 -60
  30. data/lib/haml/helpers/action_view_xss_mods.rb +2 -0
  31. data/lib/haml/helpers/safe_erubi_template.rb +20 -0
  32. data/lib/haml/helpers/safe_erubis_template.rb +5 -1
  33. data/lib/haml/helpers/xss_mods.rb +23 -13
  34. data/lib/haml/helpers.rb +134 -89
  35. data/lib/haml/options.rb +63 -69
  36. data/lib/haml/parser.rb +319 -227
  37. data/lib/haml/plugin.rb +54 -0
  38. data/lib/haml/railtie.rb +43 -12
  39. data/lib/haml/sass_rails_filter.rb +18 -4
  40. data/lib/haml/template/options.rb +13 -2
  41. data/lib/haml/template.rb +13 -6
  42. data/lib/haml/temple_engine.rb +124 -0
  43. data/lib/haml/temple_line_counter.rb +30 -0
  44. data/lib/haml/util.rb +83 -202
  45. data/lib/haml/version.rb +3 -1
  46. data/lib/haml.rb +2 -0
  47. data/yard/default/.gitignore +1 -0
  48. data/yard/default/fulldoc/html/css/common.sass +15 -0
  49. data/yard/default/layout/html/footer.erb +12 -0
  50. metadata +73 -115
  51. data/lib/haml/template/plugin.rb +0 -41
  52. data/test/engine_test.rb +0 -2013
  53. data/test/erb/_av_partial_1.erb +0 -12
  54. data/test/erb/_av_partial_2.erb +0 -8
  55. data/test/erb/action_view.erb +0 -62
  56. data/test/erb/standard.erb +0 -55
  57. data/test/filters_test.rb +0 -254
  58. data/test/gemfiles/Gemfile.rails-3.0.x +0 -5
  59. data/test/gemfiles/Gemfile.rails-3.1.x +0 -6
  60. data/test/gemfiles/Gemfile.rails-3.2.x +0 -5
  61. data/test/gemfiles/Gemfile.rails-4.0.x +0 -5
  62. data/test/haml-spec/LICENSE +0 -14
  63. data/test/haml-spec/README.md +0 -106
  64. data/test/haml-spec/lua_haml_spec.lua +0 -38
  65. data/test/haml-spec/perl_haml_test.pl +0 -81
  66. data/test/haml-spec/ruby_haml_test.rb +0 -23
  67. data/test/haml-spec/tests.json +0 -660
  68. data/test/helper_test.rb +0 -583
  69. data/test/markaby/standard.mab +0 -52
  70. data/test/mocks/article.rb +0 -6
  71. data/test/parser_test.rb +0 -105
  72. data/test/results/content_for_layout.xhtml +0 -12
  73. data/test/results/eval_suppressed.xhtml +0 -9
  74. data/test/results/helpers.xhtml +0 -70
  75. data/test/results/helpful.xhtml +0 -10
  76. data/test/results/just_stuff.xhtml +0 -70
  77. data/test/results/list.xhtml +0 -12
  78. data/test/results/nuke_inner_whitespace.xhtml +0 -40
  79. data/test/results/nuke_outer_whitespace.xhtml +0 -148
  80. data/test/results/original_engine.xhtml +0 -20
  81. data/test/results/partial_layout.xhtml +0 -5
  82. data/test/results/partial_layout_erb.xhtml +0 -5
  83. data/test/results/partials.xhtml +0 -21
  84. data/test/results/render_layout.xhtml +0 -3
  85. data/test/results/silent_script.xhtml +0 -74
  86. data/test/results/standard.xhtml +0 -162
  87. data/test/results/tag_parsing.xhtml +0 -23
  88. data/test/results/very_basic.xhtml +0 -5
  89. data/test/results/whitespace_handling.xhtml +0 -90
  90. data/test/template_test.rb +0 -354
  91. data/test/templates/_av_partial_1.haml +0 -9
  92. data/test/templates/_av_partial_1_ugly.haml +0 -9
  93. data/test/templates/_av_partial_2.haml +0 -5
  94. data/test/templates/_av_partial_2_ugly.haml +0 -5
  95. data/test/templates/_layout.erb +0 -3
  96. data/test/templates/_layout_for_partial.haml +0 -3
  97. data/test/templates/_partial.haml +0 -8
  98. data/test/templates/_text_area.haml +0 -3
  99. data/test/templates/_text_area_helper.html.haml +0 -4
  100. data/test/templates/action_view.haml +0 -47
  101. data/test/templates/action_view_ugly.haml +0 -47
  102. data/test/templates/breakage.haml +0 -8
  103. data/test/templates/content_for_layout.haml +0 -8
  104. data/test/templates/eval_suppressed.haml +0 -11
  105. data/test/templates/helpers.haml +0 -55
  106. data/test/templates/helpful.haml +0 -11
  107. data/test/templates/just_stuff.haml +0 -85
  108. data/test/templates/list.haml +0 -12
  109. data/test/templates/nuke_inner_whitespace.haml +0 -32
  110. data/test/templates/nuke_outer_whitespace.haml +0 -144
  111. data/test/templates/original_engine.haml +0 -17
  112. data/test/templates/partial_layout.haml +0 -3
  113. data/test/templates/partial_layout_erb.erb +0 -4
  114. data/test/templates/partialize.haml +0 -1
  115. data/test/templates/partials.haml +0 -12
  116. data/test/templates/render_layout.haml +0 -2
  117. data/test/templates/silent_script.haml +0 -45
  118. data/test/templates/standard.haml +0 -43
  119. data/test/templates/standard_ugly.haml +0 -43
  120. data/test/templates/tag_parsing.haml +0 -21
  121. data/test/templates/very_basic.haml +0 -4
  122. data/test/templates/whitespace_handling.haml +0 -87
  123. data/test/test_helper.rb +0 -81
  124. data/test/util_test.rb +0 -63
@@ -1,87 +0,0 @@
1
- #whitespace_test
2
- = test_partial "text_area", :value => "Oneline"
3
- = test_partial "text_area", :value => "Two\nlines"
4
- ~ test_partial "text_area", :value => "Oneline"
5
- ~ test_partial "text_area", :value => "Two\nlines"
6
- #flattened~ test_partial "text_area", :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
- .foo
14
- ~ 13
15
- ~ "<textarea>\na\n</textarea>".each_line do |l|
16
- - haml_concat l.strip
17
- #whitespace_test
18
- = test_partial "text_area", :value => "Oneline"
19
- = test_partial "text_area", :value => "Two\nlines"
20
- = find_and_preserve test_partial("text_area", :value => "Oneline")
21
- = find_and_preserve test_partial("text_area", :value => "Two\nlines")
22
- #flattened= find_and_preserve test_partial("text_area", :value => "Two\nlines")
23
- .hithere
24
- = find_and_preserve("Foo bar")
25
- = find_and_preserve("<pre>foo bar</pre>")
26
- = find_and_preserve("<pre>foo\nbar</pre>")
27
- %p= find_and_preserve("<pre>foo\nbar</pre>")
28
- %p= find_and_preserve("foo\nbar")
29
- %pre
30
- :preserve
31
- ___
32
- ,o88888
33
- ,o8888888'
34
- ,:o:o:oooo. ,8O88Pd8888"
35
- ,.::.::o:ooooOoOoO. ,oO8O8Pd888'"
36
- ,.:.::o:ooOoOoOO8O8OOo.8OOPd8O8O"
37
- , ..:.::o:ooOoOOOO8OOOOo.FdO8O8"
38
- , ..:.::o:ooOoOO8O888O8O,COCOO"
39
- , . ..:.::o:ooOoOOOO8OOOOCOCO"
40
- . ..:.::o:ooOoOoOO8O8OCCCC"o
41
- . ..:.::o:ooooOoCoCCC"o:o
42
- . ..:.::o:o:,cooooCo"oo:o:
43
- ` . . ..:.:cocoooo"'o:o:::'
44
- .` . ..::ccccoc"'o:o:o:::'
45
- :.:. ,c:cccc"':.:.:.:.:.'
46
- ..:.:"'`::::c:"'..:.:.:.:.:.' http://www.chris.com/ASCII/
47
- ...:.'.:.::::"' . . . . .'
48
- .. . ....:."' ` . . . ''
49
- . . . ...."'
50
- .. . ."' -hrr-
51
- .
52
-
53
-
54
- It's a planet!
55
- %strong This shouldn't be bold!
56
- %strong This should!
57
- %textarea
58
- :preserve
59
- ___ ___ ___ ___
60
- /\__\ /\ \ /\__\ /\__\
61
- /:/ / /::\ \ /::| | /:/ /
62
- /:/__/ /:/\:\ \ /:|:| | /:/ /
63
- /::\ \ ___ /::\~\:\ \ /:/|:|__|__ /:/ /
64
- /:/\:\ /\__\ /:/\:\ \:\__\ /:/ |::::\__\ /:/__/
65
- \/__\:\/:/ / \/__\:\/:/ / \/__/~~/:/ / \:\ \
66
- \::/ / \::/ / /:/ / \:\ \
67
- /:/ / /:/ / /:/ / \:\ \
68
- /:/ / /:/ / /:/ / \:\__\
69
- \/__/ \/__/ \/__/ \/__/
70
-
71
- Many
72
- thanks
73
- to
74
- http://www.network-science.de/ascii/
75
- %strong indeed!
76
- .foo
77
- = find_and_preserve(13)
78
- %pre
79
- :preserve
80
- __ ______ __ ______
81
- .----.| |--.|__ |.----.| |--..--------.| __ |
82
- | __|| ||__ || __|| < | || __ |
83
- |____||__|__||______||____||__|__||__|__|__||______|
84
- %pre
85
- :preserve
86
- foo
87
- bar
data/test/test_helper.rb DELETED
@@ -1,81 +0,0 @@
1
- if ENV["COVERAGE"]
2
- require "simplecov"
3
- SimpleCov.start
4
- end
5
-
6
- require 'rubygems'
7
- gem "minitest"
8
- require 'bundler/setup'
9
- require 'minitest/autorun'
10
- require 'action_pack'
11
- require 'action_controller'
12
- require 'action_view'
13
- require 'nokogiri'
14
-
15
- require 'rails'
16
- class TestApp < Rails::Application
17
- config.root = ""
18
- end
19
- Rails.application = TestApp
20
-
21
- ActionController::Base.logger = Logger.new(nil)
22
-
23
- require 'fileutils'
24
-
25
- $VERBOSE = true
26
-
27
- require 'haml'
28
- require 'haml/template'
29
-
30
- Haml::Template.options[:ugly] = false
31
- Haml::Template.options[:format] = :xhtml
32
-
33
- module Declarative
34
- def test(name, &block)
35
- define_method("test #{name}", &block)
36
- end
37
- end
38
-
39
- class MiniTest::Unit::TestCase
40
-
41
- extend Declarative
42
-
43
- def render(text, options = {}, base = nil, &block)
44
- scope = options.delete(:scope) || Object.new
45
- locals = options.delete(:locals) || {}
46
- engine = Haml::Engine.new(text, options)
47
- return engine.to_html(base) if base
48
- engine.to_html(scope, locals, &block)
49
- end
50
-
51
- def assert_warning(message)
52
- the_real_stderr, $stderr = $stderr, StringIO.new
53
- yield
54
-
55
- if message.is_a?(Regexp)
56
- assert_match message, $stderr.string.strip
57
- else
58
- assert_equal message.strip, $stderr.string.strip
59
- end
60
- ensure
61
- $stderr = the_real_stderr
62
- end
63
-
64
- def silence_warnings(&block)
65
- Haml::Util.silence_warnings(&block)
66
- end
67
-
68
- def assert_raises_message(klass, message)
69
- yield
70
- rescue Exception => e
71
- assert_instance_of(klass, e)
72
- assert_equal(message, e.message)
73
- else
74
- flunk "Expected exception #{klass}, none raised"
75
- end
76
-
77
- def self.error(*args)
78
- Haml::Error.message(*args)
79
- end
80
-
81
- end
data/test/util_test.rb DELETED
@@ -1,63 +0,0 @@
1
- require 'test_helper'
2
-
3
- class UtilTest < MiniTest::Unit::TestCase
4
- include Haml::Util
5
-
6
- def test_powerset
7
- return unless Set[Set[]] == Set[Set[]] # There's a bug in Ruby 1.8.6 that breaks nested set equality
8
- assert_equal([[].to_set].to_set,
9
- powerset([]))
10
- assert_equal([[].to_set, [1].to_set].to_set,
11
- powerset([1]))
12
- assert_equal([[].to_set, [1].to_set, [2].to_set, [1, 2].to_set].to_set,
13
- powerset([1, 2]))
14
- assert_equal([[].to_set, [1].to_set, [2].to_set, [3].to_set,
15
- [1, 2].to_set, [2, 3].to_set, [1, 3].to_set, [1, 2, 3].to_set].to_set,
16
- powerset([1, 2, 3]))
17
- end
18
-
19
- def test_silence_warnings
20
- old_stderr, $stderr = $stderr, StringIO.new
21
- warn "Out"
22
- assert_equal("Out\n", $stderr.string)
23
- silence_warnings {warn "In"}
24
- assert_equal("Out\n", $stderr.string)
25
- ensure
26
- $stderr = old_stderr
27
- end
28
-
29
- def test_caller_info
30
- assert_equal(["/tmp/foo.rb", 12, "fizzle"], caller_info("/tmp/foo.rb:12: in `fizzle'"))
31
- assert_equal(["/tmp/foo.rb", 12, nil], caller_info("/tmp/foo.rb:12"))
32
- assert_equal(["(haml)", 12, "blah"], caller_info("(haml):12: in `blah'"))
33
- assert_equal(["", 12, "boop"], caller_info(":12: in `boop'"))
34
- assert_equal(["/tmp/foo.rb", -12, "fizzle"], caller_info("/tmp/foo.rb:-12: in `fizzle'"))
35
- assert_equal(["/tmp/foo.rb", 12, "fizzle"], caller_info("/tmp/foo.rb:12: in `fizzle {}'"))
36
- end
37
-
38
- def test_def_static_method
39
- klass = Class.new
40
- def_static_method(klass, :static_method, [:arg1, :arg2],
41
- :sarg1, :sarg2, <<RUBY)
42
- s = "Always " + arg1
43
- s << " <% if sarg1 %>and<% else %>but never<% end %> " << arg2
44
-
45
- <% if sarg2 %>
46
- s << "."
47
- <% end %>
48
- RUBY
49
- c = klass.new
50
- assert_equal("Always brush your teeth and comb your hair.",
51
- c.send(static_method_name(:static_method, true, true),
52
- "brush your teeth", "comb your hair"))
53
- assert_equal("Always brush your teeth and comb your hair",
54
- c.send(static_method_name(:static_method, true, false),
55
- "brush your teeth", "comb your hair"))
56
- assert_equal("Always brush your teeth but never play with fire.",
57
- c.send(static_method_name(:static_method, false, true),
58
- "brush your teeth", "play with fire"))
59
- assert_equal("Always brush your teeth but never play with fire",
60
- c.send(static_method_name(:static_method, false, false),
61
- "brush your teeth", "play with fire"))
62
- end
63
- end