]> granicus.if.org Git - icu/commitdiff
ICU-10322 simple resource bundle builder
authorSteven R. Loomis <srl@icu-project.org>
Wed, 28 Aug 2013 23:12:36 +0000 (23:12 +0000)
committerSteven R. Loomis <srl@icu-project.org>
Wed, 28 Aug 2013 23:12:36 +0000 (23:12 +0000)
X-SVN-Rev: 34107

tools/scripts/bldicures.py [new file with mode: 0755]

diff --git a/tools/scripts/bldicures.py b/tools/scripts/bldicures.py
new file mode 100755 (executable)
index 0000000..88cc1cb
--- /dev/null
@@ -0,0 +1,134 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 IBM Corporation and Others. All Rights Reserved.
+#
+# @author Steven R. Loomis <srl@icu-project.org>
+#
+# Yet Another Resource Builder
+#
+# Usage:
+#
+##$ mkdir loc
+##$ echo 'root { hello { "Hello" } }' > loc/root.txt
+##$ echo 'es { hello { "Hola" } }' > loc/es.txt
+##$ rm -rf ./out
+##$ bldicures.py --name myapp --from ./loc -d ./out
+##$ ls out/myapp.dat
+#
+# use 'bldicures.py --help' for help.
+#
+# BUGS/TODO
+# * dependency calculation
+# * pathnames/PATH for genrb/pkgdata
+# * cleanup of files, ./out, etc
+# * document res_index
+# * probably pathname munging
+# * deuglify python
+
+
+import sys
+
+# for utf-8
+#reload(sys)
+#sys.setdefaultencoding("utf-8")
+
+import argparse
+import os
+
+parser = argparse.ArgumentParser(description='Yet Another ICU Resource Builder', epilog='ICU tool, http://icu-project.org - master copy at http://source.icu-project.org/repos/icu/tools/trunk/scripts/bldicures.py')
+parser.add_argument('-f', '--from', action='append', dest='fromdirs', help='read .txt files from this dir', metavar='fromdir', required=True)
+parser.add_argument('-n', '--name', action='store', help='set the bundle name, such as "myapp"', metavar='bundname', required=True)
+parser.add_argument('-m', '--mode', action='store', help='pkgdata mode', metavar='mode', default="archive")
+parser.add_argument('-d', '--dest', action='store', dest='destdir', help='dest dir, default is ".".', default=".", metavar='destdir')
+parser.add_argument('--verbose', '-v', action='count',default=0)
+
+args = parser.parse_args()
+if args.verbose>0:
+    print "Options: "+str(args)
+
+if args.verbose > 0:
+    print "mkdir " + args.destdir
+os.makedirs(args.destdir)
+tmpdir = 'tmp'
+os.makedirs('%s/%s/' % (args.destdir, tmpdir))
+
+listname = '%s/%s/icufiles.lst' % (args.destdir, tmpdir)
+
+if args.verbose > 0:
+    print ">%s" % (listname)
+listfn = open(listname, 'w')
+
+print >>listfn, '# list for "%s" generated by %s on %s' % (args.name,parser.prog, '(now)')
+print >>listfn, '# args: ' + str(args)
+print >>listfn, '#'
+
+idxname = '%s/%s/res_index.txt' % (args.destdir, tmpdir)
+idxfn = open(idxname, 'w')
+print >>idxfn, """// Warning, this file is autogenerated by %s
+res_index:table(nofallback) {
+ InstalledLocales:table {""" % (parser.prog)
+
+gens = {}
+
+def add_res(resname,txtname, loc):
+    if args.verbose>0:
+        print "+ %s (from %s)" % (loc, txtname)
+    print >>listfn, "# %s" % (txtname)
+    print >>listfn, "%s.res" % (loc)
+    gens[loc] = { "loc": loc, "res": resname, "txt": txtname }
+
+add_res('%s/%s/res_index.res' % (args.destdir,tmpdir), idxname, 'res_index')
+
+def add_loc(path, loc):
+    resf = '%s/%s/%s.res' % (args.destdir,tmpdir,loc)
+    txtf = '%s/%s.txt' % (path, loc)
+    print >>idxfn, "  %s {\"\"}" % loc
+    add_res(resf, txtf, loc)
+
+for dir in args.fromdirs:
+    if args.verbose>0:
+        print "Collecting .txt files in %s" % (dir)
+
+    walks = os.walk(dir)
+    for ent in walks:
+            junk = (path,dirs,files) = ent
+            if args.verbose>3:
+                print junk
+            if (path.find("/.svn") != -1):
+                continue
+            for file in files:
+                if (file.find(".txt") == -1):
+                    if args.verbose>1:
+                        print "Ignoring %s/%s" % (path,file)
+                    continue
+                (loc,ext) = file.split('.')
+                if ext != "txt":
+                    if args.verbose>1:
+                        print "Ignoring (bad ext %s) %s/%s" % (ext, path,file)
+                    continue
+                add_loc(path, loc)
+
+print >>idxfn, " }"
+print >>idxfn, "}"
+
+idxfn.close()
+listfn.close()
+
+if (args.verbose>2):
+    print gens
+
+if (args.verbose>3):
+    print "TODO: dependency tracking. For now, dont' care"
+
+for gen in gens:
+    item = gens[gen]
+    cmd = 'genrb -d "%s/%s" "%s"' % (args.destdir, tmpdir, item["txt"])
+    if (args.verbose>1):
+        print "# " + cmd
+    os.system(cmd)
+
+cmd = 'pkgdata -m "%s" -T "%s/%s" -p "%s" -s "%s/%s" -d "%s" "%s"' % (args.mode,args.destdir,tmpdir,args.name,args.destdir,tmpdir,args.destdir,listname)
+if (args.verbose>1):
+    cmd = cmd + " -v"
+    print "# " + cmd
+os.system(cmd)