X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8aa701edbb1e27eacb22f169cfa3585c6e093063..8bcf4c86f423035eca565571b4cbafd2e60e4c3d:/src/mac/utils.cpp

diff --git a/src/mac/utils.cpp b/src/mac/utils.cpp
index cd800e3ea4..47837c9aca 100644
--- a/src/mac/utils.cpp
+++ b/src/mac/utils.cpp
@@ -511,7 +511,7 @@ bool wxGetDiskSpace(const wxString& path, wxLongLong *pTotal, wxLongLong *pFree)
         return FALSE;
 
     wxString p = path ;
-    if (p[0] == ':' ) {
+    if (p[0u] == ':' ) {
       p = wxGetCwd() + p ;
     }
 
@@ -648,17 +648,26 @@ void wxMacSetupConverters()
                                 kEncoding,
                                 kTextEncodingUnicodeDefault);
 
-
     status = TECCreateConverter(&s_TECUnicodeToNativeC,
                                 kTextEncodingUnicodeDefault,
                                 kEncoding);
+
+#if (wxUSE_UNICODE == 1) && (SIZEOF_WCHAR_T == 4)
+	TextEncoding kUnicode32 = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
+    
+    status = TECCreateConverter(&s_TECUnicode16To32,
+                                kTextEncodingUnicodeDefault,
+                                kUnicode32);
+    status = TECCreateConverter(&s_TECUnicode32To16,
+                                kUnicode32,
+                                kTextEncodingUnicodeDefault);
+#endif
 }
 
 void wxMacCleanupConverters()
 {
     OSStatus status = noErr ;
     status = TECDisposeConverter(s_TECNativeCToUnicode);
-
     status = TECDisposeConverter(s_TECUnicodeToNativeC);
 }
 
@@ -670,11 +679,11 @@ wxWCharBuffer wxMacStringToWString( const wxString &from )
     OSStatus status = noErr ;
     ByteCount byteOutLen ;
     ByteCount byteInLen = from.Length() ;
-    ByteCount byteBufferLen = byteInLen *2 ;
+    ByteCount byteBufferLen = byteInLen * SIZEOF_WCHAR_T ;
     wxWCharBuffer result( from.Length() ) ;
     status = TECConvertText(s_TECNativeCToUnicode, (ConstTextPtr)from.c_str() , byteInLen, &byteInLen,
         (TextPtr)result.data(), byteBufferLen, &byteOutLen);
-    result.data()[byteOutLen/2] = 0 ;
+    result.data()[byteOutLen/SIZEOF_WCHAR_T] = 0 ;
 #endif
     return result ;
 }
@@ -688,7 +697,7 @@ wxString wxMacMakeStringFromCString( const char * from , int len )
 #if wxUSE_UNICODE
     ByteCount byteOutLen ;
     ByteCount byteInLen = len ;
-    ByteCount byteBufferLen = len *2 ;
+    ByteCount byteBufferLen = len * SIZEOF_WCHAR_T;
 
     status = TECConvertText(s_TECNativeCToUnicode, (ConstTextPtr)from , byteInLen, &byteInLen,
         (TextPtr)buf, byteBufferLen, &byteOutLen);
@@ -710,7 +719,7 @@ wxCharBuffer wxMacStringToCString( const wxString &from )
 #if wxUSE_UNICODE
     OSStatus status = noErr ;
     ByteCount byteOutLen ;
-    ByteCount byteInLen = from.Length() * 2 ;
+    ByteCount byteInLen = from.Length() * SIZEOF_WCHAR_T ;
     ByteCount byteBufferLen = from.Length() ;
     wxCharBuffer result( from.Length() ) ;
     status = TECConvertText(s_TECUnicodeToNativeC , (ConstTextPtr)from.wc_str() , byteInLen, &byteInLen,
@@ -738,6 +747,522 @@ wxString wxMacMakeStringFromPascal( ConstStringPtr from )
     return wxString( (char*) &from[1] , wxConvLocal , from[0] ) ;
 }
 
+
+wxUint32 wxMacGetSystemEncFromFontEnc(wxFontEncoding encoding)
+{    	
+	TextEncodingBase enc = 0 ;
+
+	switch( encoding)
+	{
+		case wxFONTENCODING_ISO8859_1 :
+    		enc = kTextEncodingISOLatin1 ;
+    		break ;
+		case wxFONTENCODING_ISO8859_2 :
+    		enc = kTextEncodingISOLatin2;
+    		break ;
+		case wxFONTENCODING_ISO8859_3 :
+    		enc = kTextEncodingISOLatin3 ;
+    		break ;
+		case wxFONTENCODING_ISO8859_4 :
+    		enc = kTextEncodingISOLatin4;
+    		break ;
+		case wxFONTENCODING_ISO8859_5 :
+    		enc = kTextEncodingISOLatinCyrillic;
+    		break ;
+		case wxFONTENCODING_ISO8859_6 :
+    		enc = kTextEncodingISOLatinArabic;
+    		break ;
+		case wxFONTENCODING_ISO8859_7 :
+    		enc = kTextEncodingISOLatinGreek;
+    		break ;
+		case wxFONTENCODING_ISO8859_8 :
+    		enc = kTextEncodingISOLatinHebrew;
+    		break ;
+		case wxFONTENCODING_ISO8859_9 :
+    		enc = kTextEncodingISOLatin5;
+    		break ;
+		case wxFONTENCODING_ISO8859_10 :
+    		enc = kTextEncodingISOLatin6;
+    		break ;
+		case wxFONTENCODING_ISO8859_13 :
+    		enc = kTextEncodingISOLatin7;
+    		break ;
+		case wxFONTENCODING_ISO8859_14 :
+    		enc = kTextEncodingISOLatin8;
+    		break ;
+		case wxFONTENCODING_ISO8859_15 :
+    		enc = kTextEncodingISOLatin9;
+    		break ;
+
+		case wxFONTENCODING_KOI8 :
+    		enc = kTextEncodingKOI8_R;
+    		break ;
+		case wxFONTENCODING_ALTERNATIVE : // MS-DOS CP866
+    		enc = kTextEncodingDOSRussian;
+    		break ;
+/*
+		case wxFONTENCODING_BULGARIAN : 
+    		enc = ;
+    		break ;
+*/	    		
+		case wxFONTENCODING_CP437 : 
+    		enc =kTextEncodingDOSLatinUS ;
+    		break ;
+		case wxFONTENCODING_CP850 :
+    		enc = kTextEncodingDOSLatin1;
+    		break ;
+		case wxFONTENCODING_CP852 : 
+    		enc = kTextEncodingDOSLatin2;
+    		break ;
+		case wxFONTENCODING_CP855 :
+    		enc = kTextEncodingDOSCyrillic;
+    		break ;
+		case wxFONTENCODING_CP866 :
+    		enc =kTextEncodingDOSRussian ;
+    		break ;
+		case wxFONTENCODING_CP874 :
+    		enc = kTextEncodingDOSThai;
+    		break ;
+		case wxFONTENCODING_CP932 : 
+    		enc = kTextEncodingDOSJapanese;
+    		break ;
+		case wxFONTENCODING_CP936 : 
+    		enc =kTextEncodingDOSChineseSimplif ;
+    		break ;
+		case wxFONTENCODING_CP949 : 
+    		enc = kTextEncodingDOSKorean;
+    		break ;
+		case wxFONTENCODING_CP950 : 
+    		enc = kTextEncodingDOSChineseTrad;
+    		break ;
+    		
+		case wxFONTENCODING_CP1250 : 
+    		enc = kTextEncodingWindowsLatin2;
+    		break ;
+		case wxFONTENCODING_CP1251 : 
+    		enc =kTextEncodingWindowsCyrillic ;
+    		break ;
+		case wxFONTENCODING_CP1252 : 
+    		enc =kTextEncodingWindowsLatin1 ;
+    		break ;
+		case wxFONTENCODING_CP1253 : 
+    		enc = kTextEncodingWindowsGreek;
+    		break ;
+		case wxFONTENCODING_CP1254 : 
+    		enc = kTextEncodingWindowsLatin5;
+    		break ;
+		case wxFONTENCODING_CP1255 : 
+    		enc =kTextEncodingWindowsHebrew ;
+    		break ;
+		case wxFONTENCODING_CP1256 : 
+    		enc =kTextEncodingWindowsArabic ;
+    		break ;
+		case wxFONTENCODING_CP1257 : 
+    		enc = kTextEncodingWindowsBalticRim;
+    		break ;
+    		
+		case wxFONTENCODING_UTF7 : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicodeUTF7Format) ;
+    		break ;
+		case wxFONTENCODING_UTF8 : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicodeUTF8Format) ;
+    		break ;
+		case wxFONTENCODING_EUC_JP : 
+    		enc = kTextEncodingEUC_JP;
+    		break ;
+		case wxFONTENCODING_UTF16BE : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
+    		break ;
+		case wxFONTENCODING_UTF16LE : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
+    		break ;
+		case wxFONTENCODING_UTF32BE : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
+    		break ;
+		case wxFONTENCODING_UTF32LE : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
+    		break ;
+
+        case wxFONTENCODING_MACROMAN :
+            enc = kTextEncodingMacRoman ;
+            break ;
+        case wxFONTENCODING_MACJAPANESE :
+            enc = kTextEncodingMacJapanese ;
+            break ;
+        case wxFONTENCODING_MACCHINESETRAD :
+            enc = kTextEncodingMacChineseTrad ;
+            break ;
+        case wxFONTENCODING_MACKOREAN :
+            enc = kTextEncodingMacKorean ;
+            break ;
+        case wxFONTENCODING_MACARABIC :
+            enc = kTextEncodingMacArabic ;
+            break ;
+        case wxFONTENCODING_MACHEBREW :
+            enc = kTextEncodingMacHebrew ;
+            break ;
+        case wxFONTENCODING_MACGREEK :
+            enc = kTextEncodingMacGreek ;
+            break ;
+        case wxFONTENCODING_MACCYRILLIC :
+            enc = kTextEncodingMacCyrillic ;
+            break ;
+        case wxFONTENCODING_MACDEVANAGARI :
+            enc = kTextEncodingMacDevanagari ;
+            break ;
+        case wxFONTENCODING_MACGURMUKHI :
+            enc = kTextEncodingMacGurmukhi ;
+            break ;
+        case wxFONTENCODING_MACGUJARATI :
+            enc = kTextEncodingMacGujarati ;
+            break ;
+        case wxFONTENCODING_MACORIYA :
+            enc = kTextEncodingMacOriya ;
+            break ;
+        case wxFONTENCODING_MACBENGALI :
+            enc = kTextEncodingMacBengali ;
+            break ;
+        case wxFONTENCODING_MACTAMIL :
+            enc = kTextEncodingMacTamil ;
+            break ;
+        case wxFONTENCODING_MACTELUGU :
+            enc = kTextEncodingMacTelugu ;
+            break ;
+        case wxFONTENCODING_MACKANNADA :
+            enc = kTextEncodingMacKannada ;
+            break ;
+        case wxFONTENCODING_MACMALAJALAM :
+            enc = kTextEncodingMacMalayalam ;
+            break ;
+        case wxFONTENCODING_MACSINHALESE :
+            enc = kTextEncodingMacSinhalese ;
+            break ;
+        case wxFONTENCODING_MACBURMESE :
+            enc = kTextEncodingMacBurmese ;
+            break ;
+        case wxFONTENCODING_MACKHMER :
+            enc = kTextEncodingMacKhmer ;
+            break ;
+        case wxFONTENCODING_MACTHAI :
+            enc = kTextEncodingMacThai ;
+            break ;
+        case wxFONTENCODING_MACLAOTIAN :
+            enc = kTextEncodingMacLaotian ;
+            break ;
+        case wxFONTENCODING_MACGEORGIAN :
+            enc = kTextEncodingMacGeorgian ;
+            break ;
+        case wxFONTENCODING_MACARMENIAN :
+            enc = kTextEncodingMacArmenian ;
+            break ;
+        case wxFONTENCODING_MACCHINESESIMP :
+            enc = kTextEncodingMacChineseSimp ;
+            break ;
+        case wxFONTENCODING_MACTIBETAN :
+            enc = kTextEncodingMacTibetan ;
+            break ;
+        case wxFONTENCODING_MACMONGOLIAN :
+            enc = kTextEncodingMacMongolian ;
+            break ;
+        case wxFONTENCODING_MACETHIOPIC :
+            enc = kTextEncodingMacEthiopic ;
+            break ;
+        case wxFONTENCODING_MACCENTRALEUR :
+            enc = kTextEncodingMacCentralEurRoman ;
+            break ;
+        case wxFONTENCODING_MACVIATNAMESE :
+            enc = kTextEncodingMacVietnamese ;
+            break ;
+        case wxFONTENCODING_MACARABICEXT :
+            enc = kTextEncodingMacExtArabic ;
+            break ;
+        case wxFONTENCODING_MACSYMBOL :
+            enc = kTextEncodingMacSymbol ;
+            break ;
+        case wxFONTENCODING_MACDINGBATS :
+            enc = kTextEncodingMacDingbats ;
+            break ;
+        case wxFONTENCODING_MACTURKISH :
+            enc = kTextEncodingMacTurkish ;
+            break ;
+        case wxFONTENCODING_MACCROATIAN :
+            enc = kTextEncodingMacCroatian ;
+            break ;
+        case wxFONTENCODING_MACICELANDIC :
+            enc = kTextEncodingMacIcelandic ;
+            break ;
+        case wxFONTENCODING_MACROMANIAN :
+            enc = kTextEncodingMacRomanian ;
+            break ;
+        case wxFONTENCODING_MACCELTIC :
+            enc = kTextEncodingMacCeltic ;
+            break ;
+        case wxFONTENCODING_MACGAELIC :
+            enc = kTextEncodingMacGaelic ;
+            break ;
+        case wxFONTENCODING_MACKEYBOARD :
+            enc = kTextEncodingMacKeyboardGlyphs ;
+            break ;       
+	} ;
+	return enc ;
+}
+
+wxFontEncoding wxMacGetFontEncFromSystemEnc(wxUint32 encoding)
+{    	
+	wxFontEncoding enc = wxFONTENCODING_DEFAULT ;
+
+	switch( encoding)
+	{
+		case kTextEncodingISOLatin1  :
+    		enc = wxFONTENCODING_ISO8859_1 ;
+    		break ;
+		case kTextEncodingISOLatin2 :
+    		enc = wxFONTENCODING_ISO8859_2;
+    		break ;
+		case kTextEncodingISOLatin3 :
+    		enc = wxFONTENCODING_ISO8859_3 ;
+    		break ;
+		case kTextEncodingISOLatin4 :
+    		enc = wxFONTENCODING_ISO8859_4;
+    		break ;
+		case kTextEncodingISOLatinCyrillic :
+    		enc = wxFONTENCODING_ISO8859_5;
+    		break ;
+		case kTextEncodingISOLatinArabic :
+    		enc = wxFONTENCODING_ISO8859_6;
+    		break ;
+		case kTextEncodingISOLatinGreek :
+    		enc = wxFONTENCODING_ISO8859_7;
+    		break ;
+		case kTextEncodingISOLatinHebrew :
+    		enc = wxFONTENCODING_ISO8859_8;
+    		break ;
+		case kTextEncodingISOLatin5 :
+    		enc = wxFONTENCODING_ISO8859_9;
+    		break ;
+		case kTextEncodingISOLatin6 :
+    		enc = wxFONTENCODING_ISO8859_10;
+    		break ;
+		case kTextEncodingISOLatin7 :
+    		enc = wxFONTENCODING_ISO8859_13;
+    		break ;
+		case kTextEncodingISOLatin8 :
+    		enc = wxFONTENCODING_ISO8859_14;
+    		break ;
+		case kTextEncodingISOLatin9 :
+    		enc =wxFONTENCODING_ISO8859_15 ;
+    		break ;
+
+		case kTextEncodingKOI8_R :
+    		enc = wxFONTENCODING_KOI8;
+    		break ;
+/*
+		case  : 
+    		enc = wxFONTENCODING_BULGARIAN;
+    		break ;
+*/	    		
+		casekTextEncodingDOSLatinUS : 
+    		enc = wxFONTENCODING_CP437;
+    		break ;
+		case kTextEncodingDOSLatin1 :
+    		enc = wxFONTENCODING_CP850;
+    		break ;
+		case kTextEncodingDOSLatin2 : 
+    		enc =wxFONTENCODING_CP852 ;
+    		break ;
+		case kTextEncodingDOSCyrillic :
+    		enc = wxFONTENCODING_CP855;
+    		break ;
+		case kTextEncodingDOSRussian :
+    		enc = wxFONTENCODING_CP866;
+    		break ;
+		case kTextEncodingDOSThai :
+    		enc =wxFONTENCODING_CP874 ;
+    		break ;
+		case kTextEncodingDOSJapanese : 
+    		enc = wxFONTENCODING_CP932;
+    		break ;
+		case kTextEncodingDOSChineseSimplif : 
+    		enc = wxFONTENCODING_CP936;
+    		break ;
+		case kTextEncodingDOSKorean : 
+    		enc = wxFONTENCODING_CP949;
+    		break ;
+		case kTextEncodingDOSChineseTrad : 
+    		enc = wxFONTENCODING_CP950;
+    		break ;
+    		
+		case kTextEncodingWindowsLatin2 : 
+    		enc = wxFONTENCODING_CP1250;
+    		break ;
+		case kTextEncodingWindowsCyrillic : 
+    		enc = wxFONTENCODING_CP1251;
+    		break ;
+		case kTextEncodingWindowsLatin1 : 
+    		enc = wxFONTENCODING_CP1252;
+    		break ;
+		case kTextEncodingWindowsGreek : 
+    		enc = wxFONTENCODING_CP1253;
+    		break ;
+		case kTextEncodingWindowsLatin5 : 
+    		enc = wxFONTENCODING_CP1254;
+    		break ;
+		case kTextEncodingWindowsHebrew : 
+    		enc = wxFONTENCODING_CP1255;
+    		break ;
+		case kTextEncodingWindowsArabic : 
+    		enc = wxFONTENCODING_CP1256;
+    		break ;
+		case kTextEncodingWindowsBalticRim : 
+    		enc =wxFONTENCODING_CP1257 ;
+    		break ;
+		case kTextEncodingEUC_JP : 
+    		enc = wxFONTENCODING_EUC_JP;
+    		break ;
+    		/*
+		case wxFONTENCODING_UTF7 : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicodeUTF7Format) ;
+    		break ;
+		case wxFONTENCODING_UTF8 : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicodeUTF8Format) ;
+    		break ;
+		case wxFONTENCODING_UTF16BE : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
+    		break ;
+		case wxFONTENCODING_UTF16LE : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
+    		break ;
+		case wxFONTENCODING_UTF32BE : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
+    		break ;
+		case wxFONTENCODING_UTF32LE : 
+    		enc = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
+    		break ;
+        */
+        case kTextEncodingMacRoman :
+            enc = wxFONTENCODING_MACROMAN ;
+            break ;
+        case kTextEncodingMacJapanese :
+            enc = wxFONTENCODING_MACJAPANESE ;
+            break ;
+        case kTextEncodingMacChineseTrad :
+            enc = wxFONTENCODING_MACCHINESETRAD ;
+            break ;
+        case kTextEncodingMacKorean :
+            enc = wxFONTENCODING_MACKOREAN ;
+            break ;
+        case kTextEncodingMacArabic :
+            enc =wxFONTENCODING_MACARABIC ;
+            break ;
+        case kTextEncodingMacHebrew :
+            enc = wxFONTENCODING_MACHEBREW ;
+            break ;
+        case kTextEncodingMacGreek :
+            enc = wxFONTENCODING_MACGREEK ;
+            break ;
+        case kTextEncodingMacCyrillic :
+            enc = wxFONTENCODING_MACCYRILLIC ;
+            break ;
+        case kTextEncodingMacDevanagari :
+            enc = wxFONTENCODING_MACDEVANAGARI ;
+            break ;
+        case kTextEncodingMacGurmukhi :
+            enc = wxFONTENCODING_MACGURMUKHI ;
+            break ;
+        case kTextEncodingMacGujarati :
+            enc = wxFONTENCODING_MACGUJARATI ;
+            break ;
+        case kTextEncodingMacOriya :
+            enc =wxFONTENCODING_MACORIYA ;
+            break ;
+        case kTextEncodingMacBengali :
+            enc =wxFONTENCODING_MACBENGALI ;
+            break ;
+        case kTextEncodingMacTamil :
+            enc = wxFONTENCODING_MACTAMIL ;
+            break ;
+        case kTextEncodingMacTelugu :
+            enc = wxFONTENCODING_MACTELUGU ;
+            break ;
+        case kTextEncodingMacKannada :
+            enc = wxFONTENCODING_MACKANNADA ;
+            break ;
+        case kTextEncodingMacMalayalam :
+            enc = wxFONTENCODING_MACMALAJALAM ;
+            break ;
+        case kTextEncodingMacSinhalese :
+            enc = wxFONTENCODING_MACSINHALESE ;
+            break ;
+        case kTextEncodingMacBurmese :
+            enc = wxFONTENCODING_MACBURMESE ;
+            break ;
+        case kTextEncodingMacKhmer :
+            enc = wxFONTENCODING_MACKHMER ;
+            break ;
+        case kTextEncodingMacThai :
+            enc = wxFONTENCODING_MACTHAI ;
+            break ;
+        case kTextEncodingMacLaotian :
+            enc = wxFONTENCODING_MACLAOTIAN ;
+            break ;
+        case kTextEncodingMacGeorgian :
+            enc = wxFONTENCODING_MACGEORGIAN ;
+            break ;
+        case kTextEncodingMacArmenian :
+            enc = wxFONTENCODING_MACARMENIAN ;
+            break ;
+        case kTextEncodingMacChineseSimp :
+            enc = wxFONTENCODING_MACCHINESESIMP ;
+            break ;
+        case kTextEncodingMacTibetan :
+            enc = wxFONTENCODING_MACTIBETAN ;
+            break ;
+        case kTextEncodingMacMongolian :
+            enc = wxFONTENCODING_MACMONGOLIAN ;
+            break ;
+        case kTextEncodingMacEthiopic :
+            enc = wxFONTENCODING_MACETHIOPIC ;
+            break ;
+        case kTextEncodingMacCentralEurRoman:
+            enc = wxFONTENCODING_MACCENTRALEUR  ;
+            break ;
+        case kTextEncodingMacVietnamese:
+            enc = wxFONTENCODING_MACVIATNAMESE  ;
+            break ;
+        case kTextEncodingMacExtArabic :
+            enc = wxFONTENCODING_MACARABICEXT ;
+            break ;
+        case kTextEncodingMacSymbol :
+            enc = wxFONTENCODING_MACSYMBOL ;
+            break ;
+        case kTextEncodingMacDingbats :
+            enc = wxFONTENCODING_MACDINGBATS ;
+            break ;
+        case kTextEncodingMacTurkish :
+            enc = wxFONTENCODING_MACTURKISH ;
+            break ;
+        case kTextEncodingMacCroatian :
+            enc = wxFONTENCODING_MACCROATIAN ;
+            break ;
+        case kTextEncodingMacIcelandic :
+            enc = wxFONTENCODING_MACICELANDIC ;
+            break ;
+        case kTextEncodingMacRomanian :
+            enc = wxFONTENCODING_MACROMANIAN ;
+            break ;
+        case kTextEncodingMacCeltic :
+            enc = wxFONTENCODING_MACCELTIC ;
+            break ;
+        case kTextEncodingMacGaelic :
+            enc = wxFONTENCODING_MACGAELIC ;
+            break ;
+        case kTextEncodingMacKeyboardGlyphs :
+            enc = wxFONTENCODING_MACKEYBOARD ;
+            break ;       
+	} ;
+	return enc ;
+}
+
 #endif // wxUSE_BASE
 
 #if wxUSE_GUI
@@ -748,15 +1273,70 @@ wxString wxMacMakeStringFromPascal( ConstStringPtr from )
 //
 
 #if TARGET_CARBON
+
+#if (wxUSE_UNICODE == 1) && (SIZEOF_WCHAR_T == 4)
+
+TECObjectRef s_TECUnicode32To16 = NULL ;
+TECObjectRef s_TECUnicode16To32 = NULL ;
+
+class wxMacUnicodeConverters
+{
+public :
+	wxMacUnicodeConverters() ;
+	~wxMacUnicodeConverters() ;
+} ;
+
+wxMacUnicodeConverters guard ;
+
+wxMacUnicodeConverters::wxMacUnicodeConverters()
+{
+    OSStatus status = noErr ;
+	TextEncoding kUnicode32 = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode32BitFormat) ;
+	TextEncoding kUnicode16 = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ;
+	
+	status = TECCreateConverter(&s_TECUnicode16To32,
+								kUnicode16,
+								kUnicode32);
+	status = TECCreateConverter(&s_TECUnicode32To16,
+								kUnicode32,
+								kUnicode16);
+}
+
+wxMacUnicodeConverters::~wxMacUnicodeConverters()
+{
+    OSStatus status = noErr ;
+	status = TECDisposeConverter(s_TECUnicode32To16);
+	status = TECDisposeConverter(s_TECUnicode16To32);
+}
+#endif
 // converts this string into a carbon foundation string with optional pc 2 mac encoding
 void wxMacCFStringHolder::Assign( const wxString &st )
 {
-    wxString str = st ;
+	wxString str = st ;
     wxMacConvertNewlines13To10( &str ) ;
+	size_t len = str.Len() ;
 #if wxUSE_UNICODE
+	UniChar *unibuf ;
+#if SIZEOF_WCHAR_T == 2
+	unibuf = (UniChar*)str.wc_str() ;
+#else
+    OSStatus status = noErr ;
+    ByteCount byteOutLen ;
+    ByteCount byteInLen = len * SIZEOF_WCHAR_T ;
+    ByteCount byteBufferLen = len * sizeof( UniChar ) ;
+	unibuf = (UniChar*) malloc(byteBufferLen) ;
+    status = TECConvertText( s_TECUnicode32To16 , (ConstTextPtr)str.wc_str() , byteInLen, &byteInLen,
+        (TextPtr)unibuf, byteBufferLen, &byteOutLen);
+#endif
   	m_cfs = CFStringCreateWithCharacters( kCFAllocatorDefault,
-  		(const unsigned short*)str.wc_str(), str.Len() );
+	 unibuf , len );
+#if SIZEOF_WCHAR_T == 2
+	// as long as UniChar is the same as wchar_t nothing to do here
 #else
+	free( unibuf ) ;
+#endif
+
+#else // not wxUSE_UNICODE
     m_cfs = CFStringCreateWithCString( kCFAllocatorSystemDefault , str.c_str() ,
         CFStringGetSystemEncoding() ) ;
 #endif
@@ -803,19 +1383,29 @@ void wxMacConvertNewlines10To13( char * data )
 
 void wxMacConvertNewlines13To10( wxString * data ) 
 {        
-    if ( data->Length() == 0 )
+    size_t len = data->Length() ;
+
+    if ( len == 0 || wxStrchr(data->c_str(),0x0d)==NULL)
         return ;
         
-	wxMacConvertNewlines13To10( data->GetWriteBuf( data->Length() ) ) ;
-    data->UngetWriteBuf() ;
+    wxString temp(*data) ;
+    wxStringBuffer buf(*data,len ) ;
+    memcpy( buf , temp.c_str() , (len+1)*sizeof(wxChar) ) ; 
+
+	wxMacConvertNewlines13To10( buf ) ;
 }
 
 void wxMacConvertNewlines10To13( wxString * data )
 {        
-    if ( data->Length() == 0 )
+    size_t len = data->Length() ;
+
+    if ( data->Length() == 0 || wxStrchr(data->c_str(),0x0a)==NULL)
         return ;
-	wxMacConvertNewlines10To13( data->GetWriteBuf( data->Length() ) ) ;
-    data->UngetWriteBuf() ;
+
+    wxString temp(*data) ;
+    wxStringBuffer buf(*data,len ) ;
+    memcpy( buf , temp.c_str() , (len+1)*sizeof(wxChar) ) ; 
+	wxMacConvertNewlines10To13( buf ) ;
 }