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)? // what to test (in alphabetic order)?
//#define TEST_ARRAYS //#define TEST_ARRAYS
#define TEST_CHARSET
//#define TEST_CMDLINE //#define TEST_CMDLINE
//#define TEST_DATETIME //#define TEST_DATETIME
//#define TEST_DIR //#define TEST_DIR
@@ -54,7 +55,7 @@
//#define TEST_LONGLONG //#define TEST_LONGLONG
//#define TEST_MIME //#define TEST_MIME
//#define TEST_PATHLIST //#define TEST_PATHLIST
#define TEST_REGCONF //#define TEST_REGCONF
//#define TEST_REGISTRY //#define TEST_REGISTRY
//#define TEST_SOCKETS //#define TEST_SOCKETS
//#define TEST_STREAMS //#define TEST_STREAMS
@@ -66,12 +67,6 @@
//#define TEST_ZIP //#define TEST_ZIP
//#define TEST_ZLIB //#define TEST_ZLIB
#ifdef TEST_DATETIME
#include <math.h>
#endif
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// test class for container objects // test class for container objects
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -121,6 +116,46 @@ static wxString MakePrintable(const wxChar *s)
#endif // MakePrintable() is used #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 // wxCmdLineParser
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -2725,6 +2760,8 @@ static void TestZlibStreamRead()
#ifdef TEST_DATETIME #ifdef TEST_DATETIME
#include <math.h>
#include <wx/date.h> #include <wx/date.h>
#include <wx/datetime.h> #include <wx/datetime.h>
@@ -4453,10 +4490,9 @@ int main(int argc, char **argv)
fprintf(stderr, "Failed to initialize the wxWindows library, aborting."); fprintf(stderr, "Failed to initialize the wxWindows library, aborting.");
} }
#ifdef TEST_USLEEP #ifdef TEST_CHARSET
puts("Sleeping for 3 seconds... z-z-z-z-z..."); TestCharset();
wxUsleep(3000); #endif // TEST_CHARSET
#endif // TEST_USLEEP
#ifdef TEST_CMDLINE #ifdef TEST_CMDLINE
static const wxCmdLineEntryDesc cmdLineDesc[] = static const wxCmdLineEntryDesc cmdLineDesc[] =
@@ -4769,6 +4805,11 @@ int main(int argc, char **argv)
TestDateTimeInteractive(); TestDateTimeInteractive();
#endif // TEST_DATETIME #endif // TEST_DATETIME
#ifdef TEST_USLEEP
puts("Sleeping for 3 seconds... z-z-z-z-z...");
wxUsleep(3000);
#endif // TEST_USLEEP
#ifdef TEST_VCARD #ifdef TEST_VCARD
if ( 0 ) if ( 0 )
TestVCardRead(); TestVCardRead();

View File

