summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorjstebbins <[email protected]>2015-05-06 16:04:08 +0000
committerjstebbins <[email protected]>2015-05-06 16:04:08 +0000
commit9c0e97cc2c369e0c720441d182bbde20210742f4 (patch)
tree8b8f74ed24d0f617c9980d9043ebd53c33c531f3 /scripts
parent81bcee10d2ad88f44c0f7791f2dd8da4ee2c1b76 (diff)
libhb,cli: add preset management to libhb, use it in cli
This results in custom preset support in the CLI and additional command line options to fully support all preset keys. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@7158 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'scripts')
-rw-r--r--scripts/create_resources.py161
-rw-r--r--scripts/quotestring.py62
2 files changed, 223 insertions, 0 deletions
diff --git a/scripts/create_resources.py b/scripts/create_resources.py
new file mode 100644
index 000000000..95921d317
--- /dev/null
+++ b/scripts/create_resources.py
@@ -0,0 +1,161 @@
+#! /bin/python
+#
+
+import types
+import os
+import sys
+import time
+import datetime
+import json
+import plistlib
+import getopt
+from xml.parsers import expat
+
+resources = dict()
+stack = list()
+stack.append(resources)
+
+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 resources, stack
+
+ current = top(stack)
+ key = val = None
+ if tag == "section":
+ key = attr["name"]
+ val = dict()
+ stack.append(val)
+ elif tag == "integer":
+ key = attr["name"]
+ val = int(attr["value"])
+ elif tag == "json":
+ fbase = attr["file"]
+ fname = find_file(fbase)
+ key = attr["name"]
+ if fname != None and key != None:
+ try:
+ fp = open(fname)
+ except Exception, err:
+ print >> sys.stderr, ( "Error: %s" % str(err) )
+ val = json.load(fp)
+ elif fname == None:
+ print >> sys.stderr, ( "Error: No such json file %s" % fbase )
+ sys.exit(1)
+ elif tag == "plist":
+ fbase = attr["file"]
+ fname = find_file(fbase)
+ key = attr["name"]
+ if fname != None and key != None:
+ val = plistlib.readPlist(fname)
+ elif fname == None:
+ print >> sys.stderr, ( "Error: No such plist file %s" % fbase )
+ sys.exit(1)
+ elif tag == "string":
+ fbase = attr["file"]
+ fname = find_file(fbase)
+ key = attr["name"]
+ if fname != None and key != None:
+ try:
+ fp = open(fname)
+ val = fp.read()
+ except Exception, err:
+ print >> sys.stderr, ( "Error: %s" % str(err) )
+ sys.exit(1)
+ elif fname == None:
+ print >> sys.stderr, ( "Error: No such string file %s" % fbase )
+ sys.exit(1)
+
+ 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 json]\n"
+ "Summary:\n"
+ " Creates a resource json from a resource list\n\n"
+ "Options:\n"
+ " I - Include path to search for files\n"
+ " <resource list> Input resources file\n"
+ " <resource json> Output resources json 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)
+
+ 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)
+ json.dump(resources, outfile, indent=4, sort_keys=True)
+
+main()
+
diff --git a/scripts/quotestring.py b/scripts/quotestring.py
new file mode 100644
index 000000000..1038719e7
--- /dev/null
+++ b/scripts/quotestring.py
@@ -0,0 +1,62 @@
+#! /usr/bin/python
+
+import re
+import getopt
+import sys
+
+def usage():
+ print >> sys.stderr, (
+ "Usage: %s <input> [output]\n"
+ "Summary:\n"
+ " Creates a quoted string suitable for inclusion in a C char*\n\n"
+ "Options:\n"
+ " <input> Input file to quote\n"
+ " <output> Output quoted string [stdout]\n"
+ % sys.argv[0]
+ )
+
+def main():
+ global inc_list
+
+ OPTS = ""
+ 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:
+ usage()
+ 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)
+
+ 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
+
+ ss = infile.read()
+ ss = re.sub(r'\\', r'\\\\', ss)
+ ss = re.sub(r'"', r'\\"', ss)
+ pattern = re.compile("$", re.M)
+ ss = re.sub(pattern, r'\\n"', ss)
+ pattern = re.compile("^", re.M)
+ ss = re.sub(pattern, "\"", ss)
+ outfile.write(ss)
+
+main()
+