csspool 4.0.0.pre → 4.0.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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.rdoc +12 -0
  3. data/Gemfile.lock +6 -6
  4. data/Manifest.txt +10 -2
  5. data/Rakefile +1 -0
  6. data/lib/csspool/css/declaration.rb +1 -1
  7. data/lib/csspool/css/document.rb +5 -1
  8. data/lib/csspool/css/document_handler.rb +43 -11
  9. data/lib/csspool/css/fontface_rule.rb +13 -0
  10. data/lib/csspool/css/import_rule.rb +0 -5
  11. data/lib/csspool/css/media_feature.rb +14 -0
  12. data/lib/csspool/css/media_query.rb +19 -0
  13. data/lib/csspool/css/media_query_list.rb +41 -0
  14. data/lib/csspool/css/{media.rb → media_type.rb} +6 -4
  15. data/lib/csspool/css/parser.rb +1272 -671
  16. data/lib/csspool/css/parser.y +223 -53
  17. data/lib/csspool/css/rule_set.rb +4 -3
  18. data/lib/csspool/css/supports_rule.rb +14 -0
  19. data/lib/csspool/css/tokenizer.rb +92 -16
  20. data/lib/csspool/css/tokenizer.rex +42 -19
  21. data/lib/csspool/css.rb +6 -1
  22. data/lib/csspool/node.rb +22 -0
  23. data/lib/csspool/selector.rb +5 -4
  24. data/lib/csspool/selectors/pseudo.rb +2 -2
  25. data/lib/csspool/terms/function.rb +1 -1
  26. data/lib/csspool/terms/resolution.rb +13 -0
  27. data/lib/csspool/terms.rb +1 -0
  28. data/lib/csspool/visitors/children.rb +16 -2
  29. data/lib/csspool/visitors/comparable.rb +27 -8
  30. data/lib/csspool/visitors/iterator.rb +5 -3
  31. data/lib/csspool/visitors/to_css.rb +73 -20
  32. data/test/css/test_document_query.rb +37 -38
  33. data/test/css/test_font_face.rb +16 -0
  34. data/test/css/test_import_rule.rb +0 -3
  35. data/test/css/test_media_rule.rb +92 -0
  36. data/test/css/test_node_position.rb +81 -0
  37. data/test/css/test_parser.rb +12 -39
  38. data/test/css/test_supports_rule.rb +133 -0
  39. data/test/css/test_tokenizer.rb +4 -4
  40. data/test/css/test_variables.rb +33 -0
  41. data/test/helper.rb +3 -3
  42. data/test/sac/test_parser.rb +1 -0
  43. data/test/test_parser.rb +22 -9
  44. data/test/test_selector.rb +44 -4
  45. data/test/test_term.rb +29 -0
  46. data/test/visitors/test_comparable.rb +8 -0
  47. data/test/visitors/test_to_css.rb +89 -13
  48. metadata +54 -58
  49. data/test/_local_helper.rb +0 -2
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+
2
3
  require 'helper'
3
4
 
4
5
  module CSSPool
@@ -21,15 +22,15 @@ module CSSPool
21
22
  selectors = %w{* p #id .cl :hover ::selection [href]}
22
23
  combinators = ['', ' ', ' > ', ' + ']
23
24
 
24
- combinations = selectors.product(combinators).map do |s,c|
25
- if s != '*' && c != '' then
25
+ combinations = selectors.product(combinators).map do |s,c|
26
+ if s != '*' && c != ''
26
27
  s + c
27
28
  end
28
29
  end.compact
29
30
  combinations = combinations.product(selectors).map { |s,c| s + c}
30
31
 
31
32
  combinations.each do |s|
32
- doc = CSSPool.CSS s + ' { }'
33
+ doc = CSSPool.CSS(s + ' { }')
33
34
  assert_equal s, doc.rule_sets.first.selectors.first.to_css
34
35
  end
35
36
 
@@ -105,10 +106,10 @@ module CSSPool
105
106
  div { background: red, blue; }
106
107
  }
107
108
  eocss
108
- assert_equal 1, doc.rule_sets.first.media.media_list.length
109
+ assert_equal 1, doc.rule_sets.first.parent_rule.length
109
110
 
110
111
  doc = CSSPool.CSS(doc.to_css)
111
- assert_equal 1, doc.rule_sets.first.media.media_list.length
112
+ assert_equal 1, doc.rule_sets.first.parent_rule.length
112
113
  end
