// font encodings
// Author: Vaclav Slavik
// Copyright: (c) 1999 Vaclav Slavik
-// Licence: wxWindows Licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#include <stdlib.h>
// 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 <ATSUnicode.h>
+ #include <TextCommon.h>
+ #include <TextEncodingConverter.h>
-#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
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];
for (int i = 0; i < 128; i++)
- rev[i].c = 128 + i, rev[i].u = tbl[i];
+ rev[i].c = wxUint8(128 + i), rev[i].u = tbl[i];
qsort(rev, 128, sizeof(CharsetItem), CompareCharsetItems);
wxEncodingConverter::wxEncodingConverter()
{
m_Table = NULL;
- m_UnicodeInput = m_UnicodeOutput = FALSE;
- m_JustCopy = FALSE;
+ m_UnicodeInput = m_UnicodeOutput = false;
+ m_JustCopy = false;
}
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
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
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);
delete[] rev;
}
-#endif // !__WXWINCE__
}
- return TRUE;
+ return true;
}
// 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}