changeset 366:6abe384584c8 trunk

Test and respective fix for gettext calls that spawn multiple lines. Fixes #119.
author palgarvio
date Thu, 26 Jun 2008 21:02:20 +0000
parents 7e3136b0ff0b
children 0132b088c904
files babel/messages/extract.py babel/messages/tests/extract.py
diffstat 2 files changed, 37 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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:
--- 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):
Copyright (C) 2012-2017 Edgewall Software