gnome-control-center/panels/sound/data/symbolic-icons/r.rb
William Jon McCann 6638e984ca Initial import of sound panel
Copied from gnome-media.  See that module for git history.
2010-10-30 14:48:55 -04:00

73 lines
2.4 KiB
Ruby
Executable file

#!/usr/bin/env ruby
require "rexml/document"
require "fileutils"
include REXML
#INKSCAPE = '/opt/artlibre/bin/inkscape'
INKSCAPE = '/usr/bin/inkscape' # like this works for me, while using `which` inkscape hangs
SRC = "src/gnome-media.svg"
PREFIX = "scalable"
def chopSVG(icon)
FileUtils.mkdir_p(icon[:dir]) unless File.exists?(icon[:dir])
unless (File.exists?(icon[:file]) && !icon[:forcerender])
FileUtils.cp(SRC,icon[:file])
puts " >> #{icon[:name]}"
cmd = "#{INKSCAPE} -f #{icon[:file]} --select #{icon[:id]} --verb=FitCanvasToSelection --verb=EditInvertInAllLayers "
cmd += "--verb=EditDelete --verb=EditSelectAll --verb=SelectionUnGroup --verb=StrokeToPath --verb=FileVacuum "
cmd += "--verb=FileSave --verb=FileClose > /dev/null 2>&1"
system(cmd)
#saving as plain SVG gets rid of the classes :/
#cmd = "#{INKSCAPE} -f #{icon[:file]} -z --vacuum-defs -l #{icon[:file]} > /dev/null 2>&1"
#system(cmd)
svgcrop = Document.new(File.new(icon[:file], 'r'))
svgcrop.root.each_element("//rect") do |rect|
if rect.attributes["width"] == '16' && rect.attributes["height"] == '16'
rect.remove
end
end
icon_f = File.new(icon[:file],'w+')
icon_f.puts svgcrop
icon_f.close
else
puts " -- #{icon[:name]} already exists"
end
end #end of function
#main
# Open SVG file.
svg = Document.new(File.new(SRC, 'r'))
if (ARGV[0].nil?) #render all SVGs
puts "Rendering from icons in #{SRC}"
# Go through every layer.
svg.root.each_element("/svg/g[@inkscape:groupmode='layer']") do |context|
context_name = context.attributes.get_attribute("inkscape:label").value
puts "Going through layer '" + context_name + "'"
context.each_element("g") do |icon|
#puts "DEBUG #{icon.attributes.get_attribute('id')}"
dir = "#{PREFIX}/#{context_name}"
icon_name = icon.attributes.get_attribute("inkscape:label").value
chopSVG({ :name => icon_name,
:id => icon.attributes.get_attribute("id"),
:dir => dir,
:file => "#{dir}/#{icon_name}-symbolic.svg"})
end
end
puts "\nrendered all SVGs"
else #only render the icons passed
icons = ARGV
ARGV.each do |icon_name|
icon = svg.root.elements["//g[@inkscape:label='#{icon_name}']"]
dir = "#{PREFIX}/#{icon.parent.attributes['inkscape:label']}"
chopSVG({ :name => icon_name,
:id => icon.attributes["id"],
:dir => dir,
:file => "#{dir}/#{icon_name}-symbolic.svg",
:forcerender => true})
end
puts "\nrendered #{ARGV.length} icons"
end