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
@@ -0,0 +1,72 @@
1
+ require 'helper'
2
+
3
+ module CSSPool
4
+ module Visitors
5
+ class TestComparable < CSSPool::TestCase
6
+ def equalitest css
7
+ doc1 = CSSPool.CSS css
8
+ doc2 = CSSPool.CSS css
9
+ assert_equal doc1, doc2
10
+ end
11
+
12
+ def test_not_equal
13
+ doc1 = CSSPool.CSS 'div { border: foo(1, 2); }'
14
+ assert_not_equal nil, doc1
15
+ end
16
+
17
+ def test_hash_range
18
+ equalitest 'div { border: #123; }'
19
+ end
20
+
21
+ def test_rgb
22
+ equalitest 'div { border: rgb(1,2,3); }'
23
+ end
24
+
25
+ def test_rgb_with_percentage
26
+ equalitest 'div { border: rgb(100%,2%,3%); }'
27
+ end
28
+
29
+ def test_negative_number
30
+ equalitest 'div { border: -1px; }'
31
+ end
32
+
33
+ def test_positive_number
34
+ equalitest 'div { border: 1px; }'
35
+ end
36
+
37
+ %w{
38
+ 1 1em 1ex 1px 1in 1cm 1mm 1pt 1pc 1% 1deg 1rad 1ms 1s 1Hz 1kHz
39
+ }.each do |num|
40
+ expected = num.sub(/1/, '1.0')
41
+ define_method(:"test_num_#{num}") do
42
+ equalitest "div { border: #{num}; }"
43
+ end
44
+ end
45
+
46
+ def test_string_term
47
+ equalitest 'div { border: "hello"; }'
48
+ end
49
+
50
+ def test_inherit
51
+ equalitest 'div { color: inherit; }'
52
+ end
53
+
54
+ def test_important
55
+ equalitest 'div { color: inherit !important; }'
56
+ end
57
+
58
+ def test_function
59
+ equalitest 'div { border: foo("hello"); }'
60
+ end
61
+
62
+ def test_uri
63
+ equalitest 'div { border: url(http://tenderlovemaking.com/); }'
64
+ end
65
+
66
+ def test_import
67
+ equalitest '@import "foo.css" screen, print;'
68
+ equalitest '@import "foo.css";'
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,141 @@
1
+ require 'helper'
2
+
3
+ module CSSPool
4
+ module Visitors
5
+ class TestToCSS < CSSPool::TestCase
6
+ def test_font_serialization
7
+ doc = CSSPool.CSS 'p { font: 14px/30px Tahoma; }'
8
+
9
+ assert_equal 3, doc.rule_sets.first.declarations[0].expressions.length
10
+
11
+ doc = CSSPool.CSS(doc.to_css)
12
+ assert_equal 3, doc.rule_sets.first.declarations[0].expressions.length
13
+
14
+ assert_equal 'font: 14.0px / 30.0px Tahoma;',
15
+ doc.rule_sets.first.declarations.first.to_css.strip
16
+ end
17
+
18
+ def test_hash_operator
19
+ doc = CSSPool.CSS 'p { font: foo, #666; }'
20
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
21
+
22
+ doc = CSSPool.CSS(doc.to_css)
23
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
24
+ end
25
+
26
+ def test_uri_operator
27
+ doc = CSSPool.CSS 'p { font: foo, url(http://example.com/); }'
28
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
29
+
30
+ doc = CSSPool.CSS(doc.to_css)
31
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
32
+ end
33
+
34
+ def test_string_operator
35
+ doc = CSSPool.CSS 'p { font: foo, "foo"; }'
36
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
37
+
38
+ doc = CSSPool.CSS(doc.to_css)
39
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
40
+ end
41
+
42
+ def test_function_operator
43
+ doc = CSSPool.CSS 'p { font: foo, foo(1); }'
44
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
45
+
46
+ doc = CSSPool.CSS(doc.to_css)
47
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
48
+ end
49
+
50
+ def test_rgb_operator
51
+ doc = CSSPool.CSS 'p { font: foo, rgb(1,2,3); }'
52
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
53
+
54
+ doc = CSSPool.CSS(doc.to_css)
55
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
56
+ end
57
+
58
+ def test_includes
59
+ doc = CSSPool.CSS <<-eocss
60
+ div[bar ~= 'adsf'] { background: red, blue; }
61
+ eocss
62
+
63
+ assert_equal 1, doc.rule_sets.first.selectors.first.simple_selectors.first.additional_selectors.length
64
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
65
+
66
+ doc = CSSPool.CSS(doc.to_css)
67
+ assert_equal 1, doc.rule_sets.first.selectors.first.simple_selectors.first.additional_selectors.length
68
+ assert_equal 2, doc.rule_sets.first.declarations[0].expressions.length
69
+ end
70
+
71
+ def test_dashmatch
72
+ doc = CSSPool.CSS <<-eocss
73
+ div[bar |= 'adsf'] { background: red, blue; }
74
+ eocss
75
+
76
+ assert_equal 1, doc.rule_sets.first.selectors.first.simple_selectors.first.additional_selectors.length
77
+
78
+ doc = CSSPool.CSS(doc.to_css)
79
+ assert_equal 1, doc.rule_sets.first.selectors.first.simple_selectors.first.additional_selectors.length
80
+ end
81
+
82
+ def test_media
83
+ doc = CSSPool.CSS <<-eocss
84
+ @media print {
85
+ div { background: red, blue; }
86
+ }
87
+ eocss
88
+ assert_equal 1, doc.rule_sets.first.media.length
89
+
90
+ doc = CSSPool.CSS(doc.to_css)
91
+ assert_equal 1, doc.rule_sets.first.media.length
92
+ end
93
+
94
+ def test_multiple_media
95
+ doc = CSSPool.CSS <<-eocss
96
+ @media print, screen {
97
+ div { background: red, blue; }
98
+ }
99
+
100
+ @media all {
101
+ div { background: red, blue; }
102
+ }
103
+ eocss
104
+ assert_equal 2, doc.rule_sets.first.media.length
105
+ assert_equal 1, doc.rule_sets[1].media.length
106
+
107
+ doc = CSSPool.CSS(doc.to_css)
108
+ assert_equal 2, doc.rule_sets.first.media.length
109
+ assert_equal 1, doc.rule_sets[1].media.length
110
+ end
111
+
112
+ def test_import
113
+ doc = CSSPool.CSS <<-eocss
114
+ @import "test.css";
115
+ @import url("test.css");
116
+ @import url("test.css") print, screen;
117
+ eocss
118
+
119
+ assert_equal 3, doc.import_rules.length
120
+ assert_equal 2, doc.import_rules.last.media.length
121
+
122
+ doc = CSSPool.CSS(doc.to_css)
123
+
124
+ assert_equal 3, doc.import_rules.length
125
+ assert_equal 2, doc.import_rules.last.media.length
126
+ end
127
+
128
+ def test_charsets
129
+ doc = CSSPool.CSS <<-eocss
130
+ @charset "UTF-8";
131
+ eocss
132
+
133
+ assert_equal 1, doc.charsets.length
134
+
135
+ doc = CSSPool.CSS(doc.to_css)
136
+
137
+ assert_equal 1, doc.charsets.length
138
+ end
139
+ end
140
+ end
141
+ end
metadata CHANGED
@@ -1,121 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csspool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
8
+ - John Barnette
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
12
 
