wcwidth
Measures number of Terminal column cells of wide-character codes
Measures number of Terminal column cells of wide-character codes
To install this package, run one of the following:
.. image:: https://img.shields.io/travis/jquast/wcwidth.svg :target: https://travis-ci.org/jquast/wcwidth :alt: Travis Continous Integration
.. image:: https://img.shields.io/coveralls/jquast/wcwidth.svg :target: https://coveralls.io/r/jquast/wcwidth :alt: Coveralls Code Coverage
.. image:: https://img.shields.io/pypi/v/wcwidth.svg :target: https://pypi.python.org/pypi/wcwidth/ :alt: Latest Version
.. image:: https://img.shields.io/github/license/jquast/wcwidth.svg :target: https://pypi.python.org/pypi/wcwidth/ :alt: License
.. image:: https://img.shields.io/pypi/wheel/wcwidth.svg :alt: Wheel Status
.. image:: https://img.shields.io/pypi/dm/wcwidth.svg :target: https://pypi.python.org/pypi/wcwidth/ :alt: Downloads
============
This Library is mainly for those implementing a Terminal Emulator, or programs that carefully produce output to be interpreted by one.
Problem Statement: When printed to the screen, the length of the string is usually equal to the number of cells it occupies. However, there are categories of characters that occupy 2 cells (full-wide), and others that occupy 0.
Solution: POSIX.1-2001 and POSIX.1-2008 conforming systems provide
wcwidth(3)_ and wcswidth(3)_ C functions of which this python module's
functions precisely copy. These functions return the number of cells a
unicode string is expected to occupy.
This library aims to be forward-looking, portable, and most correct. The most current release of this API is based on the Unicode Standard release files:
DerivedGeneralCategory-9.0.0.txt
Date: 2016-06-01, 10:34:26 GMT
2016 Unicode, Inc.
EastAsianWidth-9.0.0.txt
Date: 2016-05-27, 17:00:00 GMT [KW, LI]
2016 Unicode, Inc.
The stable version of this package is maintained on pypi, install using pip::
pip install wcwidth
To Display u'' right-adjusted on screen of 80 columns::
>>> from wcwidth import wcswidth
>>> text = u''
>>> text_len = wcswidth(text)
>>> print(u' ' * (80 - text_len) + text)
Use function wcwidth() to determine the length of a single unicode
character, and wcswidth() to determine the length of a several, or a
string of unicode characters.
Briefly, return values of function wcwidth() are:
-1
Indeterminate (not printable).
0
Does not advance the cursor, such as NULL or Combining.
2
Characters of category East Asian Wide (W) or East Asian
Full-width (F) which are displayed using two terminal cells.
1
All others.
Function wcswidth() simply returns the sum of all values for each character
along a string, or -1 when it occurs anywhere along a string.
More documentation is available using pydoc::
$ pydoc wcwidth
=======
This library attempts to determine the printable width by an unknown targeted terminal emulator. It does not provide any ability to discern what the target emulator software, version, of level of support is. Results may vary!
A crude method
<http://blessed.readthedocs.org/en/latest/examples.html#detect-multibyte-py>_
of determining the level of unicode support by the target emulator may be
performed using the VT100 Query Cursor Position sequence.
The libc version of wcwidth(3)_ is often several unicode releases behind,
and therefor several levels of support lower than this python library. You
may determine an exacting list of these discrepancies using the project
file wcwidth-libc-comparator.py
<https://github.com/jquast/wcwidth/tree/master/bin/wcwidth-libc-comparator.py>_.
==========
Install wcwidth in editable mode::
pip install -e.
Install developer requirements::
pip install -r requirements-develop.txt
Execute unit tests using tox::
tox
The command python setup.py update will fetch the following resources:
And generates the table files:
wcwidth/table_wide.py <https://github.com/jquast/wcwidth/tree/master/wcwidth/table_wide.py>_wcwidth/table_zero.py <https://github.com/jquast/wcwidth/tree/master/wcwidth/table_zero.py>_This library is used in:
jquast/blessed_, a simplified wrapper around curses.
jonathanslenders/python-prompt-toolkit_, a Library for building powerful
interactive command lines in Python.
Additional tools for displaying and testing wcwidth are found in the bin/
<https://github.com/jquast/wcwidth/tree/master/bin>_ folder of this project's
source code. They are not distributed.
=======
0.1.7 2016-07-01
* Updated tables to Unicode Specification 9.0.0. (PR #18_).
0.1.6 2016-01-08 Production/Stable
* LICENSE file now included with distribution.
0.1.5 2015-09-13 Alpha
* Bugfix:
Resolution of "combining_ character width" issue, most especially
those that previously returned -1 now often (correctly) return 0.
resolved by Philip Craig_ via PR #11_.
* Deprecated:
The module path wcwidth.table_comb is no longer available,
it has been superseded by module path wcwidth.table_zero.
0.1.4 2014-11-20 Pre-Alpha
* Feature: wcswidth() now determines printable length
for (most) combining_ characters. The developer's tool
bin/wcwidth-browser.py_ is improved to display combining_
characters when provided the --combining option
(Thomas Ballinger_ and Leta Montopoli_ PR #5).
* Feature: added static analysis (prospector) to testing
framework.
0.1.3 2014-10-29 Pre-Alpha
* Bugfix: 2nd parameter of wcswidth was not honored.
(Thomas Ballinger, PR #4).
0.1.2 2014-10-28 Pre-Alpha
* Updated tables to Unicode Specification 7.0.0.
(Thomas Ballinger, PR #3).
0.1.1 2014-05-14 Pre-Alpha * Initial release to pypi, Based on Unicode Specification 6.3.0
This code was originally derived directly from C code of the same name, whose latest version is available at http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c::
.. prospector: https://github.com/landscapeio/prospector
.. _combining: https://en.wikipedia.org/wiki/Combiningcharacter
.. _bin/wcwidth-browser.py: https://github.com/jquast/wcwidth/tree/master/bin/wcwidth-browser.py
.. _Thomas Ballinger: https://github.com/thomasballinger
.. _Leta Montopoli: https://github.com/lmontopo
.. _Philip Craig: https://github.com/philipc
.. _PR #3: https://github.com/jquast/wcwidth/pull/3
.. _PR #4: https://github.com/jquast/wcwidth/pull/4
.. _PR #5: https://github.com/jquast/wcwidth/pull/5
.. _PR #11: https://github.com/jquast/wcwidth/pull/11
.. _PR #18: https://github.com/jquast/wcwidth/pull/18
.. _jquast/blessed: https://github.com/jquast/blessed
.. _jonathanslenders/python-prompt-toolkit: https://github.com/jonathanslenders/python-prompt-toolkit
.. _wcwidth(3): http://man7.org/linux/man-pages/man3/wcwidth.3.html
.. _wcswidth(3): http://man7.org/linux/man-pages/man3/wcswidth.3.html
Summary
Measures number of Terminal column cells of wide-character codes
Last Updated
Feb 18, 2017 at 04:47
License
MIT
Total Downloads
66