113
114
 
114
115
  def test_multiple_media
@@ -121,12 +122,87 @@ module CSSPool
121
122
  div { background: red, blue; }
122
123
  }
123
124
  eocss
124
- assert_equal 2, doc.rule_sets.first.media.media_list.length
125
- assert_equal 1, doc.rule_sets[1].media.media_list.length
125
+ assert doc.rule_sets.first.parent_rule.is_a?(CSSPool::CSS::MediaQueryList)
126
+ assert doc.rule_sets[1].parent_rule.is_a?(CSSPool::CSS::MediaQueryList)
126
127
 
127
128
  doc = CSSPool.CSS(doc.to_css)
128
- assert_equal 2, doc.rule_sets.first.media.media_list.length
129
- assert_equal 1, doc.rule_sets[1].media.media_list.length
129
+ assert doc.rule_sets.first.parent_rule.is_a?(CSSPool::CSS::MediaQueryList)
130
+ assert doc.rule_sets[1].parent_rule.is_a?(CSSPool::CSS::MediaQueryList)
131
+ end
132
+
133
+ def test_media_feature_space_after_colon
134
+ css = <<eocss.chomp
135
+ @media (orientation: portrait) {
136
+ div {
137
+ background: red;
138
+ }
139
+ }
140
+ eocss
141
+ doc = CSSPool.CSS(css)
142
+ assert_equal css.sub(' portrait', 'portrait'), doc.to_css
143
+ end
144
+
145
+ def test_media_feature_space_before_colon
146
+ css = <<eocss.chomp
147
+ @media (orientation :portrait) {
148
+ div {
149
+ background: red;
150
+ }
151
+ }
152
+ eocss
153
+ doc = CSSPool.CSS(css)
154
+ assert_equal css.sub(' :portrait', ':portrait'), doc.to_css
155
+ end
156
+
157
+ def test_media_features_with_and
158
+ css = <<eocss.chomp
159
+ @media screen and (min-width:400px) AND (max-width:600px) {
160
+ div {
161
+ background: red;
162
+ }
163
+ }
164
+ eocss
165
+ doc = CSSPool.CSS(css)
166
+ assert_equal css.sub('AND', 'and'), doc.to_css
167
+ assert_equal 1, doc.rule_sets.first.parent_rule.size
168
+ end
169
+
170
+ def test_media_query_with_only_and_not
171
+ css = <<eocss.chomp
172
+ @media print and (min-width:200pt) and (max-color:16), not screen and (max-width:400px) {
173
+ div {
174
+ background: red;
175
+ }
176
+ }
177
+ eocss
178
+ doc = CSSPool.CSS(css)
179
+ assert_equal 2, doc.rule_sets.first.parent_rule.size
180
+ assert_equal css, doc.to_css
181
+ end
182
+
183
+ def test_media_query_with_resolution
184
+ css = <<eocss.chomp
185
+ @media screen and (min-resolution:800dpi) {
186
+ div {
187
+ background: red;
188
+ }
189
+ }
190
+ eocss
191
+ doc = CSSPool.CSS(css)
192
+ assert_equal css, doc.to_css
193
+ end
194
+
195
+ def test_media_query_list_with_empty_ruleset
196
+ css = <<eocss.chomp
197
+ @media screen and ( min-width: 800px ) {
198
+
199
+ }
200
+ eocss
201
+ doc = CSSPool.CSS(css)
202
+ assert_equal 1, doc.rule_sets.size
203
+ assert doc.rule_sets.first.selectors.empty?
204
+ assert doc.rule_sets.first.declarations.empty?
205
+ assert_equal css.sub('( min-width: 800px )', '(min-width:800px)'), doc.to_css
130
206
  end
131
207
 
132
208
  def test_import
@@ -177,7 +253,7 @@ module CSSPool
177
253
  end
178
254
  end
179
255
 