12
- date: 2008-04-10 00:00:00 -07:00
13
+ date: 2009-07-07 00:00:00 -07:00
13
14
  default_executable:
14
15
  dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: ffi
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ version:
15
26
  - !ruby/object:Gem::Dependency
16
27
  name: hoe
28
+ type: :development
17
29
  version_requirement:
18
30
  version_requirements: !ruby/object:Gem::Requirement
19
31
  requirements:
20
32
  - - ">="
21
33
  - !ruby/object:Gem::Version
22
- version: 1.5.1
34
+ version: 2.3.2
23
35
  version:
24
- description: CSSpool (pronounced "cesspool") is a validating SAC parser for CSS. The parser calls methods on a document handler depending on what it has found. CSSPool currently only supports CSS 2.1. CSSPool will not yield invalid properties or selectors.
25
- email: aaronp@rubyforge.org
36
+ description: |-
37
+ CSSPool is a CSS parser. CSSPool provides a SAC interface for parsing CSS as
38
+ well as a document oriented interface for parsing CSS.
39
+ email:
40
+ - aaronp@rubyforge.org
41
+ - jabarnette@rubyforge.org
26
42
  executables: []
27
43
 
28
44
  extensions: []
29
45
 
30
46
  extra_rdoc_files:
31
- - CHANGELOG.txt
32
47
  - Manifest.txt
