comparison mercurial/encoding.py @ 32537:044f3d7eb9ae

encoding: make sure "wide" variable never be referenced from other modules Better to not expose (maybe-) unicode objects.
author Yuya Nishihara <yuya@tcha.org>
date Mon, 29 May 2017 21:57:51 +0900
parents 0ec17613582c
children ce96efec8112
comparison
equal deleted inserted replaced
32536:aa333c1982ab 32537:044f3d7eb9ae
192 # dict to be exported to other modules 192 # dict to be exported to other modules
193 environ = dict((tolocal(k.encode(u'utf-8')), tolocal(v.encode(u'utf-8'))) 193 environ = dict((tolocal(k.encode(u'utf-8')), tolocal(v.encode(u'utf-8')))
194 for k, v in os.environ.items()) # re-exports 194 for k, v in os.environ.items()) # re-exports
195 195
196 # How to treat ambiguous-width characters. Set to 'wide' to treat as wide. 196 # How to treat ambiguous-width characters. Set to 'wide' to treat as wide.
197 wide = _sysstr(environ.get("HGENCODINGAMBIGUOUS", "narrow") == "wide" 197 _wide = _sysstr(environ.get("HGENCODINGAMBIGUOUS", "narrow") == "wide"
198 and "WFA" or "WF") 198 and "WFA" or "WF")
199 199
200 def colwidth(s): 200 def colwidth(s):
201 "Find the column width of a string for display in the local encoding" 201 "Find the column width of a string for display in the local encoding"
202 return ucolwidth(s.decode(_sysstr(encoding), u'replace')) 202 return ucolwidth(s.decode(_sysstr(encoding), u'replace'))
203 203
204 def ucolwidth(d): 204 def ucolwidth(d):
205 "Find the column width of a Unicode string for display" 205 "Find the column width of a Unicode string for display"
206 eaw = getattr(unicodedata, 'east_asian_width', None) 206 eaw = getattr(unicodedata, 'east_asian_width', None)
207 if eaw is not None: 207 if eaw is not None:
208 return sum([eaw(c) in wide and 2 or 1 for c in d]) 208 return sum([eaw(c) in _wide and 2 or 1 for c in d])
209 return len(d) 209 return len(d)
210 210
211 def getcols(s, start, c): 211 def getcols(s, start, c):
212 '''Use colwidth to find a c-column substring of s starting at byte 212 '''Use colwidth to find a c-column substring of s starting at byte
213 index start''' 213 index start'''