wxFONTENCODING_ISO8859_15,
wxFONTENCODING_KOI8,
wxFONTENCODING_KOI8_U,
+ wxFONTENCODING_CP874,
wxFONTENCODING_CP932,
wxFONTENCODING_CP936,
wxFONTENCODING_CP949,
wxFONTENCODING_UTF32BE,
wxFONTENCODING_UTF32LE,
wxFONTENCODING_EUC_JP,
+ wxFONTENCODING_DEFAULT,
+ wxFONTENCODING_BIG5,
+ wxFONTENCODING_SHIFT_JIS,
+ wxFONTENCODING_GB2312,
};
// the descriptions for them
wxTRANSLATE( "Western European with Euro (ISO-8859-15)" ),
wxTRANSLATE( "KOI8-R" ),
wxTRANSLATE( "KOI8-U" ),
+ wxTRANSLATE( "Windows Thai (CP 874)" ),
wxTRANSLATE( "Windows Japanese (CP 932)" ),
wxTRANSLATE( "Windows Chinese Simplified (CP 936)" ),
wxTRANSLATE( "Windows Korean (CP 949)" ),
wxTRANSLATE( "Unicode 32 bit Big Endian (UTF-32BE)" ),
wxTRANSLATE( "Unicode 32 bit Little Endian (UTF-32LE)" ),
wxTRANSLATE( "Extended Unix Codepage for Japanese (EUC-JP)" ),
+ wxTRANSLATE( "US-ASCII" ),
+ wxTRANSLATE( "BIG5" ),
+ wxTRANSLATE( "SHIFT-JIS" ),
+ wxTRANSLATE( "GB-2312" ),
};
// and the internal names (these are not translated on purpose!)
-static const wxChar* gs_encodingNames[] =
+static const wxChar* gs_encodingNames[WXSIZEOF(gs_encodingDescs)][10] =
{
- wxT( "iso-8859-1" ),
- wxT( "iso-8859-2" ),
- wxT( "iso-8859-3" ),
- wxT( "iso-8859-4" ),
- wxT( "iso-8859-5" ),
- wxT( "iso-8859-6" ),
- wxT( "iso-8859-7" ),
- wxT( "iso-8859-8" ),
- wxT( "iso-8859-9" ),
- wxT( "iso-8859-10" ),
- wxT( "iso-8859-11" ),
- wxT( "iso-8859-12" ),
- wxT( "iso-8859-13" ),
- wxT( "iso-8859-14" ),
- wxT( "iso-8859-15" ),
- wxT( "koi8-r" ),
- wxT( "koi8-u" ),
- wxT( "windows-932" ),
- wxT( "windows-936" ),
- wxT( "windows-949" ),
- wxT( "windows-950" ),
- wxT( "windows-1250" ),
- wxT( "windows-1251" ),
- wxT( "windows-1252" ),
- wxT( "windows-1253" ),
- wxT( "windows-1254" ),
- wxT( "windows-1255" ),
- wxT( "windows-1256" ),
- wxT( "windows-1257" ),
- wxT( "windows-437" ),
- wxT( "utf-7" ),
- wxT( "utf-8" ),
- wxT( "utf-16" ),
- wxT( "utf-16be" ),
- wxT( "utf-16le" ),
- wxT( "utf-32" ),
- wxT( "utf-32be" ),
- wxT( "utf-32le" ),
- wxT( "euc-jp" ),
+ // names from the first column are used under Linux, from the second one
+ // under Solaris and IRIX and from the third one -- under AIX
+ { wxT( "ISO-8859-1" ), wxT( "ISO8859-1" ), wxT( "8859-1" ), wxT("iso_8859_1"), NULL },
+ { wxT( "ISO-8859-2" ), wxT( "ISO8859-2" ), wxT( "8859-2" ), NULL },
+ { wxT( "ISO-8859-3" ), wxT( "ISO8859-3" ), wxT( "8859-3" ), NULL },
+ { wxT( "ISO-8859-4" ), wxT( "ISO8859-4" ), wxT( "8859-4" ), NULL },
+ { wxT( "ISO-8859-5" ), wxT( "ISO8859-5" ), wxT( "8859-5" ), NULL },
+ { wxT( "ISO-8859-6" ), wxT( "ISO8859-6" ), wxT( "8859-6" ), NULL },
+ { wxT( "ISO-8859-7" ), wxT( "ISO8859-7" ), wxT( "8859-7" ), NULL },
+ { wxT( "ISO-8859-8" ), wxT( "ISO8859-8" ), wxT( "8859-8" ), NULL },
+ { wxT( "ISO-8859-9" ), wxT( "ISO8859-9" ), wxT( "8859-9" ), NULL },
+ { wxT( "ISO-8859-10" ), wxT( "ISO8859-10" ), wxT( "8859-10" ), NULL },
+ { wxT( "ISO-8859-11" ), wxT( "ISO8859-11" ), wxT( "8859-11" ), NULL },
+ { wxT( "ISO-8859-12" ), wxT( "ISO8859-12" ), wxT( "8859-12" ), NULL },
+ { wxT( "ISO-8859-13" ), wxT( "ISO8859-13" ), wxT( "8859-13" ), NULL },
+ { wxT( "ISO-8859-14" ), wxT( "ISO8859-14" ), wxT( "8859-14" ), NULL },
+ { wxT( "ISO-8859-15" ), wxT( "ISO8859-15" ), wxT( "8859-15" ), NULL },
+
+ // although koi8-ru is not strictly speaking the same as koi8-r,
+ // they are similar enough to make mapping it to koi8 better than
+ // not recognizing it at all
+ { wxT( "KOI8-R" ), wxT( "KOI8-RU" ), NULL },
+ { wxT( "KOI8-U" ), NULL },
+
+ { wxT( "WINDOWS-874" ), wxT( "CP-874" ), NULL },
+ { wxT( "WINDOWS-932" ), wxT( "CP-932" ), NULL },
+ { wxT( "WINDOWS-936" ), wxT( "CP-936" ), NULL },
+ { wxT( "WINDOWS-949" ), wxT( "CP-949" ), wxT( "EUC-KR" ), wxT( "eucKR" ), wxT( "euc_kr" ), NULL },
+ { wxT( "WINDOWS-950" ), wxT( "CP-950" ), NULL },
+ { wxT( "WINDOWS-1250" ),wxT( "CP-1250" ), NULL },
+ { wxT( "WINDOWS-1251" ),wxT( "CP-1251" ), NULL },
+ { wxT( "WINDOWS-1252" ),wxT( "CP-1252" ), wxT("IBM-1252"), NULL },
+ { wxT( "WINDOWS-1253" ),wxT( "CP-1253" ), NULL },
+ { wxT( "WINDOWS-1254" ),wxT( "CP-1254" ), NULL },
+ { wxT( "WINDOWS-1255" ),wxT( "CP-1255" ), NULL },
+ { wxT( "WINDOWS-1256" ),wxT( "CP-1256" ), NULL },
+ { wxT( "WINDOWS-1257" ),wxT( "CP-1257" ), NULL },
+ { wxT( "WINDOWS-437" ), wxT( "CP-437" ), NULL },
+
+ { wxT( "UTF-7" ), NULL },
+ { wxT( "UTF-8" ), NULL },
+ { wxT( "UTF-16" ), wxT("UCS-2"), wxT("UCS2"), NULL },
+ { wxT( "UTF-16BE" ), wxT("UCS-2BE"), NULL },
+ { wxT( "UTF-16LE" ), wxT("UCS-2LE"), NULL },
+ { wxT( "UTF-32" ), wxT( "UCS-4" ), wxT("UCS4"), NULL },
+ { wxT( "UTF-32BE" ), wxT( "UCS-4BE" ), NULL },
+ { wxT( "UTF-32LE" ), wxT( "UCS-4LE" ), NULL },
+
+ { wxT( "EUC-JP" ), wxT( "eucJP" ), wxT( "euc_jp" ), wxT( "IBM-eucJP" ), NULL },
+
+ // 646 is for Solaris, roman8 -- for HP-UX
+ { wxT( "US-ASCII" ), wxT( "ASCII" ), wxT("C"), wxT("POSIX"), wxT("ANSI_X3.4-1968"),
+ wxT("646"), wxT("roman8"), wxT( "" ), NULL },
+
+ { wxT( "BIG5" ), NULL },
+ { wxT( "shift-jis" ), wxT( "shift_jis" ), wxT( "sjis" ), NULL },
+ { wxT( "GB2312" ), NULL },
};
-wxCOMPILE_TIME_ASSERT( WXSIZEOF(gs_encodingDescs) == WXSIZEOF(gs_encodings) &&
- WXSIZEOF(gs_encodingNames) == WXSIZEOF(gs_encodings),
- EncodingsArraysNotInSync );
+wxCOMPILE_TIME_ASSERT( WXSIZEOF(gs_encodingDescs) == WXSIZEOF(gs_encodings), EncodingsArraysNotInSync );
+wxCOMPILE_TIME_ASSERT( WXSIZEOF(gs_encodingNames) == WXSIZEOF(gs_encodings), EncodingsArraysNotInSync );
// ----------------------------------------------------------------------------
// private classes
}
}
- cs.MakeUpper();
-
- if ( cs.empty() || cs == _T("US-ASCII") )
- {
- encoding = wxFONTENCODING_DEFAULT;
- }
- else if ( cs == wxT("UTF-7") )
- {
- encoding = wxFONTENCODING_UTF7;
- }
- else if ( cs == wxT("UTF-8") )
- {
- encoding = wxFONTENCODING_UTF8;
- }
- else if ( cs == wxT("UTF-16") )
- {
- encoding = wxFONTENCODING_UTF16;
- }
- else if ( cs == wxT("UTF-16BE") )
- {
- encoding = wxFONTENCODING_UTF16BE;
- }
- else if ( cs == wxT("UTF-16LE") )
- {
- encoding = wxFONTENCODING_UTF16LE;
- }
- else if ( cs == wxT("UTF-32") || cs == wxT("UCS-4") )
- {
- encoding = wxFONTENCODING_UTF32;
- }
- else if ( cs == wxT("UTF-32BE") || cs == wxT("UCS-4BE") )
- {
- encoding = wxFONTENCODING_UTF32BE;
- }
- else if ( cs == wxT("UTF-32LE") || cs == wxT("UCS-4LE") )
- {
- encoding = wxFONTENCODING_UTF32LE;
- }
- else if ( cs == wxT("GB2312") )
- {
- encoding = wxFONTENCODING_GB2312;
- }
- else if ( cs == wxT("BIG5") )
- {
- encoding = wxFONTENCODING_BIG5;
- }
- else if ( cs == wxT("SJIS") ||
- cs == wxT("SHIFT_JIS") ||
- cs == wxT("SHIFT-JIS") )
- {
- encoding = wxFONTENCODING_SHIFT_JIS;
- }
- else if ( cs == wxT("EUC-JP") ||
- cs == wxT("EUC_JP") )
- {
- encoding = wxFONTENCODING_EUC_JP;
- }
- else if ( cs == wxT("EUC-KR") ||
- cs == wxT("EUC_KR") )
+ for ( size_t i = 0; i < WXSIZEOF(gs_encodingNames); ++i )
{
- encoding = wxFONTENCODING_CP949;
- }
- else if ( cs == wxT("KOI8-R") ||
- cs == wxT("KOI8-RU") )
- {
- // although koi8-ru is not strictly speaking the same as koi8-r,
- // they are similar enough to make mapping it to koi8 better than
- // not recognizing it at all
- encoding = wxFONTENCODING_KOI8;
- }
- else if ( cs == wxT("KOI8-U") )
- {
- encoding = wxFONTENCODING_KOI8_U;
+ for ( const wxChar** encName = gs_encodingNames[i]; *encName; ++encName )
+ {
+ if ( cs.CmpNoCase(*encName) == 0 )
+ return gs_encodings[i];
+ }
}
- else if ( cs.Left(3) == wxT("ISO") )
+
+ cs.MakeUpper();
+
+ if ( cs.Left(3) == wxT("ISO") )
{
// the dash is optional (or, to be exact, it is not, but
// several brokenmails "forget" it)
if ( *p == wxT('-') )
p++;
- int value;
+ unsigned int value;
if ( wxSscanf(p, wxT("%u"), &value) == 1 )
{
if ( value >= 1250 )
switch ( value )
{
+ case 874:
+ encoding = wxFONTENCODING_CP874;
+ break;
+
case 932:
encoding = wxFONTENCODING_CP932;
break;
{
if ( gs_encodings[i] == encoding )
{
- return gs_encodingNames[i];
+ return gs_encodingNames[i][0];
}
}
}
/* static */
-wxFontEncoding wxFontMapperBase::GetEncodingFromName(const wxString& name)
+const wxChar** wxFontMapperBase::GetAllEncodingNames(wxFontEncoding encoding)
{
- const size_t count = WXSIZEOF(gs_encodingNames);
+ static const wxChar* dummy[] = { NULL };
- for ( size_t i = 0; i < count; i++ )
+ for ( size_t i = 0; i < WXSIZEOF(gs_encodingNames); i++ )
{
- if ( gs_encodingNames[i] == name )
+ if ( gs_encodings[i] == encoding )
{
- return gs_encodings[i];
+ return gs_encodingNames[i];
}
}
- if ( name == _("default") )
+ return dummy;
+}
+
+/* static */
+wxFontEncoding wxFontMapperBase::GetEncodingFromName(const wxString& name)
+{
+ const size_t count = WXSIZEOF(gs_encodingNames);
+
+ for ( size_t i = 0; i < count; i++ )
{
- return wxFONTENCODING_DEFAULT;
+ for ( const wxChar** encName = gs_encodingNames[i]; *encName; ++encName )
+ {
+ if ( name.CmpNoCase(*encName) == 0 )
+ return gs_encodings[i];
+ }
}
return wxFONTENCODING_MAX;