Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Side by Side Diff: fix_encoding.py

Issue 6811020: Revert r80770 "Switch from xml.dom.minidom to xml.etree" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | gclient_utils.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Collection of functions and classes to fix various encoding problems on 5 """Collection of functions and classes to fix various encoding problems on
6 multiple platforms with python. 6 multiple platforms with python.
7 """ 7 """
8 8
9 import codecs 9 import codecs
10 import locale 10 import locale
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 """Converts sys.argv to 'encoding' encoded string. 74 """Converts sys.argv to 'encoding' encoded string.
75 75
76 utf-8 is recommended. 76 utf-8 is recommended.
77 77
78 Works around <http://bugs.python.org/issue2128>. 78 Works around <http://bugs.python.org/issue2128>.
79 """ 79 """
80 global _SYS_ARGV_PROCESSED 80 global _SYS_ARGV_PROCESSED
81 if _SYS_ARGV_PROCESSED: 81 if _SYS_ARGV_PROCESSED:
82 return False 82 return False
83 83
84 # These types are available on linux but not Mac.
85 # pylint: disable=E0611,F0401
86 from ctypes import byref, c_int, POINTER, windll, WINFUNCTYPE 84 from ctypes import byref, c_int, POINTER, windll, WINFUNCTYPE
87 from ctypes.wintypes import LPCWSTR, LPWSTR 85 from ctypes.wintypes import LPCWSTR, LPWSTR
88 86
89 # <http://msdn.microsoft.com/en-us/library/ms683156.aspx> 87 # <http://msdn.microsoft.com/en-us/library/ms683156.aspx>
90 GetCommandLineW = WINFUNCTYPE(LPWSTR)(('GetCommandLineW', windll.kernel32)) 88 GetCommandLineW = WINFUNCTYPE(LPWSTR)(('GetCommandLineW', windll.kernel32))
91 # <http://msdn.microsoft.com/en-us/library/bb776391.aspx> 89 # <http://msdn.microsoft.com/en-us/library/bb776391.aspx>
92 CommandLineToArgvW = WINFUNCTYPE(POINTER(LPWSTR), LPCWSTR, POINTER(c_int))( 90 CommandLineToArgvW = WINFUNCTYPE(POINTER(LPWSTR), LPCWSTR, POINTER(c_int))(
93 ('CommandLineToArgvW', windll.shell32)) 91 ('CommandLineToArgvW', windll.shell32))
94 92
95 argc = c_int(0) 93 argc = c_int(0)
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 179
182 Understands how to use the win32 console API. 180 Understands how to use the win32 console API.
183 """ 181 """
184 def __init__(self, console_handle, fileno, stream_name, encoding): 182 def __init__(self, console_handle, fileno, stream_name, encoding):
185 super(WinUnicodeConsoleOutput, self).__init__( 183 super(WinUnicodeConsoleOutput, self).__init__(
186 fileno, '<Unicode console %s>' % stream_name, encoding) 184 fileno, '<Unicode console %s>' % stream_name, encoding)
187 # Handle to use for WriteConsoleW 185 # Handle to use for WriteConsoleW
188 self._console_handle = console_handle 186 self._console_handle = console_handle
189 187
190 # Loads the necessary function. 188 # Loads the necessary function.
191 # These types are available on linux but not Mac.
192 # pylint: disable=E0611,F0401
193 from ctypes import byref, GetLastError, POINTER, windll, WINFUNCTYPE 189 from ctypes import byref, GetLastError, POINTER, windll, WINFUNCTYPE
194 from ctypes.wintypes import BOOL, DWORD, HANDLE, LPWSTR 190 from ctypes.wintypes import BOOL, DWORD, HANDLE, LPWSTR
195 from ctypes.wintypes import LPVOID # pylint: disable=E0611 191 from ctypes.wintypes import LPVOID # pylint: disable=E0611
196 192
197 self._DWORD = DWORD 193 self._DWORD = DWORD
198 self._byref = byref 194 self._byref = byref
199 195
200 # <http://msdn.microsoft.com/en-us/library/ms687401.aspx> 196 # <http://msdn.microsoft.com/en-us/library/ms687401.aspx>
201 self._WriteConsoleW = WINFUNCTYPE( 197 self._WriteConsoleW = WINFUNCTYPE(
202 BOOL, HANDLE, LPWSTR, DWORD, POINTER(DWORD), LPVOID)( 198 BOOL, HANDLE, LPWSTR, DWORD, POINTER(DWORD), LPVOID)(
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 # Replace characters that cannot be printed instead of failing. 259 # Replace characters that cannot be printed instead of failing.
264 text = text.encode(self.encoding, 'replace') 260 text = text.encode(self.encoding, 'replace')
265 self._stream.write(text) 261 self._stream.write(text)
266 except Exception, e: 262 except Exception, e:
267 complain('%s.write: %r' % (self.name, e)) 263 complain('%s.write: %r' % (self.name, e))
268 raise 264 raise
269 265
270 266
271 def win_handle_is_a_console(handle): 267 def win_handle_is_a_console(handle):
272 """Returns True if a Windows file handle is a handle to a console.""" 268 """Returns True if a Windows file handle is a handle to a console."""
273 # These types are available on linux but not Mac.
274 # pylint: disable=E0611,F0401
275 from ctypes import byref, POINTER, windll, WINFUNCTYPE 269 from ctypes import byref, POINTER, windll, WINFUNCTYPE
276 from ctypes.wintypes import BOOL, DWORD, HANDLE 270 from ctypes.wintypes import BOOL, DWORD, HANDLE
277 271
278 FILE_TYPE_CHAR = 0x0002 272 FILE_TYPE_CHAR = 0x0002
279 FILE_TYPE_REMOTE = 0x8000 273 FILE_TYPE_REMOTE = 0x8000
280 INVALID_HANDLE_VALUE = DWORD(-1).value 274 INVALID_HANDLE_VALUE = DWORD(-1).value
281 275
282 # <http://msdn.microsoft.com/en-us/library/ms683167.aspx> 276 # <http://msdn.microsoft.com/en-us/library/ms683167.aspx>
283 GetConsoleMode = WINFUNCTYPE(BOOL, HANDLE, POINTER(DWORD))( 277 GetConsoleMode = WINFUNCTYPE(BOOL, HANDLE, POINTER(DWORD))(
284 ('GetConsoleMode', windll.kernel32)) 278 ('GetConsoleMode', windll.kernel32))
(...skipping 11 matching lines...) Expand all
296 def win_get_unicode_stream(stream, excepted_fileno, output_handle, encoding): 290 def win_get_unicode_stream(stream, excepted_fileno, output_handle, encoding):
297 """Returns a unicode-compatible stream. 291 """Returns a unicode-compatible stream.
298 292
299 This function will return a direct-Console writing object only if: 293 This function will return a direct-Console writing object only if:
300 - the file number is the expected console file number 294 - the file number is the expected console file number
301 - the handle the expected file handle 295 - the handle the expected file handle
302 - the 'real' handle is in fact a handle to a console. 296 - the 'real' handle is in fact a handle to a console.
303 """ 297 """
304 old_fileno = getattr(stream, 'fileno', lambda: None)() 298 old_fileno = getattr(stream, 'fileno', lambda: None)()
305 if old_fileno == excepted_fileno: 299 if old_fileno == excepted_fileno:
306 # These types are available on linux but not Mac.
307 # pylint: disable=E0611,F0401
308 from ctypes import windll, WINFUNCTYPE 300 from ctypes import windll, WINFUNCTYPE
309 from ctypes.wintypes import DWORD, HANDLE 301 from ctypes.wintypes import DWORD, HANDLE
310 302
311 # <http://msdn.microsoft.com/en-us/library/ms683231.aspx> 303 # <http://msdn.microsoft.com/en-us/library/ms683231.aspx>
312 GetStdHandle = WINFUNCTYPE(HANDLE, DWORD)(('GetStdHandle', windll.kernel32)) 304 GetStdHandle = WINFUNCTYPE(HANDLE, DWORD)(('GetStdHandle', windll.kernel32))
313 305
314 real_output_handle = GetStdHandle(DWORD(output_handle)) 306 real_output_handle = GetStdHandle(DWORD(output_handle))
315 if win_handle_is_a_console(real_output_handle): 307 if win_handle_is_a_console(real_output_handle):
316 # It's a console. 308 # It's a console.
317 return WinUnicodeConsoleOutput( 309 return WinUnicodeConsoleOutput(
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 if sys.platform == 'win32': 354 if sys.platform == 'win32':
363 ret &= fix_win_codec() 355 ret &= fix_win_codec()
364 356
365 ret &= fix_default_encoding() 357 ret &= fix_default_encoding()
366 358
367 if sys.platform == 'win32': 359 if sys.platform == 'win32':
368 encoding = sys.getdefaultencoding() 360 encoding = sys.getdefaultencoding()
369 ret &= fix_win_sys_argv(encoding) 361 ret &= fix_win_sys_argv(encoding)
370 ret &= fix_win_console(encoding) 362 ret &= fix_win_console(encoding)
371 return ret 363 return ret
OLDNEW
« no previous file with comments | « no previous file | gclient_utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698