diff -r 2ceeb1423544 -r deec6628e62b mercurial/util.py --- 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."""