📄 utils.cpp
字号:
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// converts this string into a carbon foundation string with optional pc 2 mac encodingvoid wxMacCFStringHolder::Assign( const wxString &st , wxFontEncoding encoding ){ Release() ; wxString str = st ; wxMacConvertNewlines13To10( &str ) ;#if wxUSE_UNICODE#if SIZEOF_WCHAR_T == 2 m_cfs = CFStringCreateWithCharacters( kCFAllocatorDefault, (UniChar*)str.wc_str() , str.Len() );#else wxMBConvUTF16BE 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){ 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 ; wxMBConvUTF16BE converter ; noChars = converter.MB2WC( NULL , (const char*)unibuf , 0 ) ; buf = new wxChar[ noChars + 1 ] ; converter.MB2WC( buf , (const char*)unibuf , noChars ) ; 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 ;}#endif //TARGET_CARBONvoid 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->empty() || 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_UNICODEvoid 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// ----------------------------------------------------------------------------#if defined(__WXMAC__) && !defined(__DARWIN__) && defined(__MWERKS__) && (__MWERKS__ >= 0x2400)// MetroNub stuff doesn't seem to work in CodeWarrior 5.3 Carbon builds...#ifndef __MetroNubUtils__#include "MetroNubUtils.h"#endif#ifndef __GESTALT__#include <Gestalt.h>#endif#if TARGET_API_MAC_CARBON #include <CodeFragments.h> extern "C" long CallUniversalProc(UniversalProcPtr theProcPtr, ProcInfoType procInfo, ...); ProcPtr gCallUniversalProc_Proc = NULL;#endifstatic MetroNubUserEntryBlock* gMetroNubEntry = NULL;static long fRunOnce = false;/* --------------------------------------------------------------------------- IsMetroNubInstalled --------------------------------------------------------------------------- */Boolean IsMetroNubInstalled(){ if (!fRunOnce) { long result, value; fRunOnce = true; gMetroNubEntry = NULL; if (Gestalt(gestaltSystemVersion, &value) == noErr && value < 0x1000) { /* look for MetroNub's Gestalt selector */ if (Gestalt(kMetroNubUserSignature, &result) == noErr) { #if TARGET_API_MAC_CARBON if (gCallUniversalProc_Proc == NULL) { CFragConnectionID connectionID; Ptr mainAddress; Str255 errorString; ProcPtr symbolAddress; OSErr err; CFragSymbolClass symbolClass; symbolAddress = NULL; err = GetSharedLibrary("\pInterfaceLib", kPowerPCCFragArch, kFindCFrag, &connectionID, &mainAddress, errorString); if (err != noErr) { gCallUniversalProc_Proc = NULL; goto end; } err = FindSymbol(connectionID, "\pCallUniversalProc", (Ptr *) &gCallUniversalProc_Proc, &symbolClass); if (err != noErr) { gCallUniversalProc_Proc = NULL; goto end; } } #endif { MetroNubUserEntryBlock* block = (MetroNubUserEntryBlock *)result; /* make sure the version of the API is compatible */ if (block->apiLowVersion <= kMetroNubUserAPIVersion && kMetroNubUserAPIVersion <= block->apiHiVersion) gMetroNubEntry = block; /* success! */ } } } }end:#if TARGET_API_MAC_CARBON return (gMetroNubEntry != NULL && gCallUniversalProc_Proc != NULL);#else return (gMetroNubEntry != NULL);#endif}/* --------------------------------------------------------------------------- IsMWDebuggerRunning [v1 API] --------------------------------------------------------------------------- */Boolean IsMWDebuggerRunning(){ if (IsMetroNubInstalled()) return CallIsDebuggerRunningProc(gMetroNubEntry->isDebuggerRunning); else return false;}/* --------------------------------------------------------------------------- AmIBeingMWDebugged [v1 API] --------------------------------------------------------------------------- */Boolean AmIBeingMWDebugged(){ if (IsMetroNubInstalled()) return CallAmIBeingDebuggedProc(gMetroNubEntry->amIBeingDebugged); else return false;}extern bool WXDLLEXPORT wxIsDebuggerRunning(){ return IsMWDebuggerRunning() && AmIBeingMWDebugged();}#elseextern bool WXDLLEXPORT wxIsDebuggerRunning(){ return false;}#endif // defined(__WXMAC__) && !defined(__DARWIN__) && (__MWERKS__ >= 0x2400)#endif // wxUSE_GUI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -