summaryrefslogtreecommitdiff
path: root/dev-python/docutils/files/docutils-0.7-encoding.patch
blob: 9a88f9fedaa6bc807afb0e653bcf3abc213c5271 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
--- docutils/nodes.py
+++ docutils/nodes.py
@@ -27,6 +27,7 @@
 import warnings
 import types
 import unicodedata
+import locale
 
 # ==============================
 #  Functional Node Base Classes
@@ -328,6 +329,9 @@
     else:
         def __new__(cls, data, rawsource=None):
             """Prevent the rawsource argument from propagating to str."""
+            encoding = locale.getdefaultlocale()[1]
+            if isinstance(data, str) and encoding is not None:
+                data = data.decode(encoding)
             return reprunicode.__new__(cls, data)
 
     def __init__(self, data, rawsource=''):
--- docutils/parsers/rst/directives/misc.py
+++ docutils/parsers/rst/directives/misc.py
@@ -10,6 +10,7 @@
 import os.path
 import re
 import time
+import locale
 from docutils import io, nodes, statemachine, utils
 from docutils.parsers.rst import Directive, convert_directive_function
 from docutils.parsers.rst import directives, roles, states
@@ -66,8 +67,16 @@
                                input_encoding_error_handler),
                 handle_io_errors=None)
         except IOError, error:
-            raise self.severe('Problems with "%s" directive path:\n%s: %s.' %
-                        (self.name, error.__class__.__name__, str(error)))
+            if sys.version_info < (3,):
+                error_string = str(error)
+                encoding = locale.getdefaultlocale()[1]
+                if encoding is not None:
+                    error_string = error_string.decode(encoding)
+                raise self.severe(u'Problems with "%s" directive path:\n%s: %s.' %
+                            (self.name, error.__class__.__name__, error_string))
+            else:
+                raise self.severe('Problems with "%s" directive path:\n%s: %s.' %
+                            (self.name, error.__class__.__name__, str(error)))
             # Hack: Since Python 2.6, the string interpolation returns a
             # unicode object if one of the supplied %s replacements is a
             # unicode object. IOError has no `__unicode__` method and the
--- tools/buildhtml.py
+++ tools/buildhtml.py
@@ -15,8 +15,8 @@
 __docformat__ = 'reStructuredText'
 
 
+import locale
 try:
-    import locale
     locale.setlocale(locale.LC_ALL, '')
 except:
     pass
@@ -236,8 +236,19 @@
                               writer_name=pub_struct.writer_name,
                               settings=settings)
         except ApplicationError, error:
-            print >>sys.stderr, ('        Error (%s): %s'
-                                 % (error.__class__.__name__, error))
+            if sys.version_info < (3,):
+                encoding = locale.getdefaultlocale()[1]
+                if isinstance(error.message, unicode) and encoding is not None:
+                    error_message = (u'        Error (%s): %s'
+                                     % (error.__class__.__name__, error))
+                    error_message = error_message.encode(encoding)
+                else:
+                    error_message = ('        Error (%s): %s'
+                                     % (error.__class__.__name__, error))
+                print >>sys.stderr, error_message
+            else:
+                print >>sys.stderr, ('        Error (%s): %s'
+                                     % (error.__class__.__name__, error))
 
 
 if __name__ == "__main__":