deadweight 0.1.2 → 0.1.3

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 (26) hide show
  1. data/VERSION +1 -1
  2. data/deadweight.gemspec +21 -24
  3. data/lib/deadweight.rb +25 -20
  4. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/lib/css_parser.rb +1 -1
  5. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/lib/css_parser/parser.rb +1 -1
  6. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/lib/css_parser/regexps.rb +4 -4
  7. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/lib/css_parser/rule_set.rb +11 -8
  8. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/fixtures/import-circular-reference.css +0 -0
  9. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/fixtures/import-with-media-types.css +0 -0
  10. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/fixtures/import1.css +0 -0
  11. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/fixtures/simple.css +0 -0
  12. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/fixtures/subdir/import2.css +0 -0
  13. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_css_parser_basic.rb +0 -0
  14. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_css_parser_downloading.rb +0 -0
  15. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_css_parser_media_types.rb +0 -0
  16. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_css_parser_misc.rb +0 -0
  17. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_css_parser_regexps.rb +1 -0
  18. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_helper.rb +8 -8
  19. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_merging.rb +0 -0
  20. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_rule_set.rb +5 -4
  21. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_rule_set_creating_shorthand.rb +0 -0
  22. data/vendor/gems/{css_parser-0.9.1 → css_parser-1.0.0}/test/test_rule_set_expanding_shorthand.rb +0 -0
  23. metadata +21 -24
  24. data/vendor/gems/css_parser-0.9.1/CHANGELOG +0 -13
  25. data/vendor/gems/css_parser-0.9.1/LICENSE +0 -21
  26. data/vendor/gems/css_parser-0.9.1/README +0 -58
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
data/deadweight.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{deadweight}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Aanand Prasad"]
12
- s.date = %q{2009-12-15}
12
+ s.date = %q{2010-01-18}
13
13
  s.default_executable = %q{deadweight}
14
14
  s.email = %q{aanand.prasad@gmail.com}
15
15
  s.executables = ["deadweight"]
@@ -36,28 +36,25 @@ Gem::Specification.new do |s|
36
36
  "test/fixtures/style.css",
37
37
  "test/rake_task_test.rb",
38
38
  "test/test_helper.rb",
