bin/generate_source_icons
#!/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) }