wide string: a few adjustments

master
Andrzej Rybczak 12 years ago
parent 8d24c42261
commit 61d841d29a
  1. 2
      src/lyrics.cpp
  2. 10
      src/utility/wide_string.cpp
  3. 7
      src/utility/wide_string.h

@ -129,7 +129,7 @@ std::wstring Lyrics::title()
std::wstring result = L"Lyrics: "; std::wstring result = L"Lyrics: ";
result += Scroller( result += Scroller(
Format::stringify<wchar_t>(Format::wparse(L"{%a - %t}"), &itsSong), Format::stringify<wchar_t>(Format::wparse(L"%a - %t"), &itsSong),
itsScrollBegin, itsScrollBegin,
COLS-result.length()-(Config.design == Design::Alternative ? 2 : Global::VolumeState.length()) COLS-result.length()-(Config.design == Design::Alternative ? 2 : Global::VolumeState.length())
); );

@ -22,14 +22,14 @@
#include <cassert> #include <cassert>
#include "utility/wide_string.h" #include "utility/wide_string.h"
std::string ToString(std::wstring ws) std::string ToString(const std::wstring &ws)
{ {
return boost::locale::conv::utf_to_utf<char>(std::move(ws)); return boost::locale::conv::utf_to_utf<char>(ws);
} }
std::wstring ToWString(std::string s) std::wstring ToWString(const std::string &s)
{ {
return boost::locale::conv::utf_to_utf<wchar_t>(std::move(s)); return boost::locale::conv::utf_to_utf<wchar_t>(s);
} }
size_t wideLength(const std::wstring &ws) size_t wideLength(const std::wstring &ws)
@ -52,7 +52,7 @@ void wideCut(std::wstring &ws, size_t max_length)
int remained_len = max_length; int remained_len = max_length;
for (; i < ws.length(); ++i) for (; i < ws.length(); ++i)
{ {
remained_len -= wcwidth(ws[i]); remained_len -= std::max(wcwidth(ws[i]), 1);
if (remained_len < 0) if (remained_len < 0)
{ {
ws.resize(i); ws.resize(i);

@ -23,14 +23,13 @@
#include <string> #include <string>
std::string ToString(std::wstring ws); std::string ToString(const std::wstring &ws);
std::wstring ToWString(std::string s); std::wstring ToWString(const std::string &s);
size_t wideLength(const std::wstring &ws); size_t wideLength(const std::wstring &ws);
void wideCut(std::wstring &ws, size_t max_length); void wideCut(std::wstring &ws, size_t max_length);
std::wstring wideShorten(const std::wstring &ws, size_t max_length);
std::wstring wideShorten(const std::wstring &ws, size_t max_length);
inline std::string wideShorten(const std::string &s, size_t max_length) inline std::string wideShorten(const std::string &s, size_t max_length)
{ {
return ToString(wideShorten(ToWString(s), max_length)); return ToString(wideShorten(ToWString(s), max_length));

Loading…
Cancel
Save