Make BOM-detection code in wxConvAuto public.
Export GetBOM() and DetectBOM() functions. Also rename BOMType enum elements to use "wx" prefix now that they're public. Closes #13599. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69571 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -45,7 +45,7 @@ void wxConvAuto::SetFallbackEncoding(wxFontEncoding enc)
|
||||
}
|
||||
|
||||
/* static */
|
||||
wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen)
|
||||
wxBOM wxConvAuto::DetectBOM(const char *src, size_t srcLen)
|
||||
{
|
||||
// examine the buffer for BOM presence
|
||||
//
|
||||
@@ -65,14 +65,14 @@ wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen)
|
||||
switch ( srcLen )
|
||||
{
|
||||
case 0:
|
||||
return BOM_Unknown;
|
||||
return wxBOM_Unknown;
|
||||
|
||||
case 1:
|
||||
if ( src[0] == '\x00' || src[0] == '\xFF' ||
|
||||
src[0] == '\xFE' || src[0] == '\xEF')
|
||||
{
|
||||
// this could be a BOM but we don't know yet
|
||||
return BOM_Unknown;
|
||||
return wxBOM_Unknown;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -81,22 +81,22 @@ wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen)
|
||||
if ( src[0] == '\xEF' && src[1] == '\xBB' )
|
||||
{
|
||||
if ( srcLen == 3 )
|
||||
return src[2] == '\xBF' ? BOM_UTF8 : BOM_None;
|
||||
return src[2] == '\xBF' ? wxBOM_UTF8 : wxBOM_None;
|
||||
|
||||
return BOM_Unknown;
|
||||
return wxBOM_Unknown;
|
||||
}
|
||||
|
||||
if ( src[0] == '\xFE' && src[1] == '\xFF' )
|
||||
return BOM_UTF16BE;
|
||||
return wxBOM_UTF16BE;
|
||||
|
||||
if ( src[0] == '\xFF' && src[1] == '\xFE' )
|
||||
{
|
||||
// if the next byte is 0, it could be an UTF-32LE BOM but if it
|
||||
// isn't we can be sure it's UTF-16LE
|
||||
if ( srcLen == 3 && src[2] != '\x00' )
|
||||
return BOM_UTF16LE;
|
||||
return wxBOM_UTF16LE;
|
||||
|
||||
return BOM_Unknown;
|
||||
return wxBOM_Unknown;
|
||||
}
|
||||
|
||||
if ( src[0] == '\x00' && src[1] == '\x00' )
|
||||
@@ -104,9 +104,9 @@ wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen)
|
||||
// this could only be UTF-32BE, check that the data we have so
|
||||
// far allows for it
|
||||
if ( srcLen == 3 && src[2] != '\xFE' )
|
||||
return BOM_None;
|
||||
return wxBOM_None;
|
||||
|
||||
return BOM_Unknown;
|
||||
return wxBOM_Unknown;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -114,61 +114,61 @@ wxConvAuto::BOMType wxConvAuto::DetectBOM(const char *src, size_t srcLen)
|
||||
// we have at least 4 characters so we may finally decide whether
|
||||
// we have a BOM or not
|
||||
if ( src[0] == '\xEF' && src[1] == '\xBB' && src[2] == '\xBF' )
|
||||
return BOM_UTF8;
|
||||
return wxBOM_UTF8;
|
||||
|
||||
if ( src[0] == '\x00' && src[1] == '\x00' &&
|
||||
src[2] == '\xFE' && src[3] == '\xFF' )
|
||||
return BOM_UTF32BE;
|
||||
return wxBOM_UTF32BE;
|
||||
|
||||
if ( src[0] == '\xFF' && src[1] == '\xFE' &&
|
||||
src[2] == '\x00' && src[3] == '\x00' )
|
||||
return BOM_UTF32LE;
|
||||
return wxBOM_UTF32LE;
|
||||
|
||||
if ( src[0] == '\xFE' && src[1] == '\xFF' )
|
||||
return BOM_UTF16BE;
|
||||
return wxBOM_UTF16BE;
|
||||
|
||||
if ( src[0] == '\xFF' && src[1] == '\xFE' )
|
||||
return BOM_UTF16LE;
|
||||
return wxBOM_UTF16LE;
|
||||
}
|
||||
|
||||
return BOM_None;
|
||||
return wxBOM_None;
|
||||
}
|
||||
|
||||
void wxConvAuto::InitFromBOM(BOMType bomType)
|
||||
void wxConvAuto::InitFromBOM(wxBOM bomType)
|
||||
{
|
||||
m_consumedBOM = false;
|
||||
|
||||
switch ( bomType )
|
||||
{
|
||||
case BOM_Unknown:
|
||||
case wxBOM_Unknown:
|
||||
wxFAIL_MSG( "shouldn't be called for this BOM type" );
|
||||
break;
|
||||
|
||||
case BOM_None:
|
||||
case wxBOM_None:
|
||||
// use the default
|
||||
break;
|
||||
|
||||
case BOM_UTF32BE:
|
||||
case wxBOM_UTF32BE:
|
||||
m_conv = new wxMBConvUTF32BE;
|
||||
m_ownsConv = true;
|
||||
break;
|
||||
|
||||
case BOM_UTF32LE:
|
||||
case wxBOM_UTF32LE:
|
||||
m_conv = new wxMBConvUTF32LE;
|
||||
m_ownsConv = true;
|
||||
break;
|
||||
|
||||
case BOM_UTF16BE:
|
||||
case wxBOM_UTF16BE:
|
||||
m_conv = new wxMBConvUTF16BE;
|
||||
m_ownsConv = true;
|
||||
break;
|
||||
|
||||
case BOM_UTF16LE:
|
||||
case wxBOM_UTF16LE:
|
||||
m_conv = new wxMBConvUTF16LE;
|
||||
m_ownsConv = true;
|
||||
break;
|
||||
|
||||
case BOM_UTF8:
|
||||
case wxBOM_UTF8:
|
||||
InitWithUTF8();
|
||||
break;
|
||||
|
||||
@@ -191,25 +191,25 @@ void wxConvAuto::SkipBOM(const char **src, size_t *len) const
|
||||
int ofs;
|
||||
switch ( m_bomType )
|
||||
{
|
||||
case BOM_Unknown:
|
||||
case wxBOM_Unknown:
|
||||
wxFAIL_MSG( "shouldn't be called for this BOM type" );
|
||||
return;
|
||||
|
||||
case BOM_None:
|
||||
case wxBOM_None:
|
||||
ofs = 0;
|
||||
break;
|
||||
|
||||
case BOM_UTF32BE:
|
||||
case BOM_UTF32LE:
|
||||
case wxBOM_UTF32BE:
|
||||
case wxBOM_UTF32LE:
|
||||
ofs = 4;
|
||||
break;
|
||||
|
||||
case BOM_UTF16BE:
|
||||
case BOM_UTF16LE:
|
||||
case wxBOM_UTF16BE:
|
||||
case wxBOM_UTF16LE:
|
||||
ofs = 2;
|
||||
break;
|
||||
|
||||
case BOM_UTF8:
|
||||
case wxBOM_UTF8:
|
||||
ofs = 3;
|
||||
break;
|
||||
|
||||
@@ -226,7 +226,7 @@ void wxConvAuto::SkipBOM(const char **src, size_t *len) const
|
||||
bool wxConvAuto::InitFromInput(const char *src, size_t len)
|
||||
{
|
||||
m_bomType = DetectBOM(src, len == wxNO_LEN ? strlen(src) : len);
|
||||
if ( m_bomType == BOM_Unknown )
|
||||
if ( m_bomType == wxBOM_Unknown )
|
||||
return false;
|
||||
|
||||
InitFromBOM(m_bomType);
|
||||
@@ -275,7 +275,7 @@ wxConvAuto::ToWChar(wchar_t *dst, size_t dstLen,
|
||||
|
||||
// try to convert using the auto-detected encoding
|
||||
size_t rc = m_conv->ToWChar(dst, dstLen, src, srcLen);
|
||||
if ( rc == wxCONV_FAILED && m_bomType == BOM_None )
|
||||
if ( rc == wxCONV_FAILED && m_bomType == wxBOM_None )
|
||||
{
|
||||
// if the conversion failed but we didn't really detect anything and
|
||||
// simply tried UTF-8 by default, retry it using the fall-back
|
||||
|
||||
Reference in New Issue
Block a user