i18n: calculate terminal columns by width information of each characters
neither number of 'bytes' in any encoding nor 'characters' is appropriate to calculate terminal columns for specified string. this patch modifies MBTextWrapper for: - overriding '_wrap_chunks()' to make it use not built-in 'len()' but 'encoding.colwidth()' for columns of string - fixing '_cutdown()' to make it use 'encoding.colwidth()' instead of local, similar but incorrect implementation this patch also modifies 'encoding.py': - dividing 'colwith()' into 2 pieces: one for calculation columns of specified UNICODE string, and another for rest part of original one. the former is used from MBTextWrapper in 'util.py'. - preventing 'colwidth()' from evaluating HGENCODINGAMBIGUOUS configuration per each invocation: 'unicodedata.east_asian_width' checking is kept intact for reducing startup cost.
Showing
- mercurial/encoding.py 6 additions, 5 deletionsmercurial/encoding.py
- mercurial/util.py 80 additions, 10 deletionsmercurial/util.py
- tests/test-encoding-align.t 2 additions, 1 deletiontests/test-encoding-align.t
- tests/test-encoding-textwrap.t 257 additions, 0 deletionstests/test-encoding-textwrap.t
Loading
Please register or sign in to comment