From: Fred Drake <fdrake@acm.org>
Date: Tue, 4 Sep 2001 19:43:26 +0000 (+0000)
Subject: Make pprint more locale-friendly; patch contributed by Denis S. Otkidach.
X-Git-Tag: v2.2a3~115
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1ef106c94d7ec70f6f4ca756fa47852404556b6d;p=python

Make pprint more locale-friendly; patch contributed by Denis S. Otkidach.
This closes SF patch #451538.
---

diff --git a/Lib/pprint.py b/Lib/pprint.py
index 351323be6b..a91559f021 100644
--- a/Lib/pprint.py
+++ b/Lib/pprint.py
@@ -34,7 +34,8 @@ saferepr()
 
 """
 
-from types import DictType, ListType, TupleType
+from types import DictType, ListType, TupleType, StringType
+import sys
 
 try:
     from cStringIO import StringIO
@@ -95,7 +96,6 @@ class PrettyPrinter:
         if stream:
             self.__stream = stream
         else:
-            import sys
             self.__stream = sys.stdout
 
     def pprint(self, object):
@@ -187,12 +187,30 @@ class PrettyPrinter:
 
 # Return triple (repr_string, isreadable, isrecursive).
 
+_have_module = sys.modules.has_key
+
 def _safe_repr(object, context, maxlevels=None, level=0):
     level += 1
     typ = type(object)
-    if not (typ in (DictType, ListType, TupleType) and object):
+    if not (typ in (DictType, ListType, TupleType, StringType) and object):
         rep = `object`
         return rep, (rep and (rep[0] != '<')), 0
+    elif typ is StringType:
+        if not _have_module('locale'):
+            return `object`, 1, 0
+        if "'" in object and '"' not in object:
+            closure = '"'
+            quotes = {'"': '\\"'}
+        else:
+            closure = "'"
+            quotes = {"'": "\\'"}
+        sio = StringIO()
+        for char in object:
+            if char.isalpha():
+                sio.write(char)
+            else:
+                sio.write(quotes.get(char, `char`[1:-1]))
+        return closure + sio.getvalue() + closure, 1, 0
 
     if context.has_key(id(object)):
         return `_Recursion(object)`, 0, 1