180
- def test_selector_psuedo
256
+ def test_selector_pseudo
181
257
  input_output = {
182
258
  "pseudo" => ":pseudo",
183
259
  "\"quotes\"" => ":\\000022quotes\\000022",
@@ -226,9 +302,9 @@ module CSSPool
226
302
 
227
303
  def test_property
228
304
  input_output = {
229
- "property" => " property: value;",
230
- "colon:" => " colon\\:: value;",
231
- "space " => " space\\ : value;"
305
+ "property" => "property: value",
306
+ "colon:" => "colon\\:: value",
307
+ "space " => "space\\ : value"
232
308
  }
233
309
  input_output.each_pair do |input, output|
234
310
  node = CSS::Declaration.new input, [Terms::Ident.new("value")], false, nil
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csspool
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.pre
5
- prerelease:
4
+ version: 4.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Aaron Patterson
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-04-28 00:00:00.000000000 Z
12
+ date: 2014-07-11 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rdoc
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
@@ -31,103 +28,90 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: racc
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ! '>='
32
+ - - '>='
37
33
  - !ruby/object:Gem::Version
38
34
  version: '0'
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ! '>='
39
+ - - '>='
45
40
  - !ruby/object:Gem::Version
46
41
  version: '0'
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: rexical
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ! '>='
46
+ - - '>='
53
47
  - !ruby/object:Gem::Version
54
48
  version: '0'
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ! '>='
53
+ - - '>='
61
54
  - !ruby/object:Gem::Version
62
55
  version: '0'
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: hoe-git
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
- - - ! '>='
60
+ - - '>='
69
61
  - !ruby/object:Gem::Version
70
62
  version: '0'
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
- - - ! '>='
67
+ - - '>='
77
68
  - !ruby/object:Gem::Version
78
69
  version: '0'
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: hoe-gemspec
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
- - - ! '>='
74
+ - - '>='
85
75
  - !ruby/object:Gem::Version
86
76
  version: '0'
87
77
  type: :development
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
- - - ! '>='
81
+ - - '>='
93
82
  - !ruby/object:Gem::Version
94
83
  version: '0'
95
84
  - !ruby/object:Gem::Dependency
96
85
  name: hoe-bundler
97
86
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
87
  requirements:
100
- - - ! '>='
88
+ - - '>='
101
89
  - !ruby/object:Gem::Version
102
90
  version: '0'
103
91
  type: :development
104
92
  prerelease: false
105
93
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
94
  requirements:
108
- - - ! '>='
95
+ - - '>='
109
96
  - !ruby/object:Gem::Version
110
97
  version: '0'
111
98
  - !ruby/object:Gem::Dependency
112
99
  name: hoe
113
100
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
101
  requirements:
116
102
  - - ~>
117
103
  - !ruby/object:Gem::Version
118
- version: '3.0'
104
+ version: '3.4'
119
105
  type: :development
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
108
  requirements:
124
109
  - - ~>
125
110
  - !ruby/object:Gem::Version
126
- version: '3.0'
127
- description: ! 'CSSPool is a CSS parser. CSSPool provides a SAC interface for parsing
128
- CSS as
129
-
130
- well as a document oriented interface for parsing CSS.'
111
+ version: '3.4'
112
+ description: |-
113
+ CSSPool is a CSS parser. CSSPool provides a SAC interface for parsing CSS as
114
+ well as a document oriented interface for parsing CSS.
131
115
  email:
132
116
  - aaronp@rubyforge.org
133
117
  - jbarnette@rubyforge.org
@@ -153,14 +137,19 @@ files:
153
137
  - lib/csspool/css/document.rb
154
138
  - lib/csspool/css/document_handler.rb
155
139
  - lib/csspool/css/document_query.rb
140
+ - lib/csspool/css/fontface_rule.rb
156
141
  - lib/csspool/css/import_rule.rb
157
142
  - lib/csspool/css/keyframes_block.rb
158
143
  - lib/csspool/css/keyframes_rule.rb
159
- - lib/csspool/css/media.rb
144
+ - lib/csspool/css/media_feature.rb
145
+ - lib/csspool/css/media_query.rb
146
+ - lib/csspool/css/media_query_list.rb
147
+ - lib/csspool/css/media_type.rb
160
148
  - lib/csspool/css/namespace_rule.rb
161
149
  - lib/csspool/css/parser.rb
162
150
  - lib/csspool/css/parser.y
163
151
  - lib/csspool/css/rule_set.rb
152
+ - lib/csspool/css/supports_rule.rb
164
153
  - lib/csspool/css/tokenizer.rb
165
154
  - lib/csspool/css/tokenizer.rex
166
155
  - lib/csspool/node.rb
@@ -185,6 +174,7 @@ files:
185
174
  - lib/csspool/terms/ident.rb
186
175
  - lib/csspool/terms/math.rb
187
176
  - lib/csspool/terms/number.rb
177
+ - lib/csspool/terms/resolution.rb
188
178
  - lib/csspool/terms/rgb.rb
189
179
  - lib/csspool/terms/string.rb
190
180
  - lib/csspool/terms/uri.rb
@@ -194,13 +184,15 @@ files:
194
184
  - lib/csspool/visitors/iterator.rb
195
185
  - lib/csspool/visitors/to_css.rb
196
186
  - lib/csspool/visitors/visitor.rb
197
- - test/_local_helper.rb
198
187
  - test/css/test_document.rb
199
188
  - test/css/test_document_query.rb
189
+ - test/css/test_font_face.rb
200
190
  - test/css/test_import_rule.rb
201
191
  - test/css/test_keyframes_rule.rb
192
+ - test/css/test_media_rule.rb
202
193
  - test/css/test_namespace_rule.rb
203
194
  - test/css/test_parser.rb
195
+ - test/css/test_supports_rule.rb
204
196
  - test/css/test_tokenizer.rb
205
197
  - test/files/test.css
206
198
  - test/helper.rb
@@ -216,9 +208,13 @@ files:
216
208
  - test/visitors/test_comparable.rb
217
209
  - test/visitors/test_each.rb
218
210
  - test/visitors/test_to_css.rb
211
+ - test/css/test_variables.rb
212
+ - test/css/test_node_position.rb
219
213
  - .gemtest
220
214
  homepage: http://csspool.rubyforge.org
221
- licenses: []
215
+ licenses:
216
+ - MIT
217
+ metadata: {}
222
218
  post_install_message:
223
219
  rdoc_options:
224
220
  - --main
@@ -226,43 +222,43 @@ rdoc_options:
226
222
  require_paths:
227
223
  - lib
228
224
  required_ruby_version: !ruby/object:Gem::Requirement
229
- none: false
230
225
  requirements:
231
- - - ! '>='
226
+ - - '>='
232
227
  - !ruby/object:Gem::Version
233
228
  version: '0'
234
- segments:
235
- - 0
236
- hash: -4562967278317163394
237
229
  required_rubygems_version: !ruby/object:Gem::Requirement
238
- none: false
239
230
  requirements:
240
- - - ! '>='
231
+ - - '>='
241
232
  - !ruby/object:Gem::Version
242
233
  version: '0'
243
234
  requirements: []
244
235
  rubyforge_project: csspool
245
- rubygems_version: 1.8.24
236
+ rubygems_version: 2.1.9
246
237
  signing_key:
247
- specification_version: 3
238
+ specification_version: 4
248
239
  summary: CSSPool is a CSS parser
249
240
  test_files:
250
- - test/css/test_document.rb
251
- - test/css/test_document_query.rb
252
- - test/css/test_import_rule.rb
253
- - test/css/test_keyframes_rule.rb
254
- - test/css/test_namespace_rule.rb
255
- - test/css/test_parser.rb
256
- - test/css/test_tokenizer.rb
257
- - test/sac/test_parser.rb
241
+ - test/test_selector.rb
242
+ - test/test_collection.rb
243
+ - test/test_term.rb
244
+ - test/test_parser.rb
258
245
  - test/sac/test_properties.rb
246
+ - test/sac/test_parser.rb
259
247
  - test/sac/test_terms.rb
260
- - test/test_collection.rb
261
248
  - test/test_declaration.rb
262
- - test/test_parser.rb
263
- - test/test_selector.rb
264
- - test/test_term.rb
265
- - test/visitors/test_children.rb
249
+ - test/css/test_import_rule.rb
250
+ - test/css/test_document.rb
251
+ - test/css/test_parser.rb
252
+ - test/css/test_font_face.rb
253
+ - test/css/test_variables.rb
254
+ - test/css/test_media_rule.rb
255
+ - test/css/test_namespace_rule.rb
256
+ - test/css/test_keyframes_rule.rb
257
+ - test/css/test_document_query.rb
258
+ - test/css/test_supports_rule.rb
259
+ - test/css/test_tokenizer.rb
260
+ - test/css/test_node_position.rb
266
261
  - test/visitors/test_comparable.rb
267
262
  - test/visitors/test_each.rb
263
+ - test/visitors/test_children.rb
268
264
  - test/visitors/test_to_css.rb
@@ -1,2 +0,0 @@
1
- gem "minitest"
2
- require "minitest/autorun"