#include "wx/utils.h"
#include "wx/app.h"
#include "wx/apptrait.h"
-#include "wx/mac/uma.h"
+
+#if wxUSE_GUI
+ #include "wx/mac/uma.h"
+#endif
#include <ctype.h>
#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 <wtime.h>
#endif
+// ---------------------------------------------------------------------------
+// code used in both base and GUI compilation
+// ---------------------------------------------------------------------------
+
+// our OS version is the same in non GUI and GUI cases
+static int DoGetOSVersion(int *majorVsn, int *minorVsn)
+{
+ long theSystem ;
+
+ // are there x-platform conventions ?
+
+ Gestalt(gestaltSystemVersion, &theSystem) ;
+ if (minorVsn != NULL) {
+ *minorVsn = (theSystem & 0xFF ) ;
+ }
+ if (majorVsn != NULL) {
+ *majorVsn = (theSystem >> 8 ) ;
+ }
+#ifdef __DARWIN__
+ return wxMAC_DARWIN;
+#else
+ return wxMAC;
+#endif
+}
+
+#if wxUSE_BASE
#ifndef __DARWIN__
// defined in unix/utilsunx.cpp for Mac OS X
SysBeep(30);
}
-#if defined(__WXMAC__) && !defined(__DARWIN__)
-int wxAppTraits::GetOSVersion(int *majorVsn, int *minorVsn)
-#else
-int wxGUIAppTraits::GetOSVersion(int *majorVsn, int *minorVsn)
-#endif
+wxToolkitInfo& wxConsoleAppTraits::GetToolkitInfo()
{
- long theSystem ;
+ static wxToolkitInfo info;
+ info.os = DoGetOSVersion(&info.versionMajor, &info.versionMinor);
+ info.name = _T("wxBase");
+ return info;
+}
- // are there x-platform conventions ?
+#endif // wxUSE_BASE
- Gestalt(gestaltSystemVersion, &theSystem) ;
- if (minorVsn != NULL) {
- *minorVsn = (theSystem & 0xFF ) ;
- }
- if (majorVsn != NULL) {
- *majorVsn = (theSystem >> 8 ) ;
- }
-#ifdef __DARWIN__
- return wxMAC_DARWIN;
-#else
- return wxMAC;
+#if wxUSE_GUI
+
+wxToolkitInfo& wxGUIAppTraits::GetToolkitInfo()
+{
+ static wxToolkitInfo info;
+ info.os = DoGetOSVersion(&info.versionMajor, &info.versionMinor);
+ info.shortName = _T("mac");
+ info.name = _T("wxMac");
+#ifdef __WXUNIVERSAL__
+ info.shortName << _T("univ");
+ info.name << _T("/wxUniversal");
#endif
+ return info;
}
-
// Reading and writing resources (eg WIN.INI, .Xdefaults)
#if wxUSE_RESOURCES
bool wxWriteResource(const wxString& section, const wxString& entry, const wxString& value, const wxString& file)
return (gs_wxBusyCursorCount > 0);
}
+#endif // wxUSE_GUI
+
+#if wxUSE_BASE
+
wxString wxMacFindFolder( short vol,
OSType folderType,
Boolean createFolder)
return strDir ;
}
-#ifndef __DARWIN__
-wxChar *wxGetUserHome (const wxString& user)
-{
- // TODO
- return NULL;
-}
-
-bool wxGetDiskSpace(const wxString& path, wxLongLong *pTotal, wxLongLong *pFree)
-{
- if ( path.empty() )
- return FALSE;
-
- wxString p = path ;
- if (p[0] == ':' ) {
- p = wxGetCwd() + p ;
- }
-
- int pos = p.Find(':') ;
- if ( pos != wxNOT_FOUND ) {
- p = p.Mid(1,pos) ;
- }
-
- p = p + wxT(":") ;
+#endif // wxUSE_BASE
- Str255 volumeName ;
- XVolumeParam pb ;
-
- wxMacStringToPascal( p , volumeName ) ;
- OSErr err = XGetVolumeInfoNoName( volumeName , 0 , &pb ) ;
- if ( err == noErr ) {
- if ( pTotal ) {
- (*pTotal) = wxLongLong( pb.ioVTotalBytes ) ;
- }
- if ( pFree ) {
- (*pFree) = wxLongLong( pb.ioVFreeBytes ) ;
- }
- }
-
- return err == noErr ;
-}
-#endif
+#if wxUSE_GUI
// Check whether this window wants to process messages, e.g. Stop button
// in long calculations.
return wxGenericFindWindowAtPoint(pt);
}
+#endif // wxUSE_GUI
+
+#if wxUSE_BASE
+
wxString wxGetOsDescription()
{
#ifdef WXWIN_OS_DESCRIPTION
// use configure generated description if available
- return wxString("MacOS (") + WXWIN_OS_DESCRIPTION + wxString(")");
+ return wxString(wxT("MacOS (")) + wxT(WXWIN_OS_DESCRIPTION) + wxString(wxT(")"));
#else
return wxT("MacOS") ; //TODO:define further
#endif
}
+#ifndef __DARWIN__
+wxChar *wxGetUserHome (const wxString& user)
+{
+ // TODO
+ return NULL;
+}
+
+bool wxGetDiskSpace(const wxString& path, wxLongLong *pTotal, wxLongLong *pFree)
+{
+ if ( path.empty() )
+ return FALSE;
+
+ wxString p = path ;
+ if (p[0u] == ':' ) {
+ p = wxGetCwd() + p ;
+ }
+
+ int pos = p.Find(':') ;
+ if ( pos != wxNOT_FOUND ) {
+ p = p.Mid(1,pos) ;
+ }
+
+ p = p + wxT(":") ;
+
+ Str255 volumeName ;
+ XVolumeParam pb ;
+
+ wxMacStringToPascal( p , volumeName ) ;
+ OSErr err = XGetVolumeInfoNoName( volumeName , 0 , &pb ) ;
+ if ( err == noErr ) {
+ if ( pTotal ) {
+ (*pTotal) = wxLongLong( pb.ioVTotalBytes ) ;
+ }
+ if ( pFree ) {
+ (*pFree) = wxLongLong( pb.ioVFreeBytes ) ;
+ }
+ }
+
+ return err == noErr ;
+}
+#endif // !__DARWIN__
+
//---------------------------------------------------------------------------
// wxMac Specific utility functions
//---------------------------------------------------------------------------
+#if 0
+
char StringMac[] = "\x0d\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
"\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xae\xaf"
TECObjectRef s_TECNativeCToUnicode = NULL ;
TECObjectRef s_TECUnicodeToNativeC = NULL ;
-TECObjectRef s_TECPlatformToNativeC = NULL ;
-TECObjectRef s_TECNativeCToPlatform = NULL ;
+
void wxMacSetupConverters()
{
// if we assume errors are happening here we need low level debugging
// since the high level assert will use the encoders that are not yet
// setup...
- const int kEncoding = wxApp::s_macDefaultEncodingIsPC
- ? (int)kTextEncodingWindowsLatin1
- : (int)kTextEncodingMacRoman;
-
+#if TARGET_CARBON
+ const TextEncodingBase kEncoding = CFStringGetSystemEncoding();
+#else
+ const TextEncodingBase kEncoding = kTextEncodingMacRoman;
+#endif
OSStatus status = noErr ;
status = TECCreateConverter(&s_TECNativeCToUnicode,
kEncoding,
kTextEncodingUnicodeDefault);
-
status = TECCreateConverter(&s_TECUnicodeToNativeC,
kTextEncodingUnicodeDefault,
kEncoding);
- if ( wxApp::s_macDefaultEncodingIsPC )
- {
- status = TECCreateConverter(&s_TECPlatformToNativeC,
- kTextEncodingMacRoman,
- kTextEncodingWindowsLatin1);
-
-
- status = TECCreateConverter(&s_TECNativeCToPlatform,
- kTextEncodingWindowsLatin1,
- kTextEncodingMacRoman);
- }
+#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);
-
- status = TECDisposeConverter(s_TECPlatformToNativeC);
-
- status = TECDisposeConverter(s_TECNativeCToPlatform);
}
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 ;
}
+
wxString wxMacMakeStringFromCString( const char * from , int len )
{
OSStatus status = noErr ;
#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);
#else
- if ( !wxApp::s_macDefaultEncodingIsPC )
- memcpy( buf , from , len ) ;
- else
- {
- ByteCount byteOutLen ;
- ByteCount byteInLen = len ;
- ByteCount byteBufferLen = byteInLen ;
-
- status = TECConvertText(s_TECPlatformToNativeC, (ConstTextPtr)from , byteInLen, &byteInLen,
- (TextPtr)buf, byteBufferLen, &byteOutLen);
- }
+ memcpy( buf , from , len ) ;
#endif
buf[len] = 0 ;
result.UngetWriteBuf() ;
#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,
(TextPtr)result.data(), byteBufferLen, &byteOutLen);
return result ;
#else
- if ( !wxApp::s_macDefaultEncodingIsPC )
- return wxCharBuffer( from.c_str() ) ;
- else
- {
- wxCharBuffer result( from.Length() ) ;
- OSStatus status = noErr ;
- ByteCount byteOutLen ;
- ByteCount byteInLen = from.Length() ;
- ByteCount byteBufferLen = byteInLen ;
-
- status = TECConvertText(s_TECNativeCToPlatform, (ConstTextPtr)from.c_str() , byteInLen, &byteInLen,
- (TextPtr)result.data(), byteBufferLen, &byteOutLen);
- return result ;
- }
+ return wxCharBuffer( from.c_str() ) ;
#endif
}
+#endif
void wxMacStringToPascal( const wxString&from , StringPtr to )
{
- wxCharBuffer buf = wxMacStringToCString( from ) ;
+ wxCharBuffer buf = from.mb_str( wxConvLocal ) ;
int len = strlen(buf) ;
if ( len > 255 )
wxString wxMacMakeStringFromPascal( ConstStringPtr from )
{
- return wxMacMakeStringFromCString( (char*) &from[1] , from[0] ) ;
+ 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
+
+
//
// CFStringRefs (Carbon only)
//
#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() ,
- wxApp::s_macDefaultEncodingIsPC ?
- kCFStringEncodingWindowsLatin1 : CFStringGetSystemEncoding() ) ;
+ CFStringGetSystemEncoding() ) ;
#endif
m_release = true ;
}
#if wxUSE_UNICODE
CFStringGetCharacters( m_cfs , CFRangeMake( 0 , len ) , (UniChar*) buf ) ;
#else
- CFStringGetCString( m_cfs , buf , len+1 , wxApp::s_macDefaultEncodingIsPC ?
- kCFStringEncodingWindowsLatin1 : CFStringGetSystemEncoding() ) ;
+ CFStringGetCString( m_cfs , buf , len+1 , CFStringGetSystemEncoding() ) ;
#endif
buf[len] = 0 ;
+ wxMacConvertNewlines10To13( buf ) ;
result.UngetWriteBuf() ;
return result ;
}
-#if 0
+#endif //TARGET_CARBON
-wxString wxMacMakeMacStringFromPC( const wxChar * p )
-{
- wxString result ;
- int len = wxStrlen ( p ) ;
- if ( len > 0 )
+void wxMacConvertNewlines13To10( char * data )
+{
+ char * buf = data ;
+ while( (buf=strchr(buf,0x0d)) != NULL )
{
- wxChar* ptr = result.GetWriteBuf(len) ;
- wxMacConvertFromPC( p , ptr , len ) ;
- ptr[len] = 0 ;
- result.UngetWriteBuf( len ) ;
+ *buf = 0x0a ;
+ buf++ ;
}
- return result ;
}
-wxString wxMacMakePCStringFromMac( const wxChar * p )
-{
- wxString result ;
- int len = wxStrlen ( p ) ;
- if ( len > 0 )
+void wxMacConvertNewlines10To13( char * data )
+{
+ char * buf = data ;
+ while( (buf=strchr(buf,0x0a)) != NULL )
{
- wxChar* ptr = result.GetWriteBuf(len) ;
- wxMacConvertToPC( p , ptr , len ) ;
- ptr[len] = 0 ;
- result.UngetWriteBuf( len ) ;
+ *buf = 0x0d ;
+ buf++ ;
}
- return result ;
}
-wxString wxMacMakeStringFromMacString( const wxChar* from , bool mac2pcEncoding )
-{
- if (mac2pcEncoding)
- {
- return wxMacMakePCStringFromMac( from ) ;
- }
- else
- {
- return wxString( from ) ;
- }
+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 ) ;
}
-//
-// Pascal Strings
-//
+void wxMacConvertNewlines10To13( wxString * data )
+{
+ size_t len = data->Length() ;
-wxString wxMacMakeStringFromPascal( ConstStringPtr from , bool mac2pcEncoding )
-{
- // this is safe since a pascal string can never be larger than 256 bytes
- char s[256] ;
- CopyPascalStringToC( from , s ) ;
- if (mac2pcEncoding)
- {
- return wxMacMakePCStringFromMac( s ) ;
- }
- else
- {
- return wxString( s ) ;
- }
+ 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 ) ;
}
-void wxMacStringToPascal( const wxChar * from , StringPtr to , bool pc2macEncoding )
-{
- if (pc2macEncoding)
+
+#if wxUSE_UNICODE
+void wxMacConvertNewlines13To10( wxChar * data )
+{
+ wxChar * buf = data ;
+ while( (buf=wxStrchr(buf,0x0d)) != NULL )
{
- CopyCStringToPascal( wxMacMakeMacStringFromPC( from ) , to ) ;
+ *buf = 0x0a ;
+ buf++ ;
}
- else
+}
+
+void wxMacConvertNewlines10To13( wxChar * data )
+{
+ wxChar * buf = data ;
+ while( (buf=wxStrchr(buf,0x0a)) != NULL )
{
- CopyCStringToPascal( from , to ) ;
+ *buf = 0x0d ;
+ buf++ ;
}
}
#endif
-
-#endif //TARGET_CARBON
-
// ----------------------------------------------------------------------------
// debugging support
// ----------------------------------------------------------------------------
#endif // defined(__WXMAC__) && !defined(__DARWIN__) && (__MWERKS__ >= 0x2400)
+#endif // wxUSE_GUI
+