erbeautifier 0.1.0
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.
- data/.gitignore +1 -0
- data/History.txt +4 -0
- data/License.txt +20 -0
- data/Manifest.txt +24 -0
- data/README.txt +16 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/bin/htmlbeautifier +4 -0
- data/config/hoe.rb +70 -0
- data/config/requirements.rb +3 -0
- data/erbeautifier.gemspec +71 -0
- data/lib/htmlbeautifier.rb +5 -0
- data/lib/htmlbeautifier/beautifier.rb +119 -0
- data/lib/htmlbeautifier/parser.rb +53 -0
- data/lib/htmlbeautifier/version.rb +9 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +27 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +9 -0
- data/test/html_beautifier_test_utilities.rb +19 -0
- data/test/test_helper.rb +2 -0
- data/test/test_html_beautifier_integration.rb +85 -0
- data/test/test_html_beautifier_regression.rb +182 -0
- data/test/test_parser.rb +42 -0
- metadata +85 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
desc 'Release the website and new gem version'
|
2
|
+
task :deploy => [:check_version, :website, :release] do
|
3
|
+
puts "Remember to create SVN tag:"
|
4
|
+
puts "svn copy svn+ssh://#{RUBYFORGE_USERNAME}@rubyforge.org/var/svn/#{PATH}/trunk " +
|
5
|
+
"svn+ssh://#{RUBYFORGE_USERNAME}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
|
6
|
+
puts "Suggested comment:"
|
7
|
+
puts "Tagging release #{CHANGES}"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
|
11
|
+
task :local_deploy => [:website_generate, :install_gem]
|
12
|
+
|
13
|
+
task :check_version do
|
14
|
+
unless ENV['VERSION']
|
15
|
+
puts 'Must pass a VERSION=x.y.z release version'
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
unless ENV['VERSION'] == VERS
|
19
|
+
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
|
25
|
+
task :install_gem_no_doc => [:clean, :package] do
|
26
|
+
sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
|
27
|
+
end
|
data/tasks/website.rake
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module HtmlBeautifierTestUtilities
|
2
|
+
|
3
|
+
def code(str)
|
4
|
+
str = str.gsub(/\A\n|\n\s*\Z/, '')
|
5
|
+
indentation = str[/\A +/]
|
6
|
+
lines = str.split(/\n/)
|
7
|
+
lines.map{ |line| line.sub(/^#{indentation}/, '') }.join("\n")
|
8
|
+
end
|
9
|
+
|
10
|
+
def assert_beautifies(expected, source)
|
11
|
+
actual = ''
|
12
|
+
beautifier = HtmlBeautifier::Beautifier.new(actual)
|
13
|
+
beautifier.scan(source)
|
14
|
+
# puts expected
|
15
|
+
# puts actual
|
16
|
+
assert_equal expected, actual
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require 'htmlbeautifier/beautifier'
|
3
|
+
require 'html_beautifier_test_utilities'
|
4
|
+
|
5
|
+
class TestHtmlBeautifierIntegration < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include HtmlBeautifierTestUtilities
|
8
|
+
|
9
|
+
def test_should_correctly_indent_mixed_document
|
10
|
+
source = code(%q(
|
11
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
13
|
+
<head>
|
14
|
+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
15
|
+
<script src="/javascripts/prototype.js" type="text/javascript"></script>
|
16
|
+
<link rel="stylesheet" type="text/css" href="/stylesheets/screen.css" media="screen"/>
|
17
|
+
<!--[if IE 6]>
|
18
|
+
<link rel="stylesheet" href="/stylesheets/screen_ie6.css" type="text/css" />
|
19
|
+
<![endif]-->
|
20
|
+
<title>Title Goes Here</title>
|
21
|
+
<script type="text/javascript" charset="utf-8">
|
22
|
+
doSomething();
|
23
|
+
</script>
|
24
|
+
</head>
|
25
|
+
<body>
|
26
|
+
<div id="something">
|
27
|
+
<h1>
|
28
|
+
Heading 1
|
29
|
+
</h1>
|
30
|
+
</div>
|
31
|
+
<div id="somethingElse">
|
32
|
+
<p>Lorem Ipsum</p>
|
33
|
+
<% if @x -%>
|
34
|
+
<% @ys.each do |y| %>
|
35
|
+
<p>
|
36
|
+
<%= h y %>
|
37
|
+
</p>
|
38
|
+
<% end %>
|
39
|
+
<% elsif @z %>
|
40
|
+
<hr />
|
41
|
+
<% end %>
|
42
|
+
</div>
|
43
|
+
</body>
|
44
|
+
</html>
|
45
|
+
))
|
46
|
+
expected = code(%q(
|
47
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
48
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
49
|
+
<head>
|
50
|
+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
51
|
+
<script src="/javascripts/prototype.js" type="text/javascript"></script>
|
52
|
+
<link rel="stylesheet" type="text/css" href="/stylesheets/screen.css" media="screen"/>
|
53
|
+
<!--[if IE 6]>
|
54
|
+
<link rel="stylesheet" href="/stylesheets/screen_ie6.css" type="text/css" />
|
55
|
+
<![endif]-->
|
56
|
+
<title>Title Goes Here</title>
|
57
|
+
<script type="text/javascript" charset="utf-8">
|
58
|
+
doSomething();
|
59
|
+
</script>
|
60
|
+
</head>
|
61
|
+
<body>
|
62
|
+
<div id="something">
|
63
|
+
<h1>
|
64
|
+
Heading 1
|
65
|
+
</h1>
|
66
|
+
</div>
|
67
|
+
<div id="somethingElse">
|
68
|
+
<p>Lorem Ipsum</p>
|
69
|
+
<% if @x -%>
|
70
|
+
<% @ys.each do |y| %>
|
71
|
+
<p>
|
72
|
+
<%= h y %>
|
73
|
+
</p>
|
74
|
+
<% end %>
|
75
|
+
<% elsif @z %>
|
76
|
+
<hr />
|
77
|
+
<% end %>
|
78
|
+
</div>
|
79
|
+
</body>
|
80
|
+
</html>
|
81
|
+
))
|
82
|
+
assert_beautifies expected, source
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require 'htmlbeautifier/beautifier'
|
3
|
+
require 'html_beautifier_test_utilities'
|
4
|
+
|
5
|
+
class HtmlBeautifierRegressionTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include HtmlBeautifierTestUtilities
|
8
|
+
|
9
|
+
def setup
|
10
|
+
# HtmlBeautifier::Parser.debug_block{ |match, method| puts("#{match.inspect} => #{method}") }
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_ignore_html_fragments_in_embedded_code
|
14
|
+
source = code(%q(
|
15
|
+
<div>
|
16
|
+
<%= a[:b].gsub("\n","<br />\n") %>
|
17
|
+
</div>
|
18
|
+
))
|
19
|
+
expected = code(%q(
|
20
|
+
<div>
|
21
|
+
<%= a[:b].gsub("\n","<br />\n") %>
|
22
|
+
</div>
|
23
|
+
))
|
24
|
+
assert_beautifies expected, source
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_indent_scripts
|
28
|
+
source = code(%q(
|
29
|
+
<script>
|
30
|
+
function(f) {
|
31
|
+
g();
|
32
|
+
return 42;
|
33
|
+
}
|
34
|
+
</script>
|
35
|
+
))
|
36
|
+
expected = code(%q(
|
37
|
+
<script>
|
38
|
+
function(f) {
|
39
|
+
g();
|
40
|
+
return 42;
|
41
|
+
}
|
42
|
+
</script>
|
43
|
+
))
|
44
|
+
assert_beautifies expected, source
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_should_remove_blank_lines_around_scripts
|
48
|
+
source = code(%q(
|
49
|
+
<script>
|
50
|
+
|
51
|
+
f();
|
52
|
+
|
53
|
+
</script>
|
54
|
+
))
|
55
|
+
expected = code(%q(
|
56
|
+
<script>
|
57
|
+
f();
|
58
|
+
</script>
|
59
|
+
))
|
60
|
+
assert_beautifies expected, source
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_should_remove_trailing_space_from_script_lines
|
64
|
+
source = code(%q(
|
65
|
+
<script>
|
66
|
+
f();
|
67
|
+
</script>
|
68
|
+
))
|
69
|
+
expected = code(%q(
|
70
|
+
<script>
|
71
|
+
f();
|
72
|
+
</script>
|
73
|
+
))
|
74
|
+
assert_beautifies expected, source
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_should_skip_over_empty_scripts
|
78
|
+
source = %q(<script src="/foo.js" type="text/javascript" charset="utf-8"></script>)
|
79
|
+
expected = source
|
80
|
+
assert_beautifies expected, source
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_should_indent_styles
|
84
|
+
source = code(%q(
|
85
|
+
<style>
|
86
|
+
.foo{ margin: 0; }
|
87
|
+
.bar{
|
88
|
+
padding: 0;
|
89
|
+
margin: 0;
|
90
|
+
}
|
91
|
+
</style>
|
92
|
+
))
|
93
|
+
expected = code(%q(
|
94
|
+
<style>
|
95
|
+
.foo{ margin: 0; }
|
96
|
+
.bar{
|
97
|
+
padding: 0;
|
98
|
+
margin: 0;
|
99
|
+
}
|
100
|
+
</style>
|
101
|
+
))
|
102
|
+
assert_beautifies expected, source
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_should_remove_blank_lines_around_styles
|
106
|
+
source = code(%q(
|
107
|
+
<style>
|
108
|
+
|
109
|
+
.foo{ margin: 0; }
|
110
|
+
|
111
|
+
</style>
|
112
|
+
))
|
113
|
+
expected = code(%q(
|
114
|
+
<style>
|
115
|
+
.foo{ margin: 0; }
|
116
|
+
</style>
|
117
|
+
))
|
118
|
+
assert_beautifies expected, source
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_should_remove_trailing_space_from_style_lines
|
122
|
+
source = code(%q(
|
123
|
+
<style>
|
124
|
+
.foo{ margin: 0; }
|
125
|
+
</style>
|
126
|
+
))
|
127
|
+
expected = code(%q(
|
128
|
+
<style>
|
129
|
+
.foo{ margin: 0; }
|
130
|
+
</style>
|
131
|
+
))
|
132
|
+
assert_beautifies expected, source
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_should_indent_divs_containing_standalone_elements
|
136
|
+
source = code(%q(
|
137
|
+
<div>
|
138
|
+
<div>
|
139
|
+
<img src="foo" alt="" />
|
140
|
+
</div>
|
141
|
+
<div>
|
142
|
+
<img src="foo" alt="" />
|
143
|
+
</div>
|
144
|
+
</div>
|
145
|
+
))
|
146
|
+
expected = source
|
147
|
+
assert_beautifies expected, source
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_should_not_break_line_on_embedded_code_within_script_opening_element
|
151
|
+
source = '<script src="<%= path %>" type="text/javascript"></script>'
|
152
|
+
expected = source
|
153
|
+
assert_beautifies expected, source
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_should_not_break_line_on_embedded_code_within_normal_element
|
157
|
+
source = '<img src="<%= path %>" alt="foo" />'
|
158
|
+
expected = source
|
159
|
+
assert_beautifies expected, source
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_should_indent_inside_IE_conditional_comments
|
163
|
+
source = code(%q(
|
164
|
+
<!--[if IE 6]>
|
165
|
+
<link rel="stylesheet" href="/stylesheets/ie6.css" type="text/css" />
|
166
|
+
<![endif]-->
|
167
|
+
<!--[if IE 5]>
|
168
|
+
<link rel="stylesheet" href="/stylesheets/ie5.css" type="text/css" />
|
169
|
+
<![endif]-->
|
170
|
+
))
|
171
|
+
expected = code(%q(
|
172
|
+
<!--[if IE 6]>
|
173
|
+
<link rel="stylesheet" href="/stylesheets/ie6.css" type="text/css" />
|
174
|
+
<![endif]-->
|
175
|
+
<!--[if IE 5]>
|
176
|
+
<link rel="stylesheet" href="/stylesheets/ie5.css" type="text/css" />
|
177
|
+
<![endif]-->
|
178
|
+
))
|
179
|
+
assert_beautifies expected, source
|
180
|
+
end
|
181
|
+
|
182
|
+
end
|
data/test/test_parser.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require 'htmlbeautifier/parser'
|
3
|
+
|
4
|
+
class TestParser < Test::Unit::TestCase
|
5
|
+
|
6
|
+
class Receiver
|
7
|
+
attr_reader :sequence
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@sequence = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def method_missing(method, *params)
|
14
|
+
@sequence << [method, params]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def setup
|
19
|
+
# HtmlBeautifier::Parser.debug_block{ |match, method| puts("#{match.inspect} => #{method}") }
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_dispatch_matching_sequence
|
23
|
+
receiver = Receiver.new
|
24
|
+
parser = HtmlBeautifier::Parser.new{
|
25
|
+
map %r{foo}, :foo
|
26
|
+
map %r{bar\s*}, :bar
|
27
|
+
map %r{\s+}, :whitespace
|
28
|
+
}
|
29
|
+
parser.scan('foo bar ', receiver)
|
30
|
+
assert_equal [[:foo, ['foo']], [:whitespace, [' ']], [:bar, ['bar ']]], receiver.sequence
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_send_parenthesized_components_as_separate_parameters
|
34
|
+
receiver = Receiver.new
|
35
|
+
parser = HtmlBeautifier::Parser.new{
|
36
|
+
map %r{(foo)\((.*?)\)}, :foo
|
37
|
+
}
|
38
|
+
parser.scan('foo(bar)', receiver)
|
39
|
+
assert_equal [[:foo, ['foo', 'bar']]], receiver.sequence
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: erbeautifier
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ho-Sheng Hsiao
|
8
|
+
- Midwire
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2010-02-05 00:00:00 -06:00
|
14
|
+
default_executable: htmlbeautifier
|
15
|
+
dependencies: []
|
16
|
+
|
17
|
+
description: A normaliser/beautifier for HTML that also understands embedded Ruby. Ideal for tidying up Rails templates.
|
18
|
+
email: midwire@midwiretech.com
|
19
|
+
executables:
|
20
|
+
- htmlbeautifier
|
21
|
+
extensions: []
|
22
|
+
|
23
|
+
extra_rdoc_files:
|
24
|
+
- README.txt
|
25
|
+
files:
|
26
|
+
- .gitignore
|
27
|
+
- History.txt
|
28
|
+
- License.txt
|
29
|
+
- Manifest.txt
|
30
|
+
- README.txt
|
31
|
+
- Rakefile
|
32
|
+
- VERSION
|
33
|
+
- bin/htmlbeautifier
|
34
|
+
- config/hoe.rb
|
35
|
+
- config/requirements.rb
|
36
|
+
- erbeautifier.gemspec
|
37
|
+
- lib/htmlbeautifier.rb
|
38
|
+
- lib/htmlbeautifier/beautifier.rb
|
39
|
+
- lib/htmlbeautifier/parser.rb
|
40
|
+
- lib/htmlbeautifier/version.rb
|
41
|
+
- script/destroy
|
42
|
+
- script/generate
|
43
|
+
- setup.rb
|
44
|
+
- tasks/deployment.rake
|
45
|
+
- tasks/environment.rake
|
46
|
+
- tasks/website.rake
|
47
|
+
- test/html_beautifier_test_utilities.rb
|
48
|
+
- test/test_helper.rb
|
49
|
+
- test/test_html_beautifier_integration.rb
|
50
|
+
- test/test_html_beautifier_regression.rb
|
51
|
+
- test/test_parser.rb
|
52
|
+
has_rdoc: true
|
53
|
+
homepage: http://github.com/midwire/htmlbeautifier
|
54
|
+
licenses: []
|
55
|
+
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options:
|
58
|
+
- --charset=UTF-8
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: "0"
|
72
|
+
version:
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 1.3.5
|
77
|
+
signing_key:
|
78
|
+
specification_version: 3
|
79
|
+
summary: Beautifies your HTML erb templates. Midwire's fork of Ho-Sheng Hsiao's code. Bug fixes, etc.
|
80
|
+
test_files:
|
81
|
+
- test/html_beautifier_test_utilities.rb
|
82
|
+
- test/test_helper.rb
|
83
|
+
- test/test_html_beautifier_integration.rb
|
84
|
+
- test/test_html_beautifier_regression.rb
|
85
|
+
- test/test_parser.rb
|