Mercurial > public > mercurial-scm > hg
diff mercurial/util.py @ 7695:deec6628e62b
Also find correct column width of wide characters.
Use unicodedata.east_asian_width() to determine wide/full width
characters if available. Otherwise, return character count as before.
author | Shun-ichi GOTO <shunichi.goto@gmail.com> |
---|---|
date | Wed, 21 Jan 2009 20:29:47 +0900 |
parents | e62a456b8dc5 |
children | 0895f95451e7 |
line wrap: on
line diff
--- a/mercurial/util.py Thu Jan 22 10:48:37 2009 -0700 +++ b/mercurial/util.py Wed Jan 21 20:29:47 2009 +0900 @@ -15,7 +15,7 @@ from i18n import _ import cStringIO, errno, getpass, re, shutil, sys, tempfile, traceback, error import os, stat, threading, time, calendar, ConfigParser, locale, glob, osutil -import imp +import imp, unicodedata # Python compatibility @@ -138,9 +138,17 @@ except LookupError, k: raise Abort(_("%s, please check your locale settings") % k) -def locallen(s): - """Find the length in characters of a local string""" - return len(s.decode(_encoding, "replace")) +_colwidth = None +def colwidth(s): + """Find the column width of string to display.""" + global _colwidth + if _colwidth is None: + if hasattr(unicodedata, 'east_asian_width'): + _colwidth = lambda s: sum([unicodedata.east_asian_width(c) in 'WF' + and 2 or 1 for c in s]) + else: + _colwidth = len + return _colwidth(s.decode(_encoding, "replace")) def version(): """Return version information if available."""