--- wcwidth.c 2007-05-26 18:06:24.000000000 +0800 +++ wcwidth.cc 2014-02-13 18:36:18.668331252 +0800 @@ -59,15 +59,23 @@ * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c */ -#include +/* This file is modified to work with C++ and present Unicode + * characters in uint32_t type. + */ + +#include + +namespace ledger { -struct interval { - int first; - int last; -}; +namespace { + struct interval { + int first; + int last; + }; +} /* auxiliary function for binary search in interval table */ -static int bisearch(wchar_t ucs, const struct interval *table, int max) { +static int bisearch(boost::uint32_t ucs, const struct interval *table, int max) { int min = 0; int mid; @@ -119,7 +127,7 @@ * in ISO 10646. */ -int mk_wcwidth(wchar_t ucs) +int mk_wcwidth(boost::uint32_t ucs) { /* sorted list of non-overlapping intervals of non-spacing characters */ /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ @@ -204,7 +212,7 @@ } -int mk_wcswidth(const wchar_t *pwcs, size_t n) +int mk_wcswidth(const boost::uint32_t *pwcs, size_t n) { int w, width = 0; @@ -227,7 +235,7 @@ * the traditional terminal character-width behaviour. It is not * otherwise recommended for general use. */ -int mk_wcwidth_cjk(wchar_t ucs) +int mk_wcwidth_cjk(boost::uint32_t ucs) { /* sorted list of non-overlapping intervals of East Asian Ambiguous * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */ @@ -295,7 +303,7 @@ } -int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n) +int mk_wcswidth_cjk(const boost::uint32_t *pwcs, size_t n) { int w, width = 0; @@ -307,3 +315,5 @@ return width; } + +} // namespace ledger