X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..de8c48cf464e67572ba2927dd9f7dfe9e7d3488f:/src/common/fontmap.cpp diff --git a/src/common/fontmap.cpp b/src/common/fontmap.cpp index fe2909b43f..abf1e37e36 100644 --- a/src/common/fontmap.cpp +++ b/src/common/fontmap.cpp @@ -42,6 +42,7 @@ #endif #if wxUSE_GUI + #include "wx/fontutil.h" #include "wx/msgdlg.h" #include "wx/fontdlg.h" #include "wx/choicdlg.h" @@ -54,7 +55,7 @@ // ---------------------------------------------------------------------------- // the config paths we use -static const wxChar* FONTMAPPER_ROOT_PATH = wxT("wxWindows/FontMapper"); +static const wxChar* FONTMAPPER_ROOT_PATH = wxT("/wxWindows/FontMapper"); static const wxChar* FONTMAPPER_CHARSET_PATH = wxT("Charsets"); static const wxChar* FONTMAPPER_CHARSET_ALIAS_PATH = wxT("Aliases"); #if wxUSE_GUI @@ -89,36 +90,40 @@ static wxFontEncoding gs_encodings[] = wxFONTENCODING_CP1256, wxFONTENCODING_CP1257, wxFONTENCODING_CP437, + wxFONTENCODING_UTF7, + wxFONTENCODING_UTF8, }; // the descriptions for them static const wxChar* gs_encodingDescs[] = { - wxTRANSLATE( "West 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)" ), wxTRANSLATE( "Turkish (ISO-8859-9)" ), wxTRANSLATE( "Nordic (ISO-8859-10)" ), wxTRANSLATE( "Thai (ISO-8859-11)" ), - wxTRANSLATE( "ISO-8859-12" ), + wxTRANSLATE( "Indian (ISO-8859-12)" ), wxTRANSLATE( "Baltic (ISO-8859-13)" ), - wxTRANSLATE( "ISO-8859-14" ), - wxTRANSLATE( "West European new (ISO-8859-15/Latin 0)" ), + wxTRANSLATE( "Celtic (ISO-8859-14)" ), + wxTRANSLATE( "Western European with Euro (ISO-8859-15)" ), wxTRANSLATE( "KOI8-R" ), - wxTRANSLATE( "Windows Latin 2 (CP 1250)" ), + wxTRANSLATE( "Windows Central European (CP 1250)" ), wxTRANSLATE( "Windows Cyrillic (CP 1251)" ), - wxTRANSLATE( "Windows Latin 1 (CP 1252)" ), + wxTRANSLATE( "Windows Western European (CP 1252)" ), wxTRANSLATE( "Windows Greek (CP 1253)" ), wxTRANSLATE( "Windows Turkish (CP 1254)" ), wxTRANSLATE( "Windows Hebrew (CP 1255)" ), 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 @@ -149,6 +154,8 @@ static const wxChar* gs_encodingNames[] = wxT( "windows1256" ), wxT( "windows1257" ), wxT( "windows437" ), + wxT( "utf7" ), + wxT( "utf8" ), }; // ---------------------------------------------------------------------------- @@ -398,15 +405,28 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, RestorePath(pathOld); } -#endif +#endif // wxUSE_CONFIG // if didn't find it there, try to reckognise it ourselves if ( encoding == wxFONTENCODING_SYSTEM ) { + // discard the optional quotes + if ( !!cs ) + { + if ( cs[0u] == _T('"') && cs.Last() == _T('"') ) + { + cs = wxString(cs.c_str(), cs.length() - 1); + } + } + cs.MakeUpper(); if ( !cs || cs == wxT("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("KOI8-R") || cs == wxT("KOI8-U") ) encoding = wxFONTENCODING_KOI8; else if ( cs.Left(3) == wxT("ISO") ) @@ -438,7 +458,7 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, { value -= 1250; if ( value < wxFONTENCODING_CP12_MAX - - wxFONTENCODING_CP1250 - 1 ) + wxFONTENCODING_CP1250 ) { // a valid Windows code page value += wxFONTENCODING_CP1250; @@ -676,17 +696,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; } @@ -699,10 +719,13 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, // now try the default mappings: wxFontEncodingArray equiv = wxEncodingConverter::GetAllEquivalents(encoding); size_t count = equiv.GetCount(); - for ( size_t i = (equiv[0] == encoding) ? 1 : 0; i < count; i++ ) + if ( count ) { - if ( TestAltEncoding(configEntry, equiv[i], info) ) - return TRUE; + for ( size_t i = (equiv[0] == encoding) ? 1 : 0; i < count; i++ ) + { + if ( TestAltEncoding(configEntry, equiv[i], info) ) + return TRUE; + } } return FALSE; @@ -724,13 +747,13 @@ bool wxFontMapper::IsEncodingAvailable(wxFontEncoding encoding, { wxNativeEncodingInfo info; - if (wxGetNativeFontEncoding(encoding, &info)) + if ( wxGetNativeFontEncoding(encoding, &info) ) { info.facename = facename; return wxTestFontEncoding(info); } - else - return FALSE; + + return FALSE; } #endif // wxUSE_GUI