reckognize cp125x charsets

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9743 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2001-04-13 14:28:04 +00:00
parent 62f1dc8207
commit 551fe3a6f0
2 changed files with 125 additions and 37 deletions

View File

@@ -36,6 +36,7 @@
// what to test (in alphabetic order)?
//#define TEST_ARRAYS
#define TEST_CHARSET
//#define TEST_CMDLINE
//#define TEST_DATETIME
//#define TEST_DIR
@@ -54,7 +55,7 @@
//#define TEST_LONGLONG
//#define TEST_MIME
//#define TEST_PATHLIST
#define TEST_REGCONF
//#define TEST_REGCONF
//#define TEST_REGISTRY
//#define TEST_SOCKETS
//#define TEST_STREAMS
@@ -66,12 +67,6 @@
//#define TEST_ZIP
//#define TEST_ZLIB
#ifdef TEST_DATETIME
#include <math.h>
#endif
// ----------------------------------------------------------------------------
// test class for container objects
// ----------------------------------------------------------------------------
@@ -121,6 +116,46 @@ static wxString MakePrintable(const wxChar *s)
#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
// ----------------------------------------------------------------------------
@@ -2725,6 +2760,8 @@ static void TestZlibStreamRead()
#ifdef TEST_DATETIME
#include <math.h>
#include <wx/date.h>
#include <wx/datetime.h>
@@ -4453,10 +4490,9 @@ int main(int argc, char **argv)
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[] =
@@ -4769,6 +4805,11 @@ int main(int argc, char **argv)
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();

View File

@@ -42,7 +42,6 @@
#endif
#if wxUSE_GUI
#include "wx/fontutil.h"
#include "wx/msgdlg.h"
#include "wx/fontdlg.h"
#include "wx/choicdlg.h"
@@ -145,15 +144,15 @@ static const wxChar* gs_encodingNames[] =
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" ),
};
@@ -319,6 +318,11 @@ void wxFontMapper::RestorePath(const wxString& pathOld)
/* 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),
@@ -341,6 +345,11 @@ wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding)
/* static */
wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding)
{
if ( encoding == wxFONTENCODING_DEFAULT )
{
return _("default");
}
size_t count = WXSIZEOF(gs_encodingNames);
wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
@@ -405,11 +414,15 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
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 )
{
@@ -422,13 +435,26 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
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
@@ -449,10 +475,30 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
}
}
}
else if ( cs.Left(8) == wxT("WINDOWS-") )
else // check for Windows charsets
{
size_t len;
if ( cs.Left(7) == wxT("WINDOWS") )
{
len = 7;
}
else if ( cs.Left(2) == wxT("CP") )
{
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(cs.c_str() + 8, wxT("%u"), &value) == 1 )
if ( wxSscanf(p, wxT("%u"), &value) == 1 )
{
if ( value >= 1250 )
{
@@ -467,6 +513,7 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
}
}
}
}
//else: unknown
}
@@ -696,7 +743,7 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
wxFont font = retData.GetChosenFont();
*info = retData.EncodingInfo();
info->encoding = retData.GetEncoding();
info -> encoding = retData.GetEncoding();
#if wxUSE_CONFIG
// remember this in the config
@@ -747,7 +794,7 @@ bool wxFontMapper::IsEncodingAvailable(wxFontEncoding encoding,
{
wxNativeEncodingInfo info;
if ( wxGetNativeFontEncoding(encoding, &info) )
if (wxGetNativeFontEncoding(encoding, &info))
{
info.facename = facename;
return wxTestFontEncoding(info);