htmlbeautifier 0.0.10 → 0.0.11
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f0dba839e3aa0da9272b5789530d578eb210cb4
|
4
|
+
data.tar.gz: 156a6912f4c8980d3ca06c5e43865c535af0238e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a322f76309db244d0eb0d5b4860b3a6681efd0f8c6219b039baeb1e756c78df756995d6975574a4db7b9a559ff92fa6f87c5dcc6fef59c1dfbdcc5cbc4a1321
|
7
|
+
data.tar.gz: 8fe4f9811c1789f532a27a73862e0ad6b9495a96172e14ddc87cab6dcb47de7c722bd2a0252e49ae2ef540233e4c0281cf052340927831cd0c1480289af74be2
|
data/bin/htmlbeautifier
CHANGED
@@ -1,23 +1,39 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'htmlbeautifier'
|
3
|
+
require 'optparse'
|
3
4
|
require 'fileutils'
|
4
5
|
|
5
|
-
def beautify(name, input, output)
|
6
|
-
HtmlBeautifier::Beautifier.new(output)
|
6
|
+
def beautify(name, input, output, options)
|
7
|
+
beautifier = HtmlBeautifier::Beautifier.new(output)
|
8
|
+
beautifier.tab_stops = options[:tab_stops]
|
9
|
+
beautifier.scan(input)
|
7
10
|
output << "\n"
|
8
11
|
rescue => e
|
9
12
|
raise "Error parsing #{name}: #{e}"
|
10
13
|
end
|
11
14
|
|
15
|
+
options = {:tab_stops => 2}
|
16
|
+
parser = OptionParser.new do |opts|
|
17
|
+
opts.banner = "Usage: #{__FILE__} [options] [file ...]"
|
18
|
+
opts.on("-t", "--tab-stops NUMBER", Integer, "Set number of tab stops") do |num|
|
19
|
+
options[:tab_stops] = num
|
20
|
+
end
|
21
|
+
opts.on("-h", "--help", "Display this help message and exit") do
|
22
|
+
puts opts
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
end
|
26
|
+
parser.parse!
|
27
|
+
|
12
28
|
if ARGV.any?
|
13
29
|
ARGV.each do |path|
|
14
30
|
input = File.read(path)
|
15
31
|
temppath = path + ".tmp"
|
16
32
|
File.open(temppath, "w") do |output|
|
17
|
-
beautify path, input, output
|
33
|
+
beautify path, input, output, options
|
18
34
|
end
|
19
35
|
FileUtils.mv temppath, path
|
20
36
|
end
|
21
37
|
else
|
22
|
-
beautify "standard input", $stdin.read, $stdout
|
38
|
+
beautify "standard input", $stdin.read, $stdout, options
|
23
39
|
end
|
@@ -14,7 +14,7 @@ module HtmlBeautifier
|
|
14
14
|
|
15
15
|
def initialize(output, tab_stops)
|
16
16
|
@level = 0
|
17
|
-
@new_line =
|
17
|
+
@new_line = false
|
18
18
|
@tab = ' ' * tab_stops
|
19
19
|
@output = output
|
20
20
|
@ie_cc_levels = []
|
@@ -30,15 +30,14 @@ module HtmlBeautifier
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def emit(s)
|
33
|
-
if
|
34
|
-
@output << (@tab * @level)
|
33
|
+
if @new_line && !@output.empty?
|
34
|
+
@output << ("\n" + @tab * @level)
|
35
35
|
end
|
36
36
|
@output << s
|
37
37
|
@new_line = false
|
38
38
|
end
|
39
39
|
|
40
|
-
def
|
41
|
-
emit "\n"
|
40
|
+
def new_line(*_args)
|
42
41
|
@new_line = true
|
43
42
|
end
|
44
43
|
|
@@ -59,10 +58,10 @@ module HtmlBeautifier
|
|
59
58
|
lines.pop while lines.last.strip.empty?
|
60
59
|
indentation = lines.first[/^ +/]
|
61
60
|
|
62
|
-
|
61
|
+
new_line
|
63
62
|
lines.each do |line|
|
64
63
|
emit line.rstrip.sub(/^#{indentation}/, '')
|
65
|
-
|
64
|
+
new_line
|
66
65
|
end
|
67
66
|
|
68
67
|
outdent
|
@@ -70,10 +69,28 @@ module HtmlBeautifier
|
|
70
69
|
emit closing
|
71
70
|
end
|
72
71
|
|
72
|
+
def preformatted_block(opening, content, closing)
|
73
|
+
emit opening
|
74
|
+
emit content
|
75
|
+
emit closing
|
76
|
+
end
|
77
|
+
|
73
78
|
def standalone_element(e)
|
74
79
|
emit e
|
75
80
|
end
|
76
81
|
|
82
|
+
def close_block_element(e)
|
83
|
+
outdent
|
84
|
+
emit e
|
85
|
+
new_line
|
86
|
+
end
|
87
|
+
|
88
|
+
def open_block_element(e)
|
89
|
+
new_line
|
90
|
+
emit e
|
91
|
+
indent
|
92
|
+
end
|
93
|
+
|
77
94
|
def close_element(e)
|
78
95
|
outdent
|
79
96
|
emit e
|
@@ -97,8 +114,8 @@ module HtmlBeautifier
|
|
97
114
|
end
|
98
115
|
|
99
116
|
def text(t)
|
100
|
-
emit
|
101
|
-
|
117
|
+
emit t.chomp
|
118
|
+
new_line if t.end_with? $/
|
102
119
|
end
|
103
120
|
end
|
104
121
|
end
|
@@ -7,6 +7,12 @@ module HtmlBeautifier
|
|
7
7
|
area | base | br | col | command | embed | hr | img | input | keygen |
|
8
8
|
link | meta | param | source | track | wbr
|
9
9
|
)}mix
|
10
|
+
HTML_BLOCK_ELEMENTS = %r{(?:
|
11
|
+
address | blockquote | center | dd | dir | div | dl | dt | fieldset |
|
12
|
+
form | h1 | h2 | h3 | h4 | h5 | h6 | hr | isindex | li | menu |
|
13
|
+
noframes | noscript | ol | p | pre | table | tbody | td | tfoot | th |
|
14
|
+
thead | tr | ul
|
15
|
+
)}mix
|
10
16
|
|
11
17
|
def initialize
|
12
18
|
super do |p|
|
@@ -20,20 +26,26 @@ module HtmlBeautifier
|
|
20
26
|
:standalone_element
|
21
27
|
p.map %r{<!.*?>}m,
|
22
28
|
:standalone_element
|
23
|
-
p.map %r{(<script#{ELEMENT_CONTENT}>)(.*?)(</script>)}
|
29
|
+
p.map %r{(<script#{ELEMENT_CONTENT}>)(.*?)(</script>)}mi,
|
24
30
|
:foreign_block
|
25
|
-
p.map %r{(<style#{ELEMENT_CONTENT}>)(.*?)(</style>)}
|
31
|
+
p.map %r{(<style#{ELEMENT_CONTENT}>)(.*?)(</style>)}mi,
|
26
32
|
:foreign_block
|
33
|
+
p.map %r{(<pre#{ELEMENT_CONTENT}>)(.*?)(</pre>)}mi,
|
34
|
+
:preformatted_block
|
27
35
|
p.map %r{<#{ELEMENT_CONTENT}/>}m,
|
28
36
|
:standalone_element
|
29
37
|
p.map %r{<#{HTML_VOID_ELEMENTS}(?: #{ELEMENT_CONTENT})?>}m,
|
30
38
|
:standalone_element
|
39
|
+
p.map %r{</#{HTML_BLOCK_ELEMENTS}>}m,
|
40
|
+
:close_block_element
|
41
|
+
p.map %r{<#{HTML_BLOCK_ELEMENTS}(?: #{ELEMENT_CONTENT})?>}m,
|
42
|
+
:open_block_element
|
31
43
|
p.map %r{</#{ELEMENT_CONTENT}>}m,
|
32
44
|
:close_element
|
33
45
|
p.map %r{<#{ELEMENT_CONTENT}>}m,
|
34
46
|
:open_element
|
35
|
-
p.map %r{\s
|
36
|
-
:
|
47
|
+
p.map %r{\s*\r?\n\s*}m,
|
48
|
+
:new_line
|
37
49
|
p.map %r{[^<]+},
|
38
50
|
:text
|
39
51
|
end
|
@@ -26,8 +26,7 @@ class TestHtmlBeautifierIntegration < Test::Unit::TestCase
|
|
26
26
|
Heading 1
|
27
27
|
</h1>
|
28
28
|
</div>
|
29
|
-
<div id="somethingElse">
|
30
|
-
<p>Lorem Ipsum</p>
|
29
|
+
<div id="somethingElse"><p>Lorem Ipsum</p>
|
31
30
|
<% if @x %>
|
32
31
|
<% @ys.each do |y| %>
|
33
32
|
<p>
|
@@ -44,12 +43,8 @@ class TestHtmlBeautifierIntegration < Test::Unit::TestCase
|
|
44
43
|
<col style="width: 50%;">
|
45
44
|
</colgroup>
|
46
45
|
<tbody>
|
47
|
-
<tr>
|
48
|
-
<td>
|
49
|
-
</tr>
|
50
|
-
<tr>
|
51
|
-
<td>Second column</td>
|
52
|
-
</tr>
|
46
|
+
<tr><td>First column</td></tr><tr>
|
47
|
+
<td>Second column</td></tr>
|
53
48
|
</tbody>
|
54
49
|
</table>
|
55
50
|
</body>
|
@@ -83,7 +83,6 @@ class HtmlBeautifierRegressionTest < Test::Unit::TestCase
|
|
83
83
|
assert_beautifies expected, source
|
84
84
|
end
|
85
85
|
|
86
|
-
|
87
86
|
def test_should_indent_styles
|
88
87
|
source = code(%q(
|
89
88
|
<style>
|
@@ -287,4 +286,39 @@ class HtmlBeautifierRegressionTest < Test::Unit::TestCase
|
|
287
286
|
))
|
288
287
|
assert_beautifies source, source
|
289
288
|
end
|
289
|
+
|
290
|
+
def test_should_not_modify_pre_content
|
291
|
+
source = code(%q(
|
292
|
+
<div>
|
293
|
+
<pre> Preformatted text
|
294
|
+
|
295
|
+
should <em>not be </em>
|
296
|
+
modified,
|
297
|
+
ever!
|
298
|
+
|
299
|
+
</pre>
|
300
|
+
</div>
|
301
|
+
))
|
302
|
+
assert_beautifies source, source
|
303
|
+
end
|
304
|
+
|
305
|
+
def test_should_add_newline_after_block_elements
|
306
|
+
source = code(%q(
|
307
|
+
<section><h1>Title</h1><p>Lorem <em>ipsum</em></p>
|
308
|
+
<ol>
|
309
|
+
<li>First</li><li>Second</li></ol>
|
310
|
+
</section>
|
311
|
+
))
|
312
|
+
expected = code(%(
|
313
|
+
<section>
|
314
|
+
<h1>Title</h1>
|
315
|
+
<p>Lorem <em>ipsum</em></p>
|
316
|
+
<ol>
|
317
|
+
<li>First</li>
|
318
|
+
<li>Second</li>
|
319
|
+
</ol>
|
320
|
+
</section>
|
321
|
+
))
|
322
|
+
assert_beautifies expected, source
|
323
|
+
end
|
290
324
|
end
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: htmlbeautifier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Battley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
description: A normaliser/beautifier for HTML that also understands embedded Ruby.
|