Class: Rainpress
- Inherits:
-
Object
- Object
- Rainpress
- Defined in:
- lib/rainpress.rb,
lib/rainpress/version.rb
Constant Summary collapse
- VERSION =
'1.0.1'
Class Method Summary collapse
Instance Method Summary collapse
-
#compress! ⇒ Object
Run the compressions and return the newly compressed text.
-
#do_misc! ⇒ Object
Do miscellaneous compression methods on the style.
-
#initialize(style, opts = {}) ⇒ Rainpress
constructor
A new instance of Rainpress.
-
#remove_comments! ⇒ Object
Remove all comments out of the CSS-Document.
-
#remove_newlines! ⇒ Object
Remove all newline characters.
-
#remove_spaces! ⇒ Object
Remove unneeded spaces.
-
#shorten_colors! ⇒ Object
Replace color values with their shorter equivalent.
Constructor Details
#initialize(style, opts = {}) ⇒ Rainpress
Returns a new instance of Rainpress.
6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/rainpress.rb', line 6 def initialize(style, opts = {}) @style = style @opts = { :comments => true, :newlines => true, :spaces => true, :colors => true, :misc => true } @opts.merge! opts end |
Class Method Details
.compress(style, options = {}) ⇒ Object
2 3 4 |
# File 'lib/rainpress.rb', line 2 def self.compress(style, = {}) self.new(style, ).compress! end |
Instance Method Details
#compress! ⇒ Object
Run the compressions and return the newly compressed text
19 20 21 22 23 24 25 26 |
# File 'lib/rainpress.rb', line 19 def compress! remove_comments! if @opts[:comments] remove_newlines! if @opts[:newlines] remove_spaces! if @opts[:spaces] shorten_colors! if @opts[:colors] do_misc! if @opts[:misc] @style end |
#do_misc! ⇒ Object
Do miscellaneous compression methods on the style.
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/rainpress.rb', line 112 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') # Replace :0 0 0 0(;|}) with :0(;|}) @style.gsub!(/:0 0 0 0(;|\})/, ':0\1') # Replace :0 0 0(;|}) with :0(;|}) @style.gsub!(/:0 0 0(;|\})/, ':0\1') # Replace :0 0(;|}) with :0(;|}) @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| match.sub '0', '' # only first '0' !! end # Replace multiple ';' with a single ';' @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| 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| match.sub 'bold', '700' end end |
#remove_comments! ⇒ Object
Remove all comments out of the CSS-Document
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.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/rainpress.rb', line 34 def remove_comments! input = @style @style = '' while input.length > 0 do pos = input.index("/*"); # No more comments if pos == nil @style += input input = ''; else # Comment beginning at pos @style += input[0..(pos-1)] if pos > 0 # only append text if there is some input = input[(pos+2)..-1] # Comment ending at pos pos = input.index("*/") input = input[(pos+2)..-1] end end end |
#remove_newlines! ⇒ Object
Remove all newline characters
We take care of Windows(rn), Unix(n) and Mac(r) newlines.
58 59 60 |
# File 'lib/rainpress.rb', line 58 def remove_newlines! @style.gsub!(/\n|\r/, '') end |
#remove_spaces! ⇒ Object
Remove unneeded spaces
-
Turn mutiple spaces into a single
-
Remove spaces around ;:{},
-
Remove tabs
67 68 69 70 |
# File 'lib/rainpress.rb', line 67 def remove_spaces! @style.gsub!(/\s*(\s|;|:|\}|\{|,)\s*/, '\1') @style.gsub! "\t", '' end |
#shorten_colors! ⇒ Object
Replace color values with their shorter equivalent
-
Turn rgb(,,)-colors into #-values
-
Shorten #AABBCC down to #ABC
-
Replace names with their shorter hex-equivalent
-
white -> #fff
-
black -> #000
-
-
Replace #-values with their shorter name
-
#f00 -> red
-
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/rainpress.rb', line 81 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') # 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') ## shorten black -> #000 @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') end |