X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/58c837a4e67c0996134cc0947691dc09c5f26687..7dc3cc31af71522b8fc55b7f97bcba7f5ef9eac5:/src/common/fontmap.cpp diff --git a/src/common/fontmap.cpp b/src/common/fontmap.cpp index a11228fc78..1c9f225748 100644 --- a/src/common/fontmap.cpp +++ b/src/common/fontmap.cpp @@ -40,13 +40,14 @@ #include "wx/msgdlg.h" #include "wx/fontdlg.h" #include "wx/choicdlg.h" +#include "wx/encconv.h" // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- // the config paths we use -static const wxChar* FONTMAPPER_ROOT_PATH = wxT("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"); static const wxChar* FONTMAPPER_FONT_FROM_ENCODING_PATH = wxT("Encodings"); @@ -146,7 +147,7 @@ static const wxChar* gs_encodingNames[] = static wxFontMapper gs_fontMapper; // and public pointer -wxFontMapper * WXDLLEXPORT wxTheFontMapper = &gs_fontMapper; +wxFontMapper * wxTheFontMapper = &gs_fontMapper; // ---------------------------------------------------------------------------- // private classes @@ -222,7 +223,7 @@ wxConfigBase *wxFontMapper::GetConfig() if ( !m_config ) { // try the default - m_config = wxConfig::Get(); + m_config = wxConfig::Get(FALSE/*don't create on demand*/); } return m_config; @@ -497,10 +498,13 @@ bool wxFontMapper::TestAltEncoding(const wxString& configEntry, bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, wxNativeEncodingInfo *info, + const wxString& facename, bool interactive) { wxCHECK_MSG( info, FALSE, wxT("bad pointer in GetAltForEncoding") ); + info->facename = facename; + if ( encoding == wxFONTENCODING_DEFAULT ) { encoding = wxFont::GetDefaultEncoding(); @@ -517,7 +521,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, // wxFatalError doesn't return } - wxString configEntry = GetEncodingName(encoding); + wxString configEntry = facename + _T("_") + GetEncodingName(encoding); // do we have a font spec for this encoding? wxString pathOld; @@ -581,6 +585,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, wxFont font = retData.GetChosenFont(); *info = retData.EncodingInfo(); + info -> encoding = retData.GetEncoding(); // remember this in the config if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) ) @@ -598,71 +603,41 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, } //else: we're in non-interactive mode - // now try the default mappings - switch ( encoding ) - { - case wxFONTENCODING_ISO8859_15: - // iso8859-15 is slightly modified iso8859-1 - if ( TestAltEncoding(configEntry, wxFONTENCODING_ISO8859_1, info) ) - return TRUE; - // fall through - - case wxFONTENCODING_ISO8859_1: - // iso8859-1 is identical to CP1252 - if ( TestAltEncoding(configEntry, wxFONTENCODING_CP1252, info) ) - return TRUE; - - break; - - case wxFONTENCODING_CP1252: - if ( TestAltEncoding(configEntry, wxFONTENCODING_ISO8859_1, info) ) - return TRUE; - - break; - - // iso8859-13 is quite similar to WinBaltic - case wxFONTENCODING_ISO8859_13: - if ( TestAltEncoding(configEntry, wxFONTENCODING_CP1257, info) ) - return TRUE; - - break; - - case wxFONTENCODING_CP1257: - if ( TestAltEncoding(configEntry, wxFONTENCODING_ISO8859_13, info) ) - return TRUE; - - break; - // iso8859-8 is almost identical to WinHebrew - case wxFONTENCODING_ISO8859_8: - if ( TestAltEncoding(configEntry, wxFONTENCODING_CP1255, info) ) - return TRUE; + // now try the default mappings: + wxFontEncodingArray equiv = wxEncodingConverter::GetAllEquivalents(encoding); + for ( unsigned i = (equiv[0] == encoding) ? 1 : 0; i < equiv.GetCount(); i++ ) + if ( TestAltEncoding(configEntry, equiv[i], info) ) + return TRUE; - break; + return FALSE; +} - case wxFONTENCODING_CP1255: - if ( TestAltEncoding(configEntry, wxFONTENCODING_ISO8859_8, info) ) - return TRUE; - break; - // and iso8859-7 is not too different from WinGreek - case wxFONTENCODING_ISO8859_7: - if ( TestAltEncoding(configEntry, wxFONTENCODING_CP1253, info) ) - return TRUE; +bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, + wxFontEncoding *alt_encoding, + const wxString& facename, + bool interactive) +{ + wxNativeEncodingInfo info; + bool r = GetAltForEncoding(encoding, &info, facename, interactive); + *alt_encoding = info.encoding; + return r; +} - break; - case wxFONTENCODING_CP1253: - if ( TestAltEncoding(configEntry, wxFONTENCODING_ISO8859_7, info) ) - return TRUE; - break; +bool wxFontMapper::IsEncodingAvailable(wxFontEncoding encoding, + const wxString& facename) +{ + wxNativeEncodingInfo info; - default: - // TODO add other mappings... - ; + if (wxGetNativeFontEncoding(encoding, &info)) + { + info.facename = facename; + return wxTestFontEncoding(info); } - - return FALSE; + else + return FALSE; }