예제 #1
0
파일: common.cpp 프로젝트: kluge-iitk/pyicu
int32_t toUChar32(UnicodeString& u, UChar32 *c, UErrorCode& status)
{
#if U_ICU_VERSION_HEX >= 0x04020000
    return u.toUTF32(c, 1, status);
#else
    int32_t len = u.length();
    if (len >= 1)
        *c = u.char32At(0);
    return len;
#endif
}
예제 #2
0
파일: wx_icu.cpp 프로젝트: hltj/wxMEdit
wxString ICUStrToWx(const UnicodeString& us)
{
	int32_t cap = us.length() + 1;
	boost::scoped_array<wchar_t> wbuff(new wchar_t[cap]);
	UErrorCode errcode = U_ZERO_ERROR;

#ifdef __WXMSW__
	int32_t len = us.extract(wbuff.get(), cap, errcode);
#else
	int32_t len = us.toUTF32((UChar32 *)wbuff.get(), cap, errcode);
#endif

	if(errcode == U_ZERO_ERROR)
		return wxString((wxChar*)wbuff.get(), len);

	return wxString();
}
예제 #3
0
파일: decompose.cpp 프로젝트: yielding/code
int decompose(const char* text, wchar_t* wcs_buf, uint buf_size)
{
    // UTF-8 to UCS4
    auto str = UnicodeString::fromUTF8(StringPiece(text));
 
    // UCS4 to NFD
    auto status = U_ZERO_ERROR;
    UnicodeString result;
    Normalizer::normalize(str, UNORM_NFD, 0, result, status);
    if (U_FAILURE(status)) 
    {
        cerr << "can't decompose a UTF8 string, "
             << status << ": " << u_errorName(status) << endl;

        return -1;
    }
 
    result.toUTF32((UChar32*) wcs_buf, buf_size, status);
 
    return 0;
}