summaryrefslogtreecommitdiffstats
path: root/gtk/src
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/src')
-rw-r--r--gtk/src/create_resources.py160
1 files changed, 160 insertions, 0 deletions
diff --git a/gtk/src/create_resources.py b/gtk/src/create_resources.py
new file mode 100644
index 000000000..1e346fb9b
--- /dev/null
+++ b/gtk/src/create_resources.py
@@ -0,0 +1,160 @@
+#! /bin/python
+#
+
+import gtk
+import types
+import os
+import sys
+import time
+import datetime
+import plistlib
+import getopt
+from xml.parsers import expat
+
+
+pl = dict()
+stack = list()
+stack.append(pl)
+
+def top(ss):
+ return ss[len(ss)-1]
+
+def end_element_handler(tag):
+ global stack
+
+ if tag == "section":
+ stack.pop()
+
+def start_element_handler(tag, attr):
+ global pl, stack
+
+ current = top(stack)
+ key = val = None
+ if tag == "section":
+ key = attr["name"]
+ if key == "icons":
+ val = dict()
+ stack.append(val)
+ elif tag == "icon":
+ fname = attr["file"]
+ fname = find_file(fname)
+ key = attr["name"]
+ if fname != None and key != None:
+ val = dict()
+ pb = gtk.gdk.pixbuf_new_from_file(fname)
+ val["colorspace"] = pb.get_colorspace()
+ val["alpha"] = pb.get_has_alpha()
+ val["bps"] = pb.get_bits_per_sample()
+ val["width"] = pb.get_width()
+ val["height"] = pb.get_height()
+ val["rowstride"] = pb.get_rowstride()
+ val["data"] = plistlib.Data(pb.get_pixels())
+ elif tag == "plist":
+ fname = attr["file"]
+ fname = find_file(fname)
+ key = attr["name"]
+ if fname != None and key != None:
+ val = plistlib.readPlist(fname)
+ elif tag == "string":
+ fname = attr["file"]
+ fname = find_file(fname)
+ key = attr["name"]
+ if fname != None and key != None:
+ try:
+ ff = open(fname)
+ val = ff.read()
+ except Exception, err:
+ print >> sys.stderr, ( "Error: %s" % str(err) )
+
+ if val != None:
+ if type(current) == types.DictType:
+ current[key] = val
+ elif type(current) == types.TupleType:
+ current.append(val)
+
+
+def cdata_handler(str):
+ return
+
+def resource_parse_file(infile):
+ parser = expat.ParserCreate()
+ parser.StartElementHandler = start_element_handler
+ parser.EndElementHandler = end_element_handler
+ parser.CharacterDataHandler = cdata_handler
+ parser.ParseFile(infile)
+
+def usage():
+ print >> sys.stderr, (
+ "Usage: %s [-I <inc path>] <resource list> [resource plist]\n"
+ "Summary:\n"
+ " Creates a resource plist from a resource list\n\n"
+ "Options:\n"
+ " I - Include path to search for files\n"
+ " <resource list> Input resources file\n"
+ " <resource plist> Output resources plist file\n"
+ % sys.argv[0]
+ )
+
+inc_list = list()
+
+def find_file(name):
+ global inc_list
+
+ for inc_dir in inc_list:
+ inc = "%s/%s" % inc_dir, name
+ if os.path.isfile(inc):
+ return inc
+
+ if os.path.isfile(name):
+ return name
+
+ return None
+
+def main():
+ global inc_list
+
+ OPTS = "I:"
+ try:
+ opts, args = getopt.gnu_getopt(sys.argv[1:], OPTS)
+ except getopt.GetoptError, err:
+ print >> sys.stderr, str(err)
+ usage()
+ sys.exit(2)
+
+ for o, a in opts:
+ if o == "-I":
+ # add to include list
+ inc_list.append(a)
+ else:
+ assert False, "unhandled option"
+
+ if len(args) > 2 or len(args) < 1:
+ usage()
+ sys.exit(2)
+
+ try:
+ infile = open(args[0])
+ except Exception, err:
+ print >> sys.stderr, ( "Error: %s" % str(err) )
+ sys.exit(1)
+
+ try:
+ infile = open(args[0])
+ except Exception, err:
+ print >> sys.stderr, ( "Error: %s" % str(err) )
+ sys.exit(1)
+
+ if len(args) > 1:
+ try:
+ outfile = open(args[1], "w")
+ except Exception, err:
+ print >> sys.stderr, ( "Error: %s" % str(err))
+ sys.exit(1)
+ else:
+ outfile = sys.stdout
+
+ resource_parse_file(infile)
+ plistlib.writePlist(pl, outfile)
+
+main()
+