33
- - README.txt
34
48
  files:
35
- - CHANGELOG.txt
49
+ - .autotest
50
+ - CHANGELOG.rdoc
36
51
  - Manifest.txt
37
- - README.txt
52
+ - README.rdoc
38
53
  - Rakefile
39
- - lib/css/sac.rb
40
- - lib/css/sac/conditions.rb
41
- - lib/css/sac/conditions/attribute_condition.rb
42
- - lib/css/sac/conditions/begin_hyphen_condition.rb
43
- - lib/css/sac/conditions/class_condition.rb
44
- - lib/css/sac/conditions/combinator_condition.rb
45
- - lib/css/sac/conditions/condition.rb
46
- - lib/css/sac/conditions/id_condition.rb
47
- - lib/css/sac/conditions/one_of_condition.rb
48
- - lib/css/sac/conditions/pseudo_class_condition.rb
49
- - lib/css/sac/document_handler.rb
50
- - lib/css/sac/error_handler.rb
51
- - lib/css/sac/generated_parser.rb
52
- - lib/css/sac/generated_property_parser.rb
53
- - lib/css/sac/lexeme.rb
54
- - lib/css/sac/lexical_unit.rb
55
- - lib/css/sac/parse_exception.rb
56
- - lib/css/sac/parser.rb
57
- - lib/css/sac/property_parser.rb
58
- - lib/css/sac/selectors.rb
59
- - lib/css/sac/selectors/child_selector.rb
60
- - lib/css/sac/selectors/conditional_selector.rb
61
- - lib/css/sac/selectors/descendant_selector.rb
62
- - lib/css/sac/selectors/element_selector.rb
63
- - lib/css/sac/selectors/selector.rb
64
- - lib/css/sac/selectors/sibling_selector.rb
65
- - lib/css/sac/selectors/simple_selector.rb
66
- - lib/css/sac/token.rb
67
- - lib/css/sac/tokenizer.rb
68
- - lib/css/sac/visitable.rb
69
- - lib/css/stylesheet.rb
70
- - lib/css/stylesheet/rule.rb
71
- - lib/css/stylesheet/stylesheet.rb
72
54
  - lib/csspool.rb
