comparison 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
comparison
equal deleted inserted replaced
346:e65b89bcc528 347:a0aa8c8c4307
134 134
135 std::wstring wstr; 135 std::wstring wstr;
136 try { 136 try {
137 wstr = converter.from_bytes(string); 137 wstr = converter.from_bytes(string);
138 } catch (std::range_error const& ex) { 138 } catch (std::range_error const& ex) {
139 /* XXX how? */
139 std::cerr << "Failed to convert UTF-8 to wide string!" << std::endl; 140 std::cerr << "Failed to convert UTF-8 to wide string!" << std::endl;
140 } 141 }
141 return wstr; 142 return wstr;
142 } 143 }
143 144
148 } 149 }
149 150
150 std::string ToUtf8String(const std::wstring& wstring) { 151 std::string ToUtf8String(const std::wstring& wstring) {
151 static std::wstring_convert<std::codecvt_utf8<wchar_t>> converter("", L""); 152 static std::wstring_convert<std::codecvt_utf8<wchar_t>> converter("", L"");
152 return converter.to_bytes(wstring); 153 return converter.to_bytes(wstring);
154 }
155
156 std::string ToUtf8String(const std::u32string& u32string) {
157 static std::wstring_convert<std::codecvt_utf8_utf16<char32_t>, char32_t> converter;
158 return converter.to_bytes(u32string);
159 }
160
161 std::u32string ToUcs4String(const std::string& string) {
162 static std::wstring_convert<std::codecvt_utf8_utf16<char32_t>, char32_t> converter;
163 return converter.from_bytes(string);
153 } 164 }
154 165
155 std::string ToUtf8String(const QString& string) { 166 std::string ToUtf8String(const QString& string) {
156 const QByteArray ba = string.toUtf8(); 167 const QByteArray ba = string.toUtf8();
157 return std::string(ba.constData(), ba.size()); 168 return std::string(ba.constData(), ba.size());