]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/core/cfstring.cpp
adding comment
[wxWidgets.git] / src / osx / core / cfstring.cpp
index a65c5cb361ad16c385ff0f9f34f01783bb353225..3aca67c90dfdea7ded4aadbe67f2bf284800a747 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        src/osx/corefoundation/cfstring.cpp
+// Name:        src/osx/core/cfstring.cpp
 // Purpose:     wxCFStringHolder and other string functions
 // Author:      Stefan Csomor
 // Modified by:
 // Purpose:     wxCFStringHolder and other string functions
 // Author:      Stefan Csomor
 // Modified by:
@@ -186,8 +186,8 @@ wxUint32 wxMacGetSystemEncFromFontEnc(wxFontEncoding encoding)
 #if 0
     case wxFONTENCODING_UTF7 :
         enc = CreateTextEncoding(kCFStringEncodingUnicodeDefault,0,kUnicodeUTF7Format) ;
 #if 0
     case wxFONTENCODING_UTF7 :
         enc = CreateTextEncoding(kCFStringEncodingUnicodeDefault,0,kUnicodeUTF7Format) ;
-#endif
         break ;
         break ;
+#endif
     case wxFONTENCODING_UTF8 :
         enc = kCFStringEncodingUTF8;
         break ;
     case wxFONTENCODING_UTF8 :
         enc = kCFStringEncodingUTF8;
         break ;
@@ -611,15 +611,20 @@ wxCFStringRef::wxCFStringRef( const wxString &st , wxFontEncoding WXUNUSED_IN_UN
 #if wxUSE_UNICODE
 #if wxUSE_UNICODE_WCHAR
         // native = wchar_t 4 bytes for us
 #if wxUSE_UNICODE
 #if wxUSE_UNICODE_WCHAR
         // native = wchar_t 4 bytes for us
-        reset( CFStringCreateWithBytes( kCFAllocatorDefault,
-            (const UInt8*)str.wc_str() , str.length()*4, kCFStringEncodingUTF32Native, false /* no BOM */ ) );
+        const wchar_t * const data = str.wc_str();
+        const size_t size = str.length()*sizeof(wchar_t);
+        CFStringBuiltInEncodings cfencoding = kCFStringEncodingUTF32Native;
 #elif wxUSE_UNICODE_UTF8
         // native = utf8
 #elif wxUSE_UNICODE_UTF8
         // native = utf8
-        reset( CFStringCreateWithBytes( kCFAllocatorDefault,
-            (const UInt8*) str.utf8_str() , str.utf8_length() , kCFStringEncodingUTF8, false /* no BOM */ ) );
+        const char * const data = str.utf8_str();
+        const size_t size = str.utf8_length();
+        CFStringBuiltInEncodings cfencoding = kCFStringEncodingUTF8;
 #else
 #else
-    #error "unsupported unicode representation"
+    #error "unsupported Unicode representation"
 #endif
 #endif
+
+        reset( CFStringCreateWithBytes( kCFAllocatorDefault,
+            (const UInt8*)data, size, cfencoding, false /* no BOM */ ) );
 #else // not wxUSE_UNICODE
         reset( CFStringCreateWithCString( kCFAllocatorSystemDefault , str.c_str() ,
             wxMacGetSystemEncFromFontEnc( encoding ) ) );
 #else // not wxUSE_UNICODE
         reset( CFStringCreateWithCString( kCFAllocatorSystemDefault , str.c_str() ,
             wxMacGetSystemEncFromFontEnc( encoding ) ) );
@@ -627,16 +632,27 @@ wxCFStringRef::wxCFStringRef( const wxString &st , wxFontEncoding WXUNUSED_IN_UN
     }
 }
 
     }
 }
 
