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());