- wxCHECK_RET( !prefix.IsEmpty() && prefix[0] == wxCONFIG_PATH_SEPARATOR,
- wxT("an absolute path should be given to wxFontMapper::SetConfigPath()") );
-
- m_configRootPath = prefix;
-}
-
-// ----------------------------------------------------------------------------
-// get config object and path for it
-// ----------------------------------------------------------------------------
-
-wxConfigBase *wxFontMapper::GetConfig()
-{
- if ( !m_config )
- {
- // try the default
- m_config = wxConfig::Get(FALSE /*don't create on demand*/ );
-
- if ( !m_config )
- {
- // we still want to have a config object because otherwise we would
- // keep asking the user the same questions in the interactive mode,
- // so create a dummy config which won't write to any files/registry
- // but will allow us to remember the results of the questions at
- // least during this run
- m_config = new wxMemoryConfig;
- wxConfig::Set(m_config);
- }
- }
-
- return m_config;
-}
-
-const wxString& wxFontMapper::GetConfigPath()
-{
- if ( !m_configRootPath )
- {
- // use the default
- m_configRootPath = GetDefaultConfigPath();
- }
-
- return m_configRootPath;
-}
-#endif
-
-bool wxFontMapper::ChangePath(const wxString& pathNew, wxString *pathOld)
-{
-#if wxUSE_CONFIG
- wxConfigBase *config = GetConfig();
- if ( !config )
- return FALSE;
-
- *pathOld = config->GetPath();
-
- wxString path = GetConfigPath();
- if ( path.IsEmpty() || path.Last() != wxCONFIG_PATH_SEPARATOR )
- {
- path += wxCONFIG_PATH_SEPARATOR;
- }
-
- wxASSERT_MSG( !pathNew || (pathNew[0] != wxCONFIG_PATH_SEPARATOR),
- wxT("should be a relative path") );
-
- path += pathNew;
-
- config->SetPath(path);
-
- return TRUE;
-#else
- return FALSE;
-#endif
-}
-
-void wxFontMapper::RestorePath(const wxString& pathOld)
-{
-#if wxUSE_CONFIG
- GetConfig()->SetPath(pathOld);
-#else
-#endif
-}
-
-// ----------------------------------------------------------------------------
-// charset/encoding correspondence
-// ----------------------------------------------------------------------------
-
-/* static */
-wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding)
-{
- size_t count = WXSIZEOF(gs_encodingDescs);
-
- wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
- wxT("inconsitency detected - forgot to update one of the arrays?") );
-
- for ( size_t i = 0; i < count; i++ )
- {
- if ( gs_encodings[i] == encoding )
- {
- return wxGetTranslation(gs_encodingDescs[i]);
- }
- }
-
- wxString str;
- str.Printf(_("Unknown encoding (%d)"), encoding);
-
- return str;
-}
-
-/* static */
-wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding)
-{
- size_t count = WXSIZEOF(gs_encodingNames);
-
- wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
- wxT("inconsistency detected - forgot to update one of the arrays?") );
-
- for ( size_t i = 0; i < count; i++ )
- {
- if ( gs_encodings[i] == encoding )
- {
- return wxGetTranslation(gs_encodingNames[i]);
- }
- }
-
- 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;
-
-#if wxUSE_CONFIG
- // 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(wxT("corrupted config data: invalid encoding %ld for charset '%s' ignored"),
- 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);
- }
-#endif