Rhea Myers

clipfix

#!/usr/bin/env ruby

################################################################################

clipfix - Destructively change clip styles to properties in svg files in cwd.

Copyright 2009 Rhea Myers [email protected]

Licensed under the GNU GPL Version 3 or, at your option, any later version.

################################################################################

################################################################################

Requires

################################################################################

require ‘ftools’
require ‘find’

################################################################################

Functions

################################################################################

Destructively move the clip-path tag from the style to its own property

#   as Inkscape doesn’t like it as a style element.

def clipfix_file(filename)
output = File.open("#{filename}.new", ‘w’)
input = File.open(filename)

input.each do |line|

Assumes each sytle property begins and ends on the same line

#   which seems to be the case for Inkscape.
output.puts(line.gsub(/style="(.)clip-path:(.+?);(.)"/,
‘clip-path="\2" style="\1\3"’))
end

input.close()
output.close()

#File.move(filename, “#{filename}.old”)
File.move("#{filename}.new", filename)
end

################################################################################

Main flow of control

################################################################################

Make sure the user really wants to do this

puts(“Really destructively move clip-path from style to property in all svg files in this directory? [y/N]”)
answer=gets().chomp()
unless(answer.casecmp(“y”) == 0)
puts(“Not converting.”)
exit(0)
end

Destructively convert all svg files in the current working directory

Dir.glob("./*.svg") do |filename|
puts(“clipfixing #{filename}”)
clipfix_file(filename)
end