Skip to main content
Travis Continous Integration Coveralls Code Coverage Latest Version License Wheel Status Downloads

Introduction

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.

Installation

The stable version of this package is maintained on pypi, install using pip:

pip install wcwidth

Example

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)

wcwidth, wcswidth

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

Caveats

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 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.

Developing

Install wcwidth in editable mode:

pip install -e.

Install developer requirements:

pip install -r requirements-develop.txt

Execute unit tests using tox:

tox

Updating Tables

The command python setup.py update will fetch the following resources:

And generates the table files:

Uses

This library is used in:

Additional tools for displaying and testing wcwidth are found in the bin/ folder of this project’s source code. They are not distributed.

History

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
0.1.3 2014-10-29 Pre-Alpha
0.1.2 2014-10-28 Pre-Alpha
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:

* Markus Kuhn -- 2007-05-26 (Unicode 5.0)
*
* Permission to use, copy, modify, and distribute this software
* for any purpose and without fee is hereby granted. The author
* disclaims all warranties with regard to this software.

Metadata

Release files for wcwidth 0.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wcwidth 0.1.7
File Size Uploaded
wcwidth-0.1.7.tar.gz 22.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wcwidth 0.1.7
File Interpreter ABI Platform
wcwidth-0.1.7-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 43.9 kB

Release files / wcwidth-0.1.7.tar.gz

Download URL wcwidth-0.1.7.tar.gz
Size 22.9 kB
Tags Source
SHA-256 checksum
How to use checksums
3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e
BLAKE2b-256 checksum
How to use checksums
5511e4a2bb08bb450fdbd42cc709dd40de4ed2c472cf0ccb9e64af22279c5495
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / wcwidth-0.1.7-py2.py3-none-any.whl

Download URL wcwidth-0.1.7-py2.py3-none-any.whl
Size 21.0 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c
BLAKE2b-256 checksum
How to use checksums
7e9f526a6947247599b084ee5232e4f9190a38f398d7300d866af3ab571a5bfe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

0.9.1

21 release files

0.9.0

21 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.14

2 release files

0.2.12

2 release files

0.2.11

2 release files

0.2.10

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

1 release file

0.2.0

3 release files

0.1.9

2 release files

0.1.8

2 release files

This release

0.1.7 This release

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page