annotate tools/pygettext.py @ 5253:2d61e39b89c8

Issue2550716 Email address displayed after password reset request (fix) Change the message displayed upon password reset using an account name to no longer expose the email address. Password reset triggered using an email address will still display the user supplied email address.
author John Rouillard <rouilj@ieee.org>
date Sat, 26 Aug 2017 20:27:08 -0400
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/