#include <locale.h>
#include <ctype.h>
#include <stdlib.h>
+#ifdef HAVE_LANGINFO_H
+ #include <langinfo.h>
+#endif
// wxWindows
#ifndef WX_PRECOMP
#include "wx/file.h"
#include "wx/tokenzr.h"
#include "wx/module.h"
+#include "wx/fontmap.h"
+#include "wx/encconv.h"
#ifdef __WIN32__
#include "wx/msw/private.h"
{
// Asserting a sizeof directly causes some compilers to
// issue a "using constant in a conditional expression" warning
- size_t intsize = sizeof(int);
-
- wxASSERT_MSG( intsize == 4,
+ wxASSERT_MSG( wxAssertIsEqual(sizeof(int), 4),
"size_t32 is incorrectly defined!" );
}
} intsizechecker;
return NULL;
}
-
-#if wxUSE_GUI
-#include "wx/fontmap.h"
-#include "wx/encconv.h"
-#endif
-
void wxMsgCatalog::ConvertEncoding()
{
-#if wxUSE_GUI
- wxFontEncoding enc;
-
// first, find encoding header:
const char *hdr = StringAtOfs(m_pOrigTable, 0);
if ( hdr == NULL || hdr[0] != 0 ) {
while (header[n] != wxT('\n'))
charset << header[n++];
- enc = wxTheFontMapper->CharsetToEncoding(charset, FALSE);
+#if wxUSE_FONTMAP
+ wxFontEncoding enc = wxTheFontMapper->CharsetToEncoding(charset, FALSE);
if ( enc == wxFONTENCODING_SYSTEM )
return; // unknown encoding
- wxFontEncoding targetEnc = wxFONTENCODING_SYSTEM;
-#ifdef __UNIX__
- wxString langFull;
- if (wxGetEnv(wxT("LC_ALL"), &langFull) ||
- wxGetEnv(wxT("LC_CTYPE"), &langFull) ||
- wxGetEnv(wxT("LANG"), &langFull))
- {
- wxString lcharset = langFull.AfterFirst(wxT('.')).BeforeFirst(wxT('@'));
- if (!lcharset.IsEmpty())
- targetEnc = wxTheFontMapper->CharsetToEncoding(lcharset, FALSE);
- }
-#endif
-
+ wxFontEncoding targetEnc = wxLocale::GetSystemEncoding();
if (targetEnc == wxFONTENCODING_SYSTEM)
{
wxFontEncodingArray a = wxEncodingConverter::GetPlatformEquivalents(enc);
for (size_t i = 0; i < m_numStrings; i++)
converter.Convert((char*)StringAtOfs(m_pTransTable, i));
-#endif // wxUSE_GUI
+#endif // wxUSE_FONTMAP
}
#ifdef __WIN32__
// FIXME: what is the error return value for GetACP()?
UINT codepage = ::GetACP();
- encname.Printf(_T("cp%u"), codepage);
+ encname.Printf(_T("windows-%u"), codepage);
#elif defined(__UNIX_LIKE__)
#if defined(HAVE_LANGINFO_H) && defined(CODESET)
// GNU libc provides current character set this way (this conforms
// to Unix98)
+ char *oldLocale = strdup(setlocale(LC_CTYPE, NULL));
+ setlocale(LC_CTYPE, "");
char *alang = nl_langinfo(CODESET);
+ setlocale(LC_CTYPE, oldLocale);
+ free(oldLocale);
if (alang)
{
encname = wxConvLibc.cMB2WX(alang);
{
return (wxFontEncoding)(wxFONTENCODING_CP1250 + codepage - 1250);
}
-#elif defined(__UNIX_LIKE__)
+#elif defined(__UNIX_LIKE__) && wxUSE_FONTMAP
wxString encname = GetSystemEncodingName();
if ( !encname.empty() )
{
- return wxFontMapper::CharsetToEncoding(encname,
- FALSE /* not interactive */);
+ return wxTheFontMapper->
+ CharsetToEncoding(encname, FALSE /* not interactive */);
}
#endif // Win32/Unix