📄 utils.cpp
字号:
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
// converts this string into a carbon foundation string with optional pc 2 mac encoding
void 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_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->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_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
// ----------------------------------------------------------------------------
#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;
#endif
static 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();
}
#else
extern 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 + -