From 36d98dab2daa7ee226f0da63579027b1cc2856b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Ignacio=20Romero?= Date: Mon, 30 May 2016 08:37:58 -0400 Subject: [PATCH] Add script for generating icons under resources/linux/mime/icons Quick and dirty script gathers the original SVG icons from the bitmaps_png folder and generates bitmaps at several sizes named according to the mime type or application name. To get the names, the script reads the kicad-kicad.xml mime package and the application .desktop files, reconciling both to make sure all defined types have proper associations. --- scripts/mk_mime_icons.py | 81 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 scripts/mk_mime_icons.py diff --git a/scripts/mk_mime_icons.py b/scripts/mk_mime_icons.py new file mode 100644 index 0000000000..96e6653e50 --- /dev/null +++ b/scripts/mk_mime_icons.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +# Regenerate the icons in resources/linux/mime based on the mime files +# and the original icons in bitmaps_png. Must be run from the scripts +# folder for the relative paths to work. +# +# This script assumes Inkscape is installed and in the PATH + +import os, glob +import xml.etree.ElementTree as ET +from shutil import copyfile, rmtree +from subprocess import call + +ICON_SOURCES = "../bitmaps_png/sources/" +DEST_FOLDER = "../resources/linux/mime" + +def icon_sourcename(icon): + return ICON_SOURCES+"/icon_%s.svg" % icon + + +# Get a list of the applications we will install, their icons and mimes +app_icons = {} +for desktopfile in glob.glob(DEST_FOLDER+"/applications/*.desktop"): + icon = None + mimes = [] + for line in open(desktopfile): + keypair = map(str.strip, line.split("=")) + if len(keypair) != 2: continue + key, value = keypair + if key == "Icon": + icon = value + elif key == "MimeType": + mimes = [x.strip() for x in value.split(";") if str.strip(x)] + if icon is None: + print "WARNING: file '", desktopfile, "' contains no Icon entry, corrupted?" + continue + else: + app_icons[icon] = mimes; + +# Obtain the mime types we provide from the mime package XML +MIME_PACKAGE = DEST_FOLDER+"/mime/packages/kicad-kicad.xml" +mimepkg_root = ET.parse(MIME_PACKAGE).getroot() +mimepkg_mimetypes = [n.attrib['type'] for n in mimepkg_root] + +# Reconcile mime types +mime_icons = {} +for mime in mimepkg_mimetypes: + for icon, mimes in app_icons.iteritems(): + if mime in mimes: + mime_icons[mime.replace('/','-')] = icon + break + else: + print "WARNING: mimetype'", mime,"' is provided in the package, but no app is associated with it." + + +RESOLUTIONS = [16,22,24,32,48,64,128] + + +rmtree(DEST_FOLDER+'/icons') +os.makedirs(DEST_FOLDER+'/icons/hicolor/scalable/apps') +os.makedirs(DEST_FOLDER+'/icons/hicolor/scalable/mimetypes') +for r in RESOLUTIONS: + os.makedirs(DEST_FOLDER+'/icons/hicolor/%ix%i/apps' % (r,r)) + os.makedirs(DEST_FOLDER+'/icons/hicolor/%ix%i/mimetypes' % (r,r)) + +for icon in app_icons.keys(): + copyfile(icon_sourcename(icon), + DEST_FOLDER+"/icons/hicolor/scalable/apps/%s.svg" % icon) + for r in RESOLUTIONS: + call(['inkscape', '-f', icon_sourcename(icon), + '-e', DEST_FOLDER+'/icons/hicolor/%ix%i/apps/%s.png' % (r, r, icon), + '-w', str(r), '-h', str(r), '--export-area-snap']) + + +for mime, icon in mime_icons.iteritems(): + copyfile(icon_sourcename(icon), + DEST_FOLDER+"/icons/hicolor/scalable/mimetypes/%s.svg" % mime) + for r in RESOLUTIONS: + call(['inkscape', '-f', icon_sourcename(icon), + '-e', DEST_FOLDER+'/icons/hicolor/%ix%i/mimetypes/%s.png' % (r, r, mime), + '-w', str(r), '-h', str(r), '--export-area-snap'])