Giter Club home page Giter Club logo

wcwidth's Introduction

Travis Continous Integration Coveralls Code Coverage Latest Version License

Wheel Status

Downloads

Introduction

This API is mainly for Terminal Emulator implementors, or those writing programs that expect to interpreted by a terminal emulator and wish to determine the printable width of a string on a Terminal.

Usually, the length of the string is equivalent to the number of cells it occupies except that there are are also some categories of characters which occupy 2 or even 0 cells. POSIX-conforming systems provide wcwidth(3) and wcswidth(3) of which this module's interface mirrors precisely.

This library aims to be forward-looking, portable, and most correct. The most current release of this API is based from Unicode Standard release files:

EastAsianWidth-8.0.0.txt
2015-02-10, 21:00:00 GMT [KW, LI]
DerivedGeneralCategory-8.0.0.txt
2015-02-13, 13:47:11 GMT [MD]

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'コンニチハ'
>>> print(u' ' * (80 - wcswidth(text)) + text)

wcwidth, wcswidth

Use function wcwidth() to determine the length of a single character, and wcswidth() to determine the length of a string of characters.

Function wcswidth() simply returns the sum of all values along a string, individually mapped over function wcwidth(), or, -1 in total if any part of the string's return value from wcwidth() results in a value of -1.

Return values of 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.

A more exact list of conditions of these return values may be found in the module docstring:

$ pydoc wcwidth

Caveats

This library does its best to return the most appropriate return value for a very particular terminal user interface where a monospaced fixed-cell rendering is expected. As the POSIX Terminal programming interface does not provide any means to determine the unicode support level of a connecting terminal, we can only do our best to return what we assume to be correct for the given codepoint, and not the result of any terminal emulator particular.

Developing

Execute the command python setup.py develop to prepare an environment for running tests (python setup.py test), updating tables ( python setup.py update) or using any of the scripts in the bin/ sub-folder. These files are only made available in the source repository.

You may determine an exacting list of these discrepancies using the project file wcwidth-libc-comparator.py.

Updating Tables

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

And generates the table files:

wcwidth.c

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 And is authored by Markus Kuhn, 2007-05-26 (Unicode 5.0).

Uses

This library is used in:

Additional tools for displaying and testing wcwidth are found in the bin/ folder of this project. They are not distributed as a script or part of the module.

History

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

wcwidth's People

Contributors

jquast avatar lmontopo avatar msabramo avatar philipc avatar thomasballinger avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.