lib/rainpress.rb in rainpress-1.0 vs lib/rainpress.rb in rainpress-1.0.1
- old
+ new
@@ -1,22 +1,6 @@
-# == Information
-#
-# This is the main class of Rainpress, create an instance of it to compress
-# your CSS-styles.
-#
-# Author:: Uwe L. Korn <uwelk@xhochy.org>
-#
-# <b>Options:</b>
-#
-# * <tt>:comments</tt> - if set to false, comments will not be removed
-# * <tt>:newlines</tt> - if set to false, newlines will not be removed
-# * <tt>:spaces</tt> - if set to false, spaces will not be removed
-# * <tt>:colors</tt> - if set to false, colors will not be modified
-# * <tt>:misc</tt> - if set to false, miscellaneous compression parts will be skipped
class Rainpress
- # Quick-compress the styles.
- # This eliminates the need to create an instance of the class
def self.compress(style, options = {})
self.new(style, options).compress!
end
def initialize(style, opts = {})
@@ -45,11 +29,11 @@
#
# Only /* text */ comments are supported.
# Attention: If you are doing css hacks for IE using the comment tricks,
# they will be removed using this function. Please consider for IE css style
# corrections the usage of conditionals comments in your (X)HTML document.
- def remove_comments!
+ def remove_comments!
input = @style
@style = ''
while input.length > 0 do
pos = input.index("/*");
@@ -64,105 +48,105 @@
# Comment ending at pos
pos = input.index("*/")
input = input[(pos+2)..-1]
end
end
- end
+ end
# Remove all newline characters
#
# We take care of Windows(\r\n), Unix(\n) and Mac(\r) newlines.
- def remove_newlines!
- @style.gsub! /\n|\r/, ''
- end
+ def remove_newlines!
+ @style.gsub!(/\n|\r/, '')
+ end
- # Remove unneeded spaces
- #
+ # Remove unneeded spaces
+ #
# 1. Turn mutiple spaces into a single
# 2. Remove spaces around ;:{},
# 3. Remove tabs
def remove_spaces!
- @style.gsub! /\s*(\s|;|:|\}|\{|,)\s*/, '\1'
+ @style.gsub!(/\s*(\s|;|:|\}|\{|,)\s*/, '\1')
@style.gsub! "\t", ''
- end
+ end
- # Replace color values with their shorter equivalent
- #
- # 1. Turn rgb(,,)-colors into #-values
- # 2. Shorten #AABBCC down to #ABC
- # 3. Replace names with their shorter hex-equivalent
- # * white -> #fff
+ # Replace color values with their shorter equivalent
+ #
+ # 1. Turn rgb(,,)-colors into #-values
+ # 2. Shorten #AABBCC down to #ABC
+ # 3. Replace names with their shorter hex-equivalent
+ # * white -> #fff
# * black -> #000
- # 4. Replace #-values with their shorter name
- # * #f00 -> red
- def shorten_colors!
- # rgb(50,101,152) to #326598
- @style.gsub! /rgb\s*\(\s*([0-9,\s]+)\s*\)/ do |match|
+ # 4. Replace #-values with their shorter name
+ # * #f00 -> red
+ def shorten_colors!
+ # rgb(50,101,152) to #326598
+ @style.gsub!(/rgb\s*\(\s*([0-9,\s]+)\s*\)/) do |match|
out = '#'
$1.split(',').each do |num|
out += '0' if num.to_i < 16
out += num.to_i.to_s(16) # convert to hex
end
out
end
# Convert #AABBCC to #ABC, keep if preceed by a '='
- @style.gsub! /([^\"'=\s])(\s*)#([\da-f])\3([\da-f])\4([\da-f])\5/i, '\1#\3\4\5'
+ @style.gsub!(/([^\"'=\s])(\s*)#([\da-f])\3([\da-f])\4([\da-f])\5/i, '\1#\3\4\5')
# At the moment we assume that colours only appear before ';' or '}' and
# after a ':', if there could be an occurence of a color before or after
# an other character, submit either a bug report or, better, a patch that
# enables Rainpress to take care of this.
# shorten several names to numbers
## shorten white -> #fff
- @style.gsub! /:\s*white\s*(;|\})/, ':#fff\1'
+ @style.gsub!(/:\s*white\s*(;|\})/, ':#fff\1')
## shorten black -> #000
- @style.gsub! /:\s*black\s*(;|\})/, ':#000\1'
+ @style.gsub!(/:\s*black\s*(;|\})/, ':#000\1')
# shotern several numbers to names
## shorten #f00 or #ff0000 -> red
- @style.gsub! /:\s*#f{1,2}0{2,4}(;|\})/i, ':red\1'
+ @style.gsub!(/:\s*#f{1,2}0{2,4}(;|\})/i, ':red\1')
end
# Do miscellaneous compression methods on the style.
def do_misc!
# Replace 0(pt,px,em,%) with 0 but only when preceded by : or a white-space
- @style.gsub! /([\s:]+)(0)(px|em|%|in|cm|mm|pc|pt|ex)/i, '\1\2'
+ @style.gsub!(/([\s:]+)(0)(px|em|%|in|cm|mm|pc|pt|ex)/i, '\1\2')
# Replace :0 0 0 0(;|}) with :0(;|})
- @style.gsub! /:0 0 0 0(;|\})/, ':0\1'
+ @style.gsub!(/:0 0 0 0(;|\})/, ':0\1')
# Replace :0 0 0(;|}) with :0(;|})
- @style.gsub! /:0 0 0(;|\})/, ':0\1'
+ @style.gsub!(/:0 0 0(;|\})/, ':0\1')
# Replace :0 0(;|}) with :0(;|})
- @style.gsub! /:0 0(;|\})/, ':0\1'
+ @style.gsub!(/:0 0(;|\})/, ':0\1')
# Replace background-position:0; with background-position:0 0;
@style.gsub! 'background-position:0;', 'background-position:0 0;'
# Replace 0.6 to .6, but only when preceded by : or a white-space
- @style.gsub! /[:\s]0+\.(\d+)/ do |match|
+ @style.gsub!(/[:\s]0+\.(\d+)/) do |match|
match.sub '0', '' # only first '0' !!
end
# Replace multiple ';' with a single ';'
- @style.gsub! /[;]+/, ';'
+ @style.gsub!(/[;]+/, ';')
# Replace ;} with }
@style.gsub! ';}', '}'
# Replace font-weight:normal; with 400
- @style.gsub! /font-weight[\s]*:[\s]*normal[\s]*(;|\})/i,'font-weight:400\1'
- @style.gsub! /font[\s]*:[\s]*normal[\s;\}]*/ do |match|
+ @style.gsub!(/font-weight[\s]*:[\s]*normal[\s]*(;|\})/i,'font-weight:400\1')
+ @style.gsub!(/font[\s]*:[\s]*normal[\s;\}]*/) do |match|
match.sub 'normal', '400'
end
# Replace font-weight:bold; with 700
- @style.gsub! /font-weight[\s]*:[\s]*bold[\s]*(;|\})/,'font-weight:700\1'
- @style.gsub! /font[\s]*:[\s]*bold[\s;\}]*/ do |match|
+ @style.gsub!(/font-weight[\s]*:[\s]*bold[\s]*(;|\})/,'font-weight:700\1')
+ @style.gsub!(/font[\s]*:[\s]*bold[\s;\}]*/) do |match|
match.sub 'bold', '700'
end
end
-end
\ No newline at end of file
+end