All pastes #177787 Raw Edit

Python

public python v1 · immutable
#177787 ·published 2006-09-20 18:00 UTC
rendered paste body
import fnmatchimport osimport refrom genshi.core import START, TEXTfrom genshi.input import ParseErrorfrom genshi.template import TemplateLoader, EXPRtry:    setexcept NameError:    from sets import Set as setignore_tags = ['script', 'style']exclude_dirs = ('.AppleDouble', '.svn', 'CVS', '_darcs')def lang_extract(potfile, dirname, fileglob='*.html', template_class=None):    fd = open(potfile, 'at+')    try:        for fname, tag, key in extract_keys(_matching_files(dirname, fileglob),                                            ['.'], template_class):            print >>fd, '#: %s:%s' % (fname, tag)            print >>fd, 'msgid %s' % key            print >>fd, 'msgstr ""'            print >>fd, ''    finally:        fd.close()def _matching_files(dirname, fileglob):    for root, dirs, files in os.walk(dirname):        for exclude in exclude_dirs:            try:                dirs.remove(exclude)            except ValueError:                pass        for fname in fnmatch.filter(files, fileglob):            yield os.path.join(root, fname)def extract_keys(files, search_path=None, template_class=None):    keys = set()    loader = TemplateLoader(search_path)    gettext_re = re.compile(r"_\(((?:'[^']*')|(?:\"[^\"]*\"))\)")    for fname in files:        print 'Scanning: %s' % fname        try:            if template_class is None:                template = loader.load(fname)            else:                template = loader.load(fname, cls=template_class)        except ParseError, e:            print 'Skipping %s: %s' % (fname, e)            continue        stream = iter(template.stream)        tag = None        for kind, data, pos in stream:            if kind is START:                tag, attrs = data                if tag.localname in ignore_tags:                    stream.next() # skip the substream            elif kind is EXPR:                for key in gettext_re.findall(data.source):                    key = key[1:-1]                    if key and key not in keys:                        keys.add(key)                        yield fname, tag.localname, key            elif kind is TEXT:                key = data.strip()                if key and key not in keys:                    keys.add(key)                    yield fname, tag.localname, keyif __name__ == '__main__':    pass