annotate tools/pygettext.py @ 4509:0fa45d39efee

Removed superfluous import.
author Bernhard Reiter <Bernhard.Reiter@intevation.de>
date Thu, 23 Jun 2011 08:26:14 +0000
parents b2d6657cd2a6
children 198b6e810c67
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
1 #! /usr/bin/env python2.5
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
2 # -*- coding: iso-8859-1 -*-
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
3 # Originally written by Barry Warsaw <barry@zope.com>
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
4 #
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
5 # Minimally patched to make it even more xgettext compatible
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
6 # by Peter Funk <pf@artcom-gmbh.de>
424
8babfb52ebbd Added change notes
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 423
diff changeset
7 #
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
8 # 2002-11-22 Jürgen Hermann <jh@web.de>
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
9 # Added checks that _() only contains string literals, and
424
8babfb52ebbd Added change notes
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 423
diff changeset
10 # command line args are resolved to module lists, i.e. you
8babfb52ebbd Added change notes
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 423
diff changeset
11 # can now pass a filename, a module or package name, or a
8babfb52ebbd Added change notes
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 423
diff changeset
12 # directory (including globbing chars, important for Win32).
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
13 # Made docstring fit in 80 chars wide displays using pydoc.
424
8babfb52ebbd Added change notes
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 423
diff changeset
14 #
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
15
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
16 # for selftesting
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
17 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
18 import fintl
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
19 _ = fintl.gettext
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
20 except ImportError:
404
3844451f7a30 Added warning for non-string _() markup (which is also ignored)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 401
diff changeset
21 _ = lambda s: s
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
22
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
23 __doc__ = _("""pygettext -- Python equivalent of xgettext(1)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
24
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
25 Many systems (Solaris, Linux, Gnu) provide extensive tools that ease the
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
26 internationalization of C programs. Most of these tools are independent of
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
27 the programming language and can be used from within Python programs.
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
28 Martin von Loewis' work[1] helps considerably in this regard.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
29
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
30 There's one problem though; xgettext is the program that scans source code
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
31 looking for message strings, but it groks only C (or C++). Python
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
32 introduces a few wrinkles, such as dual quoting characters, triple quoted
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
33 strings, and raw strings. xgettext understands none of this.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
34
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
35 Enter pygettext, which uses Python's standard tokenize module to scan
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
36 Python source code, generating .pot files identical to what GNU xgettext[2]
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
37 generates for C and C++ code. From there, the standard GNU tools can be
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
38 used.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
39
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
40 A word about marking Python strings as candidates for translation. GNU
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
41 xgettext recognizes the following keywords: gettext, dgettext, dcgettext,
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
42 and gettext_noop. But those can be a lot of text to include all over your
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
43 code. C and C++ have a trick: they use the C preprocessor. Most
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
44 internationalized C source includes a #define for gettext() to _() so that
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
45 what has to be written in the source is much less. Thus these are both
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
46 translatable strings:
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
47
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
48 gettext("Translatable String")
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
49 _("Translatable String")
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
50
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
51 Python of course has no preprocessor so this doesn't work so well. Thus,
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
52 pygettext searches only for _() by default, but see the -k/--keyword flag
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
53 below for how to augment this.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
54
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
55 [1] http://www.python.org/workshops/1997-10/proceedings/loewis.html
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
56 [2] http://www.gnu.org/software/gettext/gettext.html
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
57
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
58 NOTE: pygettext attempts to be option and feature compatible with GNU
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
59 xgettext where ever possible. However some options are still missing or are
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
60 not fully implemented. Also, xgettext's use of command line switches with
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
61 option arguments is broken, and in these cases, pygettext just defines
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
62 additional switches.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
63
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
64 Usage: pygettext [options] inputfile ...
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
65
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
66 Options:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
67
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
68 -a
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
69 --extract-all
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
70 Extract all strings.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
71
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
72 -d name
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
73 --default-domain=name
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
74 Rename the default output file from messages.pot to name.pot.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
75
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
76 -E
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
77 --escape
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
78 Replace non-ASCII characters with octal escape sequences.
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
79
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
80 -D
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
81 --docstrings
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
82 Extract module, class, method, and function docstrings. These do
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
83 not need to be wrapped in _() markers, and in fact cannot be for
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
84 Python to consider them docstrings. (See also the -X option).
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
85
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
86 -h
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
87 --help
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
88 Print this help message and exit.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
89
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
90 -k word
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
91 --keyword=word
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
92 Keywords to look for in addition to the default set, which are:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
93 %(DEFAULTKEYWORDS)s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
94
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
95 You can have multiple -k flags on the command line.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
96
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
97 -K
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
98 --no-default-keywords
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
99 Disable the default set of keywords (see above). Any keywords
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
100 explicitly added with the -k/--keyword option are still recognized.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
101
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
102 --no-location
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
103 Do not write filename/lineno location comments.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
104
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
105 -n
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
106 --add-location
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
107 Write filename/lineno location comments indicating where each
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
108 extracted string is found in the source. These lines appear before
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
109 each msgid. The style of comments is controlled by the -S/--style
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
110 option. This is the default.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
111
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
112 -o filename
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
113 --output=filename
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
114 Rename the default output file from messages.pot to filename. If
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
115 filename is `-' then the output is sent to standard out.
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
116
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
117 -p dir
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
118 --output-dir=dir
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
119 Output files will be placed in directory dir.
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
120
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
121 -S stylename
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
122 --style stylename
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
123 Specify which style to use for location comments. Two styles are
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
124 supported:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
125
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
126 Solaris # File: filename, line: line-number
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
127 GNU #: filename:line
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
128
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
129 The style name is case insensitive. GNU style is the default.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
130
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
131 -v
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
132 --verbose
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
133 Print the names of the files being processed.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
134
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
135 -V
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
136 --version
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
137 Print the version of pygettext and exit.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
138
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
139 -w columns
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
140 --width=columns
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
141 Set width of output to columns.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
142
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
143 -x filename
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
144 --exclude-file=filename
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
145 Specify a file that contains a list of strings that are not be
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
146 extracted from the input files. Each string to be excluded must
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
147 appear on a line by itself in the file.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
148
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
149 -X filename
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
150 --no-docstrings=filename
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
151 Specify a file that contains a list of files (one per line) that
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
152 should not have their docstrings extracted. This is only useful in
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
153 conjunction with the -D option above.
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
154
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
155 If `inputfile' is -, standard input is read.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
156 """)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
157
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
158 import os
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
159 import imp
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
160 import sys
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
161 import glob
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
162 import time
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
163 import getopt
404
3844451f7a30 Added warning for non-string _() markup (which is also ignored)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 401
diff changeset
164 import token
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
165 import tokenize
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
166 import operator
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
167
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
168 __version__ = '1.5'
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
169
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
170 default_keywords = ['_']
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
171 DEFAULTKEYWORDS = ', '.join(default_keywords)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
172
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
173 EMPTYSTRING = ''
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
174
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
175
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
176
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
177 # The normal pot-file header. msgmerge and Emacs's po-mode work better if it's
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
178 # there.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
179 pot_header = _('''\
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
180 # SOME DESCRIPTIVE TITLE.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
181 # Copyright (C) YEAR ORGANIZATION
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
182 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
183 #
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
184 msgid ""
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
185 msgstr ""
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
186 "Project-Id-Version: PACKAGE VERSION\\n"
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
187 "POT-Creation-Date: %(time)s\\n"
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
188 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n"
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
189 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n"
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
190 "Language-Team: LANGUAGE <LL@li.org>\\n"
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
191 "MIME-Version: 1.0\\n"
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
192 "Content-Type: text/plain; charset=CHARSET\\n"
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
193 "Content-Transfer-Encoding: ENCODING\\n"
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
194 "Generated-By: pygettext.py %(version)s\\n"
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
195
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
196 ''')
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
197
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
198
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
199 def usage(code, msg=''):
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
200 print >> sys.stderr, __doc__ % globals()
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
201 if msg:
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
202 print >> sys.stderr, msg
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
203 sys.exit(code)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
204
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
205
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
206
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
207 escapes = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
208
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
209 def make_escapes(pass_iso8859):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
210 global escapes
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
211 if pass_iso8859:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
212 # Allow iso-8859 characters to pass through so that e.g. 'msgid
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
213 # "Höhe"' would result not result in 'msgid "H\366he"'. Otherwise we
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
214 # escape any character outside the 32..126 range.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
215 mod = 128
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
216 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
217 mod = 256
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
218 for i in range(256):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
219 if 32 <= (i % mod) <= 126:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
220 escapes.append(chr(i))
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
221 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
222 escapes.append("\\%03o" % i)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
223 escapes[ord('\\')] = '\\\\'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
224 escapes[ord('\t')] = '\\t'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
225 escapes[ord('\r')] = '\\r'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
226 escapes[ord('\n')] = '\\n'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
227 escapes[ord('\"')] = '\\"'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
228
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
229
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
230 def escape(s):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
231 global escapes
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
232 s = list(s)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
233 for i in range(len(s)):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
234 s[i] = escapes[ord(s[i])]
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
235 return EMPTYSTRING.join(s)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
236
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
237
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
238 def safe_eval(s):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
239 # unwrap quotes, safely
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
240 return eval(s, {'__builtins__':{}}, {})
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
241
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
242
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
243 def normalize(s):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
244 # This converts the various Python string types into a format that is
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
245 # appropriate for .po files, namely much closer to C style.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
246 lines = s.split('\n')
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
247 if len(lines) == 1:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
248 s = '"' + escape(s) + '"'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
249 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
250 if not lines[-1]:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
251 del lines[-1]
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
252 lines[-1] = lines[-1] + '\n'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
253 for i in range(len(lines)):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
254 lines[i] = escape(lines[i])
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
255 lineterm = '\\n"\n"'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
256 s = '""\n"' + lineterm.join(lines) + '"'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
257 return s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
258
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
259
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
260 def containsAny(str, set):
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
261 """Check whether 'str' contains ANY of the chars in 'set'"""
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
262 return 1 in [c in str for c in set]
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
263
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
264
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
265 def _visit_pyfiles(list, dirname, names):
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
266 """Helper for getFilesForName()."""
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
267 # get extension for python source files
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
268 if not globals().has_key('_py_ext'):
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
269 global _py_ext
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
270 _py_ext = [triple[0] for triple in imp.get_suffixes()
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
271 if triple[2] == imp.PY_SOURCE][0]
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
272
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
273 # don't recurse into CVS directories
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
274 if 'CVS' in names:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
275 names.remove('CVS')
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
276
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
277 # add all *.py files to list
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
278 list.extend(
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
279 [os.path.join(dirname, file) for file in names
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
280 if os.path.splitext(file)[1] == _py_ext]
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
281 )
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
282
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
283
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
284 def _get_modpkg_path(dotted_name, pathlist=None):
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
285 """Get the filesystem path for a module or a package.
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
286
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
287 Return the file system path to a file for a module, and to a directory for
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
288 a package. Return None if the name is not found, or is a builtin or
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
289 extension module.
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
290 """
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
291 # split off top-most name
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
292 parts = dotted_name.split('.', 1)
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
293
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
294 if len(parts) > 1:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
295 # we have a dotted path, import top-level package
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
296 try:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
297 file, pathname, description = imp.find_module(parts[0], pathlist)
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
298 if file: file.close()
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
299 except ImportError:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
300 return None
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
301
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
302 # check if it's indeed a package
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
303 if description[2] == imp.PKG_DIRECTORY:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
304 # recursively handle the remaining name parts
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
305 pathname = _get_modpkg_path(parts[1], [pathname])
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
306 else:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
307 pathname = None
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
308 else:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
309 # plain name
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
310 try:
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
311 file, pathname, description = imp.find_module(
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
312 dotted_name, pathlist)
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
313 if file:
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
314 file.close()
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
315 if description[2] not in [imp.PY_SOURCE, imp.PKG_DIRECTORY]:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
316 pathname = None
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
317 except ImportError:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
318 pathname = None
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
319
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
320 return pathname
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
321
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
322
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
323 def getFilesForName(name):
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
324 """Get a list of module files for a filename, a module or package name,
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
325 or a directory.
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
326 """
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
327 if not os.path.exists(name):
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
328 # check for glob chars
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
329 if containsAny(name, "*?[]"):
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
330 files = glob.glob(name)
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
331 list = []
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
332 for file in files:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
333 list.extend(getFilesForName(file))
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
334 return list
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
335
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
336 # try to find module or package
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
337 name = _get_modpkg_path(name)
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
338 if not name:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
339 return []
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
340
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
341 if os.path.isdir(name):
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
342 # find all python files in directory
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
343 list = []
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
344 os.path.walk(name, _visit_pyfiles, list)
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
345 return list
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
346 elif os.path.exists(name):
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
347 # a single file
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
348 return [name]
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
349
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
350 return []
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
351
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
352
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
353 class TokenEater:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
354 def __init__(self, options):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
355 self.__options = options
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
356 self.__messages = {}
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
357 self.__state = self.__waiting
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
358 self.__data = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
359 self.__lineno = -1
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
360 self.__freshmodule = 1
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
361 self.__curfile = None
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
362
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
363 def __call__(self, ttype, tstring, stup, etup, line):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
364 # dispatch
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
365 ## import token
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
366 ## print >> sys.stderr, 'ttype:', token.tok_name[ttype], \
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
367 ## 'tstring:', tstring
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
368 self.__state(ttype, tstring, stup[0])
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
369
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
370 def __waiting(self, ttype, tstring, lineno):
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
371 opts = self.__options
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
372 # Do docstring extractions, if enabled
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
373 if opts.docstrings and not opts.nodocstrings.get(self.__curfile):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
374 # module docstring?
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
375 if self.__freshmodule:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
376 if ttype == tokenize.STRING:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
377 self.__addentry(safe_eval(tstring), lineno, isdocstring=1)
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
378 self.__freshmodule = 0
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
379 elif ttype not in (tokenize.COMMENT, tokenize.NL):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
380 self.__freshmodule = 0
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
381 return
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
382 # class docstring?
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
383 if ttype == tokenize.NAME and tstring in ('class', 'def'):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
384 self.__state = self.__suiteseen
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
385 return
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
386 if ttype == tokenize.NAME and tstring in opts.keywords:
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
387 self.__state = self.__keywordseen
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
388
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
389 def __suiteseen(self, ttype, tstring, lineno):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
390 # ignore anything until we see the colon
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
391 if ttype == tokenize.OP and tstring == ':':
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
392 self.__state = self.__suitedocstring
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
393
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
394 def __suitedocstring(self, ttype, tstring, lineno):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
395 # ignore any intervening noise
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
396 if ttype == tokenize.STRING:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
397 self.__addentry(safe_eval(tstring), lineno, isdocstring=1)
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
398 self.__state = self.__waiting
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
399 elif ttype not in (tokenize.NEWLINE, tokenize.INDENT,
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
400 tokenize.COMMENT):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
401 # there was no class docstring
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
402 self.__state = self.__waiting
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
403
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
404 def __keywordseen(self, ttype, tstring, lineno):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
405 if ttype == tokenize.OP and tstring == '(':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
406 self.__data = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
407 self.__lineno = lineno
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
408 self.__state = self.__openseen
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
409 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
410 self.__state = self.__waiting
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
411
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
412 def __openseen(self, ttype, tstring, lineno):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
413 if ttype == tokenize.OP and tstring == ')':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
414 # We've seen the last of the translatable strings. Record the
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
415 # line number of the first line of the strings and update the list
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
416 # of messages seen. Reset state for the next batch. If there
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
417 # were no strings inside _(), then just ignore this entry.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
418 if self.__data:
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
419 self.__addentry(EMPTYSTRING.join(self.__data))
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
420 self.__state = self.__waiting
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
421 elif ttype == tokenize.STRING:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
422 self.__data.append(safe_eval(tstring))
404
3844451f7a30 Added warning for non-string _() markup (which is also ignored)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 401
diff changeset
423 elif ttype not in [tokenize.COMMENT, token.INDENT, token.DEDENT,
3844451f7a30 Added warning for non-string _() markup (which is also ignored)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 401
diff changeset
424 token.NEWLINE, tokenize.NL]:
405
f0b234ce301f Typo fix
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 404
diff changeset
425 # warn if we see anything else than STRING or whitespace
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
426 print >> sys.stderr, _(
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
427 '*** %(file)s:%(lineno)s: Seen unexpected token "%(token)s"'
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
428 ) % {
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
429 'token': tstring,
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
430 'file': self.__curfile,
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
431 'lineno': self.__lineno
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
432 }
404
3844451f7a30 Added warning for non-string _() markup (which is also ignored)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 401
diff changeset
433 self.__state = self.__waiting
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
434
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
435 def __addentry(self, msg, lineno=None, isdocstring=0):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
436 if lineno is None:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
437 lineno = self.__lineno
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
438 if not msg in self.__options.toexclude:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
439 entry = (self.__curfile, lineno)
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
440 self.__messages.setdefault(msg, {})[entry] = isdocstring
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
441
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
442 def set_filename(self, filename):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
443 self.__curfile = filename
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
444 self.__freshmodule = 1
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
445
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
446 def write(self, fp):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
447 options = self.__options
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
448 timestamp = time.strftime('%Y-%m-%d %H:%M+%Z')
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
449 # The time stamp in the header doesn't have the same format as that
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
450 # generated by xgettext...
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
451 print >> fp, pot_header % {'time': timestamp, 'version': __version__}
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
452 # Sort the entries. First sort each particular entry's keys, then
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
453 # sort all the entries by their first item.
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
454 reverse = {}
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
455 for k, v in self.__messages.items():
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
456 keys = v.keys()
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
457 keys.sort()
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
458 reverse.setdefault(tuple(keys), []).append((k, v))
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
459 rkeys = reverse.keys()
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
460 rkeys.sort()
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
461 for rkey in rkeys:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
462 rentries = reverse[rkey]
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
463 rentries.sort()
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
464 for k, v in rentries:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
465 isdocstring = 0
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
466 # If the entry was gleaned out of a docstring, then add a
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
467 # comment stating so. This is to aid translators who may wish
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
468 # to skip translating some unimportant docstrings.
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
469 if reduce(operator.__add__, v.values()):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
470 isdocstring = 1
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
471 # k is the message string, v is a dictionary-set of (filename,
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
472 # lineno) tuples. We want to sort the entries in v first by
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
473 # file name and then by line number.
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
474 v = v.keys()
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
475 v.sort()
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
476 if not options.writelocations:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
477 pass
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
478 # location comments are different b/w Solaris and GNU:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
479 elif options.locationstyle == options.SOLARIS:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
480 for filename, lineno in v:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
481 d = {'filename': filename, 'lineno': lineno}
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
482 print >>fp, _(
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
483 '# File: %(filename)s, line: %(lineno)d') % d
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
484 elif options.locationstyle == options.GNU:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
485 # fit as many locations on one line, as long as the
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
486 # resulting line length doesn't exceeds 'options.width'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
487 locline = '#:'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
488 for filename, lineno in v:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
489 d = {'filename': filename, 'lineno': lineno}
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
490 s = _(' %(filename)s:%(lineno)d') % d
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
491 if len(locline) + len(s) <= options.width:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
492 locline = locline + s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
493 else:
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
494 print >> fp, locline
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
495 locline = "#:" + s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
496 if len(locline) > 2:
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
497 print >> fp, locline
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
498 if isdocstring:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
499 print >> fp, '#, docstring'
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
500 print >> fp, 'msgid', normalize(k)
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
501 print >> fp, 'msgstr ""\n'
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
502
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
503
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
504
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
505 def main():
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
506 global default_keywords
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
507 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
508 opts, args = getopt.getopt(
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
509 sys.argv[1:],
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
510 'ad:DEhk:Kno:p:S:Vvw:x:X:',
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
511 ['extract-all', 'default-domain=', 'escape', 'help',
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
512 'keyword=', 'no-default-keywords',
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
513 'add-location', 'no-location', 'output=', 'output-dir=',
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
514 'style=', 'verbose', 'version', 'width=', 'exclude-file=',
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
515 'docstrings', 'no-docstrings',
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
516 ])
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
517 except getopt.error, msg:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
518 usage(1, msg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
519
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
520 # for holding option values
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
521 class Options:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
522 # constants
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
523 GNU = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
524 SOLARIS = 2
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
525 # defaults
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
526 extractall = 0 # FIXME: currently this option has no effect at all.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
527 escape = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
528 keywords = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
529 outpath = ''
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
530 outfile = 'messages.pot'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
531 writelocations = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
532 locationstyle = GNU
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
533 verbose = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
534 width = 78
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
535 excludefilename = ''
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
536 docstrings = 0
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
537 nodocstrings = {}
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
538
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
539 options = Options()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
540 locations = {'gnu' : options.GNU,
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
541 'solaris' : options.SOLARIS,
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
542 }
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
543
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
544 # parse options
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
545 for opt, arg in opts:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
546 if opt in ('-h', '--help'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
547 usage(0)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
548 elif opt in ('-a', '--extract-all'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
549 options.extractall = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
550 elif opt in ('-d', '--default-domain'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
551 options.outfile = arg + '.pot'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
552 elif opt in ('-E', '--escape'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
553 options.escape = 1
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
554 elif opt in ('-D', '--docstrings'):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
555 options.docstrings = 1
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
556 elif opt in ('-k', '--keyword'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
557 options.keywords.append(arg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
558 elif opt in ('-K', '--no-default-keywords'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
559 default_keywords = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
560 elif opt in ('-n', '--add-location'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
561 options.writelocations = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
562 elif opt in ('--no-location',):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
563 options.writelocations = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
564 elif opt in ('-S', '--style'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
565 options.locationstyle = locations.get(arg.lower())
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
566 if options.locationstyle is None:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
567 usage(1, _('Invalid value for --style: %s') % arg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
568 elif opt in ('-o', '--output'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
569 options.outfile = arg
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
570 elif opt in ('-p', '--output-dir'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
571 options.outpath = arg
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
572 elif opt in ('-v', '--verbose'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
573 options.verbose = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
574 elif opt in ('-V', '--version'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
575 print _('pygettext.py (xgettext for Python) %s') % __version__
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
576 sys.exit(0)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
577 elif opt in ('-w', '--width'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
578 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
579 options.width = int(arg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
580 except ValueError:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
581 usage(1, _('--width argument must be an integer: %s') % arg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
582 elif opt in ('-x', '--exclude-file'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
583 options.excludefilename = arg
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
584 elif opt in ('-X', '--no-docstrings'):
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
585 fp = open(arg)
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
586 try:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
587 while 1:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
588 line = fp.readline()
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
589 if not line:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
590 break
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
591 options.nodocstrings[line[:-1]] = 1
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
592 finally:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
593 fp.close()
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
594
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
595 # calculate escapes
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
596 make_escapes(options.escape)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
597
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
598 # calculate all keywords
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
599 options.keywords.extend(default_keywords)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
600
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
601 # initialize list of strings to exclude
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
602 if options.excludefilename:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
603 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
604 fp = open(options.excludefilename)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
605 options.toexclude = fp.readlines()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
606 fp.close()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
607 except IOError:
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
608 print >> sys.stderr, _(
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
609 "Can't read --exclude-file: %s") % options.excludefilename
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
610 sys.exit(1)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
611 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
612 options.toexclude = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
613
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
614 # resolve args to module lists
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
615 expanded = []
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
616 for arg in args:
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
617 if arg == '-':
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
618 expanded.append(arg)
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
619 else:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
620 expanded.extend(getFilesForName(arg))
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
621 args = expanded
401
a930feb07dc4 Added globbing for win32, and sample marking in a 2nd file to test it
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 400
diff changeset
622
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
623 # slurp through all the files
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
624 eater = TokenEater(options)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
625 for filename in args:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
626 if filename == '-':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
627 if options.verbose:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
628 print _('Reading standard input')
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
629 fp = sys.stdin
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
630 closep = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
631 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
632 if options.verbose:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
633 print _('Working on %s') % filename
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
634 fp = open(filename)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
635 closep = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
636 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
637 eater.set_filename(filename)
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
638 try:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
639 tokenize.tokenize(fp.readline, eater)
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
640 except tokenize.TokenError, e:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
641 print >> sys.stderr, '%s: %s, line %d, column %d' % (
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
642 e[0], filename, e[1][0], e[1][1])
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
643 finally:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
644 if closep:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
645 fp.close()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
646
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
647 # write the output
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
648 if options.outfile == '-':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
649 fp = sys.stdout
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
650 closep = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
651 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
652 if options.outpath:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
653 options.outfile = os.path.join(options.outpath, options.outfile)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
654 fp = open(options.outfile, 'w')
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
655 closep = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
656 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
657 eater.write(fp)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
658 finally:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
659 if closep:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
660 fp.close()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
661
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
662
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
663 if __name__ == '__main__':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
664 main()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
665 # some more test strings
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
666 _(u'a unicode string')
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
667 # this one creates a warning
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
668 _('*** Seen unexpected token "%(token)s"') % {'token': 'test'}
404
3844451f7a30 Added warning for non-string _() markup (which is also ignored)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 401
diff changeset
669 _('more' 'than' 'one' 'string')

Roundup Issue Tracker: http://roundup-tracker.org/