#! /usr/bin/env python3
-# -*- coding: iso-8859-1 -*-
-# Originally written by Barry Warsaw <barry@python.org>
-#
-# Minimally patched to make it even more xgettext compatible
-# by Peter Funk <pf@artcom-gmbh.de>
-#
-# 2002-11-22 Jürgen Hermann <jh@web.de>
-# Added checks that _() only contains string literals, and
-# command line args are resolved to module lists, i.e. you
-# can now pass a filename, a module or package name, or a
-# directory (including globbing chars, important for Win32).
-# Made docstring fit in 80 chars wide displays using pydoc.
-#
-
-# for selftesting
-try:
- import fintl
- _ = fintl.gettext
-except ImportError:
- _ = lambda s: s
-__doc__ = _("""pygettext -- Python equivalent of xgettext(1)
+"""pygettext -- Python equivalent of xgettext(1)
Many systems (Solaris, Linux, Gnu) provide extensive tools that ease the
internationalization of C programs. Most of these tools are independent of
conjunction with the -D option above.
If `inputfile' is -, standard input is read.
-""")
+"""
-import os
+import ast
+import getopt
+import glob
import importlib.machinery
import importlib.util
+import os
import sys
-import glob
import time
-import getopt
-import ast
import tokenize
from collections import defaultdict
from dataclasses import dataclass, field
# The normal pot-file header. msgmerge and Emacs's po-mode work better if it's
# there.
-pot_header = _('''\
+pot_header = '''\
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
"Content-Transfer-Encoding: %(encoding)s\\n"
"Generated-By: pygettext.py %(version)s\\n"
-''')
+'''
def usage(code, msg=''):
global escapes, escape
if pass_nonascii:
# Allow non-ascii characters to pass through so that e.g. 'msgid
- # "Höhe"' would result not result in 'msgid "H\366he"'. Otherwise we
+ # "Höhe"' would result not result in 'msgid "H\366he"'. Otherwise we
# escape any character outside the 32..126 range.
mod = 128
escape = escape_ascii
def escape_ascii(s, encoding):
return ''.join(escapes[ord(c)] if ord(c) < 128 else c for c in s)
+
def escape_nonascii(s, encoding):
return ''.join(escapes[b] for b in s.encode(encoding))
if func_name not in opts.keywords:
continue
if len(call.args) != 1:
- print(_(
+ print((
'*** %(file)s:%(lineno)s: Seen unexpected amount of'
' positional arguments in gettext call: %(source_segment)s'
) % {
}, file=sys.stderr)
continue
if call.keywords:
- print(_(
+ print((
'*** %(file)s:%(lineno)s: Seen unexpected keyword arguments'
' in gettext call: %(source_segment)s'
) % {
continue
arg = call.args[0]
if not isinstance(arg, ast.Constant):
- print(_(
+ print((
'*** %(file)s:%(lineno)s: Seen unexpected argument type'
' in gettext call: %(source_segment)s'
) % {
)
def warn_unexpected_token(self, token):
- print(_(
+ print((
'*** %(file)s:%(lineno)s: Seen unexpected token "%(token)s"'
) % {
'token': token,
elif opt in ('-S', '--style'):
options.locationstyle = locations.get(arg.lower())
if options.locationstyle is None:
- usage(1, _('Invalid value for --style: %s') % arg)
+ usage(1, f'Invalid value for --style: {arg}')
elif opt in ('-o', '--output'):
options.outfile = arg
elif opt in ('-p', '--output-dir'):
elif opt in ('-v', '--verbose'):
options.verbose = 1
elif opt in ('-V', '--version'):
- print(_('pygettext.py (xgettext for Python) %s') % __version__)
+ print(f'pygettext.py (xgettext for Python) {__version__}')
sys.exit(0)
elif opt in ('-w', '--width'):
try:
options.width = int(arg)
except ValueError:
- usage(1, _('--width argument must be an integer: %s') % arg)
+ usage(1, f'--width argument must be an integer: {arg}')
elif opt in ('-x', '--exclude-file'):
options.excludefilename = arg
elif opt in ('-X', '--no-docstrings'):
with open(options.excludefilename) as fp:
options.toexclude = fp.readlines()
except IOError:
- print(_(
- "Can't read --exclude-file: %s") % options.excludefilename, file=sys.stderr)
+ print(f"Can't read --exclude-file: {options.excludefilename}",
+ file=sys.stderr)
sys.exit(1)
else:
options.toexclude = []
for filename in args:
if filename == '-':
if options.verbose:
- print(_('Reading standard input'))
+ print('Reading standard input')
fp = sys.stdin.buffer
closep = 0
else:
if options.verbose:
- print(_('Working on %s') % filename)
+ print(f'Working on {filename}')
fp = open(filename, 'rb')
closep = 1
try:
if __name__ == '__main__':
main()
- # some more test strings
- # this one creates a warning
- _('*** Seen unexpected token "%(token)s"') % {'token': 'test'}
- _('more' 'than' 'one' 'string')