def self.minify(input)
css = input.is_a?(IO) ? input.read : input.dup.to_s
css.gsub!(/\/\*[\s\S]*?\*\//, '')
css.gsub!(/\s+/, ' ')
css.gsub!(/"\\"\}\\""/, '___BMH___')
css.gsub!(/(?:^|\})[^\{:]+\s+:+[^\{]*\{/) do |match|
match.gsub(':', '___PSEUDOCLASSCOLON___')
end
css.gsub!(/\s+([!\{\};:>+\(\)\],])/, '\1')
css.gsub!('___PSEUDOCLASSCOLON___', ':')
css.gsub!(/([!\{\}:;>+\(\[,])\s+/, '\1')
css.gsub!(/([^;\}])\}/, '\1;}')
css.gsub!(/([\s:])([+-]?0)(?:%|em|ex|px|in|cm|mm|pt|pc)/i, '\1\2')
css.gsub!(/:(?:0 )+0;/, ':0;')
css.gsub!('background-position:0;', 'background-position:0 0;')
css.gsub!(/(:|\s)0+\.(\d+)/, '\1.\2')
css.gsub!(/rgb\s*\(\s*([0-9,\s]+)\s*\)/) do |match|
'#' << $1.scan(/\d+/).map{|n| n.to_i.to_s(16).rjust(2, '0') }.join
end
css.gsub!(/([^"'=\s])(\s?)\s*#([0-9a-f])\3([0-9a-f])\4([0-9a-f])\5/i, '\1\2#\3\4\5')
css.gsub!(/[^\}]+\{;\}\n/, '')
css.gsub!('___BMH___', '"\"}\""')
css.gsub!(/\band\(/, 'and (')
css.gsub!(/;+\}/, '}')
css.strip
end