-wxString wxCFStringRef::AsString(wxFontEncoding WXUNUSED_IN_UNICODE(encoding))
+wxString wxCFStringRef::AsStringWithNormalizationFormC( CFStringRef ref, wxFontEncoding encoding )
 {
 {
-    if ( !get() )
+    if ( !ref )
         return wxEmptyString ;
 
         return wxEmptyString ;
 
-    Size cflen = CFStringGetLength( get() )  ;
-    char* buf = NULL ;
+    CFMutableStringRef cfMutableString = CFStringCreateMutableCopy(NULL, 0, ref);
+    CFStringNormalize(cfMutableString,kCFStringNormalizationFormC);
+    wxString str = wxCFStringRef::AsString(ref,encoding);
+    CFRelease(cfMutableString);
+    return str;
+}
 
 
-    CFStringEncoding cfencoding = 0;
-    wxString result;    
+wxString wxCFStringRef::AsString( CFStringRef ref, wxFontEncoding WXUNUSED_IN_UNICODE(encoding) )
+{
+    if ( !ref )
+        return wxEmptyString ;
+
+    Size cflen = CFStringGetLength( ref )  ;
+
+    CFStringEncoding cfencoding;
+    wxString result;
 #if wxUSE_UNICODE
   #if wxUSE_UNICODE_WCHAR
     cfencoding = kCFStringEncodingUTF32Native;
 #if wxUSE_UNICODE
   #if wxUSE_UNICODE_WCHAR
     cfencoding = kCFStringEncodingUTF32Native;
@@ -650,12 +666,12 @@ wxString wxCFStringRef::AsString(wxFontEncoding WXUNUSED_IN_UNICODE(encoding))
 #endif
 
     CFIndex cStrLen ;
 #endif
 
     CFIndex cStrLen ;
-    CFStringGetBytes( get() , CFRangeMake(0, cflen) , cfencoding ,
+    CFStringGetBytes( ref , CFRangeMake(0, cflen) , cfencoding ,
         '?' , false , NULL , 0 , &cStrLen ) ;
         '?' , false , NULL , 0 , &cStrLen ) ;
-    buf = new char[ cStrLen ] ;
-    CFStringGetBytes( get() , CFRangeMake(0, cflen) , cfencoding,
+    char* buf = new char[cStrLen];
+    CFStringGetBytes( ref , CFRangeMake(0, cflen) , cfencoding,
         '?' , false , (unsigned char*) buf , cStrLen , &cStrLen) ;
         '?' , false , (unsigned char*) buf , cStrLen , &cStrLen) ;
-    
+
 #if wxUSE_UNICODE
   #if wxUSE_UNICODE_WCHAR
     result = wxString( (const wchar_t*) buf , cStrLen/4);
 #if wxUSE_UNICODE
   #if wxUSE_UNICODE_WCHAR
     result = wxString( (const wchar_t*) buf , cStrLen/4);
@@ -665,24 +681,38 @@ wxString wxCFStringRef::AsString(wxFontEncoding WXUNUSED_IN_UNICODE(encoding))
     #error "unsupported unicode representation"
   #endif
 #else
     #error "unsupported unicode representation"
   #endif
 #else
-    wxString result(buf, cStrLen) ;
+    result = wxString(buf, cStrLen) ;
 #endif
 #endif
-    
+
     delete[] buf ;
     wxMacConvertNewlines10To13( &result);
     return result ;
 }
 
     delete[] buf ;
     wxMacConvertNewlines10To13( &result);
     return result ;
 }
 
+wxString wxCFStringRef::AsString(wxFontEncoding encoding) const
+{
+    return AsString( get(), encoding );
+}
+
+#if wxOSX_USE_COCOA_OR_IPHONE
+wxString wxCFStringRef::AsString( NSString* ref, wxFontEncoding encoding )
+{
+    return AsString( (CFStringRef) ref, encoding );
+}
+
+wxString wxCFStringRef::AsStringWithNormalizationFormC( NSString* ref, wxFontEncoding encoding )
+{
+    return AsStringWithNormalizationFormC( (CFStringRef) ref, encoding );
+}
+#endif // wxOSX_USE_COCOA_OR_IPHONE
+
+
 //
 // wxMacUniCharBuffer
 //
 
 wxMacUniCharBuffer::wxMacUniCharBuffer( const wxString &str )
 {
 //
 // wxMacUniCharBuffer
 //
 
 wxMacUniCharBuffer::wxMacUniCharBuffer( const wxString &str )
 {
-    m_chars = str.length() ;
-    m_ubuf = NULL ;
-
-#if SIZEOF_WCHAR_T == 4
     wxMBConvUTF16 converter ;
 #if wxUSE_UNICODE
     size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
     wxMBConvUTF16 converter ;
 #if wxUSE_UNICODE
     size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
@@ -695,17 +725,6 @@ wxMacUniCharBuffer::wxMacUniCharBuffer( const wxString &str )
     converter.WC2MB( (char*) m_ubuf , wchar.data() , unicharlen + 2 ) ;
 #endif
     m_chars = unicharlen / 2 ;
     converter.WC2MB( (char*) m_ubuf , wchar.data() , unicharlen + 2 ) ;
 #endif
     m_chars = unicharlen / 2 ;
-#else // SIZEOF_WCHAR_T is then 2
-#if wxUSE_UNICODE
-    m_ubuf = malloc( m_chars * 2 + 2 ) ;
-    memcpy( m_ubuf , (UniChar*) str.wc_str() , m_chars * 2 + 2 ) ;
-#else
-    wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
-    m_chars = wxWcslen( wchar.data() ) ;
-    m_ubuf = malloc( m_chars * 2 + 2 ) ;
-    memcpy( m_ubuf , (UniChar*) wchar.data() , m_chars * 2 + 2 ) ;
-#endif
-#endif
 }
 
 wxMacUniCharBuffer::~wxMacUniCharBuffer()
 }
 
 wxMacUniCharBuffer::~wxMacUniCharBuffer()
@@ -713,11 +732,11 @@ wxMacUniCharBuffer::~wxMacUniCharBuffer()
     free( m_ubuf ) ;
 }
 
     free( m_ubuf ) ;
 }
 
-UniCharPtr wxMacUniCharBuffer::GetBuffer() 
+UniCharPtr wxMacUniCharBuffer::GetBuffer()
 {
     return m_ubuf ;
 }
 {
     return m_ubuf ;
 }
-   
+
 UniCharCount wxMacUniCharBuffer::GetChars()
 {
     return m_chars ;
 UniCharCount wxMacUniCharBuffer::GetChars()
 {
     return m_chars ;