annotate tools/pygettext.py @ 5381:0942fe89e82e

Python 3 preparation: change "x.has_key(y)" to "y in x". (Also likewise "not in" where appropriate.) Tool-generated patch.
author Joseph Myers <jsm@polyomino.org.uk>
date Tue, 24 Jul 2018 22:08:17 +0000
parents 64b05e24dbd8
children a7bf8c4e502f
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
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
17 from __future__ import print_function
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
18 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
19 import fintl
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
20 _ = fintl.gettext
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
21 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
22 _ = lambda s: s
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
23
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
24 __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
25
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
26 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
27 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
28 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
29 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
30
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
31 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
32 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
33 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
34 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
35
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
36 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
37 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
38 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
39 used.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
40
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
41 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
42 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
43 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
44 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
45 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
46 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
47 translatable strings:
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
48
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
49 gettext("Translatable String")
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
50 _("Translatable String")
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
51
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
52 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
53 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
54 below for how to augment this.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
55
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
56 [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
57 [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
58
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
59 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
60 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
61 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
62 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
63 additional switches.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
64
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
65 Usage: pygettext [options] inputfile ...
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
66
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
67 Options:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
68
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
69 -a
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
70 --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
71 Extract all strings.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
72
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
73 -d name
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
74 --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
75 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
76
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
77 -E
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
78 --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
79 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
80
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
81 -D
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
82 --docstrings
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
83 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
84 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
85 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
86
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
87 -h
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
88 --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
89 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
90
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
91 -k word
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
92 --keyword=word
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
93 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
94 %(DEFAULTKEYWORDS)s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
95
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
96 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
97
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
98 -K
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
99 --no-default-keywords
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
100 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
101 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
102
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
103 --no-location
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
104 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
105
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
106 -n
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
107 --add-location
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
108 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
109 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
110 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
111 option. This is the default.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
112
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
113 -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
114 --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
115 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
116 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
117
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
118 -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
119 --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
120 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
121
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
122 -S stylename
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
123 --style stylename
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
124 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
125 supported:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
126
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
127 Solaris # File: filename, line: line-number
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
128 GNU #: filename:line
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
129
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
130 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
131
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
132 -v
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
133 --verbose
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
134 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
135
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
136 -V
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
137 --version
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
138 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
139
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
140 -w columns
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
141 --width=columns
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
142 Set width of output to columns.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
143
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
144 -x filename
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
145 --exclude-file=filename
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
146 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
147 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
148 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
149
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
150 -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
151 --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
152 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
153 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
154 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
155
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
156 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
157 """)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
158
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
159 import os
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
160 import imp
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
161 import sys
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
162 import glob
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
163 import time
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
164 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
165 import token
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
166 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
167 import operator
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
168
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
169 __version__ = '1.5'
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
170
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
171 default_keywords = ['_']
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
172 DEFAULTKEYWORDS = ', '.join(default_keywords)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
173
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
174 EMPTYSTRING = ''
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
177
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
178 # 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
179 # there.
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
180 pot_header = _('''\
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
181 # SOME DESCRIPTIVE TITLE.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
182 # Copyright (C) YEAR ORGANIZATION
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
183 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
184 #
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
185 msgid ""
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
186 msgstr ""
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
187 "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
188 "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
189 "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
190 "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
191 "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
192 "MIME-Version: 1.0\\n"
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
193 "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
194 "Content-Transfer-Encoding: ENCODING\\n"
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
195 "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
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
200 def usage(code, msg=''):
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
201 print(__doc__ % globals(), file=sys.stderr)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
202 if msg:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
203 print(msg, file=sys.stderr)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
204 sys.exit(code)
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
208 escapes = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
209
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
210 def make_escapes(pass_iso8859):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
211 global escapes
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
212 if pass_iso8859:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
213 # 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
214 # "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
215 # 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
216 mod = 128
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
217 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
218 mod = 256
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
219 for i in range(256):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
220 if 32 <= (i % mod) <= 126:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
221 escapes.append(chr(i))
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
222 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
223 escapes.append("\\%03o" % i)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
224 escapes[ord('\\')] = '\\\\'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
225 escapes[ord('\t')] = '\\t'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
226 escapes[ord('\r')] = '\\r'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
227 escapes[ord('\n')] = '\\n'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
228 escapes[ord('\"')] = '\\"'
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
231 def escape(s):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
232 global escapes
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
233 s = list(s)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
234 for i in range(len(s)):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
235 s[i] = escapes[ord(s[i])]
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
236 return EMPTYSTRING.join(s)
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
239 def safe_eval(s):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
240 # unwrap quotes, safely
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
241 return eval(s, {'__builtins__':{}}, {})
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
244 def normalize(s):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
245 # 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
246 # 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
247 lines = s.split('\n')
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
248 if len(lines) == 1:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
249 s = '"' + escape(s) + '"'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
250 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
251 if not lines[-1]:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
252 del lines[-1]
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
253 lines[-1] = lines[-1] + '\n'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
254 for i in range(len(lines)):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
255 lines[i] = escape(lines[i])
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
256 lineterm = '\\n"\n"'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
257 s = '""\n"' + lineterm.join(lines) + '"'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
258 return s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
259
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
260
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
261 def containsAny(str, set):
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
262 """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
263 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
264
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
265
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
266 def _visit_pyfiles(list, dirname, names):
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
267 """Helper for getFilesForName()."""
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
268 # get extension for python source files
5381
0942fe89e82e Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
269 if '_py_ext' not in globals():
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
270 global _py_ext
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
271 _py_ext = [triple[0] for triple in imp.get_suffixes()
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
272 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
273
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
274 # 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
275 if 'CVS' in names:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
276 names.remove('CVS')
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
277
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
278 # 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
279 list.extend(
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
280 [os.path.join(dirname, file) for file in names
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
281 if os.path.splitext(file)[1] == _py_ext]
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
282 )
423
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
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
285 def _get_modpkg_path(dotted_name, pathlist=None):
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
286 """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
287
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
288 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
289 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
290 extension module.
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
291 """
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
292 # split off top-most name
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
293 parts = dotted_name.split('.', 1)
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
294
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
295 if len(parts) > 1:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
296 # 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
297 try:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
298 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
299 if file: file.close()
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
300 except ImportError:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
301 return None
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
302
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
303 # 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
304 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
305 # 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
306 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
307 else:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
308 pathname = None
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
309 else:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
310 # plain name
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
311 try:
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
312 file, pathname, description = imp.find_module(
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
313 dotted_name, pathlist)
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
314 if file:
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
315 file.close()
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
316 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
317 pathname = None
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
318 except ImportError:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
319 pathname = None
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
320
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
321 return pathname
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
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
324 def getFilesForName(name):
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
325 """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
326 or a directory.
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
327 """
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
328 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
329 # check for glob chars
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
330 if containsAny(name, "*?[]"):
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
331 files = glob.glob(name)
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
332 list = []
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
333 for file in files:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
334 list.extend(getFilesForName(file))
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
335 return list
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
336
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
337 # 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
338 name = _get_modpkg_path(name)
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
339 if not name:
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
340 return []
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
341
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
342 if os.path.isdir(name):
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
343 # 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
344 list = []
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
345 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
346 return list
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
347 elif os.path.exists(name):
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
348 # a single file
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
349 return [name]
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
350
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
351 return []
400
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
354 class TokenEater:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
355 def __init__(self, options):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
356 self.__options = options
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
357 self.__messages = {}
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
358 self.__state = self.__waiting
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
359 self.__data = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
360 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
361 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
362 self.__curfile = None
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
363
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
364 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
365 # 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
366 ## 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
367 ## 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
368 ## 'tstring:', tstring
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
369 self.__state(ttype, tstring, stup[0])
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
370
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
371 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
372 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
373 # 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
374 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
375 # 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
376 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
377 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
378 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
379 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
380 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
381 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
382 return
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
383 # 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
384 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
385 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
386 return
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
387 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
388 self.__state = self.__keywordseen
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
389
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
390 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
391 # 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
392 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
393 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
394
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
395 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
396 # 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
397 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
398 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
399 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
400 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
401 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
402 # 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
403 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
404
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
405 def __keywordseen(self, ttype, tstring, lineno):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
406 if ttype == tokenize.OP and tstring == '(':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
407 self.__data = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
408 self.__lineno = lineno
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
409 self.__state = self.__openseen
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
410 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
411 self.__state = self.__waiting
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
412
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
413 def __openseen(self, ttype, tstring, lineno):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
414 if ttype == tokenize.OP and tstring == ')':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
415 # 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
416 # 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
417 # 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
418 # 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
419 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
420 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
421 self.__state = self.__waiting
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
422 elif ttype == tokenize.STRING:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
423 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
424 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
425 token.NEWLINE, tokenize.NL]:
405
f0b234ce301f Typo fix
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 404
diff changeset
426 # warn if we see anything else than STRING or whitespace
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
427 print(_(
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
428 '*** %(file)s:%(lineno)s: Seen unexpected token "%(token)s"'
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
429 ) % {
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
430 'token': tstring,
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
431 'file': self.__curfile,
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
432 'lineno': self.__lineno
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
433 }, file=sys.stderr)
404
3844451f7a30 Added warning for non-string _() markup (which is also ignored)
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 401
diff changeset
434 self.__state = self.__waiting
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
435
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
436 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
437 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
438 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
439 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
440 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
441 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
442
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
443 def set_filename(self, filename):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
444 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
445 self.__freshmodule = 1
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
446
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
447 def write(self, fp):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
448 options = self.__options
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
449 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
450 # 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
451 # generated by xgettext...
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
452 print(pot_header % {'time': timestamp, 'version': __version__}, file=fp)
465
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 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
454 # 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
455 reverse = {}
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
456 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
457 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
458 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
459 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
460 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
461 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
462 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
463 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
464 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
465 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
466 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
467 # 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
468 # 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
469 # 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
470 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
471 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
472 # 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
473 # 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
474 # 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
475 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
476 v.sort()
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
477 if not options.writelocations:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
478 pass
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
479 # 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
480 elif options.locationstyle == options.SOLARIS:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
481 for filename, lineno in v:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
482 d = {'filename': filename, 'lineno': lineno}
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
483 print(_(
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
484 '# File: %(filename)s, line: %(lineno)d') % d, file=fp)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
485 elif options.locationstyle == options.GNU:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
486 # 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
487 # 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
488 locline = '#:'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
489 for filename, lineno in v:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
490 d = {'filename': filename, 'lineno': lineno}
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
491 s = _(' %(filename)s:%(lineno)d') % d
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
492 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
493 locline = locline + s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
494 else:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
495 print(locline, file=fp)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
496 locline = "#:" + s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
497 if len(locline) > 2:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
498 print(locline, file=fp)
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
499 if isdocstring:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
500 print('#, docstring', file=fp)
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
501 print('msgid', normalize(k), file=fp)
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
502 print('msgstr ""\n', file=fp)
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
503
400
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
506 def main():
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
507 global default_keywords
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
508 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
509 opts, args = getopt.getopt(
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
510 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
511 '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
512 ['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
513 'keyword=', 'no-default-keywords',
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
514 '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
515 '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
516 'docstrings', 'no-docstrings',
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
517 ])
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 4080
diff changeset
518 except getopt.error as msg:
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
519 usage(1, msg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
520
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
521 # for holding option values
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
522 class Options:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
523 # constants
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
524 GNU = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
525 SOLARIS = 2
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
526 # defaults
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
527 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
528 escape = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
529 keywords = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
530 outpath = ''
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
531 outfile = 'messages.pot'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
532 writelocations = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
533 locationstyle = GNU
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
534 verbose = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
535 width = 78
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
536 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
537 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
538 nodocstrings = {}
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
539
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
540 options = Options()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
541 locations = {'gnu' : options.GNU,
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
542 'solaris' : options.SOLARIS,
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
545 # parse options
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
546 for opt, arg in opts:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
547 if opt in ('-h', '--help'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
548 usage(0)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
549 elif opt in ('-a', '--extract-all'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
550 options.extractall = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
551 elif opt in ('-d', '--default-domain'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
552 options.outfile = arg + '.pot'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
553 elif opt in ('-E', '--escape'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
554 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
555 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
556 options.docstrings = 1
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
557 elif opt in ('-k', '--keyword'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
558 options.keywords.append(arg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
559 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
560 default_keywords = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
561 elif opt in ('-n', '--add-location'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
562 options.writelocations = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
563 elif opt in ('--no-location',):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
564 options.writelocations = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
565 elif opt in ('-S', '--style'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
566 options.locationstyle = locations.get(arg.lower())
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
567 if options.locationstyle is None:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
568 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
569 elif opt in ('-o', '--output'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
570 options.outfile = arg
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
571 elif opt in ('-p', '--output-dir'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
572 options.outpath = arg
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
573 elif opt in ('-v', '--verbose'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
574 options.verbose = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
575 elif opt in ('-V', '--version'):
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
576 print(_('pygettext.py (xgettext for Python) %s') % __version__)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
577 sys.exit(0)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
578 elif opt in ('-w', '--width'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
579 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
580 options.width = int(arg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
581 except ValueError:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
582 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
583 elif opt in ('-x', '--exclude-file'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
584 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
585 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
586 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
587 try:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
588 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
589 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
590 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
591 break
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
592 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
593 finally:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
594 fp.close()
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
595
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
596 # calculate escapes
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
597 make_escapes(options.escape)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
598
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
599 # calculate all keywords
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
600 options.keywords.extend(default_keywords)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
601
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
602 # initialize list of strings to exclude
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
603 if options.excludefilename:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
604 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
605 fp = open(options.excludefilename)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
606 options.toexclude = fp.readlines()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
607 fp.close()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
608 except IOError:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
609 print(_(
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
610 "Can't read --exclude-file: %s") % options.excludefilename, file=sys.stderr)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
611 sys.exit(1)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
612 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
613 options.toexclude = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
614
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
615 # resolve args to module lists
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
616 expanded = []
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
617 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
618 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
619 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
620 else:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
621 expanded.extend(getFilesForName(arg))
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
622 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
623
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
624 # slurp through all the files
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
625 eater = TokenEater(options)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
626 for filename in args:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
627 if filename == '-':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
628 if options.verbose:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
629 print(_('Reading standard input'))
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
630 fp = sys.stdin
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
631 closep = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
632 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
633 if options.verbose:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
634 print(_('Working on %s') % filename)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
635 fp = open(filename)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
636 closep = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
637 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
638 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
639 try:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
640 tokenize.tokenize(fp.readline, eater)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 4080
diff changeset
641 except tokenize.TokenError as e:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
642 print('%s: %s, line %d, column %d' % (
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
643 e[0], filename, e[1][0], e[1][1]), file=sys.stderr)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
644 finally:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
645 if closep:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
646 fp.close()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
647
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
648 # write the output
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
649 if options.outfile == '-':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
650 fp = sys.stdout
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
651 closep = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
652 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
653 if options.outpath:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
654 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
655 fp = open(options.outfile, 'w')
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
656 closep = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
657 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
658 eater.write(fp)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
659 finally:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
660 if closep:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
661 fp.close()
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
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
664 if __name__ == '__main__':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
665 main()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
666 # some more test strings
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
667 _(u'a unicode string')
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
668 # this one creates a warning
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
669 _('*** 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
670 _('more' 'than' 'one' 'string')

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