From e69e2300e85716054b83cbec008efd272d7fd560 Mon Sep 17 00:00:00 2001 From: gryf Date: Mon, 4 May 2009 20:29:29 +0000 Subject: [PATCH] Moved scripts into bin subdir, slightly modified Makefile, added plgen and dist targets, removed CZYTAJTO. --- Makefile | 16 +++- README | 2 +- generate_pot.py | 163 ---------------------------------------- prepare_dist_package.sh | 32 -------- 4 files changed, 14 insertions(+), 199 deletions(-) delete mode 100755 generate_pot.py delete mode 100755 prepare_dist_package.sh diff --git a/Makefile b/Makefile index e88a6f6..7768122 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ PYTHON_EXEC = PYTHONPATH=/home/gryf/Devel/Python/pyGTKtalog:/home/gryf/.python_lib python LOCALE = LC_ALL=pl_PL.utf8 FILE = pygtktalog.py +DIST = bin/prepare_dist_package.sh +POT_GEN = bin/generate_pot.py .PHONY: run run: @@ -25,7 +27,7 @@ distclean: clean .PHONY: pot pot: @if [ ! -d locale ]; then mkdir locale; fi - @python generate_pot.py pygtktalog pygtktalog > locale/pygtktalog.pot + @python $(POT_GEN) pygtktalog pygtktalog > locale/pygtktalog.pot @echo "locale/pygtktalog.pot (re)generated." .PHONY: pltrans @@ -43,13 +45,19 @@ pltrans: pot @msgfmt locale/pl.po -o locale/pl/LC_MESSAGES/pygtktalog.mo @echo "Message catalog for pl_PL.utf8 saved in locale/pl/LC_MESSAGES/pygtktalog.mo" +.PHONY: plgen +plgen: pot + @echo "Compile message catalog for pl_PL.utf8" + @msgfmt locale/pl.po -o locale/pl/LC_MESSAGES/pygtktalog.mo + @echo "Message catalog for pl_PL.utf8 saved in locale/pl/LC_MESSAGES/pygtktalog.mo" + .PHONY: test test: cd test && $(PYTHON_EXEC) run_tests.py .PHONY: dist dist: - echo "implement me" + @$(DIST) .PHONY: help help: @@ -62,6 +70,8 @@ help: @echo " pot: Generate .pot file from sources and .glade files." @echo " pltrans: Generate/merge polish translation file and then invoke editor." @echo " Environment variable EDITOR is expected" + @echo " plgen: Just generate polish translation file without merging and" + @echo " editing." @echo " test: Launch unit tests for application." - @echo " dist: Make distribution egg." + @echo " dist: Make distribution package." @echo diff --git a/README b/README index 3592c60..d1b26ea 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -pyGTKtalog 1.0 +pyGTKtalog 1.9 ============== pyGTKtalog is Linux/FreeBSD program for indexing CD/DVD or directories on diff --git a/generate_pot.py b/generate_pot.py deleted file mode 100755 index f42b873..0000000 --- a/generate_pot.py +++ /dev/null @@ -1,163 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" - Generate POT - ~~~~~~~~~~~~ - - Generate a pot file with all translations for PyGTK applications - based on the organization idea I shared in my article about i18n - in PyGTK applications. - - :copyright: 2006-2007 by Armin Ronacher. - :license: GNU GPL, see LICENSE for more details. -""" -import os -import sys -from xml.dom import minidom -from compiler import parse, ast -from datetime import datetime - -PO_HEADER = """# -# %(name)s Language File -# -msgid "" -msgstr "" -"Project-Id-Version: %(name)s\\n" -"POT-Creation-Date: %(time)s\\n" -"Last-Translator: Roman Dobosz \\n" -"MIME-Version: 1.0\\n" -"Content-Type: text/plain; charset=utf-8\\n" -"Content-Transfer-Encoding: utf-8\\n" -"Generated-By: %(filename)s\\n"\ -""" - -EMPTY_STRING = '' -EMPTY_LINE = ['""\n'] -LINE_SHIFT = ['\\n"\n"'] - - -class StringCollection(object): - """Class for collecting strings.""" - - def __init__(self, basename): - self.db = {} - self.order = [] - self.offset = len(basename) - - def feed(self, file, line, string): - name = file[self.offset:].lstrip('/') - if string not in self.db: - self.db[string] = [(name, line)] - self.order.append(string) - else: - self.db[string].append((name, line)) - - def __iter__(self): - for string in self.order: - yield string, self.db[string] - - -def quote(s): - """Quotes a given string so that it is useable in a .po file.""" - result = ['"'] - firstmatch = True - for char in s: - if char == '\n': - if firstmatch: - result = EMPTY_LINE + result - firstmatch = False - result += LINE_SHIFT - continue - if char in '\t"': - result.append('\\') - result.append(char) - result.append('"') - return EMPTY_STRING.join(result) - - -def scan_python_file(filename, calls): - """Scan a python file for gettext calls.""" - def scan(nodelist): - for node in nodelist: - if isinstance(node, ast.CallFunc): - handle = False - for pos, n in enumerate(node): - if pos == 0: - if isinstance(n, ast.Name) and n.name in calls: - handle = True - elif pos == 1: - if handle: - if n.__class__ is ast.Const and \ - isinstance(n.value, basestring): - yield n.lineno, n.value - break - else: - for line in scan([n]): - yield line - elif hasattr(node, '__iter__'): - for n in scan(node): - yield n - - fp = file(filename) - try: - try: - return scan(parse(fp.read())) - except: - print >> sys.stderr, 'Syntax Error in file %r' % filename - finally: - fp.close() - - -def scan_glade_file(filename): - """Scan a glade file for translatable strings.""" - try: - doc = minidom.parse(filename) - except: - print >> sys.stderr, 'Syntax Error in file %r' % filename - for element in doc.getElementsByTagName('property'): - if element.getAttribute('translatable') == 'yes': - data = element.firstChild.nodeValue - if data and not data.startswith('gtk-'): - yield data - - -def scan_tree(pathname, calls=['_']): - """Scans a tree for translatable strings.""" - out = StringCollection(pathname) - for folder, _, files in os.walk(pathname): - for filename in files: - filename = os.path.join(folder, filename) - if filename.endswith('.py'): - result = scan_python_file(filename, calls) - if result is not None: - for lineno, string in result: - out.feed(filename, lineno, string) - elif filename.endswith('.glade'): - result = scan_glade_file(filename) - if result is not None: - for string in result: - out.feed(filename, None, string) - for line in out: - yield line - - -def run(): - if len(sys.argv) != 3: - print 'usage: %s ' % sys.argv[0] - sys.exit() - print PO_HEADER % { - 'time': datetime.now(), - 'filename': sys.argv[0], - 'name': sys.argv[2], - } - basepath = sys.argv[1] - for string, occurrences in scan_tree(basepath): - print - for path, lineno in occurrences: - print '#. file %r, line %s' % (path, lineno or '?') - print 'msgid %s' % quote(string) - print 'msgstr ""' - - -if __name__ == '__main__': - run() diff --git a/prepare_dist_package.sh b/prepare_dist_package.sh deleted file mode 100755 index c7d2afd..0000000 --- a/prepare_dist_package.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -# remove ~, pyc, pyo files from current directory - -mkdir t 2>/dev/null -if [ $? != 0 ]; then - echo "cannot create directory 't': File exist." - echo "Rename it, move or rename, bcoz it's on the way." - exit -fi -cd t -alias ls=ls - -PREV=`ls -1 ..|grep bz2|tail -n 1|cut -f '2' -d '_'|cut -f 1 -d '.'` -REV=`svn export svn://10.0.0.10/repos/Python/pyGTKtalog pyGTKtalog |tail -n 1|cut -f 3 -d " "|cut -f 1 -d '.'` - -cd pyGTKtalog -find . -name \*~ -exec rm '{}' ';' -find . -name \*pyc -exec rm '{}' ';' -find . -name \*pyo -exec rm '{}' ';' -find . -type d -name .svn -exec rm -fr '{}' ';' -rm -fr db img -rm -fr prepare_dist_package.sh - -svn log -r ${PREV}:HEAD -v svn://10.0.0.10/repos/Python/pyGTKtalog > CHANGELOG - -cd .. - -tar jcf ../pygtktalog_${REV}.tar.bz2 pyGTKtalog - -cd .. -rm -fr t -