@@ -42,7 +42,6 @@
#endif #endif
#if wxUSE_GUI #if wxUSE_GUI
#include "wx/fontutil.h"
#include "wx/msgdlg.h" #include "wx/msgdlg.h"
#include "wx/fontdlg.h" #include "wx/fontdlg.h"
#include "wx/choicdlg.h" #include "wx/choicdlg.h"
@@ -145,15 +144,15 @@ static const wxChar* gs_encodingNames[] =
wxT( "iso8859-14" ), wxT( "iso8859-14" ),
wxT( "iso8859-15" ), wxT( "iso8859-15" ),
wxT( "koi8-r" ), wxT( "koi8-r" ),
wxT( "windows1250" ), wxT( "windows-1250" ),
wxT( "windows1251" ), wxT( "windows-1251" ),
wxT( "windows1252" ), wxT( "windows-1252" ),
wxT( "windows1253" ), wxT( "windows-1253" ),
wxT( "windows1254" ), wxT( "windows-1254" ),
wxT( "windows1255" ), wxT( "windows-1255" ),
wxT( "windows1256" ), wxT( "windows-1256" ),
wxT( "windows1257" ), wxT( "windows-1257" ),
wxT( "windows437" ), wxT( "windows-437" ),
wxT( "utf7" ), wxT( "utf7" ),
wxT( "utf8" ), wxT( "utf8" ),
}; };
@@ -319,6 +318,11 @@ void wxFontMapper::RestorePath(const wxString& pathOld)
/* static */ /* static */
wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding) wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding)
{ {
if ( encoding == wxFONTENCODING_DEFAULT )
{
return _("Default encoding");
}
size_t count = WXSIZEOF(gs_encodingDescs); size_t count = WXSIZEOF(gs_encodingDescs);
wxASSERT_MSG( count == WXSIZEOF(gs_encodings), wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
@@ -341,6 +345,11 @@ wxString wxFontMapper::GetEncodingDescription(wxFontEncoding encoding)
/* static */ /* static */
wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding) wxString wxFontMapper::GetEncodingName(wxFontEncoding encoding)
{ {
if ( encoding == wxFONTENCODING_DEFAULT )
{
return _("default");
}
size_t count = WXSIZEOF(gs_encodingNames); size_t count = WXSIZEOF(gs_encodingNames);
wxASSERT_MSG( count == WXSIZEOF(gs_encodings), wxASSERT_MSG( count == WXSIZEOF(gs_encodings),
@@ -405,11 +414,15 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
RestorePath(pathOld); 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 ) if ( encoding == wxFONTENCODING_SYSTEM )
{ {
// trim any spaces
cs.Trim(TRUE);
cs.Trim(FALSE);
// discard the optional quotes // discard the optional quotes
if ( !!cs ) if ( !!cs )
{ {
@@ -422,13 +435,26 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
cs.MakeUpper(); cs.MakeUpper();
if ( !cs || cs == wxT("US-ASCII") ) if ( !cs || cs == wxT("US-ASCII") )
{
encoding = wxFONTENCODING_DEFAULT; encoding = wxFONTENCODING_DEFAULT;
}
else if ( cs == wxT("UTF-7") ) else if ( cs == wxT("UTF-7") )
{
encoding = wxFONTENCODING_UTF7; encoding = wxFONTENCODING_UTF7;
}
else if ( cs == wxT("UTF-8") ) else if ( cs == wxT("UTF-8") )
{
encoding = wxFONTENCODING_UTF8; 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; encoding = wxFONTENCODING_KOI8;
}
else if ( cs.Left(3) == wxT("ISO") ) else if ( cs.Left(3) == wxT("ISO") )
{ {
// the dash is optional (or, to be exact, it is not, but // the dash is optional (or, to be exact, it is not, but
@@ -449,20 +475,41 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
} }
} }
} }
else if ( cs.Left(8) == wxT("WINDOWS-") ) else // check for Windows charsets
{ {
int value; size_t len;
if ( wxSscanf(cs.c_str() + 8, wxT("%u"), &value) == 1 ) if ( cs.Left(7) == wxT("WINDOWS") )
{ {
if ( value >= 1250 ) 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(p, wxT("%u"), &value) == 1 )
{ {
value -= 1250; if ( value >= 1250 )
if ( value < wxFONTENCODING_CP12_MAX -
wxFONTENCODING_CP1250 )
{ {
// a valid Windows code page value -= 1250;
value += wxFONTENCODING_CP1250; if ( value < wxFONTENCODING_CP12_MAX -
encoding = (wxFontEncoding)value; wxFONTENCODING_CP1250 )
{
// a valid Windows code page
value += wxFONTENCODING_CP1250;
encoding = (wxFontEncoding)value;
}
} }
} }
} }
@@ -696,10 +743,10 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
wxFont font = retData.GetChosenFont(); wxFont font = retData.GetChosenFont();
*info = retData.EncodingInfo(); *info = retData.EncodingInfo();
info->encoding = retData.GetEncoding(); info -> encoding = retData.GetEncoding();
#if wxUSE_CONFIG #if wxUSE_CONFIG
// remember this in the config // remember this in the config
if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) ) if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) )
{ {
GetConfig()->Write(configEntry, info->ToString()); GetConfig()->Write(configEntry, info->ToString());
@@ -747,7 +794,7 @@ bool wxFontMapper::IsEncodingAvailable(wxFontEncoding encoding,
{ {
wxNativeEncodingInfo info; wxNativeEncodingInfo info;
if ( wxGetNativeFontEncoding(encoding, &info) ) if (wxGetNativeFontEncoding(encoding, &info))
{ {
info.facename = facename; info.facename = facename;
return wxTestFontEncoding(info); return wxTestFontEncoding(info);