39
- "vendor/gems/css_parser-0.9.1/CHANGELOG",
40
- "vendor/gems/css_parser-0.9.1/LICENSE",
41
- "vendor/gems/css_parser-0.9.1/README",
42
- "vendor/gems/css_parser-0.9.1/lib/css_parser.rb",
43
- "vendor/gems/css_parser-0.9.1/lib/css_parser/parser.rb",
44
- "vendor/gems/css_parser-0.9.1/lib/css_parser/regexps.rb",
45
- "vendor/gems/css_parser-0.9.1/lib/css_parser/rule_set.rb",
46
- "vendor/gems/css_parser-0.9.1/test/fixtures/import-circular-reference.css",
47
- "vendor/gems/css_parser-0.9.1/test/fixtures/import-with-media-types.css",
48
- "vendor/gems/css_parser-0.9.1/test/fixtures/import1.css",
49
- "vendor/gems/css_parser-0.9.1/test/fixtures/simple.css",
50
- "vendor/gems/css_parser-0.9.1/test/fixtures/subdir/import2.css",
51
- "vendor/gems/css_parser-0.9.1/test/test_css_parser_basic.rb",
52
- "vendor/gems/css_parser-0.9.1/test/test_css_parser_downloading.rb",
53
- "vendor/gems/css_parser-0.9.1/test/test_css_parser_media_types.rb",
54
- "vendor/gems/css_parser-0.9.1/test/test_css_parser_misc.rb",
55
- "vendor/gems/css_parser-0.9.1/test/test_css_parser_regexps.rb",
56
- "vendor/gems/css_parser-0.9.1/test/test_helper.rb",
57
- "vendor/gems/css_parser-0.9.1/test/test_merging.rb",
58
- "vendor/gems/css_parser-0.9.1/test/test_rule_set.rb",
59
- "vendor/gems/css_parser-0.9.1/test/test_rule_set_creating_shorthand.rb",
60
- "vendor/gems/css_parser-0.9.1/test/test_rule_set_expanding_shorthand.rb"
39
+ "vendor/gems/css_parser-1.0.0/lib/css_parser.rb",
40
+ "vendor/gems/css_parser-1.0.0/lib/css_parser/parser.rb",
41
+ "vendor/gems/css_parser-1.0.0/lib/css_parser/regexps.rb",
42
+ "vendor/gems/css_parser-1.0.0/lib/css_parser/rule_set.rb",
43
+ "vendor/gems/css_parser-1.0.0/test/fixtures/import-circular-reference.css",
44
+ "vendor/gems/css_parser-1.0.0/test/fixtures/import-with-media-types.css",
45
+ "vendor/gems/css_parser-1.0.0/test/fixtures/import1.css",
46
+ "vendor/gems/css_parser-1.0.0/test/fixtures/simple.css",
47
+ "vendor/gems/css_parser-1.0.0/test/fixtures/subdir/import2.css",
48
+ "vendor/gems/css_parser-1.0.0/test/test_css_parser_basic.rb",
49
+ "vendor/gems/css_parser-1.0.0/test/test_css_parser_downloading.rb",
50
+ "vendor/gems/css_parser-1.0.0/test/test_css_parser_media_types.rb",
51
+ "vendor/gems/css_parser-1.0.0/test/test_css_parser_misc.rb",
52
+ "vendor/gems/css_parser-1.0.0/test/test_css_parser_regexps.rb",
53
+ "vendor/gems/css_parser-1.0.0/test/test_helper.rb",
54
+ "vendor/gems/css_parser-1.0.0/test/test_merging.rb",
55
+ "vendor/gems/css_parser-1.0.0/test/test_rule_set.rb",
56
+ "vendor/gems/css_parser-1.0.0/test/test_rule_set_creating_shorthand.rb",
57
+ "vendor/gems/css_parser-1.0.0/test/test_rule_set_expanding_shorthand.rb"
61
58
  ]
