Mercurial > minori
diff src/core/strings.cc @ 347:a0aa8c8c4307
dep/anitomy: port to use UCS-4 rather than wide strings
rationale: wide strings are not the same on every platform, and
might not even be Unicode. (while they usually are, its possible
that they are not)
I was *going* to change StringToInt to use a string stream, but
outputting to an integer doesn't seem to work at all with UCS-4,
even though it ought to, so I just rolled my own that uses the
arabic digits only.
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Sun, 23 Jun 2024 10:32:09 -0400 |
parents | c32467cd06bb |
children | f81bed4e04ac |
line wrap: on
line diff
--- a/src/core/strings.cc Thu Jun 20 07:40:47 2024 -0400 +++ b/src/core/strings.cc Sun Jun 23 10:32:09 2024 -0400 @@ -136,6 +136,7 @@ try { wstr = converter.from_bytes(string); } catch (std::range_error const& ex) { + /* XXX how? */ std::cerr << "Failed to convert UTF-8 to wide string!" << std::endl; } return wstr; @@ -152,6 +153,16 @@ return converter.to_bytes(wstring); } +std::string ToUtf8String(const std::u32string& u32string) { + static std::wstring_convert<std::codecvt_utf8_utf16<char32_t>, char32_t> converter; + return converter.to_bytes(u32string); +} + +std::u32string ToUcs4String(const std::string& string) { + static std::wstring_convert<std::codecvt_utf8_utf16<char32_t>, char32_t> converter; + return converter.from_bytes(string); +} + std::string ToUtf8String(const QString& string) { const QByteArray ba = string.toUtf8(); return std::string(ba.constData(), ba.size());