csspool 0.2.6 → 2.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 (138) hide show
  1. data/.autotest +16 -0
  2. data/{CHANGELOG.txt → CHANGELOG.rdoc} +10 -0
  3. data/Manifest.txt +60 -72
  4. data/README.rdoc +78 -0
  5. data/Rakefile +9 -52
  6. data/lib/csspool/collection.rb +50 -0
  7. data/lib/csspool/css/charset.rb +7 -0
  8. data/lib/csspool/css/declaration.rb +8 -0
  9. data/lib/csspool/css/document.rb +34 -0
  10. data/lib/csspool/css/document_handler.rb +51 -0
  11. data/lib/csspool/css/import_rule.rb +15 -0
  12. data/lib/csspool/css/media.rb +7 -0
  13. data/lib/csspool/css/rule_set.rb +12 -0
  14. data/lib/csspool/css.rb +7 -0
  15. data/lib/csspool/lib_croco/cr_additional_sel.rb +46 -0
  16. data/lib/csspool/lib_croco/cr_attr_sel.rb +16 -0
  17. data/lib/csspool/lib_croco/cr_doc_handler.rb +24 -0
  18. data/lib/csspool/lib_croco/cr_num.rb +13 -0
  19. data/lib/csspool/lib_croco/cr_parser.rb +11 -0
  20. data/lib/csspool/lib_croco/cr_parsing_location.rb +17 -0
  21. data/lib/csspool/lib_croco/cr_pseudo.rb +14 -0
  22. data/lib/csspool/lib_croco/cr_rgb.rb +18 -0
  23. data/lib/csspool/lib_croco/cr_selector.rb +34 -0
  24. data/lib/csspool/lib_croco/cr_simple_sel.rb +54 -0
  25. data/lib/csspool/lib_croco/cr_term.rb +97 -0
  26. data/lib/csspool/lib_croco/glist.rb +21 -0
  27. data/lib/csspool/lib_croco.rb +78 -0
  28. data/lib/csspool/node.rb +5 -0
  29. data/lib/csspool/sac/document.rb +35 -0
  30. data/lib/csspool/sac/parser.rb +122 -0
  31. data/lib/csspool/sac.rb +2 -0
  32. data/lib/csspool/selector.rb +32 -0
  33. data/lib/csspool/selectors/additional.rb +6 -0
  34. data/lib/csspool/selectors/attribute.rb +21 -0
  35. data/lib/csspool/selectors/class.rb +11 -0
  36. data/lib/csspool/selectors/id.rb +11 -0
  37. data/lib/csspool/selectors/pseudo_class.rb +13 -0
  38. data/lib/csspool/selectors/simple.rb +22 -0
  39. data/lib/csspool/selectors/type.rb +6 -0
  40. data/lib/csspool/selectors/universal.rb +6 -0
  41. data/lib/csspool/selectors.rb +8 -0
  42. data/lib/csspool/terms/function.rb +17 -0
  43. data/lib/csspool/terms/hash.rb +6 -0
  44. data/lib/csspool/terms/ident.rb +15 -0
  45. data/lib/csspool/terms/number.rb +14 -0
  46. data/lib/csspool/terms/rgb.rb +23 -0
  47. data/lib/csspool/terms/string.rb +6 -0
  48. data/lib/csspool/terms/uri.rb +6 -0
  49. data/lib/csspool/terms.rb +7 -0
  50. data/lib/csspool/visitable.rb +18 -0
  51. data/lib/csspool/visitors/comparable.rb +78 -0
  52. data/lib/csspool/visitors/to_css.rb +201 -0
  53. data/lib/csspool/visitors/visitor.rb +17 -0
  54. data/lib/csspool/visitors.rb +3 -0
  55. data/lib/csspool.rb +18 -1
  56. data/test/css/test_document.rb +13 -0
  57. data/test/css/test_import_rule.rb +42 -0
  58. data/test/helper.rb +62 -6
  59. data/test/sac/test_parser.rb +115 -0
  60. data/test/sac/test_properties.rb +43 -0
  61. data/test/sac/test_terms.rb +134 -0
  62. data/test/test_collection.rb +81 -0
  63. data/test/test_parser.rb +75 -241
  64. data/test/test_selector.rb +45 -34
  65. data/test/visitors/test_comparable.rb +72 -0
  66. data/test/visitors/test_to_css.rb +141 -0
  67. metadata +98 -85
  68. data/README.txt +0 -79
  69. data/lib/css/sac/conditions/attribute_condition.rb +0 -56
  70. data/lib/css/sac/conditions/begin_hyphen_condition.rb +0 -22
  71. data/lib/css/sac/conditions/class_condition.rb +0 -22
  72. data/lib/css/sac/conditions/combinator_condition.rb +0 -40
  73. data/lib/css/sac/conditions/condition.rb +0 -35
  74. data/lib/css/sac/conditions/id_condition.rb +0 -27
  75. data/lib/css/sac/conditions/one_of_condition.rb +0 -22
  76. data/lib/css/sac/conditions/pseudo_class_condition.rb +0 -24
  77. data/lib/css/sac/conditions.rb +0 -5
  78. data/lib/css/sac/document_handler.rb +0 -67
  79. data/lib/css/sac/error_handler.rb +0 -14
  80. data/lib/css/sac/generated_parser.rb +0 -999
  81. data/lib/css/sac/generated_property_parser.rb +0 -9214
  82. data/lib/css/sac/lexeme.rb +0 -29
  83. data/lib/css/sac/lexical_unit.rb +0 -203
  84. data/lib/css/sac/parse_exception.rb +0 -6
  85. data/lib/css/sac/parser.rb +0 -115
  86. data/lib/css/sac/property_parser.rb +0 -47
  87. data/lib/css/sac/selectors/child_selector.rb +0 -40
  88. data/lib/css/sac/selectors/conditional_selector.rb +0 -49
  89. data/lib/css/sac/selectors/descendant_selector.rb +0 -40
  90. data/lib/css/sac/selectors/element_selector.rb +0 -39
  91. data/lib/css/sac/selectors/selector.rb +0 -31
  92. data/lib/css/sac/selectors/sibling_selector.rb +0 -39
  93. data/lib/css/sac/selectors/simple_selector.rb +0 -25
  94. data/lib/css/sac/selectors.rb +0 -5
  95. data/lib/css/sac/token.rb +0 -27
  96. data/lib/css/sac/tokenizer.rb +0 -187
  97. data/lib/css/sac/visitable.rb +0 -106
  98. data/lib/css/sac.rb +0 -14
  99. data/lib/css/stylesheet/rule.rb +0 -20
  100. data/lib/css/stylesheet/stylesheet.rb +0 -96
  101. data/lib/css/stylesheet.rb +0 -3
  102. data/lib/parser.y +0 -308
  103. data/lib/property_parser.y +0 -2346
  104. data/lib/property_parser.y.erb +0 -1321
  105. data/test/condition_test_case.rb +0 -6
  106. data/test/selector_test_case.rb +0 -20
  107. data/test/test_all.rb +0 -4
  108. data/test/test_attribute_condition.rb +0 -39
  109. data/test/test_begin_hyphen_condition.rb +0 -15
  110. data/test/test_child_selector.rb +0 -60
  111. data/test/test_class_condition.rb +0 -15
  112. data/test/test_combinator_condition.rb +0 -38
  113. data/test/test_condition.rb +0 -31
  114. data/test/test_conditional_selector.rb +0 -44
  115. data/test/test_descendant_selector.rb +0 -64
  116. data/test/test_element_selector.rb +0 -31
  117. data/test/test_error_recovery.rb +0 -28
  118. data/test/test_id_condition.rb +0 -16
  119. data/test/test_lexeme.rb +0 -39
  120. data/test/test_lexical_color.rb +0 -49
  121. data/test/test_lexical_function.rb +0 -31
  122. data/test/test_lexical_ident.rb +0 -30
  123. data/test/test_lexical_number.rb +0 -68
  124. data/test/test_lexical_string.rb +0 -23
  125. data/test/test_lexical_unit.rb +0 -106
  126. data/test/test_lexical_uri.rb +0 -28
  127. data/test/test_one_of_condition.rb +0 -15
  128. data/test/test_parse_error.rb +0 -199
  129. data/test/test_property_parser.rb +0 -593
  130. data/test/test_selector_as_string.rb +0 -94
  131. data/test/test_selector_parser.rb +0 -178
  132. data/test/test_sibling_selector.rb +0 -42
  133. data/test/test_simple_selector.rb +0 -9
  134. data/test/test_specificity.rb +0 -76
  135. data/test/test_stylesheet.rb +0 -95
  136. data/test/test_token.rb +0 -24
  137. data/test/test_tokenizer.rb +0 -127
  138. data/test/test_xpath.rb +0 -105