62
59
  s.homepage = %q{http://github.com/aanand/deadweight}
63
60
  s.rdoc_options = ["--charset=UTF-8"]
data/lib/deadweight.rb CHANGED
@@ -42,35 +42,40 @@ class Deadweight
42
42
  end
43
43
  end
44
44
 
45
- # Find all unused CSS selectors and return them as an array.
46
- def run
47
- css = CssParser::Parser.new
45
+ def add_css!(css)
46
+ parser = CssParser::Parser.new
47
+ parser.add_block!(css)
48
48
 
49
- @stylesheets.each do |path|
50
- css.add_block!(fetch(path))
49
+ selector_count = 0
50
+
51
+ parser.each_selector do |selector, declarations, specificity|
52
+ next if @unused_selectors.include?(selector)
53
+ next if selector =~ @ignore_selectors
54
+ next if has_pseudo_classes(selector) and @unused_selectors.include?(strip(selector))
55
+
56
+ @unused_selectors << selector
57
+ @parsed_rules[selector] = declarations
58
+
59
+ selector_count += 1
51
60
  end
52
61
 
53
- css.add_block!(rules)
62
+ selector_count
63
+ end
54
64
 
65
+ # Find all unused CSS selectors and return them as an array.
66
+ def run
55
67
  @parsed_rules = {}
56
68
  @unused_selectors = []
57
69
 
58
- css.each_selector do |selector, declarations, specificity|
59
- unless @unused_selectors.include?(selector)
60
- unless selector =~ ignore_selectors
61
- @unused_selectors << selector
62
- @parsed_rules[selector] = declarations
63
- end
64
- end
70
+ @stylesheets.each do |path|
71
+ new_selector_count = add_css!(fetch(path))
72
+ log.puts(" found #{new_selector_count} selectors".yellow)
65
73
  end
66
74
 
67
- # Remove selectors with pseudo classes that already have an equivalent
68
- # without the pseudo class. Keep the ones that don't, we need to test
69
- # them.
70
- @unused_selectors.each do |selector|
71
- if has_pseudo_classes(selector) && @unused_selectors.include?(strip(selector))
72
- @unused_selectors.delete(selector)
73
- end
75
+ if @rules and !@rules.empty?
76
+ new_selector_count = add_css!(@rules)
77
+ log.puts
78
+ log.puts("Added #{new_selector_count} extra selectors".yellow)
74
79
  end
75
80
 
76
81
  total_selectors = @unused_selectors.size
@@ -1,6 +1,6 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
  require 'uri'
3
- require 'md5'
3
+ require 'digest/md5'
4
4
  require 'zlib'
5
5
  require 'iconv'
6
6
  require 'css_parser/rule_set'
@@ -15,7 +15,7 @@ module CssParser
15
15
  # [<tt>import</tt>] Follow <tt>@import</tt> rules. Boolean, default is <tt>true</tt>.
16
16
  # [<tt>io_exceptions</tt>] Throw an exception if a link can not be found. Boolean, default is <tt>true</tt>.
17
17
  class Parser
18
- USER_AGENT = "Ruby CSS Parser/#{VERSION} (http://code.dunae.ca/css_parser/)"
18
+ USER_AGENT = "Ruby CSS Parser/#{RUBY_VERSION} (http://code.dunae.ca/css_parser/)"
19
19
 
20
20
  STRIP_CSS_COMMENTS_RX = /\/\*.*?\*\//m
21
21
  STRIP_HTML_COMMENTS_RX = /\<\!\-\-|\-\-\>/m
@@ -2,17 +2,17 @@ module CssParser
2
2
  # :stopdoc:
3
3
  # Base types
4
4
  RE_NL = Regexp.new('(\n|\r\n|\r|\f)')
5
- RE_NON_ASCII = Regexp.new('([\x00-\xFF])', Regexp::IGNORECASE) #[^\0-\177]
6
- RE_UNICODE = Regexp.new('(\\\\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])*)', Regexp::IGNORECASE | Regexp::EXTENDED | Regexp::MULTILINE)
5
+ RE_NON_ASCII = Regexp.new('([\x00-\xFF])', Regexp::IGNORECASE, 'n') #[^\0-\177]
6
+ RE_UNICODE = Regexp.new('(\\\\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])*)', Regexp::IGNORECASE | Regexp::EXTENDED | Regexp::MULTILINE, 'n')
7
7
  RE_ESCAPE = Regexp.union(RE_UNICODE, '|(\\\\[^\n\r\f0-9a-f])')
8
- RE_IDENT = Regexp.new("[\-]?([_a-z]|#{RE_NON_ASCII}|#{RE_ESCAPE})([_a-z0-9\-]|#{RE_NON_ASCII}|#{RE_ESCAPE})*", Regexp::IGNORECASE)
8
+ RE_IDENT = Regexp.new("[\-]?([_a-z]|#{RE_NON_ASCII}|#{RE_ESCAPE})([_a-z0-9\-]|#{RE_NON_ASCII}|#{RE_ESCAPE})*", Regexp::IGNORECASE, 'n')
9
9
 
10
10
  # General strings
11
11
  RE_STRING1 = Regexp.new('(\"(.[^\n\r\f\\"]*|\\\\' + RE_NL.to_s + '|' + RE_ESCAPE.to_s + ')*\")')
12
12
  RE_STRING2 = Regexp.new('(\'(.[^\n\r\f\\\']*|\\\\' + RE_NL.to_s + '|' + RE_ESCAPE.to_s + ')*\')')
13
13
  RE_STRING = Regexp.union(RE_STRING1, RE_STRING2)
14
14
 
15
- RE_URI = Regexp.new('(url\([\s]*([\s]*' + RE_STRING.to_s + '[\s]*)[\s]*\))|(url\([\s]*([!#$%&*\-~]|' + RE_NON_ASCII.to_s + '|' + RE_ESCAPE.to_s + ')*[\s]*)\)', Regexp::IGNORECASE | Regexp::EXTENDED | Regexp::MULTILINE)
15
+ RE_URI = Regexp.new('(url\([\s]*([\s]*' + RE_STRING.to_s + '[\s]*)[\s]*\))|(url\([\s]*([!#$%&*\-~]|' + RE_NON_ASCII.to_s + '|' + RE_ESCAPE.to_s + ')*[\s]*)\)', Regexp::IGNORECASE | Regexp::EXTENDED | Regexp::MULTILINE, 'n')
16
16
  URI_RX = /url\(("([^"]*)"|'([^']*)'|([^)]*))\)/im
17
17
 
18
18
  # Initial parsing
@@ -48,6 +48,11 @@ module CssParser
48
48
  #
49
49
  # If the property already exists its value will be over-written.
50
50
  def add_declaration!(property, value)
51
+ if value.nil? or value.empty?
52
+ @declarations.delete(property)
53
+ return
54
+ end
55
+
51
56
  value.gsub!(/;\Z/, '')
52
57
  is_important = !value.gsub!(CssParser::IMPORTANT_IN_PROPERTY_RX, '').nil?
53
58
  property = property.downcase.strip
@@ -84,13 +89,14 @@ module CssParser
84
89
  end
85
90
 
86
91
  # Return all declarations as a string.
92
+ #--
93
+ # TODO: Clean-up regexp doesn't seem to work
94
+ #++
87
95
  def declarations_to_s(options = {})
88
96
  options = {:force_important => false}.merge(options)
89
97
  str = ''
90
- each_declaration do |prop, val, is_important|
91
- importance = (options[:force_important] || is_important) ? ' !important' : ''
92
- str += "#{prop}: #{val}#{importance}; "
93
- end
98
+ importance = options[:force_important] ? ' !important' : ''
99
+ each_declaration { |prop, val| str += "#{prop}: #{val}#{importance}; " }
94
100
  str.gsub(/^[\s]+|[\n\r\f\t]*|[\s]+$/mx, '').strip
95
101
  end
96
102
 
@@ -138,6 +144,7 @@ private
138
144
  @selectors = selectors.split(',')
139
145
  end
140
146
 
147
+ public
141
148
  # Split shorthand dimensional declarations (e.g. <tt>margin: 0px auto;</tt>)
142
149
  # into their constituent parts.
143
150
  def expand_dimensions_shorthand! # :nodoc:
@@ -372,9 +379,5 @@ private
372
379
  end
373
380
 
374
381
  end
375
-
376
-
377
-
378
-
379
382
  end
380
383
  end
@@ -1,3 +1,4 @@
1
+ # coding: iso-8859-1
1
2
  require File.dirname(__FILE__) + '/test_helper'
2
3
 
3
4
  # Test cases for CSS regular expressions
@@ -1,8 +1,8 @@
1
- $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__), '../'))
2
- $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__), '../lib/'))
3
- require 'rubygems'
4
- require 'test/unit'
5
- require 'css_parser'
6
- require 'net/http'
7
- require 'open-uri'
8
- require 'WEBrick'
1
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__), '../'))
2
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__), '../lib/'))
3
+ require 'rubygems'
4
+ require 'test/unit'
5
+ require 'css_parser'
6
+ require 'net/http'
7
+ require 'open-uri'
8
+ require 'WEBrick'
@@ -1,4 +1,5 @@
1
1
  require File.dirname(__FILE__) + '/test_helper'
