* 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
__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):
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`'])