summaryrefslogtreecommitdiffstats
path: root/Tools/i18n/pygettext.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/i18n/pygettext.py')
-rwxr-xr-xTools/i18n/pygettext.py45
1 files changed, 32 insertions, 13 deletions
diff --git a/Tools/i18n/pygettext.py b/Tools/i18n/pygettext.py
index bd9c0bc..b40bda1 100755
--- a/Tools/i18n/pygettext.py
+++ b/Tools/i18n/pygettext.py
@@ -1,5 +1,5 @@
#! /usr/bin/env python
-# Originally written by Barry Warsaw <barry@digicool.com>
+# Originally written by Barry Warsaw <barry@zope.com>
#
# Minimally patched to make it even more xgettext compatible
# by Peter Funk <pf@artcom-gmbh.de>
@@ -49,11 +49,11 @@ Options:
-a
--extract-all
- Extract all strings
+ Extract all strings.
-d name
--default-domain=name
- Rename the default output file from messages.pot to name.pot
+ Rename the default output file from messages.pot to name.pot.
-E
--escape
@@ -63,11 +63,11 @@ Options:
--docstrings
Extract module, class, method, and function docstrings. These do not
need to be wrapped in _() markers, and in fact cannot be for Python to
- consider them docstrings.
+ consider them docstrings. (See also the -X option).
-h
--help
- print this help message and exit
+ Print this help message and exit.
-k word
--keyword=word
@@ -128,8 +128,13 @@ Options:
extracted from the input files. Each string to be excluded must
appear on a line by itself in the file.
-If `inputfile' is -, standard input is read.
+ -X filename
+ --no-docstrings=filename
+ Specify a file that contains a list of files (one per line) that
+ should not have their docstrings extracted. This is only useful in
+ conjunction with the -D option above.
+If `inputfile' is -, standard input is read.
"""
import os
@@ -146,7 +151,7 @@ try:
except ImportError:
def _(s): return s
-__version__ = '1.3'
+__version__ = '1.4'
default_keywords = ['_']
DEFAULTKEYWORDS = ', '.join(default_keywords)
@@ -155,8 +160,8 @@ EMPTYSTRING = ''
-# The normal pot-file header. msgmerge and EMACS' po-mode work better if
-# it's there.
+# The normal pot-file header. msgmerge and Emacs's po-mode work better if it's
+# there.
pot_header = _('''\
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
@@ -247,6 +252,7 @@ class TokenEater:
self.__data = []
self.__lineno = -1
self.__freshmodule = 1
+ self.__curfile = None
def __call__(self, ttype, tstring, stup, etup, line):
# dispatch
@@ -256,8 +262,9 @@ class TokenEater:
self.__state(ttype, tstring, stup[0])
def __waiting(self, ttype, tstring, lineno):
+ opts = self.__options
# Do docstring extractions, if enabled
- if self.__options.docstrings:
+ if opts.docstrings and not opts.nodocstrings.get(self.__curfile):
# module docstring?
if self.__freshmodule:
if ttype == tokenize.STRING:
@@ -270,7 +277,7 @@ class TokenEater:
if ttype == tokenize.NAME and tstring in ('class', 'def'):
self.__state = self.__suiteseen
return
- if ttype == tokenize.NAME and tstring in self.__options.keywords:
+ if ttype == tokenize.NAME and tstring in opts.keywords:
self.__state = self.__keywordseen
def __suiteseen(self, ttype, tstring, lineno):
@@ -318,6 +325,7 @@ class TokenEater:
def set_filename(self, filename):
self.__curfile = filename
+ self.__freshmodule = 1
def write(self, fp):
options = self.__options
@@ -383,12 +391,12 @@ def main():
try:
opts, args = getopt.getopt(
sys.argv[1:],
- 'ad:DEhk:Kno:p:S:Vvw:x:',
+ 'ad:DEhk:Kno:p:S:Vvw:x:X:',
['extract-all', 'default-domain=', 'escape', 'help',
'keyword=', 'no-default-keywords',
'add-location', 'no-location', 'output=', 'output-dir=',
'style=', 'verbose', 'version', 'width=', 'exclude-file=',
- 'docstrings',
+ 'docstrings', 'no-docstrings',
])
except getopt.error, msg:
usage(1, msg)
@@ -410,6 +418,7 @@ def main():
width = 78
excludefilename = ''
docstrings = 0
+ nodocstrings = {}
options = Options()
locations = {'gnu' : options.GNU,
@@ -456,6 +465,16 @@ def main():
usage(1, _('--width argument must be an integer: %s') % arg)
elif opt in ('-x', '--exclude-file'):
options.excludefilename = arg
+ elif opt in ('-X', '--no-docstrings'):
+ fp = open(arg)
+ try:
+ while 1:
+ line = fp.readline()
+ if not line:
+ break
+ options.nodocstrings[line[:-1]] = 1
+ finally:
+ fp.close()
# calculate escapes
make_escapes(options.escape)