| #!/usr/bin/python |
| # |
| # Copyright (C) 2013 IBM Corporation and Others. All Rights Reserved. |
| # |
| print "NOTE: this tool is a TECHNOLOGY PREVIEW and not a supported ICU tool." |
| # |
| # @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) |