X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/939fba6c17da245488a77a3f58e983180fc5de91..de2ce07c7a13f9b0800c8f9e68adadebdc9aa89c:/src/mac/utils.cpp diff --git a/src/mac/utils.cpp b/src/mac/utils.cpp index 16f91e18e3..47837c9aca 100644 --- a/src/mac/utils.cpp +++ b/src/mac/utils.cpp @@ -46,9 +46,7 @@ #include "TextCommon.h" #include "TextEncodingConverter.h" -#if defined(__WXMAC__) - #include "wx/mac/private.h" // includes mac headers -#endif +#include "wx/mac/private.h" // includes mac headers #if defined(__MWERKS__) && wxUSE_UNICODE #include @@ -513,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 ; } @@ -650,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); } @@ -672,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 ; } @@ -690,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); @@ -712,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, @@ -740,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 @@ -750,13 +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 &str ) +void wxMacCFStringHolder::Assign( const wxString &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 @@ -774,12 +1354,83 @@ wxString wxMacCFStringHolder::AsString() CFStringGetCString( m_cfs , buf , len+1 , CFStringGetSystemEncoding() ) ; #endif buf[len] = 0 ; + wxMacConvertNewlines10To13( buf ) ; result.UngetWriteBuf() ; return result ; } #endif //TARGET_CARBON +void wxMacConvertNewlines13To10( char * data ) +{ + char * buf = data ; + while( (buf=strchr(buf,0x0d)) != NULL ) + { + *buf = 0x0a ; + buf++ ; + } +} + +void wxMacConvertNewlines10To13( char * data ) +{ + char * buf = data ; + while( (buf=strchr(buf,0x0a)) != NULL ) + { + *buf = 0x0d ; + buf++ ; + } +} + +void wxMacConvertNewlines13To10( wxString * data ) +{ + size_t len = data->Length() ; + + if ( len == 0 || wxStrchr(data->c_str(),0x0d)==NULL) + return ; + + wxString temp(*data) ; + wxStringBuffer buf(*data,len ) ; + memcpy( buf , temp.c_str() , (len+1)*sizeof(wxChar) ) ; + + wxMacConvertNewlines13To10( buf ) ; +} + +void wxMacConvertNewlines10To13( wxString * data ) +{ + size_t len = data->Length() ; + + if ( data->Length() == 0 || wxStrchr(data->c_str(),0x0a)==NULL) + return ; + + wxString temp(*data) ; + wxStringBuffer buf(*data,len ) ; + memcpy( buf , temp.c_str() , (len+1)*sizeof(wxChar) ) ; + wxMacConvertNewlines10To13( buf ) ; +} + + +#if wxUSE_UNICODE +void wxMacConvertNewlines13To10( wxChar * data ) +{ + wxChar * buf = data ; + while( (buf=wxStrchr(buf,0x0d)) != NULL ) + { + *buf = 0x0a ; + buf++ ; + } +} + +void wxMacConvertNewlines10To13( wxChar * data ) +{ + wxChar * buf = data ; + while( (buf=wxStrchr(buf,0x0a)) != NULL ) + { + *buf = 0x0d ; + buf++ ; + } +} +#endif + // ---------------------------------------------------------------------------- // debugging support // ----------------------------------------------------------------------------