Listing: create_round_corner_css.rb
      Click 
here to download original file.
    
#!/usr/bin/ruby -w
=begin
/***************************************************************************
 *   Copyright (C) 2008, Paul Lutus                                        *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
=end
# version: 1.4
if !ARGV[0] || ARGV.length < 4
   puts "usage:   bordercolor (hex) bg_color (hex) radius id"
   puts "example: c0c0c0 ffffff 16 parch"
   puts "result: creates stylesheet file and sample HTML"
   exit 0
else
   border,interior,radius,id = ARGV
end
graphic_background = (interior =~ /url\(/i)
css_baseclass = "roundcorner_#{radius}_#{id}"
target_css = "#{css_baseclass}.css"
target_html = "#{css_baseclass}.html"
radius = radius.to_i
array = []
# create an array of margin values
0.upto(radius-1) do |i|
   x = i.to_f/radius
   y = 1.0 - Math.sqrt(1.0-(x*x))
   r = (y * radius).to_i
   array << r if r > 0
end
# content of sample HTML page
roundcorner_html = "<html>\n<head>\n"
roundcorner_html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"#{target_css}\"/>\n"
roundcorner_html += "</head>\n<body bgcolor=\"#e0f0ff\">\n"
roundcorner_html += "<div style=\"width:60%;margin-left:15%;height:60%; margin-top:15%;\">\n"
roundcorner_html += "<span class=\"#{css_baseclass}\">\n"
# content of CSS file
roundcorner_css = ".#{css_baseclass} {\ndisplay: block;\n}\n\n"
roundcorner_css += ".#{css_baseclass} * {\ndisplay:block;\noverflow:hidden;\nheight:1px;"
if(graphic_background)
   roundcorner_css += "\nbackground: ##{interior};"
else
   roundcorner_css += "\nbackground-color: ##{interior};"
end
roundcorner_css += "\n}\n\n"
n = 0
array.reverse.each do |item|
   roundcorner_css += ".#{css_baseclass}#{n} {\nmargin-right: #{item}px;\nmargin-left: #{item}px;"
   if(graphic_background)
      roundcorner_css += "\nbackground-position: -#{item}px -#{n}px;"
   else
      if(n == 0)
         roundcorner_css += "\nbackground-color: ##{border};"
      end
   end
   if(n > 0)
      # stretch the border width for certain radii
      bw = 1+(item/6)
      roundcorner_css += "\nborder-left:#{bw}px solid ##{border};"
      roundcorner_css += "\nborder-right:#{bw}px solid ##{border};"
   end
   roundcorner_css += "\n}\n\n"
   roundcorner_html += "<span class=\"#{css_baseclass}#{n}\"></span>\n"
   n += 1
end
roundcorner_css += ".#{css_baseclass}_content {\npadding-right:#{radius}px;\npadding-left:#{radius}px;\ndisplay:block;"
if(graphic_background)
   roundcorner_css += "\nbackground: #{interior};\nbackground-position: 0px -#{array.size}px;"
else
   roundcorner_css += "\nbackground-color: ##{interior};"
end
roundcorner_css += "\nborder-left:1px solid ##{border};"
roundcorner_css += "\nborder-right:1px solid ##{border};"
roundcorner_css += "\n}\n\n"
# content section of the HTML
roundcorner_html += "</span>\n"
roundcorner_html += "<div class=\"#{css_baseclass}_content\">"
roundcorner_html += "sample content " * 48
roundcorner_html += "</div>\n"
roundcorner_html += "<span class=\"#{css_baseclass}\">\n"
(array.size-1).downto(0) do |n|
   roundcorner_html += "<span class=\"#{css_baseclass}#{n}\"></span>\n"
end
# prettify the CSS
prettified_css = ""
tab = 0
roundcorner_css.each do |line|
   tab -= 1 if(line =~ /\}/)
   prettified_css += "  " * tab + line
   tab += 1 if(line =~ /\{/)
end
# more sample page output
roundcorner_html += "</span>\n</div>\n</body>\n</html>\n"
# save the CSS and HTML content
File.open(target_css,"w") { |f| f.write(prettified_css) }
File.open(target_html,"w") { |f| f.write(roundcorner_html) }