73
- - lib/parser.y
74
- - lib/property_parser.y
75
- - lib/property_parser.y.erb
76
- - test/condition_test_case.rb
55
+ - lib/csspool/collection.rb
56
+ - lib/csspool/css.rb
57
+ - lib/csspool/css/charset.rb
58
+ - lib/csspool/css/declaration.rb
59
+ - lib/csspool/css/document.rb
60
+ - lib/csspool/css/document_handler.rb
61
+ - lib/csspool/css/import_rule.rb
62
+ - lib/csspool/css/media.rb
63
+ - lib/csspool/css/rule_set.rb
64
+ - lib/csspool/lib_croco.rb
65
+ - lib/csspool/lib_croco/cr_additional_sel.rb
66
+ - lib/csspool/lib_croco/cr_attr_sel.rb
67
+ - lib/csspool/lib_croco/cr_doc_handler.rb
68
+ - lib/csspool/lib_croco/cr_num.rb
69
+ - lib/csspool/lib_croco/cr_parser.rb
70
+ - lib/csspool/lib_croco/cr_parsing_location.rb
71
+ - lib/csspool/lib_croco/cr_pseudo.rb
72
+ - lib/csspool/lib_croco/cr_rgb.rb
73
+ - lib/csspool/lib_croco/cr_selector.rb
74
+ - lib/csspool/lib_croco/cr_simple_sel.rb
75
+ - lib/csspool/lib_croco/cr_term.rb
76
+ - lib/csspool/lib_croco/glist.rb
77
+ - lib/csspool/node.rb
78
+ - lib/csspool/sac.rb
79
+ - lib/csspool/sac/document.rb
80
+ - lib/csspool/sac/parser.rb
81
+ - lib/csspool/selector.rb
82
+ - lib/csspool/selectors.rb
83
+ - lib/csspool/selectors/additional.rb
84
+ - lib/csspool/selectors/attribute.rb
85
+ - lib/csspool/selectors/class.rb
86
+ - lib/csspool/selectors/id.rb
87
+ - lib/csspool/selectors/pseudo_class.rb
88
+ - lib/csspool/selectors/simple.rb
89
+ - lib/csspool/selectors/type.rb
90
+ - lib/csspool/selectors/universal.rb
91
+ - lib/csspool/terms.rb
92
+ - lib/csspool/terms/function.rb
93
+ - lib/csspool/terms/hash.rb
94
+ - lib/csspool/terms/ident.rb
95
+ - lib/csspool/terms/number.rb
96
+ - lib/csspool/terms/rgb.rb
97
+ - lib/csspool/terms/string.rb
98
+ - lib/csspool/terms/uri.rb
99
+ - lib/csspool/visitable.rb
100
+ - lib/csspool/visitors.rb
101
+ - lib/csspool/visitors/comparable.rb
102
+ - lib/csspool/visitors/to_css.rb
103
+ - lib/csspool/visitors/visitor.rb
104
+ - test/css/test_document.rb
105
+ - test/css/test_import_rule.rb
77
106
  - test/helper.rb
78
- - test/selector_test_case.rb
79
- - test/test_all.rb
80
- - test/test_attribute_condition.rb
81
- - test/test_begin_hyphen_condition.rb
82
- - test/test_child_selector.rb
83
- - test/test_class_condition.rb
84
- - test/test_combinator_condition.rb
85
- - test/test_condition.rb
86
- - test/test_conditional_selector.rb
87
- - test/test_descendant_selector.rb
88
- - test/test_element_selector.rb
89
- - test/test_error_recovery.rb
90
- - test/test_id_condition.rb
91
- - test/test_lexeme.rb
92
- - test/test_lexical_color.rb
93
- - test/test_lexical_function.rb
94
- - test/test_lexical_ident.rb
95
- - test/test_lexical_number.rb
96
- - test/test_lexical_string.rb
97
- - test/test_lexical_unit.rb
98
- - test/test_lexical_uri.rb
99
- - test/test_one_of_condition.rb
100
- - test/test_parse_error.rb
107
+ - test/sac/test_parser.rb
108
+ - test/sac/test_properties.rb
109
+ - test/sac/test_terms.rb
110
+ - test/test_collection.rb
101
111
  - test/test_parser.rb
102
- - test/test_property_parser.rb
103
112
  - test/test_selector.rb
104
- - test/test_selector_as_string.rb
105
- - test/test_selector_parser.rb
106
- - test/test_sibling_selector.rb
107
- - test/test_simple_selector.rb
108
- - test/test_specificity.rb
109
- - test/test_stylesheet.rb
110
- - test/test_token.rb
111
- - test/test_tokenizer.rb
112
- - test/test_xpath.rb
113
+ - test/visitors/test_comparable.rb
114
+ - test/visitors/test_to_css.rb
113
115
  has_rdoc: true
