diff --git a/mercurial/util.py b/mercurial/util.py index c86db7b1681e817646672524958a6412b552111f_bWVyY3VyaWFsL3V0aWwucHk=..8f5c865b7b4a947b6eb2089ea31ebcc91132cc7f_bWVyY3VyaWFsL3V0aWwucHk= 100644 --- a/mercurial/util.py +++ b/mercurial/util.py @@ -1391,9 +1391,9 @@ # Avoid double backslash in Windows path repr() return repr(s).replace('\\\\', '\\') -#### naming convention of below implementation follows 'textwrap' module - -class MBTextWrapper(textwrap.TextWrapper): - """ - Extend TextWrapper for double-width characters. +# delay import of textwrap +def MBTextWrapper(**kwargs): + class tw(textwrap.TextWrapper): + """ + Extend TextWrapper for double-width characters. @@ -1399,6 +1399,6 @@ - Some Asian characters use two terminal columns instead of one. - A good example of this behavior can be seen with u'\u65e5\u672c', - the two Japanese characters for "Japan": - len() returns 2, but when printed to a terminal, they eat 4 columns. + Some Asian characters use two terminal columns instead of one. + A good example of this behavior can be seen with u'\u65e5\u672c', + the two Japanese characters for "Japan": + len() returns 2, but when printed to a terminal, they eat 4 columns. @@ -1404,7 +1404,7 @@ - (Note that this has nothing to do whatsoever with unicode - representation, or encoding of the underlying string) - """ - def __init__(self, **kwargs): - textwrap.TextWrapper.__init__(self, **kwargs) + (Note that this has nothing to do whatsoever with unicode + representation, or encoding of the underlying string) + """ + def __init__(self, **kwargs): + textwrap.TextWrapper.__init__(self, **kwargs) @@ -1410,12 +1410,12 @@ - def _cutdown(self, str, space_left): - l = 0 - ucstr = unicode(str, encoding.encoding) - colwidth = unicodedata.east_asian_width - for i in xrange(len(ucstr)): - l += colwidth(ucstr[i]) in 'WFA' and 2 or 1 - if space_left < l: - return (ucstr[:i].encode(encoding.encoding), - ucstr[i:].encode(encoding.encoding)) - return str, '' + def _cutdown(self, str, space_left): + l = 0 + ucstr = unicode(str, encoding.encoding) + colwidth = unicodedata.east_asian_width + for i in xrange(len(ucstr)): + l += colwidth(ucstr[i]) in 'WFA' and 2 or 1 + if space_left < l: + return (ucstr[:i].encode(encoding.encoding), + ucstr[i:].encode(encoding.encoding)) + return str, '' @@ -1421,7 +1421,5 @@ - # ---------------------------------------- - # overriding of base class - - def _handle_long_word(self, reversed_chunks, cur_line, cur_len, width): - space_left = max(width - cur_len, 1) + # overriding of base class + def _handle_long_word(self, reversed_chunks, cur_line, cur_len, width): + space_left = max(width - cur_len, 1) @@ -1427,8 +1425,8 @@ - if self.break_long_words: - cut, res = self._cutdown(reversed_chunks[-1], space_left) - cur_line.append(cut) - reversed_chunks[-1] = res - elif not cur_line: - cur_line.append(reversed_chunks.pop()) + if self.break_long_words: + cut, res = self._cutdown(reversed_chunks[-1], space_left) + cur_line.append(cut) + reversed_chunks[-1] = res + elif not cur_line: + cur_line.append(reversed_chunks.pop()) @@ -1434,5 +1432,7 @@ -#### naming convention of above implementation follows 'textwrap' module + global MBTextWrapper + MBTextWrapper = tw + return tw(**kwargs) def wrap(line, width, initindent='', hangindent=''): maxindent = max(len(hangindent), len(initindent))