#define TOSTRING(x) STRINGIFY(x)
// Checks whether a byte is an inner byte for an utf-8 multibyte sequence
-#define IS_UTF8_MULTB_INNER(x) (((unsigned char)x >= 0x80) && ((unsigned char)x <= 0xc0))
+#define IS_UTF8_MULTB_INNER(x) (((unsigned char)x >= 0x80) && ((unsigned char)x < 0xc0))
typedef std::map<std::string, std::string> StringMap;
std::wstring utf8_to_wide(const std::string &input);
std::string wide_to_utf8(const std::wstring &input);
+wchar_t *utf8_to_wide_c(const char *str);
+
// NEVER use those two functions unless you have a VERY GOOD reason to
// they just convert between wide and multibyte encoding
// multibyte encoding depends on current locale, this is no good, especially on Windows
size_t character_idx = 0;
for (size_t i = 0; i < from.size(); i++) {
- if (character_idx > 0 && character_idx % row_len == 0)
- to += '\n';
- if (!IS_UTF8_MULTB_INNER(from[i]))
+ if (!IS_UTF8_MULTB_INNER(from[i])) {
+ // Wrap string after last inner byte of char
+ if (character_idx > 0 && character_idx % row_len == 0)
+ to += '\n';
character_idx++;
+ }
to += from[i];
}