#endif //def __DARWIN__
-#define TRACE_STRCONV _T("strconv")
+#define TRACE_STRCONV wxT("strconv")
// WC_UTF16 is defined only if sizeof(wchar_t) == 2, otherwise it's supposed to
// be 4 bytes
return wxCharBuffer();
}
+const wxWCharBuffer wxMBConv::cMB2WC(const wxScopedCharBuffer& buf) const
+{
+ const size_t srcLen = buf.length();
+ if ( srcLen )
+ {
+ const size_t dstLen = ToWChar(NULL, 0, buf, srcLen);
+ if ( dstLen != wxCONV_FAILED )
+ {
+ wxWCharBuffer wbuf(dstLen);
+ wbuf.data()[dstLen] = L'\0';
+ if ( ToWChar(wbuf.data(), dstLen, buf, srcLen) != wxCONV_FAILED )
+ return wbuf;
+ }
+ }
+
+ return wxWCharBuffer();
+}
+
+const wxCharBuffer wxMBConv::cWC2MB(const wxScopedWCharBuffer& wbuf) const
+{
+ const size_t srcLen = wbuf.length();
+ if ( srcLen )
+ {
+ const size_t dstLen = FromWChar(NULL, 0, wbuf, srcLen);
+ if ( dstLen != wxCONV_FAILED )
+ {
+ wxCharBuffer buf(dstLen);
+ buf.data()[dstLen] = '\0';
+ if ( FromWChar(buf.data(), dstLen, wbuf, srcLen) != wxCONV_FAILED )
+ return buf;
+ }
+ }
+
+ return wxCharBuffer();
+}
+
// ----------------------------------------------------------------------------
// wxMBConvLibc
// ----------------------------------------------------------------------------
wxConvBrokenFileNames::wxConvBrokenFileNames(const wxString& charset)
{
- if ( wxStricmp(charset, _T("UTF-8")) == 0 ||
- wxStricmp(charset, _T("UTF8")) == 0 )
+ if ( wxStricmp(charset, wxT("UTF-8")) == 0 ||
+ wxStricmp(charset, wxT("UTF8")) == 0 )
m_conv = new wxMBConvUTF8(wxMBConvUTF8::MAP_INVALID_UTF8_TO_PUA);
else
m_conv = new wxCSConv(charset);
}
else
{
- wxFAIL_MSG( _T("trying to encode undefined Unicode character") );
+ wxFAIL_MSG( wxT("trying to encode undefined Unicode character") );
break;
}
// check for charset that represents wchar_t:
if ( ms_wcCharsetName.empty() )
{
- wxLogTrace(TRACE_STRCONV, _T("Looking for wide char codeset:"));
+ wxLogTrace(TRACE_STRCONV, wxT("Looking for wide char codeset:"));
#if wxUSE_FONTMAP
const wxChar **names = wxFontMapperBase::GetAllEncodingNames(WC_ENC);
static const wxChar *names_static[] =
{
#if SIZEOF_WCHAR_T == 4
- _T("UCS-4"),
+ wxT("UCS-4"),
#elif SIZEOF_WCHAR_T = 2
- _T("UCS-2"),
+ wxT("UCS-2"),
#endif
NULL
};
wxString nameXE(nameCS);
#ifdef WORDS_BIGENDIAN
- nameXE += _T("BE");
+ nameXE += wxT("BE");
#else // little endian
- nameXE += _T("LE");
+ nameXE += wxT("LE");
#endif
- wxLogTrace(TRACE_STRCONV, _T(" trying charset \"%s\""),
+ wxLogTrace(TRACE_STRCONV, wxT(" trying charset \"%s\""),
nameXE.c_str());
m2w = iconv_open(nameXE.ToAscii(), name);
if ( m2w == ICONV_T_INVALID )
{
// try charset w/o bytesex info (e.g. "UCS4")
- wxLogTrace(TRACE_STRCONV, _T(" trying charset \"%s\""),
+ wxLogTrace(TRACE_STRCONV, wxT(" trying charset \"%s\""),
nameCS.c_str());
m2w = iconv_open(nameCS.ToAscii(), name);
wxT("iconv wchar_t charset is \"%s\"%s"),
ms_wcCharsetName.empty() ? wxString("<none>")
: ms_wcCharsetName,
- ms_wcNeedsSwap ? _T(" (needs swap)")
- : _T(""));
+ ms_wcNeedsSwap ? wxT(" (needs swap)")
+ : wxT(""));
}
else // we already have ms_wcCharsetName
{
switch ( len )
{
default:
- wxLogDebug(_T("Unexpected NUL length %d"), len);
+ wxLogDebug(wxT("Unexpected NUL length %d"), len);
self->m_minMBCharWidth = (size_t)-1;
break;
break;
}
- wxASSERT_MSG( s_isWin98Or2k != -1, _T("should be set above") );
+ wxASSERT_MSG( s_isWin98Or2k != -1, wxT("should be set above") );
}
return s_isWin98Or2k == 1;
{
if ( encoding == wxFONTENCODING_MAX || encoding == wxFONTENCODING_DEFAULT )
{
- wxFAIL_MSG( _T("invalid encoding value in wxCSConv ctor") );
+ wxFAIL_MSG( wxT("invalid encoding value in wxCSConv ctor") );
encoding = wxFONTENCODING_SYSTEM;
}
delete conv;
}
- gs_nameCache[encoding] = _T(""); // cache the failure
+ gs_nameCache[encoding] = wxT(""); // cache the failure
}
}
#endif // wxUSE_FONTMAP
delete conv;
}
-#endif // wxUSE_FONTMAP
- // NB: This is a hack to prevent deadlock. What could otherwise happen
- // in Unicode build: wxConvLocal creation ends up being here
- // because of some failure and logs the error. But wxLog will try to
- // attach a timestamp, for which it will need wxConvLocal (to convert
- // time to char* and then wchar_t*), but that fails, tries to log the
- // error, but wxLog has an (already locked) critical section that
- // guards the static buffer.
- static bool alreadyLoggingError = false;
- if (!alreadyLoggingError)
- {
- alreadyLoggingError = true;
- wxLogError(_("Cannot convert from the charset '%s'!"),
- m_name ? m_name
- :
-#if wxUSE_FONTMAP
- (const char*)wxFontMapperBase::GetEncodingDescription(m_encoding).ToAscii()
-#else // !wxUSE_FONTMAP
- (const char*)wxString::Format(_("encoding %i"), m_encoding).ToAscii()
-#endif // wxUSE_FONTMAP/!wxUSE_FONTMAP
- );
-
- alreadyLoggingError = false;
- }
+ wxLogTrace(TRACE_STRCONV,
+ wxT("encoding \"%s\" is not supported by this system"),
+ (m_name ? wxString(m_name)
+ : wxFontMapperBase::GetEncodingName(m_encoding)));
+#endif // wxUSE_FONTMAP
return NULL;
}