modified wxEncodingConverter API to report failures
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30562 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -94,25 +94,31 @@ on the text to convert in the other).
|
|||||||
|
|
||||||
\membersection{wxEncodingConverter::Convert}\label{wxencodingconverterconvert}
|
\membersection{wxEncodingConverter::Convert}\label{wxencodingconverterconvert}
|
||||||
|
|
||||||
\constfunc{void}{Convert}{\param{const char* }{input}, \param{char* }{output}}
|
\constfunc{bool}{Convert}{\param{const char* }{input}, \param{char* }{output}}
|
||||||
|
|
||||||
\constfunc{void}{Convert}{\param{const wchar\_t* }{input}, \param{wchar\_t* }{output}}
|
\constfunc{bool}{Convert}{\param{const wchar\_t* }{input}, \param{wchar\_t* }{output}}
|
||||||
|
|
||||||
\constfunc{void}{Convert}{\param{const char* }{input}, \param{wchar\_t* }{output}}
|
\constfunc{bool}{Convert}{\param{const char* }{input}, \param{wchar\_t* }{output}}
|
||||||
|
|
||||||
\constfunc{void}{Convert}{\param{const wchar\_t* }{input}, \param{char* }{output}}
|
\constfunc{bool}{Convert}{\param{const wchar\_t* }{input}, \param{char* }{output}}
|
||||||
|
|
||||||
Convert input string according to settings passed to
|
Convert input string according to settings passed to
|
||||||
\helpref{Init}{wxencodingconverterinit} and writes the result to {\it output}.
|
\helpref{Init}{wxencodingconverterinit} and writes the result to {\it output}.
|
||||||
|
|
||||||
\constfunc{void}{Convert}{\param{char* }{str}}
|
\constfunc{bool}{Convert}{\param{char* }{str}}
|
||||||
|
|
||||||
\constfunc{void}{Convert}{\param{wchar\_t* }{str}}
|
\constfunc{bool}{Convert}{\param{wchar\_t* }{str}}
|
||||||
|
|
||||||
Convert input string according to settings passed to
|
Convert input string according to settings passed to
|
||||||
\helpref{Init}{wxencodingconverterinit} in-place, i.e. write the result to the
|
\helpref{Init}{wxencodingconverterinit} in-place, i.e. write the result to the
|
||||||
same memory area.
|
same memory area.
|
||||||
|
|
||||||
|
All of the versions above return \true if the conversion was lossless and
|
||||||
|
\false if at least one of the characters couldn't be converted and was replaced
|
||||||
|
with {\tt '?'} in the output. Note that if {\tt wxCONVERT\_SUBSTITUTE} was
|
||||||
|
passed to \helpref{Init}{wxencodingconverterinit}, substitution is considered
|
||||||
|
lossless operation.
|
||||||
|
|
||||||
\constfunc{wxString}{Convert}{\param{const wxString\& }{input}}
|
\constfunc{wxString}{Convert}{\param{const wxString\& }{input}}
|
||||||
|
|
||||||
Convert wxString and return new wxString object.
|
Convert wxString and return new wxString object.
|
||||||
|
@@ -93,15 +93,15 @@ class WXDLLIMPEXP_BASE wxEncodingConverter : public wxObject
|
|||||||
|
|
||||||
// Convert input string according to settings passed to Init.
|
// Convert input string according to settings passed to Init.
|
||||||
// Note that you must call Init before using Convert!
|
// Note that you must call Init before using Convert!
|
||||||
void Convert(const char* input, char* output) const;
|
bool Convert(const char* input, char* output) const;
|
||||||
void Convert(char* str) const { Convert(str, str); }
|
bool Convert(char* str) const { return Convert(str, str); }
|
||||||
wxString Convert(const wxString& input) const;
|
wxString Convert(const wxString& input) const;
|
||||||
|
|
||||||
#if wxUSE_WCHAR_T
|
#if wxUSE_WCHAR_T
|
||||||
void Convert(const char* input, wchar_t* output) const;
|
bool Convert(const char* input, wchar_t* output) const;
|
||||||
void Convert(const wchar_t* input, char* output) const;
|
bool Convert(const wchar_t* input, char* output) const;
|
||||||
void Convert(const wchar_t* input, wchar_t* output) const;
|
bool Convert(const wchar_t* input, wchar_t* output) const;
|
||||||
void Convert(wchar_t* str) const { Convert(str, str); }
|
bool Convert(wchar_t* str) const { return Convert(str, str); }
|
||||||
#endif
|
#endif
|
||||||
// Return equivalent(s) for given font that are used
|
// Return equivalent(s) for given font that are used
|
||||||
// under given platform. wxPLATFORM_CURRENT means the plaform
|
// under given platform. wxPLATFORM_CURRENT means the plaform
|
||||||
|
@@ -146,8 +146,7 @@ bool wxEncodingConverter::Init(wxFontEncoding input_enc, wxFontEncoding output_e
|
|||||||
|
|
||||||
m_Table = new tchar[65536];
|
m_Table = new tchar[65536];
|
||||||
for (i = 0; i < 128; i++) m_Table[i] = (tchar)i; // 7bit ASCII
|
for (i = 0; i < 128; i++) m_Table[i] = (tchar)i; // 7bit ASCII
|
||||||
for (i = 128; i < 65536; i++) m_Table[i] = (tchar)'?';
|
for (i = 128; i < 65536; i++) m_Table[i] = (tchar)0;
|
||||||
// FIXME - this should be character that means `unicode to charset' impossible, not '?'
|
|
||||||
|
|
||||||
if (method == wxCONVERT_SUBSTITUTE)
|
if (method == wxCONVERT_SUBSTITUTE)
|
||||||
{
|
{
|
||||||
@@ -207,8 +206,21 @@ bool wxEncodingConverter::Init(wxFontEncoding input_enc, wxFontEncoding output_e
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define REPLACEMENT_CHAR (tchar('?'))
|
||||||
|
|
||||||
void wxEncodingConverter::Convert(const char* input, char* output) const
|
inline tchar GetTableValue(const tchar *table, tchar value, bool& repl)
|
||||||
|
{
|
||||||
|
tchar r = table[value];
|
||||||
|
if (r == 0 && value != 0)
|
||||||
|
{
|
||||||
|
r = REPLACEMENT_CHAR;
|
||||||
|
repl = true;
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool wxEncodingConverter::Convert(const char* input, char* output) const
|
||||||
{
|
{
|
||||||
wxASSERT_MSG(!m_UnicodeOutput, wxT("You cannot convert to unicode if output is const char*!"));
|
wxASSERT_MSG(!m_UnicodeOutput, wxT("You cannot convert to unicode if output is const char*!"));
|
||||||
wxASSERT_MSG(!m_UnicodeInput, wxT("You cannot convert from unicode if input is const char*!"));
|
wxASSERT_MSG(!m_UnicodeInput, wxT("You cannot convert from unicode if input is const char*!"));
|
||||||
@@ -219,20 +231,25 @@ void wxEncodingConverter::Convert(const char* input, char* output) const
|
|||||||
if (m_JustCopy)
|
if (m_JustCopy)
|
||||||
{
|
{
|
||||||
strcpy(output, input);
|
strcpy(output, input);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCHECK_RET(m_Table != NULL, wxT("You must call wxEncodingConverter::Init() before actually converting!"));
|
wxCHECK_MSG(m_Table != NULL, false,
|
||||||
|
wxT("You must call wxEncodingConverter::Init() before actually converting!"));
|
||||||
|
|
||||||
|
bool replaced = false;
|
||||||
|
|
||||||
for (i = input, o = output; *i != 0;)
|
for (i = input, o = output; *i != 0;)
|
||||||
*(o++) = (char)(m_Table[(wxUint8)*(i++)]);
|
*(o++) = (char)(GetTableValue(m_Table, (wxUint8)*(i++), replaced));
|
||||||
*o = 0;
|
*o = 0;
|
||||||
|
|
||||||
|
return !replaced;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if wxUSE_WCHAR_T
|
#if wxUSE_WCHAR_T
|
||||||
|
|
||||||
void wxEncodingConverter::Convert(const char* input, wchar_t* output) const
|
bool wxEncodingConverter::Convert(const char* input, wchar_t* output) const
|
||||||
{
|
{
|
||||||
wxASSERT_MSG(m_UnicodeOutput, wxT("You cannot convert to 8-bit if output is const wchar_t*!"));
|
wxASSERT_MSG(m_UnicodeOutput, wxT("You cannot convert to 8-bit if output is const wchar_t*!"));
|
||||||
wxASSERT_MSG(!m_UnicodeInput, wxT("You cannot convert from unicode if input is const char*!"));
|
wxASSERT_MSG(!m_UnicodeInput, wxT("You cannot convert from unicode if input is const char*!"));
|
||||||
@@ -245,19 +262,24 @@ void wxEncodingConverter::Convert(const char* input, wchar_t* output) const
|
|||||||
for (i = input, o = output; *i != 0;)
|
for (i = input, o = output; *i != 0;)
|
||||||
*(o++) = (wchar_t)(*(i++));
|
*(o++) = (wchar_t)(*(i++));
|
||||||
*o = 0;
|
*o = 0;
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCHECK_RET(m_Table != NULL, wxT("You must call wxEncodingConverter::Init() before actually converting!"));
|
wxCHECK_MSG(m_Table != NULL, false,
|
||||||
|
wxT("You must call wxEncodingConverter::Init() before actually converting!"));
|
||||||
|
|
||||||
|
bool replaced = false;
|
||||||
|
|
||||||
for (i = input, o = output; *i != 0;)
|
for (i = input, o = output; *i != 0;)
|
||||||
*(o++) = (wchar_t)(m_Table[(wxUint8)*(i++)]);
|
*(o++) = (wchar_t)(GetTableValue(m_Table, (wxUint8)*(i++), replaced));
|
||||||
*o = 0;
|
*o = 0;
|
||||||
|
|
||||||
|
return !replaced;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void wxEncodingConverter::Convert(const wchar_t* input, char* output) const
|
bool wxEncodingConverter::Convert(const wchar_t* input, char* output) const
|
||||||
{
|
{
|
||||||
wxASSERT_MSG(!m_UnicodeOutput, wxT("You cannot convert to unicode if output is const char*!"));
|
wxASSERT_MSG(!m_UnicodeOutput, wxT("You cannot convert to unicode if output is const char*!"));
|
||||||
wxASSERT_MSG(m_UnicodeInput, wxT("You cannot convert from 8-bit if input is const wchar_t*!"));
|
wxASSERT_MSG(m_UnicodeInput, wxT("You cannot convert from 8-bit if input is const wchar_t*!"));
|
||||||
@@ -270,19 +292,24 @@ void wxEncodingConverter::Convert(const wchar_t* input, char* output) const
|
|||||||
for (i = input, o = output; *i != 0;)
|
for (i = input, o = output; *i != 0;)
|
||||||
*(o++) = (char)(*(i++));
|
*(o++) = (char)(*(i++));
|
||||||
*o = 0;
|
*o = 0;
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCHECK_RET(m_Table != NULL, wxT("You must call wxEncodingConverter::Init() before actually converting!"));
|
wxCHECK_MSG(m_Table != NULL, false,
|
||||||
|
wxT("You must call wxEncodingConverter::Init() before actually converting!"));
|
||||||
|
|
||||||
|
bool replaced = false;
|
||||||
|
|
||||||
for (i = input, o = output; *i != 0;)
|
for (i = input, o = output; *i != 0;)
|
||||||
*(o++) = (char)(m_Table[(wxUint16)*(i++)]);
|
*(o++) = (char)(GetTableValue(m_Table, (wxUint16)*(i++), replaced));
|
||||||
*o = 0;
|
*o = 0;
|
||||||
|
|
||||||
|
return !replaced;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void wxEncodingConverter::Convert(const wchar_t* input, wchar_t* output) const
|
bool wxEncodingConverter::Convert(const wchar_t* input, wchar_t* output) const
|
||||||
{
|
{
|
||||||
wxASSERT_MSG(m_UnicodeOutput, wxT("You cannot convert to 8-bit if output is const wchar_t*!"));
|
wxASSERT_MSG(m_UnicodeOutput, wxT("You cannot convert to 8-bit if output is const wchar_t*!"));
|
||||||
wxASSERT_MSG(m_UnicodeInput, wxT("You cannot convert from 8-bit if input is const wchar_t*!"));
|
wxASSERT_MSG(m_UnicodeInput, wxT("You cannot convert from 8-bit if input is const wchar_t*!"));
|
||||||
@@ -296,14 +323,19 @@ void wxEncodingConverter::Convert(const wchar_t* input, wchar_t* output) const
|
|||||||
for (i = input, o = output; *i != 0;)
|
for (i = input, o = output; *i != 0;)
|
||||||
*(o++) = (*(i++));
|
*(o++) = (*(i++));
|
||||||
*o = 0;
|
*o = 0;
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCHECK_RET(m_Table != NULL, wxT("You must call wxEncodingConverter::Init() before actually converting!"));
|
wxCHECK_MSG(m_Table != NULL, false,
|
||||||
|
wxT("You must call wxEncodingConverter::Init() before actually converting!"));
|
||||||
|
|
||||||
|
bool replaced = false;
|
||||||
|
|
||||||
for (i = input, o = output; *i != 0;)
|
for (i = input, o = output; *i != 0;)
|
||||||
*(o++) = (wchar_t)(m_Table[(wxUint8)*(i++)]);
|
*(o++) = (wchar_t)(GetTableValue(m_Table, (wxUint8)*(i++), replaced));
|
||||||
*o = 0;
|
*o = 0;
|
||||||
|
|
||||||
|
return !replaced;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // wxUSE_WCHAR_T
|
#endif // wxUSE_WCHAR_T
|
||||||
|
Reference in New Issue
Block a user