⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfstring.cpp

📁 Wxpython Implemented on Windows CE, Source code
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        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 ;
*/
    case kTextEncodingDOSLatinUS :
        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 ;
#if 0
    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 ;
#endif
    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 ;
}


//
// CFStringRefs (Carbon only)
//

// converts this string into a carbon foundation string with optional pc 2 mac encoding
void wxMacCFStringHolder::Assign( const wxString &st , wxFontEncoding encoding )
{
    Release() ;
    if (st.IsEmpty())
    {
        m_cfs = CFSTR("") ;
        CFRetain( m_cfs ) ;
    }
    else
    {
        wxString str = st ;
        wxMacConvertNewlines13To10( &str ) ;
#if wxUSE_UNICODE
#if SIZEOF_WCHAR_T == 2
        m_cfs = CFStringCreateWithCharacters( kCFAllocatorDefault,
            (UniChar*)str.wc_str() , str.Len() );
#else
        wxMBConvUTF16 converter ;
        size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
        UniChar *unibuf = new UniChar[ unicharlen / sizeof(UniChar) + 1 ] ;
        converter.WC2MB( (char*)unibuf , str.wc_str() , unicharlen ) ;
        m_cfs = CFStringCreateWithCharacters( kCFAllocatorDefault ,
            unibuf , unicharlen / sizeof(UniChar) ) ;
        delete[] unibuf ;
#endif
#else // not wxUSE_UNICODE
        m_cfs = CFStringCreateWithCString( kCFAllocatorSystemDefault , str.c_str() ,
            wxMacGetSystemEncFromFontEnc( encoding ) ) ;
#endif
    }
    m_release = true ;
}

wxString wxMacCFStringHolder::AsString(wxFontEncoding encoding)
{
    if ( m_cfs == NULL )
        return wxEmptyString ;

    Size cflen = CFStringGetLength( m_cfs )  ;
    size_t noChars ;
    wxChar* buf = NULL ;

#if wxUSE_UNICODE
#if SIZEOF_WCHAR_T == 2
    buf = new wxChar[ cflen + 1 ] ;
    CFStringGetCharacters( m_cfs , CFRangeMake( 0 , cflen ) , (UniChar*) buf ) ;
    noChars = cflen ;
#else
    UniChar* unibuf = new UniChar[ cflen + 1 ] ;
    CFStringGetCharacters( m_cfs , CFRangeMake( 0 , cflen ) , (UniChar*) unibuf ) ;
    unibuf[cflen] = 0 ;
    wxMBConvUTF16 converter ;
    noChars = converter.MB2WC( NULL , (const char*)unibuf , 0 ) ;
    wxASSERT_MSG( noChars != wxCONV_FAILED, _T("Unable to count the number of characters in this string!") );
    buf = new wxChar[ noChars + 1 ] ;
    noChars = converter.MB2WC( buf , (const char*)unibuf , noChars + 1 ) ;
    wxASSERT_MSG( noChars != wxCONV_FAILED, _T("Conversion of string failed!") );
    delete[] unibuf ;
#endif
#else
    CFIndex cStrLen ;
    CFStringGetBytes( m_cfs , CFRangeMake(0, cflen) , wxMacGetSystemEncFromFontEnc( encoding ) ,
        '?' , false , NULL , 0 , &cStrLen ) ;
    buf = new wxChar[ cStrLen + 1 ] ;
    CFStringGetBytes( m_cfs , CFRangeMake(0, cflen) , wxMacGetSystemEncFromFontEnc( encoding ) ,
        '?' , false , (unsigned char*) buf , cStrLen , &cStrLen) ;
    noChars = cStrLen ;
#endif

    buf[noChars] = 0 ;
    wxMacConvertNewlines10To13( buf ) ;
    wxString result(buf) ;
    delete[] buf ;
    return result ;
}


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 ) ;
    m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
    converter.WC2MB( (char*) m_ubuf , str.wc_str(), unicharlen + 2 ) ;
#else
    const wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
    size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ;
    m_ubuf = (UniChar*) malloc( 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()
{
    free( m_ubuf ) ;
}

UniCharArrayPtr wxMacUniCharBuffer::GetBuffer() 
{
    return m_ubuf ;
}
   
UniCharCount wxMacUniCharBuffer::GetChars()
{
    return m_chars ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -