]> git.saurik.com Git - wxWidgets.git/commitdiff
fixes to handling of the 7 bit ASCII encoding
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 25 Jan 2002 14:29:33 +0000 (14:29 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 25 Jan 2002 14:29:33 +0000 (14:29 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13799 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/font.h
src/common/fontcmn.cpp
src/common/fontmap.cpp
src/common/strconv.cpp

index a95b73d002623b0e049cf991e19809589979af7d..26e0b6ff920bdf3bea053d0aa8f3c23f0a62ca6e 100644 (file)
@@ -143,10 +143,8 @@ public:
 
     // the default encoding is used for creating all fonts with default
     // encoding parameter
 
     // the default encoding is used for creating all fonts with default
     // encoding parameter
-    static wxFontEncoding GetDefaultEncoding()
-        { return ms_encodingDefault; }
-    static void SetDefaultEncoding(wxFontEncoding encoding)
-        { ms_encodingDefault = encoding; }
+    static wxFontEncoding GetDefaultEncoding() { return ms_encodingDefault; }
+    static void SetDefaultEncoding(wxFontEncoding encoding);
 
 protected:
     // get the internal data
 
 protected:
     // get the internal data
index 320d37935ecdc95f6a9caaa618943452aefe0df9..50b3b19db8f602d46f719a08934e6f04f634fe7a 100644 (file)
 
 wxFontEncoding wxFontBase::ms_encodingDefault = wxFONTENCODING_SYSTEM;
 
 
 wxFontEncoding wxFontBase::ms_encodingDefault = wxFONTENCODING_SYSTEM;
 
+/* static */
+void wxFontBase::SetDefaultEncoding(wxFontEncoding encoding)
+{
+    // GetDefaultEncoding() should return something != wxFONTENCODING_DEFAULT
+    // and, besides, using this value here doesn't make any sense
+    wxCHECK_RET( encoding != wxFONTENCODING_DEFAULT,
+                 _T("can't set default encoding to wxFONTENCODING_DEFAULT") );
+
+    ms_encodingDefault = encoding;
+}
+
 wxFontBase::~wxFontBase()
 {
     // this destructor is required for Darwin
 wxFontBase::~wxFontBase()
 {
     // this destructor is required for Darwin
index 170d32aedd8d38b8d26358437e0be0976052d5ae..6ab97b4c2f5416c7bfe8fd95f3301df03549b3cd 100644 (file)
@@ -489,10 +489,7 @@ wxFontEncoding wxFontMapper::CharsetToEncoding(const wxString& charset,
 
         cs.MakeUpper();
 
 
         cs.MakeUpper();
 
-        // nl_langinfo() under Solaris returns 646 by default which stands for
-        // ISO-646, i.e. 7 bit ASCII and we should recognize it to avoid
-        // warnings about unrecognized encoding on each program startup
-        if ( cs.empty() || cs == _T("US-ASCII") || cs == _T("646") )
+        if ( cs.empty() || cs == _T("US-ASCII") )
         {
             encoding = wxFONTENCODING_DEFAULT;
         }
         {
             encoding = wxFONTENCODING_DEFAULT;
         }
index 17a15ca5a80ee7b7f7641c463df761cac5a1dc6d..0631cb5b68a3c52df24eb4ebea0e2d963f610ae9 100644 (file)
@@ -858,8 +858,9 @@ public:
     {
         if (name)
             enc = wxTheFontMapper->CharsetToEncoding(name, FALSE);
     {
         if (name)
             enc = wxTheFontMapper->CharsetToEncoding(name, FALSE);
-        m2w.Init(enc, wxFONTENCODING_UNICODE);
-        w2m.Init(wxFONTENCODING_UNICODE, enc);
+
+        m_ok = m2w.Init(enc, wxFONTENCODING_UNICODE) &&
+               w2m.Init(wxFONTENCODING_UNICODE, enc);
     }
 
     size_t MB2WC(wchar_t *buf, const char *psz, size_t n)
     }
 
     size_t MB2WC(wchar_t *buf, const char *psz, size_t n)
@@ -884,12 +885,14 @@ public:
         return inbuf;
     }
 
         return inbuf;
     }
 
-    bool usable() const
-        { return (enc!=wxFONTENCODING_SYSTEM) && (enc!=wxFONTENCODING_DEFAULT); }
+    bool usable() const { return m_ok; }
 
 public:
     wxFontEncoding enc;
     wxEncodingConverter m2w, w2m;
 
 public:
     wxFontEncoding enc;
     wxEncodingConverter m2w, w2m;
+
+    // were we initialized successfully?
+    bool m_ok;
 };
 
 #endif // wxUSE_FONTMAP
 };
 
 #endif // wxUSE_FONTMAP
@@ -901,46 +904,61 @@ public:
 
 static wxCharacterSet *wxGetCharacterSet(const wxChar *name)
 {
 
 static wxCharacterSet *wxGetCharacterSet(const wxChar *name)
 {
-    wxCharacterSet *cset = NULL;
-    if (name)
+    // check for the special case of ASCII charset
+#if wxUSE_FONTMAP
+    if ( wxTheFontMapper->CharsetToEncoding(name) == wxFONTENCODING_DEFAULT )
+#else // wxUSE_FONTMAP
+    if ( !name )
+#endif // wxUSE_FONTMAP/!wxUSE_FONTMAP
     {
     {
-        if (wxStricmp(name, wxT("UTF8")) == 0 || wxStricmp(name, wxT("UTF-8")) == 0)
-        {
-            cset = new ID_CharSet(name, &wxConvUTF8);
-        }
-        else
-        {
-#ifdef HAVE_ICONV
-            cset = new IC_CharSet(name); // may not take NULL
-#endif
-        }
+        // don't convert at all
+        return NULL;
     }
 
     }
 
-    if (cset && cset->usable())
-        return cset;
+    // the test above must have taken care of this case
+    wxCHECK_MSG( name, NULL, _T("NULL name must be wxFONTENCODING_DEFAULT") );
 
 
-    if (cset)
+    wxCharacterSet *cset;
+
+    if ( wxStricmp(name, wxT("UTF8")) == 0 || wxStricmp(name, wxT("UTF-8")) == 0)
+    {
+        cset = new ID_CharSet(name, &wxConvUTF8);
+    }
+    else
     {
     {
-        delete cset;
+#ifdef HAVE_ICONV
+        cset = new IC_CharSet(name);
+#else // !HAVE_ICONV
         cset = NULL;
         cset = NULL;
+#endif // HAVE_ICONV/!HAVE_ICONV
     }
 
     }
 
+    if ( cset->usable() )
+        return cset;
+
+    delete cset;
+    cset = NULL;
+
 #if defined(__WIN32__) && !defined(__WXMICROWIN__)
 #if defined(__WIN32__) && !defined(__WXMICROWIN__)
-    cset = new CP_CharSet(name); // may take NULL
-    if (cset->usable())
+    cset = new CP_CharSet(name);
+    if ( cset->usable() )
         return cset;
 
     delete cset;
         return cset;
 
     delete cset;
+    cset = NULL;
 #endif // __WIN32__
 
 #if wxUSE_FONTMAP
     cset = new EC_CharSet(name);
 #endif // __WIN32__
 
 #if wxUSE_FONTMAP
     cset = new EC_CharSet(name);
-    if (cset->usable())
+    if ( cset->usable() )
         return cset;
         return cset;
-#endif // wxUSE_FONTMAP
 
     delete cset;
 
     delete cset;
-    wxLogError(_("Unknown encoding '%s'!"), name);
+    cset = NULL;
+#endif // wxUSE_FONTMAP
+
+    wxLogError(_("Cannot convert from encoding '%s'!"), name);
+
     return NULL;
 }
 
     return NULL;
 }