haml 4.0.7 → 5.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/test.yml +36 -0
- data/.gitignore +19 -0
- data/.gitmodules +3 -0
- data/.yardopts +2 -3
- data/CHANGELOG.md +146 -4
- data/FAQ.md +4 -14
- data/Gemfile +16 -0
- data/MIT-LICENSE +2 -2
- data/README.md +90 -47
- data/REFERENCE.md +160 -74
- data/Rakefile +44 -63
- data/TODO +24 -0
- data/benchmark.rb +70 -0
- data/haml.gemspec +45 -0
- data/lib/haml/.gitattributes +1 -0
- data/lib/haml/attribute_builder.rb +219 -0
- data/lib/haml/attribute_compiler.rb +237 -0
- data/lib/haml/attribute_parser.rb +150 -0
- data/lib/haml/buffer.rb +12 -175
- data/lib/haml/compiler.rb +110 -320
- data/lib/haml/engine.rb +34 -41
- data/lib/haml/error.rb +28 -24
- data/lib/haml/escapable.rb +77 -0
- data/lib/haml/exec.rb +38 -20
- data/lib/haml/filters.rb +22 -27
- data/lib/haml/generator.rb +42 -0
- data/lib/haml/helpers/action_view_extensions.rb +4 -2
- data/lib/haml/helpers/action_view_mods.rb +45 -60
- data/lib/haml/helpers/action_view_xss_mods.rb +2 -0
- data/lib/haml/helpers/safe_erubi_template.rb +20 -0
- data/lib/haml/helpers/safe_erubis_template.rb +5 -1
- data/lib/haml/helpers/xss_mods.rb +23 -13
- data/lib/haml/helpers.rb +134 -89
- data/lib/haml/options.rb +63 -69
- data/lib/haml/parser.rb +319 -227
- data/lib/haml/plugin.rb +54 -0
- data/lib/haml/railtie.rb +43 -12
- data/lib/haml/sass_rails_filter.rb +18 -4
- data/lib/haml/template/options.rb +13 -2
- data/lib/haml/template.rb +13 -6
- data/lib/haml/temple_engine.rb +124 -0
- data/lib/haml/temple_line_counter.rb +30 -0
- data/lib/haml/util.rb +83 -202
- data/lib/haml/version.rb +3 -1
- data/lib/haml.rb +2 -0
- data/yard/default/.gitignore +1 -0
- data/yard/default/fulldoc/html/css/common.sass +15 -0
- data/yard/default/layout/html/footer.erb +12 -0
- metadata +73 -115
- data/lib/haml/template/plugin.rb +0 -41
- data/test/engine_test.rb +0 -2013
- data/test/erb/_av_partial_1.erb +0 -12
- data/test/erb/_av_partial_2.erb +0 -8
- data/test/erb/action_view.erb +0 -62
- data/test/erb/standard.erb +0 -55
- data/test/filters_test.rb +0 -254
- data/test/gemfiles/Gemfile.rails-3.0.x +0 -5
- data/test/gemfiles/Gemfile.rails-3.1.x +0 -6
- data/test/gemfiles/Gemfile.rails-3.2.x +0 -5
- data/test/gemfiles/Gemfile.rails-4.0.x +0 -5
- data/test/haml-spec/LICENSE +0 -14
- data/test/haml-spec/README.md +0 -106
- data/test/haml-spec/lua_haml_spec.lua +0 -38
- data/test/haml-spec/perl_haml_test.pl +0 -81
- data/test/haml-spec/ruby_haml_test.rb +0 -23
- data/test/haml-spec/tests.json +0 -660
- data/test/helper_test.rb +0 -583
- data/test/markaby/standard.mab +0 -52
- data/test/mocks/article.rb +0 -6
- data/test/parser_test.rb +0 -105
- data/test/results/content_for_layout.xhtml +0 -12
- data/test/results/eval_suppressed.xhtml +0 -9
- data/test/results/helpers.xhtml +0 -70
- data/test/results/helpful.xhtml +0 -10
- data/test/results/just_stuff.xhtml +0 -70
- data/test/results/list.xhtml +0 -12
- data/test/results/nuke_inner_whitespace.xhtml +0 -40
- data/test/results/nuke_outer_whitespace.xhtml +0 -148
- data/test/results/original_engine.xhtml +0 -20
- data/test/results/partial_layout.xhtml +0 -5
- data/test/results/partial_layout_erb.xhtml +0 -5
- data/test/results/partials.xhtml +0 -21
- data/test/results/render_layout.xhtml +0 -3
- data/test/results/silent_script.xhtml +0 -74
- data/test/results/standard.xhtml +0 -162
- data/test/results/tag_parsing.xhtml +0 -23
- data/test/results/very_basic.xhtml +0 -5
- data/test/results/whitespace_handling.xhtml +0 -90
- data/test/template_test.rb +0 -354
- data/test/templates/_av_partial_1.haml +0 -9
- data/test/templates/_av_partial_1_ugly.haml +0 -9
- data/test/templates/_av_partial_2.haml +0 -5
- data/test/templates/_av_partial_2_ugly.haml +0 -5
- data/test/templates/_layout.erb +0 -3
- data/test/templates/_layout_for_partial.haml +0 -3
- data/test/templates/_partial.haml +0 -8
- data/test/templates/_text_area.haml +0 -3
- data/test/templates/_text_area_helper.html.haml +0 -4
- data/test/templates/action_view.haml +0 -47
- data/test/templates/action_view_ugly.haml +0 -47
- data/test/templates/breakage.haml +0 -8
- data/test/templates/content_for_layout.haml +0 -8
- data/test/templates/eval_suppressed.haml +0 -11
- data/test/templates/helpers.haml +0 -55
- data/test/templates/helpful.haml +0 -11
- data/test/templates/just_stuff.haml +0 -85
- data/test/templates/list.haml +0 -12
- data/test/templates/nuke_inner_whitespace.haml +0 -32
- data/test/templates/nuke_outer_whitespace.haml +0 -144
- data/test/templates/original_engine.haml +0 -17
- data/test/templates/partial_layout.haml +0 -3
- data/test/templates/partial_layout_erb.erb +0 -4
- data/test/templates/partialize.haml +0 -1
- data/test/templates/partials.haml +0 -12
- data/test/templates/render_layout.haml +0 -2
- data/test/templates/silent_script.haml +0 -45
- data/test/templates/standard.haml +0 -43
- data/test/templates/standard_ugly.haml +0 -43
- data/test/templates/tag_parsing.haml +0 -21
- data/test/templates/very_basic.haml +0 -4
- data/test/templates/whitespace_handling.haml +0 -87
- data/test/test_helper.rb +0 -81
- 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
|