summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjstebbins <[email protected]>2009-03-27 02:18:53 +0000
committerjstebbins <[email protected]>2009-03-27 02:18:53 +0000
commita5eab51e9af0ba1cba513ecd323744958e701c65 (patch)
tree6e79829af071be486fc984d64aac3f8fa8c7afab
parent5cb3af61b0901b822e451d209108e2d79be6d683 (diff)
LinGui: rewrite my resource parser in python.
It's not quite ready for use because it requires python 2.6 and none of the distributions have 2.6 yet. I'm getting a head start. This is the first of a few tools that I'm rewriting in python because compiling them at build time causes problems in a cross compiling environment. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2277 b64f7644-9d1e-0410-96f1-a4d463321fa5
-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()
+