2
+ require "set"
2
3
 
3
4
  # Test cases for parsing CSS blocks
4
5
  class RuleSetTests < Test::Unit::TestCase
@@ -32,7 +33,7 @@ class RuleSetTests < Test::Unit::TestCase
32
33
  expected = [
33
34
  {:selector => "#content p", :declarations => "color: #fff;", :specificity => 101},
34
35
  {:selector => "a", :declarations => "color: #fff;", :specificity => 1}
35
- ]
36
+ ]
36
37
 
37
38
  actual = []
38
39
  rs = RuleSet.new('#content p, a', 'color: #fff;')
@@ -44,13 +45,13 @@ class RuleSetTests < Test::Unit::TestCase
44
45
  end
45
46
 
46
47
  def test_each_declaration
47
- expected = [
48
+ expected = Set.new([
48
49
  {:property => 'margin', :value => '1px -0.25em', :is_important => false},
49
50
  {:property => 'background', :value => 'white none no-repeat', :is_important => true},
50
51
  {:property => 'color', :value => '#fff', :is_important => false}
51
- ]
52
+ ])
52
53
 
53
- actual = []
54
+ actual = Set.new
54
55
  rs = RuleSet.new(nil, 'color: #fff; Background: white none no-repeat !important; margin: 1px -0.25em;')