114
- homepage: http://csspool.rubyforge.org/
116
+ homepage: http://csspool.rubyforge.org
117
+ licenses: []
118
+
115
119
  post_install_message:
116
120
  rdoc_options:
117
121
  - --main
118
- - README.txt
122
+ - README.rdoc
119
123
  require_paths:
120
124
  - lib
121
125
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -133,9 +137,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
137
  requirements: []
134
138
 
135
139
  rubyforge_project: csspool
136
- rubygems_version: 1.0.1
140
+ rubygems_version: 1.3.4
137
141
  signing_key:
138
- specification_version: 2
139
- summary: Parses CSS
142
+ specification_version: 3
143
+ summary: CSSPool is a CSS parser
140
144
  test_files:
141
- - test/test_all.rb
145
+ - test/css/test_document.rb
146
+ - test/css/test_import_rule.rb
147
+ - test/sac/test_parser.rb
148
+ - test/sac/test_properties.rb
149
+ - test/sac/test_terms.rb
150
+ - test/test_collection.rb
151
+ - test/test_parser.rb
152
+ - test/test_selector.rb
153
+ - test/visitors/test_comparable.rb
154
+ - test/visitors/test_to_css.rb
data/README.txt DELETED
@@ -1,79 +0,0 @@
1
- = CSSpool
2
-
3
- http://csspool.rubyforge.org/
4
-
5
- == Description
6
-
7
- CSSpool (pronounced "cesspool") is a validating SAC parser for CSS. The parser
8
- calls methods on a document handler depending on what it has found. CSSPool
9
- currently only supports CSS 2.1. CSSPool will not yield invalid properties or
10
- selectors.
11
-
12
- == Dependencies
13
-
14
- Building CSSpool requires:
15
-
16
- - RACC (not just the runtime)
17
- (http://i.loveruby.net/en/projects/racc)
18
-
19
- - rubygems, hoe, flexmock
20
-
21
- == Examples
22
-
23
- === Tidy a stylesheet
24
-
25
- parser = CSS::SAC::Parser.new
26
- doc = parser.parse(File.read(ARGV[0]))
27
- puts doc.to_css
28
-
29
- === Find custom attributes
30
-
31
- This example prints out all properties from a particular CSS file.
32
-
33
- class DH < CSS::SAC::DocumentHandler
34
- def start_selector(selectors)
35
- puts selectors.map { |x| x.to_css }.join(', ')
36
- end
37
-
38
- def property(name, value, important)
39
- puts "#{name} #{value.join(', ')} #{important}"
40
- end
41
- end
42
-
43
- parser = CSS::SAC::Parser.new(DH.new)
44
- parser.parse(File.read(ARGV[0]))
45
-
46
- See CSS::SAC::DocumentHandler for callbacks to implement.
47
-
48
- See SAC[http://www.w3.org/Style/CSS/SAC/] for more information on SAC.
49
-
50
- == Authors
51
-
52
- * {Aaron Patterson}[http://tenderlovemaking.com] <aaronp@rubyforge.org>
53
- * {John Barnette}[http://geeksomnia.com] <jbarnette@rubyforge.org>
54
-
55
- == LICENSE
56
-
57
- (The MIT License)
58
-
59
- Copyright (c) 2007 Aaron Patterson, John Barnette
60
-
61
- Permission is hereby granted, free of charge, to any person obtaining
62
- a copy of this software and associated documentation files (the
63
- 'Software'), to deal in the Software without restriction, including
64
- without limitation the rights to use, copy, modify, merge, publish,
65
- distribute, sublicense, and/or sell copies of the Software, and to
66
- permit persons to whom the Software is furnished to do so, subject to
67
- the following conditions:
68
-
69
- The above copyright notice and this permission notice shall be
70
- included in all copies or substantial portions of the Software.
71
-
72
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
73
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
74
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
75
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
76
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
77
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
78
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
79
-
@@ -1,56 +0,0 @@
1
- require "css/sac/conditions"
2
-
3
- module CSS
4
- module SAC
5
- module Conditions
6
- class AttributeCondition < Condition
7
- attr_accessor :local_name, :value, :specified
8
- alias :specified? :specified
9
-
10
- class << self
11
- def build(name, raw)
12
- condition, value = raw
13
-
14
- case condition
15
- when "~="
16
- OneOfCondition.new(name, value)
17
- when "|="
18
- BeginHyphenCondition.new(name, value)
19
- else
20
- AttributeCondition.new(name, value, true)
21
- end
22
- end
23
- end
24
-
25
- def initialize(local_name, value, specified, condition_type=:SAC_ATTRIBUTE_CONDITION)
26
- super(condition_type)
27
-
28
- @local_name = local_name
29
- @value = value
30
- @specified = specified
31
- end
32
-
33
- def to_css
34
- "[#{local_name}#{value && "=#{value}"}]"
35
- end
36
-
37
- def to_xpath
38
- "[@#{local_name}#{value && "='#{value}'"}]"
39
- end
40
-
41
- def specificity
42
- [0, 0, 1, 0]
43
- end
44
-
45
- def ==(other)
46
- super && local_name == other.local_name && value == other.value &&
47
- specified == other.specified
48
- end
49
-
50
- def hash
51
- [local_name, value, specified].hash
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,22 +0,0 @@
1
- require "css/sac/conditions"
2
-
3
- module CSS
4
- module SAC
5
- module Conditions
6
- class BeginHyphenCondition < AttributeCondition
7
-
8
- def initialize(local_name, value)
9
- super(local_name, value, true, :SAC_BEGIN_HYPHEN_ATTRIBUTE_CONDITION)
10
- end
11
-
12
- def to_css
13
- "[#{local_name}|=#{value}]"
14
- end
15
-
16
- def to_xpath
17
- "[contains(@#{local_name}, '#{value}')]"
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- require "css/sac/conditions"
2
-
3
- module CSS
4
- module SAC
5
- module Conditions
6
- class ClassCondition < AttributeCondition
7
-
8
- def initialize(klass)
9
- super("class", klass, true, :SAC_CLASS_CONDITION)
10
- end
11
-
12
- def to_css
13
- ".#{value}"
14
- end
15
-
16
- def to_xpath
17
- "[contains(@#{local_name}, '#{value}')]"
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,40 +0,0 @@
1
- require "css/sac/conditions"
2
-
3
- module CSS
4
- module SAC
5
- module Conditions
6
- class CombinatorCondition < Condition
7
- attr_accessor :first_condition, :second_condition
8
- alias :first :first_condition
9
- alias :second :second_condition
10
-
11
- def initialize(first, second)
12
- super(:SAC_AND_CONDITION)
13
-
14
- @first_condition = first
15
- @second_condition = second
16
- end
17
-
18
- def to_css
19
- "#{first.to_css}#{second.to_css}"
20
- end
21
-
22
- def to_xpath
23
- "#{first.to_xpath}#{second.to_xpath}"
24
- end
25
-
26
- def specificity
27
- first.specificity.zip(second.specificity).map { |x,y| x + y }
28
- end
29
-
30
- def ==(other)
31
- super && first == other.first && second == other.second
32
- end
33
-
34
- def hash
35
- [first, second].hash
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,35 +0,0 @@
1
- module CSS
2
- module SAC
3
- module Conditions
4
- class Condition
5
- include CSS::SAC::Visitable
6
-
7
- attr_accessor :condition_type
8
-
9
- def initialize(condition_type)
10
- @condition_type = condition_type
11
- end
12
-
13
- def ==(other)
14
- self.class === other && condition_type == other.condition_type
15
- end
16
-
17
- def hash
18
- condition_type.hash
19
- end
20
-
21
- def eql?(other)
22
- self == other
23
- end
24
-
25
- def to_css
26
- nil
27
- end
28
-
29
- def =~(node)
30
- MatchesVisitor.new(node).accept(self)
31
- end
32
- end
33
- end
34
- end
35
- end