From 63ce5af49660181d129aabb9c096cab07807b54b Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Fri, 27 Jul 2001 16:47:18 +0000 Subject: Added the -X/--no-docstrings flag which takes a filename containing a list of files to not extract docstrings from when the -D option is given. This isn't optimal, but I didn't want to change the semantics of -D, and it's bad form to allow optional switch arguments. Bumping __version__ to 1.4. TokenEater.__init__(): Initialize __curfile to None. __waiting(): In order to extract docstrings from the module, both the -D flag should be set, and the __curfile should not be named in the -X filename (i.e. it isn't in opts.nodocstrings). set_filename(): Fixed a bug where once the first module docstring is extracted, no subsequent module docstrings will be extracted. The bug was that the first extraction set __freshmodule to 0, but that flag was never reset back to 1. set_filename() is always called when the next file is being processed, so use it to reset the __freshmodule flag. main(): Add support for -X/--no-docstring. --- Tools/i18n/pygettext.py | 45 ++++++++++++++++++++++++++++++++------------- 1 file 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 +# Originally written by Barry Warsaw # # Minimally patched to make it even more xgettext compatible # by Peter Funk @@ -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) -- cgit v0.12