changeset 227:f358dd40a960

Applied patch by Ramiro Morales for more extensive detection of Python string formatting specifiers. Closes #57.
author cmlenz
date Fri, 20 Jul 2007 12:52:40 +0000
parents 9d7cc01b49c2
children 629357c88d59
files ChangeLog babel/messages/catalog.py babel/messages/tests/catalog.py
diffstat 3 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -19,6 +19,8 @@
  * Numerous Python message extractor fixes: it now handles nested function
    calls within a gettext function call correctly, uses the correct line number
    for multi-line function calls, and other small fixes (tickets #38 and #39).
+ * Improved support for detecting Python string formatting fields in message
+   strings (ticket #57).
 
 
 Version 0.8.1
--- a/babel/messages/catalog.py
+++ b/babel/messages/catalog.py
@@ -33,7 +33,7 @@
 __all__ = ['Message', 'Catalog', 'TranslationError']
 __docformat__ = 'restructuredtext en'
 
-PYTHON_FORMAT = re.compile(r'\%(\([\w]+\))?[diouxXeEfFgGcrs]')
+PYTHON_FORMAT = re.compile(r'\%(\([\w]+\))?([-#0\ +])?(\*|[\d]+)?(\.(\*|[\d]+))?([hlL])?[diouxXeEfFgGcrs]')
 
 
 class Message(object):
--- a/babel/messages/tests/catalog.py
+++ b/babel/messages/tests/catalog.py
@@ -23,6 +23,17 @@
         assert catalog.PYTHON_FORMAT.search('foo %d bar')
         assert catalog.PYTHON_FORMAT.search('foo %s bar')
         assert catalog.PYTHON_FORMAT.search('foo %r bar')
+        assert catalog.PYTHON_FORMAT.search('foo %(name).1f')
+        assert catalog.PYTHON_FORMAT.search('foo %(name)3.3f')
+        assert catalog.PYTHON_FORMAT.search('foo %(name)3f')
+        assert catalog.PYTHON_FORMAT.search('foo %(name)06d')
+        assert catalog.PYTHON_FORMAT.search('foo %(name)Li')
+        assert catalog.PYTHON_FORMAT.search('foo %(name)#d')
+        assert catalog.PYTHON_FORMAT.search('foo %(name)-4.4hs')
+        assert catalog.PYTHON_FORMAT.search('foo %(name)*.3f')
+        assert catalog.PYTHON_FORMAT.search('foo %(name).*f')
+        assert catalog.PYTHON_FORMAT.search('foo %(name)3.*f')
+        assert catalog.PYTHON_FORMAT.search('foo %(name)*.*f')
 
     def test_translator_comments(self):
         mess = catalog.Message('foo', user_comments=['Comment About `foo`'])
Copyright (C) 2012-2017 Edgewall Software