X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/11c7d5b6d1cb54d5ffdc11d8ff092b41e225bfb6..312cd9e93d7c0bf201e52297741e8e12a7298fc9:/src/common/fontmap.cpp diff --git a/src/common/fontmap.cpp b/src/common/fontmap.cpp index b0a2aa7a24..05b1edd2ab 100644 --- a/src/common/fontmap.cpp +++ b/src/common/fontmap.cpp @@ -40,16 +40,17 @@ #include "wx/msgdlg.h" #include "wx/fontdlg.h" #include "wx/choicdlg.h" +#include "wx/encconv.h" // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- // the config paths we use -static const char* FONTMAPPER_ROOT_PATH = _T("FontMapper"); -static const char* FONTMAPPER_CHARSET_PATH = _T("Charsets"); -static const char* FONTMAPPER_CHARSET_ALIAS_PATH = _T("Aliases"); -static const char* FONTMAPPER_FONT_FROM_ENCODING_PATH = _T("Encodings"); +static const wxChar* FONTMAPPER_ROOT_PATH = wxT("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"); // encodings supported by GetEncodingDescription static wxFontEncoding gs_encodings[] = @@ -112,30 +113,30 @@ static const wxChar* gs_encodingDescs[] = // and the internal names static const wxChar* gs_encodingNames[] = { - "iso8859-1", - "iso8859-2", - "iso8859-3", - "iso8859-4", - "iso8859-5", - "iso8859-6", - "iso8859-7", - "iso8859-8", - "iso8859-9", - "iso8859-10", - "iso8859-11", - "iso8859-12", - "iso8859-13", - "iso8859-14", - "iso8859-15", - "koi8-r", - "windows1250", - "windows1251", - "windows1252", - "windows1253", - "windows1254", - "windows1255", - "windows1256", - "windows1257", + wxT( "iso8859-1" ), + wxT( "iso8859-2" ), + wxT( "iso8859-3" ), + wxT( "iso8859-4" ), + wxT( "iso8859-5" ), + wxT( "iso8859-6" ), + wxT( "iso8859-7" ), + wxT( "iso8859-8" ), + wxT( "iso8859-9" ), + wxT( "iso8859-10" ), + wxT( "iso8859-11" ), + wxT( "iso8859-12" ), + wxT( "iso8859-13" ), + 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" ), }; // ---------------------------------------------------------------------------- @@ -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 @@ -206,7 +207,7 @@ wxFontMapper::~wxFontMapper() void wxFontMapper::SetConfigPath(const wxString& prefix) { wxCHECK_RET( !prefix.IsEmpty() && prefix[0] == wxCONFIG_PATH_SEPARATOR, - _T("an absolute path should be given to " + wxT("an absolute path should be given to " "wxFontMapper::SetConfigPath()") ); m_configRootPath = prefix; @@ -254,7 +255,7 @@ bool wxFontMapper::ChangePath(const wxString& pathNew, wxString *pathOld) } wxASSERT_MSG( !pathNew || (pathNew[0] != wxCONFIG_PATH_SEPARATOR), - _T("should be a relative path") ); + wxT("should be a relative path") ); path += pathNew; @@ -278,7 +279,7 @@ wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding) size_t count = WXSIZEOF(gs_encodingDescs); wxASSERT_MSG( count == WXSIZEOF(gs_encodings), - _T("inconsitency detected - forgot to update one of " + wxT("inconsitency detected - forgot to update one of " "the arrays?") ); for ( size_t i = 0; i < count; i++ ) @@ -301,7 +302,7 @@ wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding) size_t count = WXSIZEOF(gs_encodingNames); wxASSERT_MSG( count == WXSIZEOF(gs_encodings), - _T("inconsitency detected - forgot to update one of " + wxT("inconsitency detected - forgot to update one of " "the arrays?") ); for ( size_t i = 0; i < count; i++ ) @@ -342,7 +343,7 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, } else { - wxLogDebug(_T("corrupted config data - invalid encoding %ld " + wxLogDebug(wxT("corrupted config data - invalid encoding %ld " "for charset '%s'"), value, charset.c_str()); } } @@ -368,20 +369,20 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, { cs.MakeUpper(); - if ( !cs || cs == _T("US-ASCII") ) + if ( !cs || cs == wxT("US-ASCII") ) encoding = wxFONTENCODING_DEFAULT; - else if ( cs == _T("KOI8-R") || cs == _T("KOI8-U") ) + else if ( cs == wxT("KOI8-R") || cs == wxT("KOI8-U") ) encoding = wxFONTENCODING_KOI8; - else if ( cs.Left(3) == _T("ISO") ) + else if ( cs.Left(3) == wxT("ISO") ) { // the dash is optional (or, to be exact, it is not, but // several brokenmails "forget" it) const wxChar *p = cs.c_str() + 3; - if ( *p == _T('-') ) + if ( *p == wxT('-') ) p++; unsigned int value; - if ( wxSscanf(p, _T("8859-%u"), &value) == 1 ) + if ( wxSscanf(p, wxT("8859-%u"), &value) == 1 ) { if ( value < wxFONTENCODING_ISO8859_MAX - wxFONTENCODING_ISO8859_1 ) @@ -392,10 +393,10 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, } } } - else if ( cs.Left(8) == _T("WINDOWS-") ) + else if ( cs.Left(8) == wxT("WINDOWS-") ) { int value; - if ( wxSscanf(cs.c_str() + 8, "%u", &value) == 1 ) + if ( wxSscanf(cs.c_str() + 8, wxT("%u"), &value) == 1 ) { if ( value >= 1250 ) { @@ -433,7 +434,7 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, size_t count = WXSIZEOF(gs_encodingDescs); wxASSERT_MSG( count == WXSIZEOF(gs_encodings), - _T("inconsitency detected - forgot to update one of " + wxT("inconsitency detected - forgot to update one of " "the arrays?") ); wxString *encodingNamesTranslated = new wxString[count]; @@ -499,7 +500,23 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, wxNativeEncodingInfo *info, bool interactive) { - wxCHECK_MSG( info, FALSE, _T("bad pointer in GetAltForEncoding") ); + wxCHECK_MSG( info, FALSE, wxT("bad pointer in GetAltForEncoding") ); + + if ( encoding == wxFONTENCODING_DEFAULT ) + { + encoding = wxFont::GetDefaultEncoding(); + } + + // if we failed to load the system default encoding, something is really + // wrong and we'd better stop now - otherwise we will go into endless + // recursion trying to create the font in the msg box with the error + // message + if ( encoding == wxFONTENCODING_SYSTEM ) + { + wxFatalError(_("can't load any font, aborting")); + + // wxFatalError doesn't return + } wxString configEntry = GetEncodingName(encoding); @@ -526,7 +543,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding, } else { - wxLogDebug(_T("corrupted config data: string '%s' is not " + wxLogDebug(wxT("corrupted config data: string '%s' is not " "a valid font encoding info"), fontinfo.c_str()); } } @@ -582,71 +599,13 @@ 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; - - break; - - 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; - - break; - - case wxFONTENCODING_CP1253: - if ( TestAltEncoding(configEntry, wxFONTENCODING_ISO8859_7, info) ) - return TRUE; - - break; - - default: - // TODO add other mappings... - ; - } + // 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; return FALSE; }