htmlmin 0.0.1 → 0.0.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.
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # Introduction
2
2
 
3
- HTMLMIN (HTML minimizer) is a HTML minimizer written in Ruby wich acts like a slot machine.
3
+ HTMLMin (HTML minimizer) is a HTML minimizer written in Ruby wich acts like a slot machine.
4
4
 
5
- This document describes installation, usage, available minifications and development roadmap of HTMLMIN.
5
+ This document describes installation, usage, available minifications and development roadmap of HTMLMin.
6
6
 
7
7
  Please report issues on [Github] (https://github.com/aishek/htmlmin/issues).
8
8
 
9
9
  For feedback, suggestions, etc. write to <aishek@gmail.com>.
10
10
 
11
- **Important**: this project is in beta and may contain bugs. Current version: 0.0.1
11
+ **Important**: this project is in beta and may contain bugs. Current version: 0.0.2
12
12
 
13
13
  # Installation
14
14
 
@@ -61,4 +61,4 @@ Idea & implementation&nbsp;— Alexandr Borisov (<aishek@gmail.com>)
61
61
 
62
62
  # Licence
63
63
 
64
- HTMLMIN is licensed under [MIT](https://github.com/afelix/csso/blob/master/MIT-LICENSE.txt)
64
+ HTMLMin is licensed under [MIT](https://github.com/afelix/csso/blob/master/MIT-LICENSE.txt)
@@ -14,6 +14,8 @@ module HTMLMin
14
14
  when '-'
15
15
  add_to_buffer char
16
16
  change_state_to :comment_start_end
17
+ when HTMLMin::Minifier::END_OF_FILE
18
+ flush_buffer
17
19
  else
18
20
  flush_buffer
19
21
  add_to_result char
@@ -22,21 +24,29 @@ module HTMLMin
22
24
  end
23
25
 
24
26
  def comment_start_end(char)
27
+ return if char == HTMLMin::Minifier::END_OF_FILE
28
+
25
29
  add_to_buffer char
26
30
  change_state_to :comment
27
31
  end
28
32
 
29
33
  def comment(char)
34
+ return if char == HTMLMin::Minifier::END_OF_FILE
35
+
30
36
  add_to_buffer char
31
37
  change_state_to :comment_end_1 if char == '-'
32
38
  end
33
39
 
34
40
  def comment_end_1(char)
41
+ return if char == HTMLMin::Minifier::END_OF_FILE
42
+
35
43
  add_to_buffer char
36
44
  change_state_to (char == '-' ? :comment_end_2 : :comment)
37
45
  end
38
46
 
39
47
  def comment_end_2(char)
48
+ return if char == HTMLMin::Minifier::END_OF_FILE
49
+
40
50
  if char == '>'
41
51
  clear_buffer
42
52
  change_state_to :start unless restore_state
@@ -28,6 +28,8 @@ module HTMLMin
28
28
  when "a".."z", "A".."Z"
29
29
  add_to_buffer char
30
30
  change_state_to :tag_begin
31
+ when HTMLMin::Minifier::END_OF_FILE
32
+ flush_buffer
31
33
  else
32
34
  flush_buffer
33
35
  add_to_result char
@@ -52,6 +54,8 @@ module HTMLMin
52
54
  when 'D'
53
55
  add_to_buffer char
54
56
  change_state_to :doctype_begin_1
57
+ when HTMLMin::Minifier::END_OF_FILE
58
+ flush_buffer
55
59
  else
56
60
  flush_buffer
57
61
  add_to_result char
@@ -68,8 +72,14 @@ module HTMLMin
68
72
  add_to_buffer char
69
73
  end
70
74
  when "<"
75
+ flush_buffer unless @settings[:minify_whitespaces]
76
+
77
+ unshift_spaces_from_buffer
71
78
  add_to_buffer char
72
79
  change_state_to :tag_or_tagend_or_comment_or_doctype_begin
80
+ when HTMLMin::Minifier::END_OF_FILE
81
+ unshift_spaces_from_buffer
82
+ flush_buffer
73
83
  else
74
84
  flush_buffer
75
85
  add_to_result char
@@ -84,6 +94,8 @@ module HTMLMin
84
94
  when "<"
85
95
  add_to_buffer char
86
96
  change_state_to :tag_or_tagend_or_comment_or_doctype_begin
97
+ when HTMLMin::Minifier::END_OF_FILE
98
+ flush_buffer
87
99
  else
88
100
  add_to_result char
89
101
  change_state_to :start
@@ -13,6 +13,8 @@ module HTMLMin
13
13
  change_state_to :doctype_begin_2
14
14
  when "\s", "\n", "\r", "\t", " "
15
15
  change_state_to_text_prespaced char
16
+ when HTMLMin::Minifier::END_OF_FILE
17
+ flush_buffer
16
18
  else
17
19
  flush_buffer
18
20
 
@@ -29,6 +31,8 @@ module HTMLMin
29
31
  when "\s", "\n", "\r", "\t", " "
30
32
  flush_buffer
31
33
  change_state_to_text_prespaced char
34
+ when HTMLMin::Minifier::END_OF_FILE
35
+ flush_buffer
32
36
  else
33
37
  flush_buffer
34
38
 
@@ -45,6 +49,8 @@ module HTMLMin
45
49
  when "\s", "\n", "\r", "\t", " "
46
50
  flush_buffer
47
51
  change_state_to_text_prespaced char
52
+ when HTMLMin::Minifier::END_OF_FILE
53
+ flush_buffer
48
54
  else
49
55
  flush_buffer
50
56
 
@@ -61,6 +67,8 @@ module HTMLMin
61
67
  when "\s", "\n", "\r", "\t", " "
62
68
  flush_buffer
63
69
  change_state_to_text_prespaced char
70
+ when HTMLMin::Minifier::END_OF_FILE
71
+ flush_buffer
64
72
  else
65
73
  flush_buffer
66
74
 
@@ -77,6 +85,8 @@ module HTMLMin
77
85
  when "\s", "\n", "\r", "\t", " "
78
86
  flush_buffer
79
87
  change_state_to_text_prespaced char
88
+ when HTMLMin::Minifier::END_OF_FILE
89
+ flush_buffer
80
90
  else
81
91
  flush_buffer
82
92
 
@@ -93,6 +103,8 @@ module HTMLMin
93
103
  when "\s", "\n", "\r", "\t", " "
94
104
  flush_buffer
95
105
  change_state_to_text_prespaced char
106
+ when HTMLMin::Minifier::END_OF_FILE
107
+ flush_buffer
96
108
  else
97
109
  flush_buffer
98
110
 
@@ -109,6 +121,8 @@ module HTMLMin
109
121
  when "\s", "\n", "\r", "\t"
110
122
  flush_buffer
111
123
  change_state_to_text_prespaced char
124
+ when HTMLMin::Minifier::END_OF_FILE
125
+ flush_buffer
112
126
  else
113
127
  flush_buffer
114
128
 
@@ -118,14 +132,20 @@ module HTMLMin
118
132
  end
119
133
 
120
134
  def doctype(char)
121
- add_to_buffer char
122
- if char == '>'
123
- unshift_spaces_from_buffer
124
- flush_buffer
135
+ case char
136
+ when '>'
137
+ add_to_buffer char
138
+
139
+ unshift_spaces_from_buffer
140
+ flush_buffer
125
141
 
126
- add_to_result "\n"
127
- change_state_to :start
128
- end
142
+ add_to_result "\n"
143
+ change_state_to :start
144
+ when HTMLMin::Minifier::END_OF_FILE
145
+ flush_buffer
146
+ else
147
+ add_to_buffer char
148
+ end
129
149
  end
130
150
 
131
151
  end
@@ -11,6 +11,8 @@ module HTMLMin
11
11
  when "a".."z", "A".."Z"
12
12
  add_to_buffer char
13
13
  change_state_to :tag_end_body
14
+ when HTMLMin::Minifier::END_OF_FILE
15
+ flush_buffer
14
16
  else
15
17
  flush_buffer
16
18
  change_state_to :start
@@ -28,6 +30,8 @@ module HTMLMin
28
30
  flush_buffer
29
31
 
30
32
  change_state_to :tag_ended
33
+ when HTMLMin::Minifier::END_OF_FILE
34
+ flush_buffer
31
35
  else
32
36
  flush_buffer
33
37
  change_state_to :start
@@ -35,12 +39,17 @@ module HTMLMin
35
39
  end
36
40
 
37
41
  def tag_begin(char)
38
- add_to_buffer char
39
42
  case char
40
43
  when "/"
44
+ add_to_buffer char
41
45
  change_state_to :tag_end_expected
42
46
  when ">"
47
+ add_to_buffer char
43
48
  change_state_to :tag_ended
49
+ when HTMLMin::Minifier::END_OF_FILE
50
+ flush_buffer
51
+ else
52
+ add_to_buffer char
44
53
  end
45
54
  end
46
55
 
@@ -49,6 +58,8 @@ module HTMLMin
49
58
  when '>'
50
59
  add_to_buffer char
51
60
  change_state_to :tag_ended
61
+ when HTMLMin::Minifier::END_OF_FILE
62
+ flush_buffer
52
63
  else
53
64
  flush_buffer
54
65
  change_state_to :start
@@ -58,7 +69,7 @@ module HTMLMin
58
69
  def tag_ended(char)
59
70
  case char
60
71
  when "\s", "\n", "\r", "\t", " "
61
- add_to_result char unless @settings[:minify_whitespaces]
72
+ add_to_buffer char unless @settings[:minify_whitespaces]
62
73
  when '<'
63
74
  save_state
64
75
 
@@ -67,6 +78,9 @@ module HTMLMin
67
78
 
68
79
  add_to_buffer char
69
80
  change_state_to :tag_or_tagend_or_comment_or_doctype_begin
81
+ when HTMLMin::Minifier::END_OF_FILE
82
+ unshift_spaces_from_buffer
83
+ flush_buffer
70
84
  else
71
85
  unshift_spaces_from_buffer
72
86
  flush_buffer
@@ -1,3 +1,3 @@
1
1
  module Htmlmin
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/htmlmin.rb CHANGED
@@ -9,6 +9,8 @@ module HTMLMin
9
9
  end
10
10
 
11
11
  class Minifier
12
+ END_OF_FILE = ''
13
+
12
14
  extend HTMLMin::Buffer
13
15
  extend HTMLMin::SlotMachines::Common
14
16
  extend HTMLMin::SlotMachines::Comment
@@ -25,6 +27,7 @@ module HTMLMin
25
27
  :debug => false
26
28
  }
27
29
 
30
+
28
31
  def minify(html, options = {})
29
32
  init_settings options
30
33
 
@@ -55,15 +58,15 @@ module HTMLMin
55
58
  char = input[pos]
56
59
 
57
60
  self.send @state, char
58
- debug_log if @settings[:debug]
61
+ debug_log(char) if @settings[:debug]
59
62
 
60
63
  pos += 1
61
64
  end
62
- self.send @state, ''
65
+ self.send @state, HTMLMin::Minifier::END_OF_FILE
63
66
  end
64
67
 
65
- def debug_log
66
- p "char: #{char}, state: #{@state.to_s}, buffer: #{@result_buffer.join('')}"
68
+ def debug_log(char)
69
+ p "char: #{char}, new state: #{@state.to_s}, buffer: '#{@result_buffer.join}', result: '#{@result}'"
67
70
  end
68
71
 
69
72
  def save_state
@@ -0,0 +1,3 @@
1
+ <!-- this comment should stay here -->
2
+ <!-- this should also -- because this is not comment
3
+ <!-- and no whitespaces! -->
@@ -0,0 +1,7 @@
1
+ <!-- tag start -->
2
+ <p>
3
+ <!-- text begin -->
4
+ Fix me
5
+ <!-- <p>Fix me</p> - it's a paragraph -->
6
+ </p>
7
+ <!-- tag end -->
@@ -0,0 +1,6 @@
1
+ {
2
+ :remove_comments => false,
3
+
4
+ :minify_whitespaces => true,
5
+ :debug => false
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ :remove_comments => true,
3
+
4
+ :minify_whitespaces => false,
5
+ :debug => false
6
+ }
@@ -0,0 +1 @@
1
+ <!-- this comment should stay here --><!-- this should also -- because this is not comment<!-- and no whitespaces! -->
@@ -0,0 +1,6 @@
1
+
2
+ <p>
3
+
4
+ Fix me
5
+
6
+ </p>
data/test/test_htmlmin.rb CHANGED
@@ -7,6 +7,7 @@ class HTMLMinTest < Test::Unit::TestCase
7
7
 
8
8
  INPUT_DIR = "test/input"
9
9
  OUTPUT_DIR = "test/output"
10
+ OPTIONS_DIR = "test/options"
10
11
  EXTENSION = "txt"
11
12
 
12
13
  def create_test_methods_from_data
@@ -22,7 +23,12 @@ class HTMLMinTest < Test::Unit::TestCase
22
23
  self.send :define_method, method_name do
23
24
  input = File.read "#{INPUT_DIR}/#{basename}.#{EXTENSION}"
24
25
  output = File.read "#{OUTPUT_DIR}/#{basename}.#{EXTENSION}"
25
- minified = HTMLMin.minify(input)
26
+
27
+ options = {}
28
+ options_filename = "#{OPTIONS_DIR}/#{basename}.rb"
29
+ options = eval File.read options_filename if File.exists? options_filename
30
+
31
+ minified = HTMLMin.minify(input, options)
26
32
 
27
33
  assert_equal output, minified, "Minified '#{basename}' not equals to output!"
28
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: htmlmin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-21 00:00:00.000000000Z
12
+ date: 2011-08-22 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: HTMLMin is a HTML-code minification tool implemented in Ruby. It works
15
15
  like a slot machine.
@@ -39,6 +39,8 @@ files:
39
39
  - test/input/comment_4.txt
40
40
  - test/input/comment_5.txt
41
41
  - test/input/comment_6.txt
42
+ - test/input/comment_7.txt
43
+ - test/input/comment_8.txt
42
44
  - test/input/doctype_1.txt
43
45
  - test/input/doctype_2.txt
44
46
  - test/input/tag_1.txt
@@ -46,6 +48,8 @@ files:
46
48
  - test/input/text_1.txt
47
49
  - test/input/text_2.txt
48
50
  - test/input/text_3.txt
51
+ - test/options/comment_7.rb
52
+ - test/options/comment_8.rb
49
53
  - test/output/cc_1.txt
50
54
  - test/output/comment_1.txt
51
55
  - test/output/comment_2.txt
@@ -53,6 +57,8 @@ files:
53
57
  - test/output/comment_4.txt
54
58
  - test/output/comment_5.txt
55
59
  - test/output/comment_6.txt
60
+ - test/output/comment_7.txt
61
+ - test/output/comment_8.txt
56
62
  - test/output/doctype_1.txt
57
63
  - test/output/doctype_2.txt
58
64
  - test/output/tag_1.txt
@@ -94,6 +100,8 @@ test_files:
94
100
  - test/input/comment_4.txt
95
101
  - test/input/comment_5.txt
96
102
  - test/input/comment_6.txt
103
+ - test/input/comment_7.txt
104
+ - test/input/comment_8.txt
97
105
  - test/input/doctype_1.txt
98
106
  - test/input/doctype_2.txt
99
107
  - test/input/tag_1.txt
@@ -101,6 +109,8 @@ test_files:
101
109
  - test/input/text_1.txt
102
110
  - test/input/text_2.txt
103
111
  - test/input/text_3.txt
112
+ - test/options/comment_7.rb
113
+ - test/options/comment_8.rb
104
114
  - test/output/cc_1.txt
105
115
  - test/output/comment_1.txt
106
116
  - test/output/comment_2.txt
@@ -108,6 +118,8 @@ test_files:
108
118
  - test/output/comment_4.txt
109
119
  - test/output/comment_5.txt
110
120
  - test/output/comment_6.txt
121
+ - test/output/comment_7.txt
122
+ - test/output/comment_8.txt
111
123
  - test/output/doctype_1.txt
112
124
  - test/output/doctype_2.txt
113
125
  - test/output/tag_1.txt