annotate roundup/pygettext.py @ 8180:d02ce1d14acd

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

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