[pypy-svn] r61899 - in pypy/trunk/pypy/module/_locale: . test

getxsick at codespeak.net getxsick at codespeak.net
Sun Feb 15 00:20:41 CET 2009


Author: getxsick
Date: Sun Feb 15 00:20:40 2009
New Revision: 61899

Modified:
   pypy/trunk/pypy/module/_locale/__init__.py
   pypy/trunk/pypy/module/_locale/interp_locale.py
   pypy/trunk/pypy/module/_locale/test/test_locale.py
Log:
(jlg, getxsick) implementation of gettext(), dgettext(), dcgettext() and textdomain().
All tests passed but more tests would be nice.


Modified: pypy/trunk/pypy/module/_locale/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/_locale/__init__.py	(original)
+++ pypy/trunk/pypy/module/_locale/__init__.py	Sun Feb 15 00:20:40 2009
@@ -5,12 +5,15 @@
 
     interpleveldefs  = {
             #'lconv':               'interp_locale.lconv',
-            'setlocale':           'interp_locale.setlocale',
-            'localeconv':          'interp_locale.localeconv',
-            'strcoll':             'interp_locale.strcoll',
+            'setlocale':            'interp_locale.setlocale',
+            'localeconv':           'interp_locale.localeconv',
+            'strcoll':              'interp_locale.strcoll',
             #'strxfrm':             'interp_locale.strxfrm',
             #'getdefaultlocale':    'interp_locale.getdefaultlocale',
-            #'gettext':             'interp_locale.gettext',
+            'gettext':              'interp_locale.gettext',
+            'dgettext':             'interp_locale.dgettext',
+            'dcgettext':            'interp_locale.dcgettext',
+            'textdomain':           'interp_locale.textdomain',
             }
 
     appleveldefs  = {

Modified: pypy/trunk/pypy/module/_locale/interp_locale.py
==============================================================================
--- pypy/trunk/pypy/module/_locale/interp_locale.py	(original)
+++ pypy/trunk/pypy/module/_locale/interp_locale.py	Sun Feb 15 00:20:40 2009
@@ -192,3 +192,64 @@
 
 strcoll.unwrap_spec = [ObjSpace, W_Root, W_Root]
 
+_gettext = external('gettext', [rffi.CCHARP], rffi.CCHARP)
+
+def gettext(space, msg):
+    """gettext(msg) -> string
+    Return translation of msg."""
+    return space.wrap(rffi.charp2str(_gettext(rffi.str2charp(msg))))
+
+gettext.unwrap_spec = [ObjSpace, str]
+
+_dgettext = external('dgettext', [rffi.CCHARP, rffi.CCHARP], rffi.CCHARP)
+
+def dgettext(space, w_domain, msg):
+    """dgettext(domain, msg) -> string
+    Return translation of msg in domain."""
+    if space.is_w(w_domain, space.w_None):
+        domain = None
+        result = _dgettext(domain, rffi.str2charp(msg))
+    else:
+        domain = space.str_w(w_domain)
+        result = _dgettext(rffi.str2charp(domain), rffi.str2charp(msg))
+
+    return space.wrap(rffi.charp2str(result))
+
+dgettext.unwrap_spec = [ObjSpace, W_Root, str]
+
+_dcgettext = external('dcgettext', [rffi.CCHARP, rffi.CCHARP, rffi.INT], rffi.CCHARP)
+
+def dcgettext(space, w_domain, msg, category):
+    """dcgettext(domain, msg, category) -> string
+    Return translation of msg in domain and category."""
+
+    if space.is_w(w_domain, space.w_None):
+        domain = None
+        result = _dcgettext(domain, rffi.str2charp(msg),
+                            rffi.cast(rffi.INT, category))
+    else:
+        domain = space.str_w(w_domain)
+        result = _dcgettext(rffi.str2charp(domain), rffi.str2charp(msg),
+                            rffi.cast(rffi.INT, category))
+
+    return space.wrap(rffi.charp2str(result))
+
+dcgettext.unwrap_spec = [ObjSpace, W_Root, str, int]
+
+
+_textdomain = external('textdomain', [rffi.CCHARP], rffi.CCHARP)
+
+def textdomain(space, w_domain):
+    """textdomain(domain) -> string
+    Set the C library's textdomain to domain, returning the new domain."""
+
+    if space.is_w(w_domain, space.w_None):
+        domain = None
+        result = _textdomain(domain)
+    else:
+        domain = space.str_w(w_domain)
+        result = _textdomain(rffi.str2charp(domain))
+
+    return space.wrap(rffi.charp2str(result))
+
+textdomain.unwrap_spec = [ObjSpace, W_Root]

Modified: pypy/trunk/pypy/module/_locale/test/test_locale.py
==============================================================================
--- pypy/trunk/pypy/module/_locale/test/test_locale.py	(original)
+++ pypy/trunk/pypy/module/_locale/test/test_locale.py	Sun Feb 15 00:20:40 2009
@@ -128,3 +128,14 @@
         _locale.setlocale(_locale.LC_ALL, "pl_PL")
         assert locale.str(1.1) == '1,1'
 
+    def test_text(self):
+        # TODO more tests would be nice
+        import _locale
+
+        for fun in ('gettext', 'dgettext', 'dcgettext', 'textdomain'):
+            assert hasattr(_locale, fun)
+
+        assert _locale.gettext("1234") == "1234"
+        assert _locale.dgettext(None, "1234") == "1234"
+        assert _locale.dcgettext(None, "1234", _locale.LC_MESSAGES) == "1234"
+        assert _locale.textdomain("1234") == "1234"



More information about the Pypy-commit mailing list