diff options
author | Kuang-che Wu <kcwu@google.com> | 2020-06-06 12:43:46 +0800 |
---|---|---|
committer | Martin Michlmayr <tbm@cyrius.com> | 2021-01-17 10:31:00 +0800 |
commit | 2dae3bbedcdf55983d23fc90bb36111c7eb68fc7 (patch) | |
tree | 446f93d9c625f40828188f37b970e5f01fc2d368 /src/format.cc | |
parent | 0e19e3fe51c2c056a91af48e4733aa13a840fdaa (diff) | |
download | fork-ledger-2dae3bbedcdf55983d23fc90bb36111c7eb68fc7.tar.gz fork-ledger-2dae3bbedcdf55983d23fc90bb36111c7eb68fc7.tar.bz2 fork-ledger-2dae3bbedcdf55983d23fc90bb36111c7eb68fc7.zip |
format_t::truncate support wide characters
also add unit tests
Diffstat (limited to 'src/format.cc')
-rw-r--r-- | src/format.cc | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/format.cc b/src/format.cc index 5b9baa21..87168ea2 100644 --- a/src/format.cc +++ b/src/format.cc @@ -478,7 +478,7 @@ string format_t::truncate(const unistring& ustr, { assert(width < 4095); - const std::size_t len = ustr.length(); + const std::size_t len = ustr.width(); if (width == 0 || len <= width) return ustr.extract(); @@ -491,14 +491,14 @@ string format_t::truncate(const unistring& ustr, switch (style) { case TRUNCATE_LEADING: // This method truncates at the beginning. - buf << ".." << ustr.extract(len - (width - 2), width - 2); + buf << ".." << ustr.extract_by_width(len - (width - 2), width - 2); break; case TRUNCATE_MIDDLE: // This method truncates in the middle. - buf << ustr.extract(0, (width - 2) / 2) + buf << ustr.extract_by_width(0, (width - 2) / 2) << ".." - << ustr.extract(len - ((width - 2) / 2 + (width - 2) % 2), + << ustr.extract_by_width(len - ((width - 2) / 2 + (width - 2) % 2), (width - 2) / 2 + (width - 2) % 2); break; @@ -545,7 +545,7 @@ string format_t::truncate(const unistring& ustr, for (std::list<string>::iterator i = parts.begin(); i != parts.end(); i++) { - std::size_t l = unistring(*i).length(); + std::size_t l = unistring(*i).width(); DEBUG("format.abbrev", "Segment " << ++index << " is " << l << " chars wide"); lens.push_back(l); @@ -667,8 +667,8 @@ string format_t::truncate(const unistring& ustr, } unistring temp(*i); - if (temp.length() > *l) - result << temp.extract(0, *l) << ":"; + if (temp.width() > *l) + result << temp.extract_by_width(0, *l) << ":"; else result << *i << ":"; } @@ -677,8 +677,8 @@ string format_t::truncate(const unistring& ustr, // Even abbreviated its too big to show the last account, so // abbreviate all but the last and truncate at the beginning. unistring temp(result.str()); - assert(temp.length() > width - 2); - buf << ".." << temp.extract(temp.length() - (width - 2), width - 2); + assert(temp.width() > width - 2); + buf << ".." << temp.extract_by_width(temp.width() - (width - 2), width - 2); } else { buf << result.str(); } @@ -688,7 +688,7 @@ string format_t::truncate(const unistring& ustr, case TRUNCATE_TRAILING: // This method truncates at the end (the default). - buf << ustr.extract(0, width - 2) << ".."; + buf << ustr.extract_by_width(0, width - 2) << ".."; break; } |