#!/usr/local/bin/python2.3 # -*- mode: Python; coding: utf-8; -*- # PO file status # # Pedro Morais # José Nuno Pires # (c) Copyright 2003, 2004 # Distributable under the terms of the GPL - see COPYING import sys import getopt if not "/usr/local/lib/python2.3/site-packages/gettext-lint" in sys.path: sys.path.append("/usr/local/lib/python2.3/site-packages/gettext-lint") from POFile import POFile from util import Output def usage(code = -1): w = sys.stderr.write w('Usage: POFileStatus [OPTION] ...\n') w('\n') w('Mandatory arguments to long options are mandatory ' 'for short options too.\n') w('\n') w('Options:\n') w(' -h, --help show this help\n') w(' -a, --show-all show all files, even if 100% translated\n') w(' -b, --break-path add file path components to XML output\n') w(' -p, --pot-dir= pot file dir, checks obsolete/untranslated files\n') w(' -x, --pot-exclude= exclude pot files that match this pattern\n') sys.exit(code) try: opts, args = getopt.getopt(sys.argv[1:], "habd:x:", ["help", "show-all", "break-path", "pot-dir=", "pot-exclude="]) except getopt.GetoptError: usage() showall = 0 breakpath = 0 potexclude = [] potdir = None for o, a in opts: if o in ("-h", "--help"): usage(0) if o in ("-a", "--show-all"): showall = 1 if o in ("-b", "--break-path"): breakpath = 1 if o in ("-d", "--pot-dir"): import os potdir = os.path.expandvars(os.path.expanduser(a)) if o in ("-x", "--pot-exclude"): potexclude.append(a) if len(args) < 1: usage() def findfiles(dir, ext, exclude): def walkfunc(arg, dirname, fnames): dirname = dirname[len(os.path.commonprefix((dirname, arg[2]))):] for i in fnames: if i.endswith(arg[1]): name = dirname + '/' + i for j in exclude: if name.find(j) >= 0: name = None continue if name != None: arg[0][name] = name import os map = {} if os.path.isdir(dir): os.path.walk(dir, walkfunc, (map, ext, dir)) return map def attrname(filename, breakpath, attr): attr['name'] = filename if breakpath: cindex = 1 for component in filename.split('/'): attr['name-%d' % cindex] = component cindex = cindex + 1 potfiles = None if potdir != None: potfiles = findfiles(potdir, '.pot', potexclude) out = Output("po-file-status") for filename in args: po = POFile(filename) if po.validate(): po.obsolete = 0 if potfiles: if not potfiles.has_key(filename + 't'): po.obsolete = 1 else: del potfiles[filename + 't'] if showall or po.fuzzy or po.untranslated or po.obsolete: attr = {} attrname(filename, breakpath, attr) if po.translated: attr['translated'] = str(po.translated) if po.fuzzy: attr['fuzzy'] = str(po.fuzzy) if po.untranslated: attr['untranslated'] = str(po.untranslated) if po.obsolete: attr['obsolete'] = 'true' out.opentag('file', attr, close = 1) else: out.opentag('file', { 'name': filename }) out.opentag('error', body = po.validateError, close = 1) out.closetag() if potfiles: for filename in potfiles.keys(): attr = {} attrname(filename, breakpath, attr) attr['not-found'] = 'true' out.opentag('file', attr, close = 1) out.finish()