From 551fe3a6f024a542d26ce8da202d76d8c83f3a6f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 13 Apr 2001 14:28:04 +0000 Subject: [PATCH] reckognize cp125x charsets git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9743 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/console/console.cpp | 63 ++++++++++++++++++----- src/common/fontmap.cpp | 99 +++++++++++++++++++++++++++---------- 2 files changed, 125 insertions(+), 37 deletions(-) diff --git a/samples/console/console.cpp b/samples/console/console.cpp index 242fa887a2..12d8911e08 100644 --- a/samples/console/console.cpp +++ b/samples/console/console.cpp @@ -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 -#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 + +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 + #include #include @@ -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(); diff --git a/src/common/fontmap.cpp b/src/common/fontmap.cpp index abf1e37e36..8514d41c5e 100644 --- a/src/common/fontmap.cpp +++ b/src/common/fontmap.cpp @@ -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,20 +475,41 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset, } } } - 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; + } } } } @@ -696,10 +743,10 @@ 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 + // remember this in the config if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) ) { GetConfig()->Write(configEntry, info->ToString()); @@ -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); -- 2.45.2