X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/76e23cdba3a2e58e788dd18734e7893185531a5b..807a903e6807ae3e49928bda488a04bc0d832149:/src/common/fontmap.cpp?ds=sidebyside diff --git a/src/common/fontmap.cpp b/src/common/fontmap.cpp index 9ea0196dd7..d5b410beb1 100644 --- a/src/common/fontmap.cpp +++ b/src/common/fontmap.cpp @@ -34,7 +34,6 @@ #include "wx/intl.h" #endif // PCH -#include "wx/fontutil.h" #include "wx/fontmap.h" #if wxUSE_CONFIG @@ -43,6 +42,7 @@ #endif #if wxUSE_GUI + #include "wx/fontutil.h" #include "wx/msgdlg.h" #include "wx/fontdlg.h" #include "wx/choicdlg.h" @@ -90,16 +90,18 @@ static wxFontEncoding gs_encodings[] = wxFONTENCODING_CP1256, wxFONTENCODING_CP1257, wxFONTENCODING_CP437, + wxFONTENCODING_UTF7, + wxFONTENCODING_UTF8, }; // the descriptions for them static const wxChar* gs_encodingDescs[] = { - wxTRANSLATE( "Western European (ISO-8859-1/Latin 1)" ), - wxTRANSLATE( "Central European (ISO-8859-2/Latin 2)" ), + wxTRANSLATE( "Western European (ISO-8859-1)" ), + wxTRANSLATE( "Central European (ISO-8859-2)" ), wxTRANSLATE( "Esperanto (ISO-8859-3)" ), wxTRANSLATE( "Baltic (old) (ISO-8859-4)" ), - wxTRANSLATE( "Cyrillic (Latin 5)" ), + wxTRANSLATE( "Cyrillic (ISO-8859-5)" ), wxTRANSLATE( "Arabic (ISO-8859-6)" ), wxTRANSLATE( "Greek (ISO-8859-7)" ), wxTRANSLATE( "Hebrew (ISO-8859-8)" ), @@ -109,7 +111,7 @@ static const wxChar* gs_encodingDescs[] = wxTRANSLATE( "Indian (ISO-8859-12)" ), wxTRANSLATE( "Baltic (ISO-8859-13)" ), wxTRANSLATE( "Celtic (ISO-8859-14)" ), - wxTRANSLATE( "Western European with Euro (ISO-8859-15/Latin 0)" ), + wxTRANSLATE( "Western European with Euro (ISO-8859-15)" ), wxTRANSLATE( "KOI8-R" ), wxTRANSLATE( "Windows Central European (CP 1250)" ), wxTRANSLATE( "Windows Cyrillic (CP 1251)" ), @@ -120,6 +122,8 @@ static const wxChar* gs_encodingDescs[] = wxTRANSLATE( "Windows Arabic (CP 1256)" ), wxTRANSLATE( "Windows Baltic (CP 1257)" ), wxTRANSLATE( "Windows/DOS OEM (CP 437)" ), + wxTRANSLATE( "Unicode 7 bit (UTF-7)" ), + wxTRANSLATE( "Unicode 8 bit (UTF-8)" ), }; // and the internal names @@ -141,15 +145,17 @@ static const wxChar* gs_encodingNames[] = wxT( "iso8859-14" ), wxT( "iso8859-15" ), wxT( "koi8-r" ), - wxT( "windows1250" ), - wxT( "windows1251" ), - wxT( "windows1252" ), - wxT( "windows1253" ), - wxT( "windows1254" ), - wxT( "windows1255" ), - wxT( "windows1256" ), - wxT( "windows1257" ), - wxT( "windows437" ), + 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( "utf7" ), + wxT( "utf8" ), }; // ---------------------------------------------------------------------------- @@ -313,6 +319,11 @@ void wxFontMapper::RestorePath(const wxString& pathOld) /* static */ wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding) { + if ( encoding == wxFONTENCODING_DEFAULT ) + { + return _("Default encoding"); + } + size_t count = WXSIZEOF(gs_encodingDescs); wxASSERT_MSG( count == WXSIZEOF(gs_encodings), @@ -335,6 +346,11 @@ wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding) /* static */ wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding) { + if ( encoding == wxFONTENCODING_DEFAULT ) + { + return _("default"); + } + size_t count = WXSIZEOF(gs_encodingNames); wxASSERT_MSG( count == WXSIZEOF(gs_encodings), @@ -401,9 +417,13 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, } #endif - // if didn't find it there, try to reckognise it ourselves + // if didn't find it there, try to recognize it ourselves if ( encoding == wxFONTENCODING_SYSTEM ) { + // trim any spaces + cs.Trim(TRUE); + cs.Trim(FALSE); + // discard the optional quotes if ( !!cs ) { @@ -416,9 +436,26 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, cs.MakeUpper(); if ( !cs || cs == wxT("US-ASCII") ) + { encoding = wxFONTENCODING_DEFAULT; - else if ( cs == wxT("KOI8-R") || cs == wxT("KOI8-U") ) + } + else if ( cs == wxT("UTF-7") ) + { + encoding = wxFONTENCODING_UTF7; + } + else if ( cs == wxT("UTF-8") ) + { + encoding = wxFONTENCODING_UTF8; + } + else if ( cs == wxT("KOI8-R") || + cs == wxT("KOI8-U") || + 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 reckognizing it at all encoding = wxFONTENCODING_KOI8; + } else if ( cs.Left(3) == wxT("ISO") ) { // the dash is optional (or, to be exact, it is not, but @@ -439,20 +476,41 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, } } } - else if ( cs.Left(8) == wxT("WINDOWS-") ) + else // check for Windows charsets { - int value; - if ( wxSscanf(cs.c_str() + 8, wxT("%u"), &value) == 1 ) + size_t len; + if ( cs.Left(7) == wxT("WINDOWS") ) + { + len = 7; + } + else if ( cs.Left(2) == wxT("CP") ) + { + len = 2; + } + else // not a Windows encoding { - if ( value >= 1250 ) + len = 0; + } + + if ( len ) + { + const wxChar *p = cs.c_str() + len; + if ( *p == wxT('-') ) + p++; + + int value; + if ( wxSscanf(p, wxT("%u"), &value) == 1 ) { - value -= 1250; - if ( value < wxFONTENCODING_CP12_MAX - - wxFONTENCODING_CP1250 ) + if ( value >= 1250 ) { - // a valid Windows code page - value += wxFONTENCODING_CP1250; - encoding = (wxFontEncoding)value; + value -= 1250; + if ( value < wxFONTENCODING_CP12_MAX - + wxFONTENCODING_CP1250 ) + { + // a valid Windows code page + value += wxFONTENCODING_CP1250; + encoding = (wxFontEncoding)value; + } } } } @@ -686,17 +744,17 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, wxFont font = retData.GetChosenFont(); *info = retData.EncodingInfo(); - info->encoding = retData.GetEncoding(); + info -> encoding = retData.GetEncoding(); #if wxUSE_CONFIG - // remember this in the config + // remember this in the config if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) ) { GetConfig()->Write(configEntry, info->ToString()); RestorePath(pathOld); } -#endif +#endif // wxUSE_CONFIG return TRUE; }