1 #include "../../include/unicode/utfconversion.h"
\r
3 namespace UTFConversion
\r
6 const bool FromUTF8(const std::vector<char> &utf8string, std::wstring &wcstring)
\r
8 if(utf8string.size()==0)
\r
10 wcstring.assign(L"");
\r
14 std::vector<wchar_t> dest(utf8string.size(),0); // dest will never be bigger than the input but could be smaller
\r
16 const UTF8 *sourcestart=reinterpret_cast<const UTF8 *>(&utf8string[0]);
\r
17 const UTF8 *sourceend=sourcestart+utf8string.size();
\r
19 if(sizeof(wchar_t)==2)
\r
21 UTF16 *deststart=reinterpret_cast<UTF16 *>(&dest[0]);
\r
22 UTF16 *destend=deststart+dest.size();
\r
24 ConversionResult rval=ConvertUTF8toUTF16(&sourcestart,sourceend,&deststart,destend,lenientConversion);
\r
26 if(rval!=conversionOK)
\r
31 wcstring.assign(dest.begin(),dest.end()-(destend-deststart));
\r
34 else if(sizeof(wchar_t)==4)
\r
36 UTF32 *deststart=reinterpret_cast<UTF32 *>(&dest[0]);
\r
37 UTF32 *destend=deststart+dest.size();
\r
39 ConversionResult rval=ConvertUTF8toUTF32(&sourcestart,sourceend,&deststart,destend,lenientConversion);
\r
41 if(rval!=conversionOK)
\r
46 wcstring.assign(dest.begin(),dest.end()-(destend-deststart));
\r
57 const bool FromUTF8(const std::string &utf8string, std::wstring &wcstring)
\r
60 return FromUTF8(std::vector<char>(utf8string.begin(),utf8string.end()),wcstring);
\r
64 const bool ToUTF8(const std::wstring &wcstring, std::string &utf8string)
\r
66 if(wcstring.size()==0)
\r
68 utf8string.assign("");
\r
72 std::vector<wchar_t> source(wcstring.begin(),wcstring.end());
\r
74 if(sizeof(wchar_t)==2)
\r
76 std::vector<char> dest(wcstring.size()*2,0);
\r
78 const UTF16 *sourcestart=reinterpret_cast<const UTF16 *>(&source[0]);
\r
79 const UTF16 *sourceend=sourcestart+source.size();
\r
81 UTF8 *deststart=reinterpret_cast<UTF8 *>(&dest[0]);
\r
82 UTF8 *destend=deststart+dest.size();
\r
84 ConversionResult rval=ConvertUTF16toUTF8(&sourcestart,sourceend,&deststart,destend,lenientConversion);
\r
86 if(rval!=conversionOK)
\r
91 utf8string.assign(dest.begin(),dest.end()-(destend-deststart));
\r
94 else if(sizeof(wchar_t)==4)
\r
96 std::vector<char> dest(wcstring.size()*4,0);
\r
98 const UTF32 *sourcestart=reinterpret_cast<const UTF32 *>(&source[0]);
\r
99 const UTF32 *sourceend=sourcestart+source.size();
\r
101 UTF8 *deststart=reinterpret_cast<UTF8 *>(&dest[0]);
\r
102 UTF8 *destend=deststart+dest.size();
\r
104 ConversionResult rval=ConvertUTF32toUTF8(&sourcestart,sourceend,&deststart,destend,lenientConversion);
\r
106 if(rval!=conversionOK)
\r
111 utf8string.assign(dest.begin(),dest.end()-(destend-deststart));
\r