annotate tools/pygettext.py @ 5442:afd9fd3a0edb

Python 3 preparation: avoid assigning to instance __getitem__ in TruthDict. In Python 3, special method names are generally only looked up at the class level, not on instance objects, and so assigning to them for an instance object doesn't work as expected.
author Joseph Myers <jsm@polyomino.org.uk>
date Wed, 25 Jul 2018 12:29:08 +0000
parents 23b8e6067f7c
children
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():
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5392
diff changeset
457 keys = sorted(v.keys())
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
458 reverse.setdefault(tuple(keys), []).append((k, v))
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5392
diff changeset
459 rkeys = sorted(reverse.keys())
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
460 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
461 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
462 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
463 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
464 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
465 # 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
466 # 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
467 # to skip translating some unimportant docstrings.
5392
a7bf8c4e502f Python 3 preparation: use sum() instead of reduce().
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
468 if sum(v.values()):
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
469 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
470 # 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
471 # 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
472 # file name and then by line number.
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5392
diff changeset
473 v = sorted(v.keys())
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
474 if not options.writelocations:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
475 pass
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
476 # 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
477 elif options.locationstyle == options.SOLARIS:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
478 for filename, lineno in v:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
479 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
480 print(_(
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
481 '# 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
482 elif options.locationstyle == options.GNU:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
483 # 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
484 # 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
485 locline = '#:'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
486 for filename, lineno in v:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
487 d = {'filename': filename, 'lineno': lineno}
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
488 s = _(' %(filename)s:%(lineno)d') % d
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
489 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
490 locline = locline + s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
491 else:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
492 print(locline, file=fp)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
493 locline = "#:" + s
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
494 if len(locline) > 2:
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)
465
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
496 if isdocstring:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
497 print('#, docstring', file=fp)
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
498 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
499 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
500
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
501
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
502
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
503 def main():
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
504 global default_keywords
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
505 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
506 opts, args = getopt.getopt(
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
507 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
508 '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
509 ['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
510 'keyword=', 'no-default-keywords',
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
511 '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
512 '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
513 'docstrings', 'no-docstrings',
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
514 ])
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 4080
diff changeset
515 except getopt.error as msg:
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
516 usage(1, msg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
517
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
518 # for holding option values
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
519 class Options:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
520 # constants
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
521 GNU = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
522 SOLARIS = 2
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
523 # defaults
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
524 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
525 escape = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
526 keywords = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
527 outpath = ''
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
528 outfile = 'messages.pot'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
529 writelocations = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
530 locationstyle = GNU
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
531 verbose = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
532 width = 78
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
533 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
534 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
535 nodocstrings = {}
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
536
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
537 options = Options()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
538 locations = {'gnu' : options.GNU,
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
539 'solaris' : options.SOLARIS,
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
540 }
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
541
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
542 # parse options
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
543 for opt, arg in opts:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
544 if opt in ('-h', '--help'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
545 usage(0)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
546 elif opt in ('-a', '--extract-all'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
547 options.extractall = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
548 elif opt in ('-d', '--default-domain'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
549 options.outfile = arg + '.pot'
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
550 elif opt in ('-E', '--escape'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
551 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
552 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
553 options.docstrings = 1
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
554 elif opt in ('-k', '--keyword'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
555 options.keywords.append(arg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
556 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
557 default_keywords = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
558 elif opt in ('-n', '--add-location'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
559 options.writelocations = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
560 elif opt in ('--no-location',):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
561 options.writelocations = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
562 elif opt in ('-S', '--style'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
563 options.locationstyle = locations.get(arg.lower())
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
564 if options.locationstyle is None:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
565 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
566 elif opt in ('-o', '--output'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
567 options.outfile = arg
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
568 elif opt in ('-p', '--output-dir'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
569 options.outpath = arg
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
570 elif opt in ('-v', '--verbose'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
571 options.verbose = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
572 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
573 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
574 sys.exit(0)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
575 elif opt in ('-w', '--width'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
576 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
577 options.width = int(arg)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
578 except ValueError:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
579 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
580 elif opt in ('-x', '--exclude-file'):
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
581 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
582 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
583 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
584 try:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
585 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
586 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
587 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
588 break
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
589 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
590 finally:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
591 fp.close()
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
592
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
593 # calculate escapes
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
594 make_escapes(options.escape)
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 all keywords
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
597 options.keywords.extend(default_keywords)
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 # initialize list of strings to exclude
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
600 if options.excludefilename:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
601 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
602 fp = open(options.excludefilename)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
603 options.toexclude = fp.readlines()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
604 fp.close()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
605 except IOError:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
606 print(_(
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
607 "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
608 sys.exit(1)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
609 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
610 options.toexclude = []
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
611
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
612 # resolve args to module lists
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
613 expanded = []
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
614 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
615 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
616 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
617 else:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
618 expanded.extend(getFilesForName(arg))
423
c64ce58ee529 Resolve pygettext args; described command line calls
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 405
diff changeset
619 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
620
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
621 # slurp through all the files
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
622 eater = TokenEater(options)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
623 for filename in args:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
624 if filename == '-':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
625 if options.verbose:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
626 print(_('Reading standard input'))
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
627 fp = sys.stdin
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
628 closep = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
629 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
630 if options.verbose:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5248
diff changeset
631 print(_('Working on %s') % filename)
400
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
632 fp = open(filename)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
633 closep = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
634 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
635 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
636 try:
70b0809cd15c Updated to version 1.4 (python 2.2) version of pygettext
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 462
diff changeset
637 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
638 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
639 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
640 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
641 finally:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
642 if closep:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
643 fp.close()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
644
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
645 # write the output
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
646 if options.outfile == '-':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
647 fp = sys.stdout
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
648 closep = 0
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
649 else:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
650 if options.outpath:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
651 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
652 fp = open(options.outfile, 'w')
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
653 closep = 1
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
654 try:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
655 eater.write(fp)
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
656 finally:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
657 if closep:
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
658 fp.close()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
659
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
660
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
661 if __name__ == '__main__':
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
662 main()
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
663 # some more test strings
139593f02ff6 To create a roundup .pot file, use:
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
664 _(u'a unicode string')
4080
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
665 # this one creates a warning
b2d6657cd2a6 Merge from upstream.
Stefan Seefeld <stefan@seefeld.name>
parents: 465
diff changeset
666 _('*** 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
667 _('more' 'than' 'one' 'string')

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