#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");
if ( !m_config )
{
// try the default
- m_config = wxConfig::Get();
+ m_config = wxConfig::Get(FALSE/*don't create on demand*/);
}
return m_config;
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();
// 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;
wxFont font = retData.GetChosenFont();
*info = retData.EncodingInfo();
+ info -> encoding = retData.GetEncoding();
// remember this in the config
if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) )
}
//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;
}