-
- wxString str;
- str.Printf(_("unknown-%d"), encoding);
-
- return str;
-}
-
-wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
- bool interactive)
-{
- wxFontEncoding encoding = wxFONTENCODING_SYSTEM;
-
- // we're going to modify it, make a copy
- wxString cs = charset;
-
- // first try the user-defined settings
- wxString pathOld;
- if ( ChangePath(FONTMAPPER_CHARSET_PATH, &pathOld) )
- {
- wxConfigBase *config = GetConfig();
-
- // do we have an encoding for this charset?
- long value = config->Read(charset, -1l);
- if ( value != -1 )
- {
- if ( value >= 0 && value <= wxFONTENCODING_MAX )
- {
- encoding = (wxFontEncoding)value;
- }
- else
- {
- wxLogDebug(_T("corrupted config data - invalid encoding %ld "
- "for charset '%s'"), value, charset.c_str());
- }
- }
-
- if ( encoding == wxFONTENCODING_SYSTEM )
- {
- // may be we have an alias?
- config->SetPath(FONTMAPPER_CHARSET_ALIAS_PATH);
-
- wxString alias = config->Read(charset);
- if ( !!alias )
- {
- // yes, we do - use it instead
- cs = alias;
- }
- }
-
- RestorePath(pathOld);
- }
-
- // if didn't find it there, try to reckognise it ourselves
- if ( encoding == wxFONTENCODING_SYSTEM )
- {
- cs.MakeUpper();
-
- if ( !cs || cs == _T("US-ASCII") )
- encoding = wxFONTENCODING_DEFAULT;
- else if ( cs == _T("KOI8-R") || cs == _T("KOI8-U") )
- encoding = wxFONTENCODING_KOI8;
- else if ( cs.Left(3) == _T("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('-') )
- p++;
-
- unsigned int value;
- if ( wxSscanf(p, _T("8859-%u"), &value) == 1 )
- {
- if ( value < wxFONTENCODING_ISO8859_MAX -
- wxFONTENCODING_ISO8859_1 )
- {
- // it's a valid ISO8859 encoding
- value += wxFONTENCODING_ISO8859_1 - 1;
- encoding = (wxFontEncoding)value;
- }
- }
- }
- else if ( cs.Left(8) == _T("WINDOWS-") )
- {
- int value;
- if ( wxSscanf(cs.c_str() + 8, wxT("%u"), &value) == 1 )
- {
- if ( value >= 1250 )
- {
- value -= 1250;
- if ( value < wxFONTENCODING_CP12_MAX -
- wxFONTENCODING_CP1250 - 1 )
- {
- // a valid Windows code page
- value += wxFONTENCODING_CP1250;
- encoding = (wxFontEncoding)value;
- }
- }
- }
- }
- //else: unknown
- }
-
- // if still no luck, ask the user - unless disabled
- if ( (encoding == wxFONTENCODING_SYSTEM) && interactive )