mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Script for easier icon theme conversion
This commit is contained in:
parent
5c4c0eeafc
commit
4609947b53
133
data/icon-themes/icon-theme-convert
Executable file
133
data/icon-themes/icon-theme-convert
Executable file
@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env python
|
||||
# Converts svg icon theme to png one using inkscape or rsvg
|
||||
|
||||
import os.path
|
||||
import os
|
||||
import sys
|
||||
import stat
|
||||
|
||||
inkscape_path = None
|
||||
rsvg_path = None
|
||||
|
||||
SIZES = ["16x16", "22x22", "32x32", "48x48", "64x64", "128x128"]
|
||||
|
||||
def find_converter(name):
|
||||
env_list = os.environ["PATH"].split(":")
|
||||
|
||||
for i in env_list:
|
||||
path = "%s/%s" % (i, name)
|
||||
if os.access(path, os.F_OK) and os.access(path, os.X_OK):
|
||||
return path
|
||||
return None
|
||||
|
||||
def convert_ext(name):
|
||||
if name[-4:] == ".svg":
|
||||
return name.replace(".svg", ".png")
|
||||
else:
|
||||
return name
|
||||
|
||||
def dir_exists(path):
|
||||
# first use this since stat() scream if not exists
|
||||
if not os.access(path, os.F_OK):
|
||||
return False
|
||||
mode = os.stat(path)[stat.ST_MODE]
|
||||
return stat.S_ISDIR(mode)
|
||||
|
||||
def in_subdir(path):
|
||||
all = path.split("/")[1:]
|
||||
return len(all)
|
||||
|
||||
# transform 'foo/XX/yy' to 'dest/sz/yy'
|
||||
def transform_path(path, dest, sz):
|
||||
all = path.split("/")
|
||||
|
||||
# this means we got 'theme/scalable' but we want 'theme/scalable/something/'
|
||||
if len(all) < 3:
|
||||
return None
|
||||
|
||||
all[0] = dest
|
||||
all[1] = sz
|
||||
return "/".join(all)
|
||||
|
||||
def visit(destdir, dirname, names):
|
||||
cmd = None
|
||||
|
||||
# os.walk will first walk on the top of source directory before
|
||||
# enters it's childs; we are interested only in childs
|
||||
if not in_subdir(dirname):
|
||||
return
|
||||
|
||||
for name in names:
|
||||
for sz in SIZES:
|
||||
w, h = sz.split("x")
|
||||
|
||||
finaldir = transform_path(dirname, destdir, sz)
|
||||
if finaldir == None:
|
||||
continue
|
||||
|
||||
srcicon = "%s/%s" % (dirname, name)
|
||||
dsticon = "%s/%s" % (finaldir, convert_ext(name))
|
||||
|
||||
# make it once without exception
|
||||
if not dir_exists(finaldir):
|
||||
os.makedirs(finaldir)
|
||||
|
||||
if inkscape_path:
|
||||
cmd = "%s -e %s -w %s -h %s %s" % (inkscape_path, dsticon, w, h, srcicon)
|
||||
elif rsvg_path:
|
||||
cmd = "%s -w %s -h %s %s %s" % (rsvg_path, w, h, srcicon, dsticon)
|
||||
|
||||
print "%s -> %s" % (srcicon, dsticon)
|
||||
if os.system(cmd) != 0:
|
||||
print "FAILED :("
|
||||
|
||||
def convert(srcdir, dstdir):
|
||||
os.path.walk(srcdir, visit, dstdir)
|
||||
|
||||
def help():
|
||||
print "Usage: icon-theme-convert [source] [dest]"
|
||||
print ""
|
||||
print "Convert [source] icon theme (assumed all files are in SVG format)"
|
||||
print "to PNG equivalent one, using rsvg or inkscape. Converted content will be stored in [source]."
|
||||
print "If [dest] was given, converted content will be stored there."
|
||||
|
||||
def main():
|
||||
arg_len = len(sys.argv)
|
||||
|
||||
if not arg_len in [2, 3]:
|
||||
help()
|
||||
return
|
||||
|
||||
# mark them as global
|
||||
global inkscape_path
|
||||
global rsvg_path
|
||||
|
||||
cpath = find_converter("inkscape")
|
||||
if cpath:
|
||||
inkscape_path = cpath
|
||||
else:
|
||||
cpath = find_converter("rsvg")
|
||||
if cpath:
|
||||
rsvg_path = cpath
|
||||
else:
|
||||
print "\nUnable to find either inkscape or rsvg. If you have installed"
|
||||
print "one of them, append it's directory path to PATH environment.\n"
|
||||
print "But if you don't have installed neither of them... well..."
|
||||
print "you know what to do then :P\n"
|
||||
return
|
||||
|
||||
src = sys.argv[1]
|
||||
|
||||
if arg_len == 3:
|
||||
dst = sys.argv[2]
|
||||
else:
|
||||
dst = src
|
||||
|
||||
if not dir_exists(src):
|
||||
print "%s does not exists. Then what to convert?" % src
|
||||
return
|
||||
|
||||
convert(src, dst)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user