handle invalid characters properly

This commit is contained in:
Andrzej Rybczak
2010-02-17 12:38:53 +01:00
parent 8c212bf235
commit 68fa910c78

View File

@@ -535,7 +535,7 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
if (x < maxx) if (x < maxx)
{ {
real_x++; real_x++;
x += wcwidth((*tmp)[beginning+real_x-minx-1]); x += std::max(wcwidth((*tmp)[beginning+real_x-minx-1]), 1);
} }
else if (beginning < maxbeginning) else if (beginning < maxbeginning)
beginning++; beginning++;
@@ -551,7 +551,7 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
if (x > minx) if (x > minx)
{ {
real_x--; real_x--;
x -= wcwidth((*tmp)[beginning+real_x-minx]); x -= std::max(wcwidth((*tmp)[beginning+real_x-minx]), 1);
} }
else if (beginning > 0) else if (beginning > 0)
beginning--; beginning--;
@@ -940,9 +940,7 @@ std::wstring ToWString(const std::string &s)
size_t Window::Length(const std::wstring &ws) size_t Window::Length(const std::wstring &ws)
{ {
size_t length = 0; int len = wcswidth(ws.c_str(), -1);
for (std::wstring::const_iterator it = ws.begin(); it != ws.end(); ++it) return len < 0 ? ws.length() : len;
length += wcwidth(*it);
return length;
} }