csspool 3.0.0 → 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|