csspool 0.2.6 → 2.0.0

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