raubarede/Ruiby

View on GitHub
bin/generate_source_icons

Summary

Maintainability
Test Coverage
#!/usr/bin/ruby
#####################################################
# make a ruby source with  base64 data, from binary file (raster)
# load the source generated and show icons in a Window
#######################################################

########################## Make a source 
## code in base64 each png file in args, result to ruby source

require 'base64'
require 'tmpdir'
#require_relative '../lib/ruiby.rb'
require 'Ruiby'

str=<<EEND1
########## Generated by 'generate_source_icons'
#  use get_icon_filename('foo') for make and get a file name in tmp dir which contain data
#  use get_icon_data('foo') for get binary data

require 'base64'
require 'tmpdir'
$icons={}
EEND1
raise("no filenames in parameter,\n usage : >#{$0} code.rb  1.png 2.png ...") if ARGV.size<2
raise("give a file name to be generate or '-' in place of #{1}") if ARGV[0] =~ /(gif|png)$/i

filename_src=ARGV.shift
puts <<EEND2
 Generation of file #{filename_src}
 for each raster file #{ ARGV.join(", ") }
EEND2
sleep(3)

lvar=[]
ARGV.each { |fn|
 raise("filename '#{fn}' not exist!") unless File.exists?(fn)
 varname=File.basename(fn).split('.')[0].gsub(/[^a-zA-Z0-9]+/,"_").downcase
 File.open(fn,"rb") { |f|   str+= "\n$icons['#{varname}']=<<EEND\n"+Base64.encode64(f.read)+"EEND\n" }
 lvar << varname
}
str+=<<'EEND3'
def get_icon_filename(name)
  raise("icon '#{name}' unknown in #{$icons.keys}") unless $icons[name]
  fname=File.join(Dir.tmpdir,name+".png")
  content=$icons[name].unpack('m')[0]
  puts "#{name} ==> #{fname} / #{$icons[name].size}" if $DEBUG
  File.open(fname,"wb") { |f| f.write(content) } unless File.exists?(fname) && File.size(fname)==content.size
  fname
end
def get_icon_data(name)
  raise("icon '#{name}' unknown in #{$icons.keys}") unless $icons[name]
  $icons[name].unpack('m')
end
EEND3

if filename_src!="-"
    File.open(filename_src,"w") { |f| f.write(str) }
else
   puts str
   exit
end
STDERR.puts "#{lvar.join(", ")} done size=#{str.size} to #{filename_src}"


####################################################### test source generated

load filename_src

class X < Ruiby_gtk
   def initialize(fn,b,c)
        @fn=fn
        super("",b,c)
    end    
    def component()
      stack do
        label('  Icones in  '+File.basename(@fn)+'  ')
        separator
        space
        table(2,1) do
            $icons.keys.each do |n| 
                row{ cell_right(label(n+' : ')) ; cell(label("#"+get_icon_filename(n) )) }
            end
        end
        space
      end
    end
end
Ruiby.start { X.new(filename_src,100,100) }