55
56
  rs.each_declaration do |prop, val, imp|
56
57
  actual << {:property => prop, :value => val, :is_important => imp}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deadweight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aanand Prasad
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-15 00:00:00 -05:00
12
+ date: 2010-01-18 00:00:00 -05:00
13
13
  default_executable: deadweight
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -50,28 +50,25 @@ files:
50
50
  - test/fixtures/style.css
51
51
  - test/rake_task_test.rb
52
52
  - test/test_helper.rb
53
- - vendor/gems/css_parser-0.9.1/CHANGELOG
54
- - vendor/gems/css_parser-0.9.1/LICENSE
55
- - vendor/gems/css_parser-0.9.1/README
56
- - vendor/gems/css_parser-0.9.1/lib/css_parser.rb
57
- - vendor/gems/css_parser-0.9.1/lib/css_parser/parser.rb
58
- - vendor/gems/css_parser-0.9.1/lib/css_parser/regexps.rb
59
- - vendor/gems/css_parser-0.9.1/lib/css_parser/rule_set.rb
60
- - vendor/gems/css_parser-0.9.1/test/fixtures/import-circular-reference.css
61
- - vendor/gems/css_parser-0.9.1/test/fixtures/import-with-media-types.css
62
- - vendor/gems/css_parser-0.9.1/test/fixtures/import1.css
63
- - vendor/gems/css_parser-0.9.1/test/fixtures/simple.css
64
- - vendor/gems/css_parser-0.9.1/test/fixtures/subdir/import2.css
65
- - vendor/gems/css_parser-0.9.1/test/test_css_parser_basic.rb
66
- - vendor/gems/css_parser-0.9.1/test/test_css_parser_downloading.rb
67
- - vendor/gems/css_parser-0.9.1/test/test_css_parser_media_types.rb
68
- - vendor/gems/css_parser-0.9.1/test/test_css_parser_misc.rb
69
- - vendor/gems/css_parser-0.9.1/test/test_css_parser_regexps.rb
70
- - vendor/gems/css_parser-0.9.1/test/test_helper.rb
71
- - vendor/gems/css_parser-0.9.1/test/test_merging.rb
72
- - vendor/gems/css_parser-0.9.1/test/test_rule_set.rb
73
- - vendor/gems/css_parser-0.9.1/test/test_rule_set_creating_shorthand.rb
74
- - vendor/gems/css_parser-0.9.1/test/test_rule_set_expanding_shorthand.rb
53
+ - vendor/gems/css_parser-1.0.0/lib/css_parser.rb
54
+ - vendor/gems/css_parser-1.0.0/lib/css_parser/parser.rb
55
+ - vendor/gems/css_parser-1.0.0/lib/css_parser/regexps.rb
56
+ - vendor/gems/css_parser-1.0.0/lib/css_parser/rule_set.rb
57
+ - vendor/gems/css_parser-1.0.0/test/fixtures/import-circular-reference.css
58
+ - vendor/gems/css_parser-1.0.0/test/fixtures/import-with-media-types.css
59
+ - vendor/gems/css_parser-1.0.0/test/fixtures/import1.css
60
+ - vendor/gems/css_parser-1.0.0/test/fixtures/simple.css
61
+ - vendor/gems/css_parser-1.0.0/test/fixtures/subdir/import2.css
62
+ - vendor/gems/css_parser-1.0.0/test/test_css_parser_basic.rb
63
+ - vendor/gems/css_parser-1.0.0/test/test_css_parser_downloading.rb
64
+ - vendor/gems/css_parser-1.0.0/test/test_css_parser_media_types.rb
65
+ - vendor/gems/css_parser-1.0.0/test/test_css_parser_misc.rb
66
+ - vendor/gems/css_parser-1.0.0/test/test_css_parser_regexps.rb
67
+ - vendor/gems/css_parser-1.0.0/test/test_helper.rb
68
+ - vendor/gems/css_parser-1.0.0/test/test_merging.rb
69
+ - vendor/gems/css_parser-1.0.0/test/test_rule_set.rb
70
+ - vendor/gems/css_parser-1.0.0/test/test_rule_set_creating_shorthand.rb
71
+ - vendor/gems/css_parser-1.0.0/test/test_rule_set_expanding_shorthand.rb
75
72
  has_rdoc: true
