csspool 3.0.0 → 3.0.1
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/CHANGELOG.rdoc +14 -0
- data/README.rdoc +1 -1
- data/Rakefile +6 -5
- data/lib/csspool.rb +1 -1
- data/lib/csspool/css/parser.rb +231 -196
- data/lib/csspool/css/parser.y +8 -3
- data/lib/csspool/node.rb +10 -2
- data/lib/csspool/visitors/to_css.rb +29 -5
- data/test/test_parser.rb +20 -0
- data/test/visitors/test_to_css.rb +29 -0
- metadata +49 -16
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
== 3.0.1
|
2
|
+
|
3
|
+
* New Features
|
4
|
+
|
5
|
+
* 'Minified' CSS output: passing :minify => true to a to_css call will omit
|
6
|
+
line breaks
|
7
|
+
* Added Gemfile
|
8
|
+
|
9
|
+
* Bugfixes
|
10
|
+
|
11
|
+
* Parse properties without semi-colons at the end of a declaration.
|
12
|
+
[stereobooster]
|
13
|
+
* Handle whitespaces after properties [stereobooster]
|
14
|
+
|
1
15
|
== 3.0.0
|
2
16
|
|
3
17
|
* New Features
|
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
@@ -7,6 +7,8 @@ GENERATED_TOKENIZER = "lib/csspool/css/tokenizer.rb"
|
|
7
7
|
GENERATED_PARSER = "lib/csspool/css/parser.rb"
|
8
8
|
|
9
9
|
Hoe.plugin :git
|
10
|
+
Hoe.plugin :bundler
|
11
|
+
Hoe.plugin :gemspec
|
10
12
|
|
11
13
|
Hoe.spec('csspool') do
|
12
14
|
developer('Aaron Patterson', 'aaronp@rubyforge.org')
|
@@ -15,12 +17,12 @@ Hoe.spec('csspool') do
|
|
15
17
|
self.history_file = 'CHANGELOG.rdoc'
|
16
18
|
self.extra_rdoc_files = FileList['*.rdoc']
|
17
19
|
|
18
|
-
%w{
|
20
|
+
%w{racc rexical hoe-git hoe-gemspec hoe-bundler}.each do |dep|
|
19
21
|
self.extra_dev_deps << [dep, '>= 0']
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
|
-
[:test, :check_manifest].each do |task_name|
|
25
|
+
[:test, :check_manifest, "gem:spec"].each do |task_name|
|
24
26
|
Rake::Task[task_name].prerequisites << :compile
|
25
27
|
end
|
26
28
|
|
@@ -28,7 +30,7 @@ task :compile => [GENERATED_TOKENIZER, GENERATED_PARSER]
|
|
28
30
|
|
29
31
|
file GENERATED_TOKENIZER => "lib/csspool/css/tokenizer.rex" do |t|
|
30
32
|
begin
|
31
|
-
sh "rex -i --independent -o #{t.name} #{t.prerequisites.first}"
|
33
|
+
sh "bundle exec rex -i --independent -o #{t.name} #{t.prerequisites.first}"
|
32
34
|
rescue
|
33
35
|
abort "need rexical, sudo gem install rexical"
|
34
36
|
end
|
@@ -36,8 +38,7 @@ end
|
|
36
38
|
|
37
39
|
file GENERATED_PARSER => "lib/csspool/css/parser.y" do |t|
|
38
40
|
begin
|
39
|
-
racc =
|
40
|
-
racc = "#{::Config::CONFIG['bindir']}/racc" if racc.empty?
|
41
|
+
racc = 'bundle exec racc'
|
41
42
|
#sh "#{racc} -l -o #{t.name} #{t.prerequisites.first}"
|
42
43
|
sh "#{racc} -o #{t.name} #{t.prerequisites.first}"
|
43
44
|
rescue
|
data/lib/csspool.rb
CHANGED
data/lib/csspool/css/parser.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.4.
|
3
|
+
# This file is automatically generated by Racc 1.4.8
|
4
4
|
# from Racc grammer file "".
|
5
5
|
#
|
6
6
|
|
@@ -9,7 +9,7 @@ module CSSPool
|
|
9
9
|
module CSS
|
10
10
|
class Parser < Racc::Parser
|
11
11
|
|
12
|
-
module_eval(<<'...end parser.y/module_eval...', 'parser.y',
|
12
|
+
module_eval(<<'...end parser.y/module_eval...', 'parser.y', 317)
|
13
13
|
|
14
14
|
def numeric thing
|
15
15
|
thing = thing.gsub(/[^\d.]/, '')
|
@@ -50,122 +50,138 @@ end
|
|
50
50
|
##### State transition tables begin ###
|
51
51
|
|
52
52
|
racc_action_table = [
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
nil, nil, nil,
|
75
|
-
|
76
|
-
|
77
|
-
nil,
|
78
|
-
|
79
|
-
|
53
|
+
8, 9, 63, 48, 21, 15, 53, 45, 3, 22,
|
54
|
+
27, 29, 8, 9, 75, 64, 21, 15, 48, 54,
|
55
|
+
55, 22, 27, 29, 36, 84, 8, 9, 70, 83,
|
56
|
+
21, 15, 13, 28, 30, 22, 27, 29, 85, 27,
|
57
|
+
29, 82, 21, 74, 13, 28, 30, 22, 27, 29,
|
58
|
+
21, 15, 37, 70, 71, 22, 27, 29, 13, 28,
|
59
|
+
30, 21, 28, 30, 112, 73, 22, 27, 29, 21,
|
60
|
+
15, 28, 30, 72, 22, 27, 29, 21, 15, 28,
|
61
|
+
30, 69, 22, 27, 29, 27, 29, 21, 15, 119,
|
62
|
+
28, 30, 22, 27, 29, 121, 65, 13, 28, 30,
|
63
|
+
27, 29, 67, 42, 68, 13, 28, 30, 28, 30,
|
64
|
+
99, 42, 111, 62, 43, 13, 28, 30, 97, 27,
|
65
|
+
29, 27, 29, 28, 30, 96, 118, 110, 117, 101,
|
66
|
+
109, 103, 102, 104, 105, 106, 107, 108, 98, 99,
|
67
|
+
128, 111, 28, 30, 28, 30, 129, 97, 81, 78,
|
68
|
+
79, 80, 130, 115, 96, 116, 110, 131, 101, 109,
|
69
|
+
103, 102, 104, 105, 106, 107, 108, 98, 99, 132,
|
70
|
+
111, 136, 114, 61, 113, 51, 97, 50, 137, 138,
|
71
|
+
139, 140, 141, 96, 142, 110, 121, 101, 109, 103,
|
72
|
+
102, 104, 105, 106, 107, 108, 98, 99, 34, 111,
|
73
|
+
145, 123, 121, 31, 121, 97, nil, nil, 125, nil,
|
74
|
+
nil, nil, 96, nil, 110, 124, 101, 109, 103, 102,
|
75
|
+
104, 105, 106, 107, 108, 98, 99, nil, 111, nil,
|
76
|
+
nil, nil, nil, nil, 97, nil, nil, nil, nil, nil,
|
77
|
+
nil, 96, nil, 110, nil, 101, 109, 103, 102, 104,
|
78
|
+
105, 106, 107, 108, 98, 99, nil, 111, 88, nil,
|
79
|
+
nil, nil, nil, 97, nil, nil, nil, nil, nil, nil,
|
80
|
+
96, nil, 110, nil, 101, 109, 103, 102, 104, 105,
|
81
|
+
106, 107, 108, 98, 99, nil, 111, nil, nil, nil,
|
82
|
+
nil, nil, 97, nil, nil, nil, nil, nil, nil, 96,
|
83
|
+
nil, 110, nil, 101, 109, 103, 102, 104, 105, 106,
|
84
|
+
107, 108, 98, 110, nil, 101, 109, 103, 102, 104,
|
85
|
+
105, 106, 107, 108 ]
|
80
86
|
|
81
87
|
racc_action_check = [
|
82
|
-
|
83
|
-
2, 2,
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
112,
|
100
|
-
|
101
|
-
112, 112, 112, 112, 112, 112, 112,
|
102
|
-
|
103
|
-
nil, nil,
|
104
|
-
|
105
|
-
|
106
|
-
nil,
|
107
|
-
|
108
|
-
|
88
|
+
6, 6, 30, 14, 6, 6, 18, 14, 1, 6,
|
89
|
+
6, 6, 2, 2, 47, 30, 2, 2, 73, 18,
|
90
|
+
18, 2, 2, 2, 9, 66, 5, 5, 66, 64,
|
91
|
+
5, 5, 6, 6, 6, 5, 5, 5, 70, 23,
|
92
|
+
23, 64, 52, 47, 2, 2, 2, 52, 52, 52,
|
93
|
+
15, 15, 9, 41, 41, 15, 15, 15, 5, 5,
|
94
|
+
5, 51, 23, 23, 75, 46, 51, 51, 51, 12,
|
95
|
+
12, 52, 52, 44, 12, 12, 12, 10, 10, 15,
|
96
|
+
15, 40, 10, 10, 10, 25, 25, 11, 11, 83,
|
97
|
+
51, 51, 11, 11, 11, 87, 34, 12, 12, 12,
|
98
|
+
26, 26, 35, 35, 35, 10, 10, 10, 25, 25,
|
99
|
+
126, 13, 126, 29, 13, 11, 11, 11, 126, 19,
|
100
|
+
19, 24, 24, 26, 26, 126, 80, 126, 80, 126,
|
101
|
+
126, 126, 126, 126, 126, 126, 126, 126, 126, 136,
|
102
|
+
90, 136, 19, 19, 24, 24, 92, 136, 62, 62,
|
103
|
+
62, 62, 93, 79, 136, 79, 136, 94, 136, 136,
|
104
|
+
136, 136, 136, 136, 136, 136, 136, 136, 112, 95,
|
105
|
+
112, 112, 78, 28, 78, 17, 112, 16, 113, 114,
|
106
|
+
115, 116, 117, 112, 118, 112, 122, 112, 112, 112,
|
107
|
+
112, 112, 112, 112, 112, 112, 112, 89, 8, 89,
|
108
|
+
133, 89, 135, 3, 147, 89, nil, nil, 89, nil,
|
109
|
+
nil, nil, 89, nil, 89, 89, 89, 89, 89, 89,
|
110
|
+
89, 89, 89, 89, 89, 89, 88, nil, 88, nil,
|
111
|
+
nil, nil, nil, nil, 88, nil, nil, nil, nil, nil,
|
112
|
+
nil, 88, nil, 88, nil, 88, 88, 88, 88, 88,
|
113
|
+
88, 88, 88, 88, 88, 74, nil, 74, 74, nil,
|
114
|
+
nil, nil, nil, 74, nil, nil, nil, nil, nil, nil,
|
115
|
+
74, nil, 74, nil, 74, 74, 74, 74, 74, 74,
|
116
|
+
74, 74, 74, 74, 96, nil, 96, nil, nil, nil,
|
117
|
+
nil, nil, 96, nil, nil, nil, nil, nil, nil, 96,
|
118
|
+
nil, 96, nil, 96, 96, 96, 96, 96, 96, 96,
|
119
|
+
96, 96, 96, 100, nil, 100, 100, 100, 100, 100,
|
120
|
+
100, 100, 100, 100 ]
|
109
121
|
|
110
122
|
racc_action_pointer = [
|
111
|
-
nil,
|
112
|
-
|
113
|
-
|
114
|
-
nil, nil, nil,
|
115
|
-
|
116
|
-
nil,
|
117
|
-
nil, nil, nil,
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
nil, nil,
|
124
|
-
nil, nil, nil, nil,
|
125
|
-
nil, nil, nil ]
|
123
|
+
nil, 8, 10, 203, nil, 24, -2, nil, 194, 20,
|
124
|
+
71, 81, 63, 105, -3, 44, 168, 167, -1, 107,
|
125
|
+
nil, nil, nil, 27, 109, 73, 88, nil, 167, 107,
|
126
|
+
-4, nil, nil, nil, 91, 97, nil, nil, nil, nil,
|
127
|
+
71, 45, nil, nil, 63, nil, 60, 7, nil, nil,
|
128
|
+
nil, 55, 36, nil, nil, nil, nil, nil, nil, nil,
|
129
|
+
nil, nil, 134, nil, 23, nil, 20, nil, nil, nil,
|
130
|
+
32, nil, nil, 12, 251, 28, nil, nil, 168, 149,
|
131
|
+
122, nil, nil, 71, nil, nil, nil, 62, 222, 193,
|
132
|
+
133, nil, 139, 145, 150, 162, 280, nil, nil, nil,
|
133
|
+
292, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
134
|
+
nil, nil, 164, 164, 165, 166, 167, 168, 170, nil,
|
135
|
+
nil, nil, 153, nil, nil, nil, 106, nil, nil, nil,
|
136
|
+
nil, nil, nil, 182, nil, 169, 135, nil, nil, nil,
|
137
|
+
nil, nil, nil, nil, nil, nil, nil, 171, nil ]
|
126
138
|
|
127
139
|
racc_action_default = [
|
128
|
-
-1,
|
129
|
-
-
|
130
|
-
-
|
131
|
-
|
132
|
-
|
133
|
-
-
|
134
|
-
-
|
135
|
-
|
136
|
-
|
137
|
-
-
|
138
|
-
|
139
|
-
-99,
|
140
|
-
-
|
141
|
-
-
|
142
|
-
-
|
140
|
+
-1, -102, -102, -102, -2, -5, -6, -7, -102, -102,
|
141
|
+
-18, -19, -102, -102, -102, -102, -102, -28, -30, -35,
|
142
|
+
-36, -37, -38, -39, -40, -41, -42, -47, -102, -102,
|
143
|
+
-102, 149, -3, -4, -102, -102, -12, -13, -16, -17,
|
144
|
+
-102, -102, -15, -22, -102, -24, -61, -102, -68, -25,
|
145
|
+
-26, -102, -102, -31, -32, -33, -34, -43, -44, -45,
|
146
|
+
-46, -48, -102, -56, -102, -8, -102, -10, -11, -20,
|
147
|
+
-102, -21, -23, -60, -102, -102, -27, -29, -102, -102,
|
148
|
+
-102, -55, -57, -102, -9, -14, -59, -67, -102, -74,
|
149
|
+
-75, -76, -77, -78, -79, -80, -102, -84, -86, -88,
|
150
|
+
-102, -90, -91, -92, -93, -94, -95, -96, -97, -98,
|
151
|
+
-99, -101, -102, -102, -102, -102, -102, -102, -102, -58,
|
152
|
+
-62, -66, -67, -69, -70, -71, -102, -73, -100, -87,
|
153
|
+
-85, -83, -81, -102, -89, -67, -102, -49, -50, -51,
|
154
|
+
-52, -53, -54, -63, -72, -82, -64, -67, -65 ]
|
143
155
|
|
144
156
|
racc_goto_table = [
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
nil, nil, nil, nil, nil, nil, nil,
|
157
|
+
87, 120, 41, 56, 44, 76, 49, 57, 58, 59,
|
158
|
+
60, 77, 52, 4, 122, 127, 32, 33, 38, 39,
|
159
|
+
40, 35, 133, 2, 66, 1, 126, 134, nil, nil,
|
160
|
+
nil, nil, nil, nil, nil, nil, 143, nil, 135, nil,
|
161
|
+
nil, nil, nil, nil, nil, nil, nil, nil, nil, 146,
|
162
|
+
nil, nil, 144, nil, nil, nil, nil, nil, nil, nil,
|
163
|
+
nil, 148, 147, 86 ]
|
150
164
|
|
151
165
|
racc_goto_check = [
|
152
|
-
26,
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
nil, nil, nil, nil, nil, nil, nil,
|
166
|
+
26, 27, 8, 19, 13, 14, 12, 19, 19, 19,
|
167
|
+
19, 15, 17, 2, 26, 26, 2, 2, 6, 6,
|
168
|
+
6, 7, 26, 3, 8, 1, 28, 31, nil, nil,
|
169
|
+
nil, nil, nil, nil, nil, nil, 27, nil, 26, nil,
|
170
|
+
nil, nil, nil, nil, nil, nil, nil, nil, nil, 27,
|
171
|
+
nil, nil, 26, nil, nil, nil, nil, nil, nil, nil,
|
172
|
+
nil, 27, 26, 13 ]
|
157
173
|
|
158
174
|
racc_goto_pointer = [
|
159
|
-
nil,
|
160
|
-
nil, nil,
|
161
|
-
nil, nil, nil, nil, nil, nil, -
|
162
|
-
nil, -
|
175
|
+
nil, 25, 11, 23, nil, nil, 8, 12, -11, nil,
|
176
|
+
nil, nil, -9, -10, -46, -41, nil, -6, nil, -16,
|
177
|
+
nil, nil, nil, nil, nil, nil, -74, -86, -63, nil,
|
178
|
+
nil, -73, nil, nil, nil, nil, nil ]
|
163
179
|
|
164
180
|
racc_goto_default = [
|
165
|
-
nil, nil, nil, nil,
|
166
|
-
|
167
|
-
|
168
|
-
|
181
|
+
nil, nil, nil, nil, 5, 6, 7, nil, nil, 10,
|
182
|
+
11, 12, 14, nil, 16, 17, 18, nil, 19, 20,
|
183
|
+
23, 24, 25, 26, 46, 47, nil, nil, nil, 89,
|
184
|
+
90, 91, 92, 93, 94, 95, 100 ]
|
169
185
|
|
170
186
|
racc_reduce_table = [
|
171
187
|
0, 0, :racc_error,
|
@@ -227,50 +243,53 @@ racc_reduce_table = [
|
|
227
243
|
2, 60, :_reduce_56,
|
228
244
|
3, 60, :_reduce_57,
|
229
245
|
4, 60, :_reduce_58,
|
246
|
+
3, 50, :_reduce_none,
|
230
247
|
2, 50, :_reduce_none,
|
231
248
|
1, 50, :_reduce_none,
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
1,
|
249
|
+
4, 61, :_reduce_62,
|
250
|
+
5, 61, :_reduce_63,
|
251
|
+
5, 61, :_reduce_64,
|
252
|
+
6, 61, :_reduce_65,
|
253
|
+
1, 64, :_reduce_66,
|
254
|
+
0, 64, :_reduce_67,
|
255
|
+
1, 62, :_reduce_68,
|
237
256
|
1, 65, :_reduce_none,
|
238
257
|
1, 65, :_reduce_none,
|
239
258
|
1, 65, :_reduce_none,
|
240
|
-
3, 63, :
|
241
|
-
2, 63, :
|
242
|
-
1, 63, :
|
259
|
+
3, 63, :_reduce_72,
|
260
|
+
2, 63, :_reduce_73,
|
261
|
+
1, 63, :_reduce_74,
|
243
262
|
1, 66, :_reduce_none,
|
244
263
|
1, 66, :_reduce_none,
|
245
264
|
1, 66, :_reduce_none,
|
246
265
|
1, 66, :_reduce_none,
|
247
266
|
1, 66, :_reduce_none,
|
248
267
|
1, 66, :_reduce_none,
|
249
|
-
2, 72, :
|
250
|
-
3, 72, :
|
251
|
-
2, 71, :
|
252
|
-
1, 71, :
|
253
|
-
2, 70, :
|
254
|
-
1, 70, :
|
255
|
-
2, 69, :
|
256
|
-
1, 69, :
|
257
|
-
2, 68, :
|
258
|
-
1, 68, :_reduce_87,
|
259
|
-
1, 68, :_reduce_88,
|
260
|
-
1, 68, :_reduce_89,
|
268
|
+
2, 72, :_reduce_81,
|
269
|
+
3, 72, :_reduce_82,
|
270
|
+
2, 71, :_reduce_83,
|
271
|
+
1, 71, :_reduce_84,
|
272
|
+
2, 70, :_reduce_85,
|
273
|
+
1, 70, :_reduce_86,
|
274
|
+
2, 69, :_reduce_87,
|
275
|
+
1, 69, :_reduce_88,
|
276
|
+
2, 68, :_reduce_89,
|
261
277
|
1, 68, :_reduce_90,
|
262
278
|
1, 68, :_reduce_91,
|
263
279
|
1, 68, :_reduce_92,
|
264
280
|
1, 68, :_reduce_93,
|
265
281
|
1, 68, :_reduce_94,
|
266
|
-
1,
|
267
|
-
1,
|
268
|
-
|
269
|
-
1,
|
282
|
+
1, 68, :_reduce_95,
|
283
|
+
1, 68, :_reduce_96,
|
284
|
+
1, 68, :_reduce_97,
|
285
|
+
1, 73, :_reduce_98,
|
286
|
+
1, 73, :_reduce_99,
|
287
|
+
2, 67, :_reduce_100,
|
288
|
+
1, 67, :_reduce_101 ]
|
270
289
|
|
271
|
-
racc_reduce_n =
|
290
|
+
racc_reduce_n = 102
|
272
291
|
|
273
|
-
racc_shift_n =
|
292
|
+
racc_shift_n = 149
|
274
293
|
|
275
294
|
racc_token_table = {
|
276
295
|
false => 0,
|
@@ -838,49 +857,65 @@ module_eval(<<'.,.,', 'parser.y', 201)
|
|
838
857
|
|
839
858
|
# reduce 60 omitted
|
840
859
|
|
841
|
-
|
842
|
-
|
860
|
+
# reduce 61 omitted
|
861
|
+
|
862
|
+
module_eval(<<'.,.,', 'parser.y', 214)
|
863
|
+
def _reduce_62(val, _values, result)
|
843
864
|
@handler.property val.first, val[2], val[3]
|
844
865
|
result
|
845
866
|
end
|
846
867
|
.,.,
|
847
868
|
|
848
|
-
module_eval(<<'.,.,', 'parser.y',
|
849
|
-
def
|
869
|
+
module_eval(<<'.,.,', 'parser.y', 216)
|
870
|
+
def _reduce_63(val, _values, result)
|
850
871
|
@handler.property val.first, val[3], val[4]
|
851
872
|
result
|
852
873
|
end
|
853
874
|
.,.,
|
854
875
|
|
855
876
|
module_eval(<<'.,.,', 'parser.y', 218)
|
856
|
-
def
|
877
|
+
def _reduce_64(val, _values, result)
|
878
|
+
@handler.property val.first, val[3], val[4]
|
879
|
+
result
|
880
|
+
end
|
881
|
+
.,.,
|
882
|
+
|
883
|
+
module_eval(<<'.,.,', 'parser.y', 220)
|
884
|
+
def _reduce_65(val, _values, result)
|
885
|
+
@handler.property val.first, val[4], val[5]
|
886
|
+
result
|
887
|
+
end
|
888
|
+
.,.,
|
889
|
+
|
890
|
+
module_eval(<<'.,.,', 'parser.y', 223)
|
891
|
+
def _reduce_66(val, _values, result)
|
857
892
|
result = true
|
858
893
|
result
|
859
894
|
end
|
860
895
|
.,.,
|
861
896
|
|
862
|
-
module_eval(<<'.,.,', 'parser.y',
|
863
|
-
def
|
897
|
+
module_eval(<<'.,.,', 'parser.y', 224)
|
898
|
+
def _reduce_67(val, _values, result)
|
864
899
|
result = false
|
865
900
|
result
|
866
901
|
end
|
867
902
|
.,.,
|
868
903
|
|
869
|
-
module_eval(<<'.,.,', 'parser.y',
|
870
|
-
def
|
904
|
+
module_eval(<<'.,.,', 'parser.y', 227)
|
905
|
+
def _reduce_68(val, _values, result)
|
871
906
|
result = interpret_identifier val[0]
|
872
907
|
result
|
873
908
|
end
|
874
909
|
.,.,
|
875
910
|
|
876
|
-
# reduce
|
911
|
+
# reduce 69 omitted
|
877
912
|
|
878
|
-
# reduce
|
913
|
+
# reduce 70 omitted
|
879
914
|
|
880
|
-
# reduce
|
915
|
+
# reduce 71 omitted
|
881
916
|
|
882
|
-
module_eval(<<'.,.,', 'parser.y',
|
883
|
-
def
|
917
|
+
module_eval(<<'.,.,', 'parser.y', 236)
|
918
|
+
def _reduce_72(val, _values, result)
|
884
919
|
result = [val.first, val.last].flatten
|
885
920
|
val.last.first.operator = val[1]
|
886
921
|
|
@@ -888,41 +923,41 @@ module_eval(<<'.,.,', 'parser.y', 231)
|
|
888
923
|
end
|
889
924
|
.,.,
|
890
925
|
|
891
|
-
module_eval(<<'.,.,', 'parser.y',
|
892
|
-
def
|
926
|
+
module_eval(<<'.,.,', 'parser.y', 239)
|
927
|
+
def _reduce_73(val, _values, result)
|
893
928
|
result = val.flatten
|
894
929
|
result
|
895
930
|
end
|
896
931
|
.,.,
|
897
932
|
|
898
|
-
module_eval(<<'.,.,', 'parser.y',
|
899
|
-
def
|
933
|
+
module_eval(<<'.,.,', 'parser.y', 240)
|
934
|
+
def _reduce_74(val, _values, result)
|
900
935
|
result = val
|
901
936
|
result
|
902
937
|
end
|
903
938
|
.,.,
|
904
939
|
|
905
|
-
# reduce 72 omitted
|
906
|
-
|
907
|
-
# reduce 73 omitted
|
908
|
-
|
909
|
-
# reduce 74 omitted
|
910
|
-
|
911
940
|
# reduce 75 omitted
|
912
941
|
|
913
942
|
# reduce 76 omitted
|
914
943
|
|
915
944
|
# reduce 77 omitted
|
916
945
|
|
917
|
-
|
918
|
-
|
946
|
+
# reduce 78 omitted
|
947
|
+
|
948
|
+
# reduce 79 omitted
|
949
|
+
|
950
|
+
# reduce 80 omitted
|
951
|
+
|
952
|
+
module_eval(<<'.,.,', 'parser.y', 251)
|
953
|
+
def _reduce_81(val, _values, result)
|
919
954
|
result = val.first
|
920
955
|
result
|
921
956
|
end
|
922
957
|
.,.,
|
923
958
|
|
924
|
-
module_eval(<<'.,.,', 'parser.y',
|
925
|
-
def
|
959
|
+
module_eval(<<'.,.,', 'parser.y', 253)
|
960
|
+
def _reduce_82(val, _values, result)
|
926
961
|
name = interpret_identifier val.first.sub(/\($/, '')
|
927
962
|
if name == 'rgb'
|
928
963
|
result = Terms::Rgb.new(*val[1])
|
@@ -934,50 +969,50 @@ module_eval(<<'.,.,', 'parser.y', 248)
|
|
934
969
|
end
|
935
970
|
.,.,
|
936
971
|
|
937
|
-
module_eval(<<'.,.,', 'parser.y',
|
938
|
-
def
|
972
|
+
module_eval(<<'.,.,', 'parser.y', 262)
|
973
|
+
def _reduce_83(val, _values, result)
|
939
974
|
result = val.first
|
940
975
|
result
|
941
976
|
end
|
942
977
|
.,.,
|
943
978
|
|
944
|
-
module_eval(<<'.,.,', 'parser.y',
|
945
|
-
def
|
979
|
+
module_eval(<<'.,.,', 'parser.y', 263)
|
980
|
+
def _reduce_84(val, _values, result)
|
946
981
|
result = Terms::Hash.new val.first.sub(/^#/, '')
|
947
982
|
result
|
948
983
|
end
|
949
984
|
.,.,
|
950
985
|
|
951
|
-
module_eval(<<'.,.,', 'parser.y',
|
952
|
-
def
|
986
|
+
module_eval(<<'.,.,', 'parser.y', 266)
|
987
|
+
def _reduce_85(val, _values, result)
|
953
988
|
result = val.first
|
954
989
|
result
|
955
990
|
end
|
956
991
|
.,.,
|
957
992
|
|
958
|
-
module_eval(<<'.,.,', 'parser.y',
|
959
|
-
def
|
993
|
+
module_eval(<<'.,.,', 'parser.y', 267)
|
994
|
+
def _reduce_86(val, _values, result)
|
960
995
|
result = Terms::URI.new interpret_uri val.first
|
961
996
|
result
|
962
997
|
end
|
963
998
|
.,.,
|
964
999
|
|
965
|
-
module_eval(<<'.,.,', 'parser.y',
|
966
|
-
def
|
1000
|
+
module_eval(<<'.,.,', 'parser.y', 269)
|
1001
|
+
def _reduce_87(val, _values, result)
|
967
1002
|
result = val.first
|
968
1003
|
result
|
969
1004
|
end
|
970
1005
|
.,.,
|
971
1006
|
|
972
|
-
module_eval(<<'.,.,', 'parser.y',
|
973
|
-
def
|
1007
|
+
module_eval(<<'.,.,', 'parser.y', 270)
|
1008
|
+
def _reduce_88(val, _values, result)
|
974
1009
|
result = Terms::String.new interpret_string val.first
|
975
1010
|
result
|
976
1011
|
end
|
977
1012
|
.,.,
|
978
1013
|
|
979
|
-
module_eval(<<'.,.,', 'parser.y',
|
980
|
-
def
|
1014
|
+
module_eval(<<'.,.,', 'parser.y', 274)
|
1015
|
+
def _reduce_89(val, _values, result)
|
981
1016
|
result = val[1]
|
982
1017
|
val[1].unary_operator = val.first
|
983
1018
|
|
@@ -985,24 +1020,24 @@ module_eval(<<'.,.,', 'parser.y', 269)
|
|
985
1020
|
end
|
986
1021
|
.,.,
|
987
1022
|
|
988
|
-
module_eval(<<'.,.,', 'parser.y',
|
989
|
-
def
|
1023
|
+
module_eval(<<'.,.,', 'parser.y', 278)
|
1024
|
+
def _reduce_90(val, _values, result)
|
990
1025
|
result = Terms::Number.new numeric val.first
|
991
1026
|
|
992
1027
|
result
|
993
1028
|
end
|
994
1029
|
.,.,
|
995
1030
|
|
996
|
-
module_eval(<<'.,.,', 'parser.y',
|
997
|
-
def
|
1031
|
+
module_eval(<<'.,.,', 'parser.y', 281)
|
1032
|
+
def _reduce_91(val, _values, result)
|
998
1033
|
result = Terms::Number.new numeric(val.first), nil, '%'
|
999
1034
|
|
1000
1035
|
result
|
1001
1036
|
end
|
1002
1037
|
.,.,
|
1003
1038
|
|
1004
|
-
module_eval(<<'.,.,', 'parser.y',
|
1005
|
-
def
|
1039
|
+
module_eval(<<'.,.,', 'parser.y', 284)
|
1040
|
+
def _reduce_92(val, _values, result)
|
1006
1041
|
unit = val.first.gsub(/[\s\d.]/, '')
|
1007
1042
|
result = Terms::Number.new numeric(val.first), nil, unit
|
1008
1043
|
|
@@ -1010,24 +1045,24 @@ module_eval(<<'.,.,', 'parser.y', 279)
|
|
1010
1045
|
end
|
1011
1046
|
.,.,
|
1012
1047
|
|
1013
|
-
module_eval(<<'.,.,', 'parser.y',
|
1014
|
-
def
|
1048
|
+
module_eval(<<'.,.,', 'parser.y', 288)
|
1049
|
+
def _reduce_93(val, _values, result)
|
1015
1050
|
result = Terms::Number.new numeric(val.first), nil, 'em'
|
1016
1051
|
|
1017
1052
|
result
|
1018
1053
|
end
|
1019
1054
|
.,.,
|
1020
1055
|
|
1021
|
-
module_eval(<<'.,.,', 'parser.y',
|
1022
|
-
def
|
1056
|
+
module_eval(<<'.,.,', 'parser.y', 291)
|
1057
|
+
def _reduce_94(val, _values, result)
|
1023
1058
|
result = Terms::Number.new numeric(val.first), nil, 'ex'
|
1024
1059
|
|
1025
1060
|
result
|
1026
1061
|
end
|
1027
1062
|
.,.,
|
1028
1063
|
|
1029
|
-
module_eval(<<'.,.,', 'parser.y',
|
1030
|
-
def
|
1064
|
+
module_eval(<<'.,.,', 'parser.y', 294)
|
1065
|
+
def _reduce_95(val, _values, result)
|
1031
1066
|
unit = val.first.gsub(/[\s\d.]/, '')
|
1032
1067
|
result = Terms::Number.new numeric(val.first), nil, unit
|
1033
1068
|
|
@@ -1035,8 +1070,8 @@ module_eval(<<'.,.,', 'parser.y', 289)
|
|
1035
1070
|
end
|
1036
1071
|
.,.,
|
1037
1072
|
|
1038
|
-
module_eval(<<'.,.,', 'parser.y',
|
1039
|
-
def
|
1073
|
+
module_eval(<<'.,.,', 'parser.y', 298)
|
1074
|
+
def _reduce_96(val, _values, result)
|
1040
1075
|
unit = val.first.gsub(/[\s\d.]/, '')
|
1041
1076
|
result = Terms::Number.new numeric(val.first), nil, unit
|
1042
1077
|
|
@@ -1044,8 +1079,8 @@ module_eval(<<'.,.,', 'parser.y', 293)
|
|
1044
1079
|
end
|
1045
1080
|
.,.,
|
1046
1081
|
|
1047
|
-
module_eval(<<'.,.,', 'parser.y',
|
1048
|
-
def
|
1082
|
+
module_eval(<<'.,.,', 'parser.y', 302)
|
1083
|
+
def _reduce_97(val, _values, result)
|
1049
1084
|
unit = val.first.gsub(/[\s\d.]/, '')
|
1050
1085
|
result = Terms::Number.new numeric(val.first), nil, unit
|
1051
1086
|
|
@@ -1053,29 +1088,29 @@ module_eval(<<'.,.,', 'parser.y', 297)
|
|
1053
1088
|
end
|
1054
1089
|
.,.,
|
1055
1090
|
|
1056
|
-
module_eval(<<'.,.,', 'parser.y',
|
1057
|
-
def
|
1091
|
+
module_eval(<<'.,.,', 'parser.y', 307)
|
1092
|
+
def _reduce_98(val, _values, result)
|
1058
1093
|
result = :minus
|
1059
1094
|
result
|
1060
1095
|
end
|
1061
1096
|
.,.,
|
1062
1097
|
|
1063
|
-
module_eval(<<'.,.,', 'parser.y',
|
1064
|
-
def
|
1098
|
+
module_eval(<<'.,.,', 'parser.y', 308)
|
1099
|
+
def _reduce_99(val, _values, result)
|
1065
1100
|
result = :plus
|
1066
1101
|
result
|
1067
1102
|
end
|
1068
1103
|
.,.,
|
1069
1104
|
|
1070
|
-
module_eval(<<'.,.,', 'parser.y',
|
1071
|
-
def
|
1105
|
+
module_eval(<<'.,.,', 'parser.y', 311)
|
1106
|
+
def _reduce_100(val, _values, result)
|
1072
1107
|
result = val.first
|
1073
1108
|
result
|
1074
1109
|
end
|
1075
1110
|
.,.,
|
1076
1111
|
|
1077
|
-
module_eval(<<'.,.,', 'parser.y',
|
1078
|
-
def
|
1112
|
+
module_eval(<<'.,.,', 'parser.y', 312)
|
1113
|
+
def _reduce_101(val, _values, result)
|
1079
1114
|
result = Terms::Ident.new interpret_identifier val.first
|
1080
1115
|
result
|
1081
1116
|
end
|
data/lib/csspool/css/parser.y
CHANGED
@@ -206,14 +206,19 @@ rule
|
|
206
206
|
}
|
207
207
|
;
|
208
208
|
declarations
|
209
|
-
: declaration declarations
|
209
|
+
: declaration SEMI declarations
|
210
|
+
| declaration SEMI
|
210
211
|
| declaration
|
211
212
|
;
|
212
213
|
declaration
|
213
|
-
: property ':' expr prio
|
214
|
+
: property ':' expr prio
|
214
215
|
{ @handler.property val.first, val[2], val[3] }
|
215
|
-
| property ':' S expr prio
|
216
|
+
| property ':' S expr prio
|
216
217
|
{ @handler.property val.first, val[3], val[4] }
|
218
|
+
| property S ':' expr prio
|
219
|
+
{ @handler.property val.first, val[3], val[4] }
|
220
|
+
| property S ':' S expr prio
|
221
|
+
{ @handler.property val.first, val[4], val[5] }
|
217
222
|
;
|
218
223
|
prio
|
219
224
|
: IMPORTANT_SYM { result = true }
|
data/lib/csspool/node.rb
CHANGED
@@ -6,11 +6,19 @@ module CSSPool
|
|
6
6
|
target.accept self
|
7
7
|
end
|
8
8
|
|
9
|
-
def to_css
|
10
|
-
|
9
|
+
def to_css options={}
|
10
|
+
if options[:minify]
|
11
|
+
to_minified_css
|
12
|
+
else
|
13
|
+
accept Visitors::ToCSS.new
|
14
|
+
end
|
11
15
|
end
|
12
16
|
alias :to_s :to_css
|
13
17
|
|
18
|
+
def to_minified_css
|
19
|
+
accept Visitors::ToMinifiedCSS.new
|
20
|
+
end
|
21
|
+
|
14
22
|
def == other
|
15
23
|
return false unless self.class == other.class
|
16
24
|
|
@@ -14,7 +14,7 @@ module CSSPool
|
|
14
14
|
|
15
15
|
def initialize
|
16
16
|
@indent_level = 0
|
17
|
-
@indent_space =
|
17
|
+
@indent_space = indent_space
|
18
18
|
end
|
19
19
|
|
20
20
|
visitor_for CSS::Document do |target|
|
@@ -48,7 +48,7 @@ module CSSPool
|
|
48
48
|
tokens << "#{indent}}"
|
49
49
|
end
|
50
50
|
}
|
51
|
-
tokens.join(
|
51
|
+
tokens.join(line_break)
|
52
52
|
end
|
53
53
|
|
54
54
|
visitor_for CSS::Charset do |target|
|
@@ -66,9 +66,9 @@ module CSSPool
|
|
66
66
|
|
67
67
|
visitor_for CSS::RuleSet do |target|
|
68
68
|
"#{indent}" +
|
69
|
-
target.selectors.map { |sel| sel.accept self }.join(", ") + " {
|
70
|
-
target.declarations.map { |decl| decl.accept self }.join(
|
71
|
-
"
|
69
|
+
target.selectors.map { |sel| sel.accept self }.join(", ") + " {#{line_break}" +
|
70
|
+
target.declarations.map { |decl| decl.accept self }.join(line_break) +
|
71
|
+
"#{line_break}#{indent}}"
|
72
72
|
end
|
73
73
|
|
74
74
|
visitor_for CSS::Declaration do |target|
|
@@ -197,6 +197,14 @@ module CSSPool
|
|
197
197
|
"#{@indent_space * @indent_level}"
|
198
198
|
end
|
199
199
|
|
200
|
+
def line_break
|
201
|
+
"\n"
|
202
|
+
end
|
203
|
+
|
204
|
+
def indent_space
|
205
|
+
' '
|
206
|
+
end
|
207
|
+
|
200
208
|
def escape_css_identifier text
|
201
209
|
# CSS2 4.1.3 p2
|
202
210
|
unsafe_chars = /[#{Regexp.escape CSS_IDENTIFIER_ILLEGAL_CHARACTERS}]/
|
@@ -213,5 +221,21 @@ module CSSPool
|
|
213
221
|
text.gsub(/[\\"\n\r\f]/) {CSS_STRING_ESCAPE_MAP[$&]}
|
214
222
|
end
|
215
223
|
end
|
224
|
+
|
225
|
+
class ToMinifiedCSS < ToCSS
|
226
|
+
def line_break
|
227
|
+
""
|
228
|
+
end
|
229
|
+
|
230
|
+
def indent_space
|
231
|
+
' '
|
232
|
+
end
|
233
|
+
|
234
|
+
visitor_for CSS::RuleSet do |target|
|
235
|
+
target.selectors.map { |sel| sel.accept self }.join(", ") + " {" +
|
236
|
+
target.declarations.map { |decl| decl.accept self }.join +
|
237
|
+
" }"
|
238
|
+
end
|
239
|
+
end
|
216
240
|
end
|
217
241
|
end
|
data/test/test_parser.rb
CHANGED
@@ -87,5 +87,25 @@ module CSSPool
|
|
87
87
|
eocss
|
88
88
|
assert_match('foo(1, 2)', doc.to_css)
|
89
89
|
end
|
90
|
+
|
91
|
+
def test_missing_semicolon
|
92
|
+
doc = CSSPool.CSS <<-eocss
|
93
|
+
div { border: none }
|
94
|
+
eocss
|
95
|
+
assert_match('none', doc.to_css)
|
96
|
+
doc = CSSPool.CSS <<-eocss
|
97
|
+
div { border: none; background: #fff }
|
98
|
+
eocss
|
99
|
+
assert_match('none', doc.to_css)
|
100
|
+
assert_match('#fff', doc.to_css)
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_whitespaces
|
104
|
+
doc = CSSPool.CSS <<-eocss
|
105
|
+
div { border : none; }
|
106
|
+
eocss
|
107
|
+
assert_match('none', doc.to_css)
|
108
|
+
assert_match('border:', doc.to_css)
|
109
|
+
end
|
90
110
|
end
|
91
111
|
end
|
@@ -260,6 +260,35 @@ module CSSPool
|
|
260
260
|
assert_equal output, node.to_css
|
261
261
|
end
|
262
262
|
end
|
263
|
+
|
264
|
+
def test_minification
|
265
|
+
rawCSS = <<-eocss
|
266
|
+
p {
|
267
|
+
font: foo;
|
268
|
+
color: #f00;
|
269
|
+
}
|
270
|
+
eocss
|
271
|
+
|
272
|
+
doc = CSSPool.CSS rawCSS
|
273
|
+
parsed_doc = doc.to_minified_css
|
274
|
+
|
275
|
+
assert_equal "p { font: foo; color: #f00; }", parsed_doc
|
276
|
+
end
|
277
|
+
|
278
|
+
def test_minification_alt
|
279
|
+
rawCSS = <<-eocss
|
280
|
+
p {
|
281
|
+
font: foo;
|
282
|
+
color: #f00;
|
283
|
+
}
|
284
|
+
eocss
|
285
|
+
|
286
|
+
doc = CSSPool.CSS rawCSS
|
287
|
+
parsed_doc = doc.to_css :minify => true
|
288
|
+
|
289
|
+
assert_equal "p { font: foo; color: #f00; }", parsed_doc
|
290
|
+
end
|
291
|
+
|
263
292
|
end
|
264
293
|
end
|
265
294
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: csspool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,22 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-05-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rdoc
|
17
|
+
requirement: &70178736571580 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3.10'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *70178736571580
|
15
26
|
- !ruby/object:Gem::Dependency
|
16
27
|
name: racc
|
17
|
-
requirement: &
|
28
|
+
requirement: &70178736571000 !ruby/object:Gem::Requirement
|
18
29
|
none: false
|
19
30
|
requirements:
|
20
31
|
- - ! '>='
|
@@ -22,10 +33,10 @@ dependencies:
|
|
22
33
|
version: '0'
|
23
34
|
type: :development
|
24
35
|
prerelease: false
|
25
|
-
version_requirements: *
|
36
|
+
version_requirements: *70178736571000
|
26
37
|
- !ruby/object:Gem::Dependency
|
27
38
|
name: rexical
|
28
|
-
requirement: &
|
39
|
+
requirement: &70178736570560 !ruby/object:Gem::Requirement
|
29
40
|
none: false
|
30
41
|
requirements:
|
31
42
|
- - ! '>='
|
@@ -33,29 +44,51 @@ dependencies:
|
|
33
44
|
version: '0'
|
34
45
|
type: :development
|
35
46
|
prerelease: false
|
36
|
-
version_requirements: *
|
47
|
+
version_requirements: *70178736570560
|
37
48
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
39
|
-
requirement: &
|
49
|
+
name: hoe-git
|
50
|
+
requirement: &70178736586440 !ruby/object:Gem::Requirement
|
40
51
|
none: false
|
41
52
|
requirements:
|
42
|
-
- -
|
53
|
+
- - ! '>='
|
43
54
|
- !ruby/object:Gem::Version
|
44
|
-
version: '
|
55
|
+
version: '0'
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *70178736586440
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: hoe-gemspec
|
61
|
+
requirement: &70178736585440 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *70178736585440
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: hoe-bundler
|
72
|
+
requirement: &70178736584560 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
45
78
|
type: :development
|
46
79
|
prerelease: false
|
47
|
-
version_requirements: *
|
80
|
+
version_requirements: *70178736584560
|
48
81
|
- !ruby/object:Gem::Dependency
|
49
82
|
name: hoe
|
50
|
-
requirement: &
|
83
|
+
requirement: &70178736583940 !ruby/object:Gem::Requirement
|
51
84
|
none: false
|
52
85
|
requirements:
|
53
86
|
- - ~>
|
54
87
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
88
|
+
version: '3.0'
|
56
89
|
type: :development
|
57
90
|
prerelease: false
|
58
|
-
version_requirements: *
|
91
|
+
version_requirements: *70178736583940
|
59
92
|
description: ! 'CSSPool is a CSS parser. CSSPool provides a SAC interface for parsing
|
60
93
|
CSS as
|
61
94
|
|
@@ -66,8 +99,8 @@ email:
|
|
66
99
|
executables: []
|
67
100
|
extensions: []
|
68
101
|
extra_rdoc_files:
|
69
|
-
- Manifest.txt
|
70
102
|
- CHANGELOG.rdoc
|
103
|
+
- Manifest.txt
|
71
104
|
- README.rdoc
|
72
105
|
files:
|
73
106
|
- .autotest
|
@@ -155,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
188
|
version: '0'
|
156
189
|
requirements: []
|
157
190
|
rubyforge_project: csspool
|
158
|
-
rubygems_version: 1.8.
|
191
|
+
rubygems_version: 1.8.17
|
159
192
|
signing_key:
|
160
193
|
specification_version: 3
|
161
194
|
summary: CSSPool is a CSS parser
|