From: Pedro Algarvio Date: Thu, 26 Jun 2008 21:02:20 +0000 (+0000) Subject: Test and respective fix for gettext calls that spawn multiple lines. Fixes #119. X-Git-Tag: 1.0~312 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af76ec42708d55450db18a6474805d2ecc931482;p=thirdparty%2Fbabel.git Test and respective fix for gettext calls that spawn multiple lines. Fixes #119. --- diff --git a/babel/messages/extract.py b/babel/messages/extract.py index f43be886..89f8ef43 100644 --- a/babel/messages/extract.py +++ b/babel/messages/extract.py @@ -271,6 +271,7 @@ def extract(method, fileobj, keywords=DEFAULT_KEYWORDS, comment_tags=(), results = func(fileobj, keywords.keys(), comment_tags, options=options or {}) + for lineno, funcname, messages, comments in results: if funcname: spec = keywords[funcname] or (1,) @@ -313,7 +314,6 @@ def extract(method, fileobj, keywords=DEFAULT_KEYWORDS, comment_tags=(), if strip_comment_tags: _strip_comment_tags(comments, comment_tags) - yield lineno, messages, comments @@ -421,6 +421,13 @@ def extract_python(fileobj, keywords, comment_tags, options): del buf[:] else: messages.append(None) + if translator_comments: + # We have translator comments, and since we're on a + # comma(,) user is allowed to break into a new line + # Let's increase the last comment's lineno in order + # for the comment to still be a valid one + old_lineno, old_comment = translator_comments.pop() + translator_comments.append((old_lineno+1, old_comment)) elif call_stack > 0 and tok == OP and value == ')': call_stack -= 1 elif funcname and call_stack == -1: diff --git a/babel/messages/tests/extract.py b/babel/messages/tests/extract.py index 917892fb..7436e6c7 100644 --- a/babel/messages/tests/extract.py +++ b/babel/messages/tests/extract.py @@ -62,6 +62,35 @@ msg = ngettext('pylon', # TRANSLATORS: shouldn't be self.assertEqual([(1, 'ngettext', (u'pylon', u'pylons', None), [])], messages) + def test_comments_with_calls_that_spawn_multiple_lines(self): + buf = StringIO("""\ +# NOTE: This Comment SHOULD Be Extracted +add_notice(req, ngettext("Catalog deleted.", + "Catalogs deleted.", len(selected))) + +# NOTE: This Comment SHOULD Be Extracted +add_notice(req, _("Locale deleted.")) + + +# NOTE: This Comment SHOULD Be Extracted +add_notice(req, ngettext("Foo deleted.", "Foos deleted.", len(selected))) +""") + messages = list(extract.extract_python(buf, ('ngettext','_'), ['NOTE:'], + + {'strip_comment_tags':False})) + self.assertEqual((6, '_', 'Locale deleted.', + [u'NOTE: This Comment SHOULD Be Extracted']), + messages[1]) + self.assertEqual((10, 'ngettext', (u'Foo deleted.', u'Foos deleted.', + None), + [u'NOTE: This Comment SHOULD Be Extracted']), + messages[2]) + self.assertEqual((3, 'ngettext', + (u'Catalog deleted.', + u'Catalogs deleted.', None), + [u'NOTE: This Comment SHOULD Be Extracted']), + messages[0]) + def test_declarations(self): buf = StringIO("""\ class gettext(object):