X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/788a28b4f88564d6502aaf2bb5be23641ce42ae4..ed7c11abc829a8f7becc92ee438866e36f2216fe:/src/common/encconv.cpp diff --git a/src/common/encconv.cpp b/src/common/encconv.cpp index e6b921e027..dd7c28d520 100644 --- a/src/common/encconv.cpp +++ b/src/common/encconv.cpp @@ -4,7 +4,7 @@ // font encodings // Author: Vaclav Slavik // Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows Licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) @@ -25,79 +25,59 @@ #include // conversion tables, generated by scripts in $(WXWIN)/misc/unictabl: -#ifdef __BORLANDC__ -#include "../common/unictabl.inc" +#if defined( __BORLANDC__ ) || defined(__DARWIN__) + #include "../common/unictabl.inc" #else -#include "unictabl.inc" + #include "unictabl.inc" #endif #if wxUSE_WCHAR_T -typedef wchar_t tchar; + typedef wchar_t tchar; #else -typedef char tchar; -#endif - -#ifdef __WXWINCE__ -#undef LINKAGEMODE -#define LINKAGEMODE __cdecl + typedef char tchar; #endif #ifdef __WXMAC__ + #include + #include + #include -#include "ATSUnicode.h" -#include "TextCommon.h" -#include "TextEncodingConverter.h" - -#include "wx/mac/private.h" // includes mac headers + #include "wx/fontutil.h" + #include "wx/mac/private.h" // includes mac headers -typedef struct { - wxFontEncoding enc ; - TextEncodingBase mac ; -} MacCP ; - -MacCP gMacCodePages[] = -{ - wxFONTENCODING_MACROMAN, kTextEncodingMacRoman, - wxFONTENCODING_MACCENTRALEUR, kTextEncodingMacCentralEurRoman, - wxFONTENCODING_MACHEBREW, kTextEncodingMacHebrew, - wxFONTENCODING_MACGREEK, kTextEncodingMacGreek, - wxFONTENCODING_MACARABIC, kTextEncodingMacArabic, - wxFONTENCODING_MACTURKISH, kTextEncodingMacTurkish, - wxFONTENCODING_MACCYRILLIC, kTextEncodingMacCyrillic, -} ; - -wxUint16 gMacEncodings[WXSIZEOF(gMacCodePages)][128] ; -bool gMacEncodingsInited[WXSIZEOF(gMacCodePages)] ; + wxUint16 gMacEncodings[wxFONTENCODING_MACMAX-wxFONTENCODING_MACMIN+1][128] ; + bool gMacEncodingsInited[wxFONTENCODING_MACMAX-wxFONTENCODING_MACMIN+1] ; +#endif +#ifdef __WXWINCE__ + #include "wx/msw/wince/missing.h" // for bsearch() #endif -static wxUint16* LINKAGEMODE GetEncTable(wxFontEncoding enc) +static wxUint16* GetEncTable(wxFontEncoding enc) { #ifdef __WXMAC__ - for (int i = 0 ; i < WXSIZEOF(gMacCodePages) ; ++i ) + if( enc >= wxFONTENCODING_MACMIN && enc <= wxFONTENCODING_MACMAX ) { - if ( gMacCodePages[i].enc == enc ) + int i = enc-wxFONTENCODING_MACMIN ; + if ( gMacEncodingsInited[i] == false ) { - if ( gMacEncodingsInited[i] == false ) + TECObjectRef converter ; + TextEncodingBase code = wxMacGetSystemEncFromFontEnc( enc ) ; + TextEncodingBase unicode = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ; + OSStatus status = TECCreateConverter(&converter,code,unicode); + char s[2] ; + s[1] = 0 ; + ByteCount byteInLen, byteOutLen ; + for( unsigned char c = 255 ; c >= 128 ; --c ) { - TECObjectRef converter ; - TextEncodingBase code = gMacCodePages[i].mac ; - TextEncodingBase unicode = CreateTextEncoding(kTextEncodingUnicodeDefault,0,kUnicode16BitFormat) ; - OSStatus status = TECCreateConverter(&converter,code,unicode); - char s[2] ; - s[1] = 0 ; - ByteCount byteInLen, byteOutLen ; - for( char c = 255 ; c >= 128 ; --c ) - { - s[0] = c ; - status = TECConvertText(converter, (ConstTextPtr) &s , 1, &byteInLen, - (TextPtr) &gMacEncodings[i][c-128] , 2, &byteOutLen); - } - status = TECDisposeConverter(converter); - gMacEncodingsInited[i]=true; + s[0] = c ; + status = TECConvertText(converter, (ConstTextPtr) &s , 1, &byteInLen, + (TextPtr) &gMacEncodings[i][c-128] , 2, &byteOutLen); } - return gMacEncodings[i] ; + status = TECDisposeConverter(converter); + gMacEncodingsInited[i]=true; } + return gMacEncodings[i] ; } #endif @@ -114,13 +94,14 @@ typedef struct { wxUint8 c; } CharsetItem; -extern "C" int LINKAGEMODE CompareCharsetItems(const void *i1, const void *i2) +extern "C" int wxCMPFUNC_CONV +CompareCharsetItems(const void *i1, const void *i2) { return ( ((CharsetItem*)i1) -> u - ((CharsetItem*)i2) -> u ); } -static CharsetItem* LINKAGEMODE BuildReverseTable(wxUint16 *tbl) +static CharsetItem* BuildReverseTable(wxUint16 *tbl) { CharsetItem *rev = new CharsetItem[128]; @@ -137,8 +118,8 @@ static CharsetItem* LINKAGEMODE BuildReverseTable(wxUint16 *tbl) wxEncodingConverter::wxEncodingConverter() { m_Table = NULL; - m_UnicodeInput = m_UnicodeOutput = FALSE; - m_JustCopy = FALSE; + m_UnicodeInput = m_UnicodeOutput = false; + m_JustCopy = false; } @@ -151,17 +132,17 @@ bool wxEncodingConverter::Init(wxFontEncoding input_enc, wxFontEncoding output_e if (m_Table) {delete[] m_Table; m_Table = NULL;} #if !wxUSE_WCHAR_T - if (input_enc == wxFONTENCODING_UNICODE || output_enc == wxFONTENCODING_UNICODE) return FALSE; + if (input_enc == wxFONTENCODING_UNICODE || output_enc == wxFONTENCODING_UNICODE) return false; #endif - if (input_enc == output_enc) {m_JustCopy = TRUE; return TRUE;} + if (input_enc == output_enc) {m_JustCopy = true; return true;} m_UnicodeOutput = (output_enc == wxFONTENCODING_UNICODE); - m_JustCopy = FALSE; + m_JustCopy = false; if (input_enc == wxFONTENCODING_UNICODE) { - if ((out_tbl = GetEncTable(output_enc)) == NULL) return FALSE; + if ((out_tbl = GetEncTable(output_enc)) == NULL) return false; m_Table = new tchar[65536]; for (i = 0; i < 128; i++) m_Table[i] = (tchar)i; // 7bit ASCII @@ -177,15 +158,15 @@ bool wxEncodingConverter::Init(wxFontEncoding input_enc, wxFontEncoding output_e for (i = 0; i < 128; i++) m_Table[out_tbl[i]] = (tchar)(128 + i); - m_UnicodeInput = TRUE; + m_UnicodeInput = true; } else // input !Unicode { - if ((in_tbl = GetEncTable(input_enc)) == NULL) return FALSE; + if ((in_tbl = GetEncTable(input_enc)) == NULL) return false; if (output_enc != wxFONTENCODING_UNICODE) - if ((out_tbl = GetEncTable(output_enc)) == NULL) return FALSE; + if ((out_tbl = GetEncTable(output_enc)) == NULL) return false; - m_UnicodeInput = FALSE; + m_UnicodeInput = false; m_Table = new tchar[256]; for (i = 0; i < 128; i++) m_Table[i] = (tchar)i; // 7bit ASCII @@ -193,10 +174,8 @@ bool wxEncodingConverter::Init(wxFontEncoding input_enc, wxFontEncoding output_e if (output_enc == wxFONTENCODING_UNICODE) { for (i = 0; i < 128; i++) m_Table[128 + i] = (tchar)in_tbl[i]; - return TRUE; + return true; } - // FIXME: write a substitute for bsearch -#ifndef __WXWINCE__ else // output !Unicode { CharsetItem *rev = BuildReverseTable(out_tbl); @@ -222,10 +201,9 @@ bool wxEncodingConverter::Init(wxFontEncoding input_enc, wxFontEncoding output_e delete[] rev; } -#endif // !__WXWINCE__ } - return TRUE; + return true; } @@ -434,7 +412,7 @@ static wxFontEncoding // Cyrillic { - /* unix */ {wxFONTENCODING_KOI8, wxFONTENCODING_ISO8859_5, STOP}, + /* unix */ {wxFONTENCODING_KOI8, wxFONTENCODING_KOI8_U, wxFONTENCODING_ISO8859_5, STOP}, /* windows */ {wxFONTENCODING_CP1251, STOP}, /* os2 */ {STOP}, /* mac */ {wxFONTENCODING_MACCYRILLIC, STOP}