76
73
  homepage: http://github.com/aanand/deadweight
77
74
  licenses: []
@@ -1,13 +0,0 @@
1
- === Ruby CSS Parser CHANGELOG
2
-
3
- ==== Version 0.9.1
4
- * Fixed RuleSet#declaration_to_s so it would respect <tt>!important</tt>
5
- rules (thanks to Dana - http://github.com/DanaDanger)
6
-
7
- ==== Version 0.9
8
- * Initial version forked from Premailer project
9
-
10
- ==== TODO: Future
11
- * border shorthand/folding support
12
- * re-implement caching on CssParser.merge
13
- * correctly parse http://www.webstandards.org/files/acid2/test.html
@@ -1,21 +0,0 @@
1
- === Ruby CSS Parser License
2
-
3
- Copyright (c) 2007 Alex Dunae
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
@@ -1,58 +0,0 @@
1
- === Ruby CSS Parser
2
-
3
- Load, parse and cascade CSS rule sets in Ruby.
4
-
5
- ==== Setup
6
-
7
- Install the gem from RubyGems.
8
-
9
- gem install css_parser
10
-
11
- Done.
12
-
13
- ==== An example
14
- require 'css_parser'
15
- include CssParser
16
-
17
- parser = CssParser::Parser.new
18
- parser.load_file!('http://example.com/styles/style.css')
19
-
20
- # lookup a rule by a selector
21
- parser.find('#content')
22
- #=> 'font-size: 13px; line-height: 1.2;'
23
-
24
- # lookup a rule by a selector and media type
25
- parser.find('#content', [:screen, :handheld])
26
-
27
- # iterate through selectors by media type
28
- parser.each_selector(:screen) do |selector, declarations, specificity|
29
- ...
30
- end
31
-
32
- # add a block of CSS
33
- css = <<-EOT
34
- body { margin: 0 1em; }
35
- EOT
36
-
37
- parser.add_block!(css)
38
-
39
- # output all CSS rules in a single stylesheet
40
- parser.to_s
41
- => #content { font-size: 13px; line-height: 1.2; }
42
- body { margin: 0 1em; }
43
-
44
- ==== Testing
45
-
46
- You can run the suite of unit tests using <tt>rake test</tt>.
47
-
48
- The download/import tests require that WEBrick is installed. The tests set up
49
- a temporary server on port 12000 and pull down files from the <tt>test/fixtures/</tt>
50
- directory.
51
-
52
- ==== Credits and code
53
-
54
- By Alex Dunae (dunae.ca, e-mail 'code' at the same domain), 2007-08.
55
-
56
- Thanks to Dana (http://github.com/DanaDanger) for the 0.9.1 update.
57
-
58
- Made on Vancouver Island.