# HG changeset patch # User palgarvio # Date 1214514140 0 # Node ID dd63a41afbba517194eeac9795ce191649bff333 # Parent 6bc1d13156c912d62cedd7f49a09205111c89042 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 --- a/babel/messages/extract.py +++ b/babel/messages/extract.py @@ -271,6 +271,7 @@ 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 @@ if strip_comment_tags: _strip_comment_tags(comments, comment_tags) - yield lineno, messages, comments @@ -421,6 +421,13 @@ 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 --- a/babel/messages/tests/extract.py +++ b/babel/messages/tests/extract.py @@ -62,6 +62,35 @@ 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):