data/lib/parser.y DELETED
@@ -1,308 +0,0 @@
1
- class CSS::SAC::GeneratedParser
2
-
3
- token FUNCTION INCLUDES DASHMATCH LBRACE HASH PLUS GREATER S STRING IDENT
4
- token COMMA URI CDO CDC NUMBER PERCENTAGE LENGTH EMS EXS ANGLE TIME FREQ
5
- token IMPORTANT_SYM IMPORT_SYM MEDIA_SYM PAGE_SYM CHARSET_SYM DIMENSION
6
-
7
- rule
8
- stylesheet
9
- : s_cdo_cdc_0toN CHARSET_SYM s_0toN STRING s_0toN ';' s_0toN import_0toN ruleset_media_page_0toN
10
- | s_cdo_cdc_0toN import_0toN ruleset_media_page_0toN
11
- ;
12
- ruleset_media_page_0toN
13
- : ruleset s_cdo_cdc_0toN ruleset_media_page_0toN
14
- | media s_cdo_cdc_0toN ruleset_media_page_0toN
15
- | page s_cdo_cdc_0toN ruleset_media_page_0toN
16
- | ruleset s_cdo_cdc_0toN
17
- | media s_cdo_cdc_0toN
18
- | page s_cdo_cdc_0toN
19
- |
20
- ;
21
- import
22
- : IMPORT_SYM s_0toN string_or_uri s_0toN medium_0toN ';' s_0toN {
23
- self.document_handler.import_style(val[2], val[4] || [])
24
- }
25
- ;
26
- ignorable_at
27
- : '@' IDENT s_0toN string_uri_or_ident_1toN medium_0toN ';' s_0toN {
28
- self.document_handler.ignorable_at_rule(val[1])
29
- }
30
- | '@' IDENT s_0toN error S {
31
- yyerrok
32
- self.document_handler.ignorable_at_rule(val[1])
33
- }
34
- ;
35
- import_0toN
36
- : import s_cdo_cdc_0toN import_0toN
37
- | ignorable_at s_cdo_cdc_0toN import_0toN
38
- |
39
- ;
40
- media
41
- : MEDIA_SYM s_0toN medium_rollup s_0toN ruleset_0toN '}' s_0toN {
42
- self.document_handler.end_media(val[2])
43
- }
44
- ;
45
- medium_rollup
46
- : medium_1toN LBRACE { self.document_handler.start_media(val.first) }
47
- | medium_1toN error LBRACE {
48
- yyerrok
49
- self.document_handler.start_media(val.first)
50
- error = ParseException.new("Error near: \"#{val[0]}\"")
51
- self.error_handler.error(error)
52
- }
53
- ;
54
- medium
55
- : IDENT s_0toN
56
- ;
57
- medium_0toN
58
- : medium_1toN
59
- |
60
- ;
61
- medium_1toN
62
- : medium COMMA s_0toN medium_1toN { result = [val.first, val.last].flatten }
63
- | medium { result = [val.first] }
64
- ;
65
- page
66
- : page_start s_0toN LBRACE s_0toN declaration_0toN '}' s_0toN {
67
- page_stuff = val.first
68
- self.document_handler.end_page(page_stuff[0], page_stuff[1])
69
- }
70
- ;
71
- page_start
72
- : PAGE_SYM s_0toN optional_page optional_pseudo_page {
73
- result = [val[2], val[3]]
74
- self.document_handler.start_page(val[2], val[3])
75
- }
76
- ;
77
- optional_page
78
- : IDENT
79
- |
80
- ;
81
- optional_pseudo_page
82
- : ':' IDENT { result = val[1] }
83
- |
84
- ;
85
- operator
86
- : '/' s_0toN
87
- | COMMA s_0toN
88
- |
89
- ;
90
- combinator
91
- : PLUS s_0toN { result = :SAC_DIRECT_ADJACENT_SELECTOR }
92
- | GREATER s_0toN { result = :SAC_CHILD_SELECTOR }
93
- | S { result = :SAC_DESCENDANT_SELECTOR }
94
- ;
95
- unary_operator
96
- : '-' | PLUS
97
- ;
98
- property
99
- : IDENT s_0toN
100
- ;
101
- ruleset
102
- : selector_1toN s_0toN declaration_0toN '}' s_0toN {
103
- self.document_handler.end_selector([val.first].flatten.compact)
104
- }
105
- ;
106
- ruleset_0toN
107
- : ruleset ruleset_0toN
108
- | ruleset
109
- |
110
- ;
111
- selector
112
- : simple_selector_1toN { result = val.flatten }
113
- ;
114
- selector_1toN
115
- : selector_list s_0toN LBRACE {
116
- self.document_handler.start_selector([val.first].flatten.compact)
117
- }
118
- | selector error LBRACE {
119
- yyerrok
120
- self.document_handler.start_selector([val.first].flatten.compact)
121
- }
122
- | selector LBRACE {
123
- self.document_handler.start_selector([val.first].flatten.compact)
124
- }
125
- ;
126
- selector_list
127
- : selector COMMA s_0toN selector_list { result = [val[0], val[3]] }
128
- | selector
129
- ;
130
- simple_selector
131
- : element_name hcap_0toN {
132
- result = if val[1].nil?
133
- val.first
134
- else
135
- ConditionalSelector.new(val.first, val[1])
136
- end
137
- }
138
- | hcap_1toN {
139
- result = ConditionalSelector.new(nil, val.first)
140
- }
141
- ;
142
- simple_selector_1toN
143
- : simple_selector combinator simple_selector_1toN {
144
- result =
145
- case val[1]
146
- when :SAC_DIRECT_ADJACENT_SELECTOR
147
- SiblingSelector.new(val.first, val[2])
148
- when :SAC_DESCENDANT_SELECTOR
149
- DescendantSelector.new(val.first, val[2])
150
- when :SAC_CHILD_SELECTOR
151
- ChildSelector.new(val.first, val[2])
152
- end
153
- }
154
- | simple_selector
155
- ;
156
- class
157
- : '.' IDENT { result = ClassCondition.new(val[1]) }
158
- ;
159
- element_name
160
- : IDENT { result = ElementSelector.new(val.first) }
161
- | '*' { result = SimpleSelector.new() }
162
- ;
163
- attrib
164
- : '[' s_0toN IDENT s_0toN attrib_val_0or1 ']' {
165
- result = AttributeCondition.build(val[2], val[4])
166
- }
167
- ;
168
- pseudo
169
- : ':' function {
170
- result = PseudoClassCondition.new(val[1])
171
- }
172
- | ':' IDENT { result = PseudoClassCondition.new(val[1]) }
173
- ;
174
- declaration
175
- : property ':' s_0toN expr prio_0or1 {
176
- if value = self.property_parser.parse_tokens(
177
- self.tokenizer.tokenize(val.flatten[0..-2].join(' '))
178
- )
179
-
180
- value = [value].flatten
181
-
182
- self.document_handler.property(val.first, value, !val[4].nil?)
183
- result = value
184
- end
185
- }
186
- ;
187
- declaration_0toN
188
- : declaration ';' s_0toN declaration_0toN
189
- | declaration error ';' s_0toN declaration_0toN {
190
- yyerrok
191
- error = ParseException.new("Unkown property: \"#{val[1]}\"")
192
- self.error_handler.error(error)
193
- }
194
- | error ';' s_0toN declaration_0toN {
195
- yyerrok
196
- error = ParseException.new("Unkown property: \"#{val[0]}\"")
197
- self.error_handler.error(error)
198
- }
199
- | declaration
200
- | s_0toN ';' s_0toN declaration_0toN
201
- |
202
- ;
203
- prio
204
- : IMPORTANT_SYM s_0toN
205
- ;
206
- prio_0or1
207
- : prio
208
- |
209
- ;
210
- expr
211
- : term operator expr { result = val }
212
- | term
213
- ;
214
- term
215
- : unary_operator num_or_length { result = val }
216
- | num_or_length { result = val }
217
- | STRING s_0toN
218
- | IDENT s_0toN
219
- | URI s_0toN
220
- | hexcolor
221
- | function
222
- ;
223
- num_or_length
224
- : NUMBER s_0toN
225
- | PERCENTAGE s_0toN
226
- | LENGTH s_0toN
227
- | EMS s_0toN
228
- | EXS s_0toN
229
- | ANGLE s_0toN
230
- | TIME s_0toN
231
- | FREQ s_0toN
232
- ;
233
- function
234
- : FUNCTION s_0toN expr ')' s_0toN {
235
- result = Function.new(val[0], val[2].flatten.select { |x| x !~ /,/ })
236
- }
237
- | FUNCTION s_0toN expr error ')' s_0toN { yyerrok; result = [val[0], val[2], val[3]] }
238
- ;
239
- hexcolor
240
- : HASH s_0toN
241
- ;
242
- hcap_0toN
243
- : hcap_1toN
244
- |
245
- ;
246
- hcap_1toN
247
- : attribute_id hcap_1toN {
248
- result = CombinatorCondition.new(val[0], val[1])
249
- }
250
- | class hcap_1toN {
251
- result = CombinatorCondition.new(val[0], val[1])
252
- }
253
- | attrib hcap_1toN {
254
- result = CombinatorCondition.new(val[0], val[1])
255
- }
256
- | pseudo hcap_1toN {
257
- result = CombinatorCondition.new(val[0], val[1])
258
- }
259
- | attribute_id
260
- | class
261
- | attrib
262
- | pseudo
263
- ;
264
- attribute_id
265
- : HASH { result = IDCondition.new(val.first) }
266
- ;
267
- attrib_val_0or1
268
- : eql_incl_dash s_0toN IDENT s_0toN { result = [val.first, val[2]] }
269
- | eql_incl_dash s_0toN STRING s_0toN { result = [val.first, val[2]] }
270
- |
271
- ;
272
- eql_incl_dash
273
- : '='
274
- | INCLUDES
275
- | DASHMATCH
276
- ;
277
- string_or_uri
278
- : STRING
279
- | URI
280
- ;
281
- string_uri_or_ident_1toN
282
- : string_or_uri s_0toN string_uri_or_ident_1toN
283
- | IDENT s_0toN string_uri_or_ident_1toN
284
- | IDEN s_0toN
285
- | string_or_uri s_0toN
286
- ;
287
- s_cdo_cdc_0toN
288
- : S s_cdo_cdc_0toN
289
- | CDO s_cdo_cdc_0toN
290
- | CDC s_cdo_cdc_0toN
291
- | S
292
- | CDO
293
- | CDC
294
- |
295
- ;
296
- s_0toN
297
- : S s_0toN
298
- |
299
- ;
300
- end
301
-
302
- ---- header
303
- require "css/sac/conditions"
304
- require "css/sac/selectors"
305
-
306
- ---- inner
307
- include CSS::SAC::Conditions
308
- include CSS::SAC::Selectors