// what to test (in alphabetic order)?
//#define TEST_ARRAYS
+#define TEST_CHARSET
//#define TEST_CMDLINE
//#define TEST_DATETIME
//#define TEST_DIR
//#define TEST_LONGLONG
//#define TEST_MIME
//#define TEST_PATHLIST
-#define TEST_REGCONF
+//#define TEST_REGCONF
//#define TEST_REGISTRY
//#define TEST_SOCKETS
//#define TEST_STREAMS
//#define TEST_ZIP
//#define TEST_ZLIB
-
-#ifdef TEST_DATETIME
-#include <math.h>
-#endif
-
-
// ----------------------------------------------------------------------------
// test class for container objects
// ----------------------------------------------------------------------------
#endif // MakePrintable() is used
+// ----------------------------------------------------------------------------
+// wxFontMapper::CharsetToEncoding
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_CHARSET
+
+#include <wx/fontmap.h>
+
+static void TestCharset()
+{
+ static const wxChar *charsets[] =
+ {
+ // some vali charsets
+ _T("us-ascii "),
+ _T("iso8859-1 "),
+ _T("iso-8859-12 "),
+ _T("koi8-r "),
+ _T("utf-7 "),
+ _T("cp1250 "),
+ _T("windows-1252"),
+
+ // and now some bogus ones
+ _T(" "),
+ _T("cp1249 "),
+ _T("iso--8859-1 "),
+ _T("iso-8859-19 "),
+ };
+
+ for ( size_t n = 0; n < WXSIZEOF(charsets); n++ )
+ {
+ wxFontEncoding enc = wxTheFontMapper->CharsetToEncoding(charsets[n]);
+ wxPrintf(_T("Charset: %s\tEncoding: %s (%s)\n"),
+ charsets[n],
+ wxTheFontMapper->GetEncodingName(enc).c_str(),
+ wxTheFontMapper->GetEncodingDescription(enc).c_str());
+ }
+}
+
+#endif // TEST_CHARSET
+
// ----------------------------------------------------------------------------
// wxCmdLineParser
// ----------------------------------------------------------------------------
#ifdef TEST_DATETIME
+#include <math.h>
+
#include <wx/date.h>
#include <wx/datetime.h>
fprintf(stderr, "Failed to initialize the wxWindows library, aborting.");
}
-#ifdef TEST_USLEEP
- puts("Sleeping for 3 seconds... z-z-z-z-z...");
- wxUsleep(3000);
-#endif // TEST_USLEEP
+#ifdef TEST_CHARSET
+ TestCharset();
+#endif // TEST_CHARSET
#ifdef TEST_CMDLINE
static const wxCmdLineEntryDesc cmdLineDesc[] =
TestDateTimeInteractive();
#endif // TEST_DATETIME
+#ifdef TEST_USLEEP
+ puts("Sleeping for 3 seconds... z-z-z-z-z...");
+ wxUsleep(3000);
+#endif // TEST_USLEEP
+
#ifdef TEST_VCARD
if ( 0 )
TestVCardRead();
#endif
#if wxUSE_GUI
- #include "wx/fontutil.h"
#include "wx/msgdlg.h"
#include "wx/fontdlg.h"
#include "wx/choicdlg.h"
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" ),
- wxT( "windows437" ),
+ wxT( "windows-1250" ),
+ wxT( "windows-1251" ),
+ wxT( "windows-1252" ),
+ wxT( "windows-1253" ),
+ wxT( "windows-1254" ),
+ wxT( "windows-1255" ),
+ wxT( "windows-1256" ),
+ wxT( "windows-1257" ),
+ wxT( "windows-437" ),
wxT( "utf7" ),
wxT( "utf8" ),
};
/* static */
wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding)
{
+ if ( encoding == wxFONTENCODING_DEFAULT )
+ {
+ return _("Default encoding");
+ }
+
size_t count = WXSIZEOF(gs_encodingDescs);
wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
/* static */
wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding)
{
+ if ( encoding == wxFONTENCODING_DEFAULT )
+ {
+ return _("default");
+ }
+
size_t count = WXSIZEOF(gs_encodingNames);
wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
RestorePath(pathOld);
}
-#endif // wxUSE_CONFIG
+#endif
- // if didn't find it there, try to reckognise it ourselves
+ // if didn't find it there, try to recognize it ourselves
if ( encoding == wxFONTENCODING_SYSTEM )
{
+ // trim any spaces
+ cs.Trim(TRUE);
+ cs.Trim(FALSE);
+
// discard the optional quotes
if ( !!cs )
{
cs.MakeUpper();
if ( !cs || cs == wxT("US-ASCII") )
+ {
encoding = wxFONTENCODING_DEFAULT;
+ }
else if ( cs == wxT("UTF-7") )
+ {
encoding = wxFONTENCODING_UTF7;
+ }
else if ( cs == wxT("UTF-8") )
+ {
encoding = wxFONTENCODING_UTF8;
- else if ( cs == wxT("KOI8-R") || cs == wxT("KOI8-U") )
+ }
+ else if ( cs == wxT("KOI8-R") ||
+ cs == wxT("KOI8-U") ||
+ cs == wxT("KOI8-RU") )
+ {
+ // although koi8-ru is not strictly speaking the same as koi8-r,
+ // they are similar enough to make mapping it to koi8 better than
+ // not reckognizing it at all
encoding = wxFONTENCODING_KOI8;
+ }
else if ( cs.Left(3) == wxT("ISO") )
{
// the dash is optional (or, to be exact, it is not, but
}
}
}
- else if ( cs.Left(8) == wxT("WINDOWS-") )
+ else // check for Windows charsets
{
- int value;
- if ( wxSscanf(cs.c_str() + 8, wxT("%u"), &value) == 1 )
+ size_t len;
+ if ( cs.Left(7) == wxT("WINDOWS") )
+ {
+ len = 7;
+ }
+ else if ( cs.Left(2) == wxT("CP") )
{
- if ( value >= 1250 )
+ len = 2;
+ }
+ else // not a Windows encoding
+ {
+ len = 0;
+ }
+
+ if ( len )
+ {
+ const wxChar *p = cs.c_str() + len;
+ if ( *p == wxT('-') )
+ p++;
+
+ int value;
+ if ( wxSscanf(p, wxT("%u"), &value) == 1 )
{
- value -= 1250;
- if ( value < wxFONTENCODING_CP12_MAX -
- wxFONTENCODING_CP1250 )
+ if ( value >= 1250 )
{
- // a valid Windows code page
- value += wxFONTENCODING_CP1250;
- encoding = (wxFontEncoding)value;
+ value -= 1250;
+ if ( value < wxFONTENCODING_CP12_MAX -
+ wxFONTENCODING_CP1250 )
+ {
+ // a valid Windows code page
+ value += wxFONTENCODING_CP1250;
+ encoding = (wxFontEncoding)value;
+ }
}
}
}
wxFont font = retData.GetChosenFont();
*info = retData.EncodingInfo();
- info->encoding = retData.GetEncoding();
+ info -> encoding = retData.GetEncoding();
#if wxUSE_CONFIG
- // remember this in the config
+ // remember this in the config
if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) )
{
GetConfig()->Write(configEntry, info->ToString());
{
wxNativeEncodingInfo info;
- if ( wxGetNativeFontEncoding(encoding, &info) )
+ if (wxGetNativeFontEncoding(encoding, &info))
{
info.facename = facename;
return wxTestFontEncoding(info);