From c958260b3886cb83aa93c7508d0986c6433ce165 Mon Sep 17 00:00:00 2001
From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= <vslavik@fastmail.fm>
Date: Fri, 31 Dec 1999 00:35:13 +0000
Subject: [PATCH] added wxEncodingConverter

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5159 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 distrib/msw/tmake/filelist.txt |   1 +
 docs/latex/wx/classes.tex      |   1 +
 docs/latex/wx/encconv.tex      | 135 ++++++
 include/wx/encconv.h           | 150 ++++++
 src/common/encconv.cpp         | 294 ++++++++++++
 src/common/unictabl.inc        | 846 +++++++++++++++++++++++++++++++++
 6 files changed, 1427 insertions(+)
 create mode 100644 docs/latex/wx/encconv.tex
 create mode 100644 include/wx/encconv.h
 create mode 100644 src/common/encconv.cpp
 create mode 100644 src/common/unictabl.inc

diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt
index d92911ca19..99b0d066b1 100644
--- a/distrib/msw/tmake/filelist.txt
+++ b/distrib/msw/tmake/filelist.txt
@@ -114,6 +114,7 @@ docmdi.cpp	C
 docview.cpp	C
 dynarray.cpp	C	B
 dynlib.cpp	C	B
+encconv.cpp	C
 event.cpp	C	B
 extended.c	C	B
 ffile.cpp	C	B
diff --git a/docs/latex/wx/classes.tex b/docs/latex/wx/classes.tex
index de69338efd..bc7aa8578b 100644
--- a/docs/latex/wx/classes.tex
+++ b/docs/latex/wx/classes.tex
@@ -65,6 +65,7 @@
 \input dropevt.tex
 \input dropsrc.tex
 \input droptrgt.tex
+\input encconv.tex
 \input eraseevt.tex
 \input event.tex
 \input evthand.tex
diff --git a/docs/latex/wx/encconv.tex b/docs/latex/wx/encconv.tex
new file mode 100644
index 0000000000..45e630294b
--- /dev/null
+++ b/docs/latex/wx/encconv.tex
@@ -0,0 +1,135 @@
+%
+% automatically generated by HelpGen from
+% encconv.h at 30/Dec/99 18:45:16
+%
+
+
+\section{\class{wxEncodingConverter}}\label{wxencodingconverter}
+
+This class is capable of converting strings between any two
+8bit encodings/charsets. It can also convert from/to Unicode (but only
+if you compiled wxWindows with wxUSE_UNICODE set to 1).
+
+
+\wxheading{Derived from}
+
+\helpref{wxObject}{wxobject}
+
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+
+\membersection{wxEncodingConverter::wxEncodingConverter}\label{wxencodingconverterwxencodingconverter}
+
+\func{}{wxEncodingConverter}{\void}
+
+Constructor.
+
+\membersection{wxEncodingConverter::Init}\label{wxencodingconverterinit}
+
+\func{bool}{Init}{\param{wxFontEncoding }{input\_enc}, \param{wxFontEncoding }{output\_enc}, \param{int }{method = wxCONVERT\_STRICT}}
+
+Initialize convertion. Both output or input encoding may
+be wxFONTENCODING\_UNICODE, but only if wxUSE\_ENCODING is set to 1.
+All subsequent calls to \helpref{Convert()}{wxencodingconverterconvert} 
+will interpret it's argument
+as a string in {\it input\_enc} encoding and will output string in
+{\it output\_enc} encoding.
+You must call this method before calling Convert. You may call 
+it more than once in order to switch to another conversion.
+{\it Method} affects behaviour of Convert() in case input character
+cannot be converted because it does not exist in output encoding:
+
+\begin{twocollist}
+\twocolitem{{\bf wxCONVERT\_STRICT}}{follow behaviour of GNU Recode -
+just copy unconvertable  characters to output and don't change them 
+(its integer value will stay the same)}
+\twocolitem{{\bf wxCONVERT\_SUBSTITUTE}}{try some (lossy) substitutions 
+- e.g. replace unconvertable latin capitals with acute by ordinary
+capitals, replace en-dash or em-dash by '-' etc.}
+\end{twocollist}
+
+Both modes gurantee that output string will have same length
+as input string.
+
+\wxheading{Return value} 
+
+FALSE if given conversion is impossible, TRUE otherwise
+(conversion may be impossible either if you try to convert
+to Unicode with non-Unicode build of wxWindows or if input
+or output encoding is not supported.)
+
+
+\membersection{wxEncodingConverter::Convert}\label{wxencodingconverterconvert}
+
+\func{wxString}{Convert}{\param{const wxString\& }{input}}
+
+\func{void}{Convert}{\param{const wxChar* }{input}, \param{wxChar* }{output}}
+
+\func{void}{Convert}{\param{wxChar* }{str}}
+
+Convert input string according to settings passed to \helpref{Init}{wxencodingconverterinit}.
+Note that you must call Init before using Convert!
+
+
+
+\membersection{wxEncodingConverter::GetPlatformEquivalents}\label{wxencodingconvertergetplatformequivalents}
+
+\func{wxFontEncodingArray}{GetPlatformEquivalents}{\param{wxFontEncoding }{enc}, \param{int }{platform = wxPLATFORM\_CURRENT}}
+
+Return equivalents for given font that are used
+under given platform. Supported platforms:
+
+\begin{itemize}
+\item wxPLATFORM\_UNIX
+\item wxPLATFORM\_WINDOWS
+\item wxPLATFORM\_OS2
+\item wxPLATFORM\_MAC
+\item wxPLATFORM\_CURRENT
+\end{itemize}
+
+wxPLATFORM\_CURRENT means the plaform this binary was compiled for.
+
+Examples:
+\begin{verbatim}
+current platform   enc          returned value
+----------------------------------------------
+unix            CP1250             {ISO8859_2}
+unix         ISO8859_2             {ISO8859_2}
+windows      ISO8859_2                {CP1250}
+unix            CP1252  {ISO8859_1,ISO8859_15}
+\end{verbatim}
+
+Equivalence is defined in terms of convertibility:
+2 encodings are equivalent if you can convert text between
+then without loosing information (it may - and will - happen
+that you loose special chars like quotation marks or em-dashes
+but you shouldn't loose any diacritics and language-specific
+characters when converting between equivalent encodings).
+
+Remember that this function does {\bf NOT} check for presence of
+fonts in system. It only tells you what are most suitable
+encodings. (It usually returns only one encoding.)
+
+\wxheading{Notes}
+
+\begin{itemize}
+\item Note that argument {\it enc} itself may be present in returned array!
+(So that you can - as a side effect - detect whether the
+encoding is native for this platform or not.)
+
+\item helpref{Convert}{wxencodingconverterconvert} is not limited to 
+converting between equivalent encodings, it can convert between arbitrary
+two encodings!
+\end{itemize}
+
+
+\membersection{wxEncodingConverter::GetAllEquivalents}\label{wxencodingconvertergetallequivalents}
+
+\func{wxFontEncodingArray}{GetAllEquivalents}{\param{wxFontEncoding }{enc}}
+
+Similar to 
+\helpref{GetPlatformEquivalents}{wxencodingconvertergetplatformequivalents}, 
+but this one will return ALL 
+equivalent encodings, regardless the platform, and including itself.
+
diff --git a/include/wx/encconv.h b/include/wx/encconv.h
new file mode 100644
index 0000000000..ea44123207
--- /dev/null
+++ b/include/wx/encconv.h
@@ -0,0 +1,150 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        encconv.h
+// Purpose:     wxEncodingConverter class for converting between different
+//              font encodings
+// Author:      Vaclav Slavik
+// Copyright:   (c) 1999 Vaclav Slavik
+// Licence:     wxWindows Licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ENCCONV_H__
+#define __ENCCONV_H__
+
+#ifdef __GNUG__
+#pragma interface "encconv.h"
+#endif
+
+#include "wx/defs.h"
+#include "wx/font.h"
+#include "wx/dynarray.h"
+
+
+
+enum {
+    wxCONVERT_STRICT,
+    wxCONVERT_SUBSTITUTE
+};
+
+
+enum {
+    wxPLATFORM_CURRENT = -1,
+    
+    wxPLATFORM_UNIX = 0,
+    wxPLATFORM_WINDOWS,
+    wxPLATFORM_OS2,
+    wxPLATFORM_MAC,
+};
+
+WX_DEFINE_ARRAY(wxFontEncoding, wxFontEncodingArray);
+
+
+//--------------------------------------------------------------------------------
+// wxEncodingConverter
+//                  This class is capable of converting strings between any two
+//                  8bit encodings/charsets. It can also convert from/to Unicode
+//--------------------------------------------------------------------------------
+
+class WXDLLEXPORT wxEncodingConverter : public wxObject
+{
+    public:
+    
+            wxEncodingConverter();
+            ~wxEncodingConverter() { if (m_Table) delete[] m_Table; }
+    
+            // Initialize convertion. Both output or input encoding may
+            // be wxFONTENCODING_UNICODE, but only if wxUSE_ENCODING is set to 1.
+            //
+            // All subsequent calls to Convert() will interpret it's argument
+            // as a string in input_enc encoding and will output string in
+            // output_enc encoding.
+            //
+            // You must call this method before calling Convert. You may call 
+            // it more than once in order to switch to another conversion
+            //
+            // Method affects behaviour of Convert() in case input character
+            // cannot be converted because it does not exist in output encoding:
+            //     wxCONVERT_STRICT -- 
+            //              follow behaviour of GNU Recode - just copy unconvertable 
+            //              characters to output and don't change them (it's integer 
+            //              value will stay the same)
+            //     wxCONVERT_SUBSTITUTE --
+            //              try some (lossy) substitutions - e.g. replace 
+            //              unconvertable latin capitals with acute by ordinary
+            //              capitals, replace en-dash or em-dash by '-' etc.
+            //     both modes gurantee that output string will have same length
+            //     as input string
+            //
+            // Returns FALSE if given conversion is impossible, TRUE otherwise
+            // (conversion may be impossible either if you try to convert
+            // to Unicode with non-Unicode build of wxWindows or if input
+            // or output encoding is not supported.)
+            bool Init(wxFontEncoding input_enc, wxFontEncoding output_enc, int method = wxCONVERT_STRICT);
+            
+            // Convert input string according to settings passed to Init.
+            // Note that you must call Init before using Convert!
+            wxString Convert(const wxString& input);
+            void Convert(const wxChar* input, wxChar* output);
+            void Convert(wxChar* str) { Convert(str, str); }
+            
+            // Return equivalent(s) for given font that are used
+            // under given platform. wxPLATFORM_CURRENT means the plaform
+            // this binary was compiled for
+            //
+            // Examples:
+            //     current platform          enc    returned value
+            // -----------------------------------------------------
+            //     unix                   CP1250         {ISO8859_2}
+            //     unix                ISO8859_2                  {}
+            //     windows             ISO8859_2            {CP1250}
+            //
+            // Equivalence is defined in terms of convertibility:
+            // 2 encodings are equivalent if you can convert text between
+            // then without loosing information (it may - and will - happen
+            // that you loose special chars like quotation marks or em-dashes
+            // but you shouldn't loose any diacritics and language-specific
+            // characters when converting between equivalent encodings).
+            // 
+            // Convert() method is not limited to converting between 
+            // equivalent encodings, it can convert between arbitrary
+            // two encodings!
+            //
+            // Remember that this function does _NOT_ check for presence of
+            // fonts in system. It only tells you what are most suitable
+            // encodings. (It usually returns only one encoding)
+            //
+            // Note that argument enc itself may be present in returned array!
+            // (so that you can -- as a side effect -- detect whether the
+            // encoding is native for this platform or not)
+            static wxFontEncodingArray GetPlatformEquivalents(wxFontEncoding enc, int platform = wxPLATFORM_CURRENT);
+
+            // Similar to GetPlatformEquivalent, but this one will return ALL 
+            // equivalent encodings, regardless the platform, including itself.
+            static wxFontEncodingArray GetAllEquivalents(wxFontEncoding enc);
+
+    private:
+    
+            wxChar *m_Table;
+            bool m_UnicodeInput;
+            bool m_JustCopy;
+            
+};
+
+
+#endif  // __ENCCONV_H__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/common/encconv.cpp b/src/common/encconv.cpp
new file mode 100644
index 0000000000..85acc2143a
--- /dev/null
+++ b/src/common/encconv.cpp
@@ -0,0 +1,294 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        encconv.cpp
+// Purpose:     wxEncodingConverter class for converting between different
+//              font encodings
+// Author:      Vaclav Slavik
+// Copyright:   (c) 1999 Vaclav Slavik
+// Licence:     wxWindows Licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef __GNUG__
+#pragma implementation "encconv.h"
+#endif
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+  #pragma hdrstop
+#endif
+
+#include "wx/encconv.h"
+
+#include <stdlib.h>
+
+#include "unictabl.inc" 
+// conversion tables, generated by scripts in $(WXWIN)/misc/unictabl
+
+
+static wxUint16 *GetEncTable(wxFontEncoding enc)
+{
+    for (int i = 0; encodings_list[i].table != NULL; i++)
+    {
+        if (encodings_list[i].encoding == enc) 
+            return encodings_list[i].table;
+    }
+    return NULL;
+}
+
+typedef struct {
+    wxUint16 u;
+    wxUint8  c;
+} CharsetItem;
+
+
+
+static int CompareCharsetItems(const void *i1, const void *i2)
+{
+    return ( ((CharsetItem*)i1) -> u - ((CharsetItem*)i2) -> u );
+}
+
+
+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];
+
+    qsort(rev, 128, sizeof(CharsetItem), CompareCharsetItems);
+    
+    return rev;
+}
+
+
+
+wxEncodingConverter::wxEncodingConverter()
+{
+    m_Table = NULL;
+    m_UnicodeInput = FALSE;
+    m_JustCopy = FALSE;
+}
+
+
+
+bool wxEncodingConverter::Init(wxFontEncoding input_enc, wxFontEncoding output_enc, int method)
+{
+    unsigned i;
+    wxUint16 *in_tbl = NULL, *out_tbl = NULL;
+
+    if (m_Table) {delete[] m_Table; m_Table = NULL;}
+
+#if !wxUSE_UNICODE
+    if (input_enc == wxFONTENCODING_UNICODE || output_enc == wxFONTENCODING_UNICODE) return FALSE;
+#endif
+
+    if (input_enc == output_enc) {m_JustCopy = TRUE; return TRUE;}
+    
+    m_JustCopy = FALSE;
+    
+    if (input_enc == wxFONTENCODING_UNICODE)
+    {
+        if ((out_tbl = GetEncTable(output_enc)) == NULL) return FALSE;
+
+        m_Table = new wxChar[65536];
+        for (i = 0; i < 128; i++)  m_Table[i] = (wxChar)i; // 7bit ASCII
+        for (i = 128; i < 65536; i++)  m_Table[i] = (wxChar)'?'; 
+                // FIXME - this should be character that means `unicode to charset' impossible, not '?'
+
+        if (method == wxCONVERT_SUBSTITUTE)
+        {
+            for (i = 0; i < encoding_unicode_fallback_count; i++)
+                m_Table[encoding_unicode_fallback[i].c] = (wxChar) encoding_unicode_fallback[i].s;
+        }
+
+        for (i = 0; i < 128; i++)
+            m_Table[out_tbl[i]] = (wxChar)(128 + i);
+
+        m_UnicodeInput = TRUE;
+        return TRUE;
+    }
+    
+    else
+    {
+        if ((in_tbl = GetEncTable(input_enc)) == NULL) return FALSE;
+        if (output_enc != wxFONTENCODING_UNICODE)
+            if ((out_tbl = GetEncTable(output_enc)) == NULL) return FALSE;
+
+        m_UnicodeInput = FALSE;
+        
+        m_Table = new wxChar[256];
+        for (i = 0; i < 128; i++)  m_Table[i] = (wxChar)i; // 7bit ASCII
+        
+        if (output_enc == wxFONTENCODING_UNICODE)
+        {
+            for (i = 0; i < 128; i++)  m_Table[128 + i] = (wxChar)in_tbl[i]; // wxChar is 2byte now
+            return TRUE;
+        }
+        else 
+        {
+            CharsetItem *rev = BuildReverseTable(out_tbl);
+            CharsetItem *item, key;
+            
+            for (i = 0; i < 128; i++)  
+            {
+                key.u = in_tbl[i];
+                item = (CharsetItem*) bsearch(&key, rev, 128, sizeof(CharsetItem), CompareCharsetItems);
+                if (item == NULL && method == wxCONVERT_SUBSTITUTE)
+                    item = (CharsetItem*) bsearch(&key, encoding_unicode_fallback, 
+                                encoding_unicode_fallback_count, sizeof(CharsetItem), CompareCharsetItems);
+                if (item)
+                    m_Table[128 + i] = (wxChar)item -> c;
+                else
+                    m_Table[128 + i] = 128 + i; // don't know => don't touch
+            }
+            
+            delete[] rev;
+            return TRUE;
+        }
+    }
+}
+
+
+void wxEncodingConverter::Convert(const wxChar* input, wxChar* output)
+{
+    if (m_JustCopy)
+    {
+        wxStrcpy(output, input);
+        return;
+    }
+    
+    wxASSERT_MSG(m_Table != NULL, wxT("You must call wxEncodingConverter::Init() before actually converting!"));
+    
+    const wxChar *i;
+    wxChar *o;
+    
+    if (m_UnicodeInput)
+        for (i = input, o = output; *i != 0; i++, o++)
+            *o = (wxChar)(m_Table[(wxUint16)*i]);
+    else
+        for (i = input, o = output; *i != 0; i++, o++)
+            *o = (wxChar)(m_Table[(wxUint8)*i]);
+    *o = 0;
+}
+
+
+
+wxString wxEncodingConverter::Convert(const wxString& input)
+{
+    if (m_JustCopy) return input;
+    
+    wxString s;
+    const wxChar *i;
+    
+    wxASSERT_MSG(m_Table != NULL, wxT("You must call wxEncodingConverter::Init() before actually converting!"));
+    
+    if (m_UnicodeInput)
+        for (i = input.c_str(); *i != 0; i++)
+            s << (wxChar)(m_Table[(wxUint16)*i]);
+    else
+        for (i = input.c_str(); *i != 0; i++)
+            s << (wxChar)(m_Table[(wxUint8)*i]);
+    return s;
+}
+
+
+
+
+// Following tables describe classes of encoding equivalence.
+// 
+
+#define STOP wxFONTENCODING_SYSTEM
+
+#define NUM_OF_PLATFORMS  4 /*must conform to enum wxPLATFORM_XXXX !!!*/
+#define ENC_PER_PLATFORM  3
+           // max no. of encodings for one language used on one platform
+           // Anybody thinks 3 is not enough? ;-)
+
+static wxFontEncoding 
+    EquivalentEncodings[][NUM_OF_PLATFORMS][ENC_PER_PLATFORM+1] = {
+
+    // West European (Latin1)
+    {
+        /* unix    */ {wxFONTENCODING_ISO8859_1, wxFONTENCODING_ISO8859_15, STOP},
+        /* windows */ {wxFONTENCODING_CP1252, STOP},
+        /* os2     */ {STOP},
+        /* mac     */ {STOP}   
+    },
+
+    // Central European (Latin2)
+    {
+        /* unix    */ {wxFONTENCODING_ISO8859_2, STOP},
+        /* windows */ {wxFONTENCODING_CP1250, STOP},
+        /* os2     */ {STOP},
+        /* mac     */ {STOP}   
+    },
+
+    {{STOP},{STOP},{STOP},{STOP}} /* Terminator */
+    /* no, _not_ Arnold! */
+};
+
+
+
+
+wxFontEncodingArray wxEncodingConverter::GetPlatformEquivalents(wxFontEncoding enc, int platform)
+{
+    if (platform == wxPLATFORM_CURRENT)
+    {
+#if defined(__WXMSW__)
+        platform = wxPLATFORM_WINDOWS;
+#elif defined(__WXGTK__) || defined(__WXMOTIF__)
+        platform = wxPLATFORM_UNIX;
+#elif defined(__WXOS2__)
+        platform = wxPLATFORM_OS2;
+#elif defined(__WXMAC__)
+        platform = wxPLATFORM_MAC;
+#endif
+    }
+    
+    int i, clas, e ;
+    wxFontEncoding *f;
+    wxFontEncodingArray arr;
+
+    clas = 0;
+    while (EquivalentEncodings[clas][0][0] != STOP)
+    {
+        for (i = 0; i < NUM_OF_PLATFORMS; i++)
+            for (e = 0; EquivalentEncodings[clas][i][e] != STOP; e++)
+                if (EquivalentEncodings[clas][i][e] == enc)
+                {
+                    for (f = EquivalentEncodings[clas][platform]; *f != STOP; f++) 
+                        if (arr.Index(*f) == wxNOT_FOUND) arr.Add(*f);
+                    i = NUM_OF_PLATFORMS/*hack*/; break; 
+                }
+        clas++;
+    }
+    
+    return arr;
+}
+
+
+
+wxFontEncodingArray wxEncodingConverter::GetAllEquivalents(wxFontEncoding enc)
+{
+    int i, clas, e, j ;
+    wxFontEncoding *f;
+    wxFontEncodingArray arr;
+
+    clas = 0;
+    while (EquivalentEncodings[clas][0][0] != STOP)
+    {
+        for (i = 0; i < NUM_OF_PLATFORMS; i++)
+            for (e = 0; EquivalentEncodings[clas][i][e] != STOP; e++)
+                if (EquivalentEncodings[clas][i][e] == enc)
+                {
+                    for (j = 0; j < NUM_OF_PLATFORMS; j++)
+                        for (f = EquivalentEncodings[clas][j]; *f != STOP; f++) 
+                            if (arr.Index(*f) == wxNOT_FOUND) arr.Add(*f);                            
+                    i = NUM_OF_PLATFORMS/*hack*/; break; 
+                }
+        clas++;
+    }
+    
+    return arr;
+}
diff --git a/src/common/unictabl.inc b/src/common/unictabl.inc
new file mode 100644
index 0000000000..bf3c163370
--- /dev/null
+++ b/src/common/unictabl.inc
@@ -0,0 +1,846 @@
+
+
+/*
+ *	This file is #included by encconv.cpp
+ *
+ *	CVS-ID: $Id$
+ *
+ *	*** ***  CAUTION! *** ***
+ *	Do not modify this file by hand! It is generated by shell
+ *	script $(WXWIN)/misc/unictabl/regenerate
+ *
+ *	Parts of this file are based on tables published by Unicode, Inc.
+ *	Original tables are freely available at 
+ *	    ftp://ftp.unicode.org/MAPPINGS
+ *
+ *	Original copyright info as present in mapping tables follows:
+ *
+ *
+ *	Copyright (c) 1991-1999 Unicode, Inc.  All Rights reserved.
+ *
+ *	This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
+ *	No claims are made as to fitness for any particular purpose.  No
+ *	warranties of any kind are expressed or implied.  The recipient
+ *	agrees to determine applicability of information provided.  If this
+ *	file has been provided on optical media by Unicode, Inc., the sole
+ *	remedy for any claim will be exchange of defective media within 90
+ *	days of receipt.
+ *
+ *	Unicode, Inc. hereby grants the right to freely use the information
+ *	supplied in this file in the creation of products supporting the
+ *	Unicode Standard, and to make copies of this file in any form for
+ *	internal or external distribution as long as this notice remains
+ *	attached.
+ */
+
+
+
+
+/* 
+ * ISO8859_1 to Unicode recoding table 
+ * based on file mappings/8859-1.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_1[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+    0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+    0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+    0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+    0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+    0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 
+    0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+    0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+    0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+    0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+ };
+
+
+/* 
+ * ISO8859_10 to Unicode recoding table 
+ * based on file mappings/8859-10.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_10[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7, 
+    0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A, 
+    0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7, 
+    0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2015, 0x016B, 0x014B, 
+    0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, 
+    0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF, 
+    0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168, 
+    0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 
+    0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, 
+    0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x00EF, 
+    0x00F0, 0x0146, 0x014D, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0169, 
+    0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138
+ };
+
+
+/* 
+ * ISO8859_13 to Unicode recoding table 
+ * based on file mappings/8859-13.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_13[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7, 
+    0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7, 
+    0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, 
+    0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, 
+    0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, 
+    0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, 
+    0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, 
+    0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, 
+    0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, 
+    0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, 
+    0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x2019
+ };
+
+
+/* 
+ * ISO8859_14 to Unicode recoding table 
+ * based on file mappings/8859-14.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_14[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x1E02, 0x1E03, 0x00A3, 0x010A, 0x010B, 0x1E0A, 0x00A7, 
+    0x1E80, 0x00A9, 0x1E82, 0x1E0B, 0x1EF2, 0x00AD, 0x00AE, 0x0178, 
+    0x1E1E, 0x1E1F, 0x0120, 0x0121, 0x1E40, 0x1E41, 0x00B6, 0x1E56, 
+    0x1E81, 0x1E57, 0x1E83, 0x1E60, 0x1EF3, 0x1E84, 0x1E85, 0x1E61, 
+    0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+    0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+    0x0174, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x1E6A, 
+    0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x0176, 0x00DF, 
+    0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+    0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+    0x0175, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x1E6B, 
+    0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x0177, 0x00FF
+ };
+
+
+/* 
+ * ISO8859_15 to Unicode recoding table 
+ * based on file mappings/8859-15.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_15[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, 
+    0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, 
+    0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, 
+    0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+    0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+    0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+    0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 
+    0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+    0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+    0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+    0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+ };
+
+
+/* 
+ * ISO8859_2 to Unicode recoding table 
+ * based on file mappings/8859-2.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_2[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, 
+    0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, 
+    0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, 
+    0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, 
+    0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, 
+    0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, 
+    0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 
+    0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, 
+    0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 
+    0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, 
+    0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 
+    0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
+ };
+
+
+/* 
+ * ISO8859_3 to Unicode recoding table 
+ * based on file mappings/8859-3.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_3[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0x0000, 0x0124, 0x00A7, 
+    0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0x0000, 0x017B, 
+    0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7, 
+    0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0x0000, 0x017C, 
+    0x00C0, 0x00C1, 0x00C2, 0x0000, 0x00C4, 0x010A, 0x0108, 0x00C7, 
+    0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+    0x0000, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7, 
+    0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF, 
+    0x00E0, 0x00E1, 0x00E2, 0x0000, 0x00E4, 0x010B, 0x0109, 0x00E7, 
+    0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+    0x0000, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7, 
+    0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9
+ };
+
+
+/* 
+ * ISO8859_4 to Unicode recoding table 
+ * based on file mappings/8859-4.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_4[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7, 
+    0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF, 
+    0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7, 
+    0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B, 
+    0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, 
+    0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A, 
+    0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+    0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF, 
+    0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, 
+    0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B, 
+    0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+    0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9
+ };
+
+
+/* 
+ * ISO8859_5 to Unicode recoding table 
+ * based on file mappings/8859-5.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_5[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 
+    0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, 
+    0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 
+    0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 
+    0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 
+    0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 
+    0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 
+    0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 
+    0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 
+    0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 
+    0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 
+    0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F
+ };
+
+
+/* 
+ * ISO8859_6 to Unicode recoding table 
+ * based on file mappings/8859-6.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_6[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x0000, 0x0000, 0x0000, 0x00A4, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x060C, 0x00AD, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x061B, 0x0000, 0x0000, 0x0000, 0x061F, 
+    0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 
+    0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 
+    0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 
+    0x0638, 0x0639, 0x063A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 
+    0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 
+    0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+ };
+
+
+/* 
+ * ISO8859_7 to Unicode recoding table 
+ * based on file mappings/8859-7.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_7[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x2018, 0x2019, 0x00A3, 0x0000, 0x0000, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x0000, 0x00AB, 0x00AC, 0x00AD, 0x0000, 0x2015, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7, 
+    0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, 
+    0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 
+    0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 
+    0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 
+    0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 
+    0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 
+    0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 
+    0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 
+    0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000
+ };
+
+
+/* 
+ * ISO8859_8 to Unicode recoding table 
+ * based on file mappings/8859-8.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_8[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x203E, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+    0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017, 
+    0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 
+    0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 
+    0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 
+    0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+ };
+
+
+/* 
+ * ISO8859_9 to Unicode recoding table 
+ * based on file mappings/8859-9.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__ISO8859_9[128] = {
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 
+    0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 
+    0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 
+    0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+    0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+    0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+    0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+    0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+    0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, 
+    0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+    0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+    0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+    0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
+ };
+
+
+/* 
+ * CP1250 to Unicode recoding table 
+ * based on file mappings/CP1250.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__CP1250[128] = {
+    0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 
+    0x0000, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179, 
+    0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+    0x0000, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A, 
+    0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B, 
+    0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+    0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C, 
+    0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, 
+    0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, 
+    0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 
+    0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, 
+    0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 
+    0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, 
+    0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 
+    0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
+ };
+
+
+/* 
+ * CP1251 to Unicode recoding table 
+ * based on file mappings/CP1251.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__CP1251[128] = {
+    0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, 
+    0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, 
+    0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+    0x0000, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, 
+    0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, 
+    0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, 
+    0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, 
+    0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, 
+    0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 
+    0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 
+    0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 
+    0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 
+    0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 
+    0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 
+    0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 
+    0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
+ };
+
+
+/* 
+ * CP1252 to Unicode recoding table 
+ * based on file mappings/CP1252.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__CP1252[128] = {
+    0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+    0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x017D, 0x0000, 
+    0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+    0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x017E, 0x0178, 
+    0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+    0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+    0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+    0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+    0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+    0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 
+    0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+    0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+    0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+    0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+ };
+
+
+/* 
+ * CP1253 to Unicode recoding table 
+ * based on file mappings/CP1253.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__CP1253[128] = {
+    0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+    0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+    0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x0000, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7, 
+    0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F, 
+    0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 
+    0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 
+    0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 
+    0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 
+    0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 
+    0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 
+    0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 
+    0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000
+ };
+
+
+/* 
+ * CP1254 to Unicode recoding table 
+ * based on file mappings/CP1254.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__CP1254[128] = {
+    0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+    0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+    0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178, 
+    0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+    0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+    0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 
+    0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 
+    0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 
+    0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, 
+    0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 
+    0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 
+    0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 
+    0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
+ };
+
+
+/* 
+ * CP1255 to Unicode recoding table 
+ * based on file mappings/CP1255.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__CP1255[128] = {
+    0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+    0x02C6, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+    0x02DC, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+    0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 
+    0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, 
+    0x05B8, 0x05B9, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, 
+    0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3, 
+    0x05F4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
+    0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 
+    0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 
+    0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 
+    0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000
+ };
+
+
+/* 
+ * CP1256 to Unicode recoding table 
+ * based on file mappings/CP1256.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__CP1256[128] = {
+    0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 
+    0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, 
+    0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+    0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA, 
+    0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 
+    0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+    0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F, 
+    0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 
+    0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 
+    0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7, 
+    0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643, 
+    0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7, 
+    0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF, 
+    0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7, 
+    0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2
+ };
+
+
+/* 
+ * CP1257 to Unicode recoding table 
+ * based on file mappings/CP1257.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__CP1257[128] = {
+    0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 
+    0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8, 
+    0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 
+    0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000, 
+    0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x0000, 0x00A6, 0x00A7, 
+    0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, 
+    0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 
+    0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6, 
+    0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, 
+    0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B, 
+    0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, 
+    0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF, 
+    0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, 
+    0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C, 
+    0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, 
+    0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9
+ };
+
+
+/* 
+ * KOI8 to Unicode recoding table 
+ * based on file mappings/KOI8-R.TXT by Unicode Consortium
+ */
+
+static wxUint16 encoding_table__KOI8[128] = {
+    0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, 
+    0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, 
+    0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, 
+    0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, 
+    0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, 
+    0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, 
+    0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, 
+    0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9, 
+    0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, 
+    0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 
+    0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, 
+    0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, 
+    0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, 
+    0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 
+    0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, 
+    0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A
+ };
+
+
+
+
+
+/*
+ *
+ * Unicode to 7bit ASCII fallback
+ * (for use with wxRECODE_SUBSTITUTE recoding mode)
+ *
+ */
+
+static struct {
+    wxUint16 c  /*code*/;
+    wxUint8  s /*inaccurate substitution*/;
+} encoding_unicode_fallback[] = {
+
+    {0x00AB, 0x22},
+    {0x00BB, 0x22},
+    {0x00C0, 0x41},
+    {0x00C1, 0x41},
+    {0x00C2, 0x41},
+    {0x00C3, 0x41},
+    {0x00C4, 0x41},
+    {0x00C5, 0x41},
+    {0x00C7, 0x43},
+    {0x00C8, 0x45},
+    {0x00C9, 0x45},
+    {0x00CA, 0x45},
+    {0x00CB, 0x45},
+    {0x00CC, 0x49},
+    {0x00CD, 0x49},
+    {0x00CE, 0x49},
+    {0x00CF, 0x49},
+    {0x00D1, 0x4E},
+    {0x00D2, 0x4F},
+    {0x00D3, 0x4F},
+    {0x00D4, 0x4F},
+    {0x00D5, 0x4F},
+    {0x00D6, 0x4F},
+    {0x00D8, 0x4F},
+    {0x00D9, 0x55},
+    {0x00DA, 0x55},
+    {0x00DB, 0x55},
+    {0x00DC, 0x55},
+    {0x00DD, 0x59},
+    {0x00E0, 0x61},
+    {0x00E1, 0x61},
+    {0x00E2, 0x61},
+    {0x00E3, 0x61},
+    {0x00E4, 0x61},
+    {0x00E5, 0x61},
+    {0x00E7, 0x63},
+    {0x00E8, 0x65},
+    {0x00E9, 0x65},
+    {0x00EA, 0x65},
+    {0x00EB, 0x65},
+    {0x00EC, 0x69},
+    {0x00ED, 0x69},
+    {0x00EE, 0x69},
+    {0x00EF, 0x69},
+    {0x00F1, 0x6E},
+    {0x00F2, 0x6F},
+    {0x00F3, 0x6F},
+    {0x00F4, 0x6F},
+    {0x00F5, 0x6F},
+    {0x00F6, 0x6F},
+    {0x00F8, 0x6F},
+    {0x00F9, 0x75},
+    {0x00FA, 0x75},
+    {0x00FB, 0x75},
+    {0x00FC, 0x75},
+    {0x00FD, 0x79},
+    {0x00FF, 0x79},
+    {0x0100, 0x41},
+    {0x0101, 0x61},
+    {0x0102, 0x41},
+    {0x0103, 0x61},
+    {0x0104, 0x41},
+    {0x0105, 0x61},
+    {0x0106, 0x43},
+    {0x0107, 0x63},
+    {0x0108, 0x43},
+    {0x0109, 0x63},
+    {0x010A, 0x43},
+    {0x010B, 0x63},
+    {0x010C, 0x43},
+    {0x010D, 0x63},
+    {0x010E, 0x44},
+    {0x010F, 0x64},
+    {0x0110, 0x44},
+    {0x0111, 0x64},
+    {0x0112, 0x45},
+    {0x0113, 0x65},
+    {0x0116, 0x45},
+    {0x0117, 0x65},
+    {0x0118, 0x45},
+    {0x0119, 0x65},
+    {0x011A, 0x45},
+    {0x011B, 0x65},
+    {0x011C, 0x47},
+    {0x011D, 0x67},
+    {0x011E, 0x47},
+    {0x011F, 0x67},
+    {0x0120, 0x47},
+    {0x0121, 0x67},
+    {0x0122, 0x47},
+    {0x0123, 0x67},
+    {0x0124, 0x48},
+    {0x0125, 0x68},
+    {0x0126, 0x48},
+    {0x0127, 0x68},
+    {0x0128, 0x49},
+    {0x0129, 0x69},
+    {0x012A, 0x49},
+    {0x012B, 0x69},
+    {0x012E, 0x49},
+    {0x012F, 0x69},
+    {0x0130, 0x49},
+    {0x0134, 0x4A},
+    {0x0135, 0x6A},
+    {0x0136, 0x4B},
+    {0x0137, 0x6B},
+    {0x0139, 0x4C},
+    {0x013A, 0x6C},
+    {0x013B, 0x4C},
+    {0x013C, 0x6C},
+    {0x013D, 0x4C},
+    {0x013E, 0x6C},
+    {0x0141, 0x4C},
+    {0x0142, 0x6C},
+    {0x0143, 0x4E},
+    {0x0144, 0x6E},
+    {0x0145, 0x4E},
+    {0x0146, 0x6E},
+    {0x0147, 0x4E},
+    {0x0148, 0x6E},
+    {0x014C, 0x4F},
+    {0x014D, 0x6F},
+    {0x0150, 0x4F},
+    {0x0151, 0x6F},
+    {0x0154, 0x52},
+    {0x0155, 0x72},
+    {0x0156, 0x52},
+    {0x0157, 0x72},
+    {0x0158, 0x52},
+    {0x0159, 0x72},
+    {0x015A, 0x53},
+    {0x015B, 0x73},
+    {0x015C, 0x53},
+    {0x015D, 0x73},
+    {0x015E, 0x53},
+    {0x015F, 0x73},
+    {0x0160, 0x53},
+    {0x0161, 0x73},
+    {0x0162, 0x54},
+    {0x0163, 0x74},
+    {0x0164, 0x54},
+    {0x0165, 0x74},
+    {0x0166, 0x54},
+    {0x0167, 0x74},
+    {0x0168, 0x55},
+    {0x0169, 0x75},
+    {0x016A, 0x55},
+    {0x016B, 0x75},
+    {0x016C, 0x55},
+    {0x016D, 0x75},
+    {0x016E, 0x55},
+    {0x016F, 0x75},
+    {0x0170, 0x55},
+    {0x0171, 0x75},
+    {0x0172, 0x55},
+    {0x0173, 0x75},
+    {0x0174, 0x57},
+    {0x0175, 0x77},
+    {0x0176, 0x59},
+    {0x0177, 0x79},
+    {0x0178, 0x59},
+    {0x0179, 0x5A},
+    {0x017A, 0x7A},
+    {0x017B, 0x5A},
+    {0x017C, 0x7A},
+    {0x017D, 0x5A},
+    {0x017E, 0x7A},
+    {0x0192, 0x66},
+    {0x1E02, 0x42},
+    {0x1E03, 0x62},
+    {0x1E0A, 0x44},
+    {0x1E0B, 0x64},
+    {0x1E1E, 0x46},
+    {0x1E1F, 0x66},
+    {0x1E40, 0x4D},
+    {0x1E41, 0x6D},
+    {0x1E56, 0x50},
+    {0x1E57, 0x70},
+    {0x1E60, 0x53},
+    {0x1E61, 0x73},
+    {0x1E6A, 0x54},
+    {0x1E6B, 0x74},
+    {0x1E80, 0x57},
+    {0x1E81, 0x77},
+    {0x1E82, 0x57},
+    {0x1E83, 0x77},
+    {0x1E84, 0x57},
+    {0x1E85, 0x77},
+    {0x1EF2, 0x59},
+    {0x1EF3, 0x79},
+    {0x2013, 0x2D},
+    {0x2014, 0x2D},
+    {0x2018, 0x27},
+    {0x2019, 0x27},
+    {0x201A, 0x27},
+    {0x201C, 0x22},
+    {0x201D, 0x22},
+    {0x201E, 0x22},
+    {0x2039, 0x27},
+    {0x203A, 0x27},
+    {0, 0}
+ };
+
+static unsigned encoding_unicode_fallback_count =  200;
+
+
+
+
+/*
+ *
+ * Table of all supported encodings:
+ *
+ */
+
+static struct {
+    wxFontEncoding encoding; // encoding identifier
+    wxUint16 *table;         // 8bit to unicode table
+} encodings_list[] = {
+
+    { wxFONTENCODING_ISO8859_1, encoding_table__ISO8859_1},
+    { wxFONTENCODING_ISO8859_10, encoding_table__ISO8859_10},
+    { wxFONTENCODING_ISO8859_13, encoding_table__ISO8859_13},
+    { wxFONTENCODING_ISO8859_14, encoding_table__ISO8859_14},
+    { wxFONTENCODING_ISO8859_15, encoding_table__ISO8859_15},
+    { wxFONTENCODING_ISO8859_2, encoding_table__ISO8859_2},
+    { wxFONTENCODING_ISO8859_3, encoding_table__ISO8859_3},
+    { wxFONTENCODING_ISO8859_4, encoding_table__ISO8859_4},
+    { wxFONTENCODING_ISO8859_5, encoding_table__ISO8859_5},
+    { wxFONTENCODING_ISO8859_6, encoding_table__ISO8859_6},
+    { wxFONTENCODING_ISO8859_7, encoding_table__ISO8859_7},
+    { wxFONTENCODING_ISO8859_8, encoding_table__ISO8859_8},
+    { wxFONTENCODING_ISO8859_9, encoding_table__ISO8859_9},
+    { wxFONTENCODING_CP1250, encoding_table__CP1250},
+    { wxFONTENCODING_CP1251, encoding_table__CP1251},
+    { wxFONTENCODING_CP1252, encoding_table__CP1252},
+    { wxFONTENCODING_CP1253, encoding_table__CP1253},
+    { wxFONTENCODING_CP1254, encoding_table__CP1254},
+    { wxFONTENCODING_CP1255, encoding_table__CP1255},
+    { wxFONTENCODING_CP1256, encoding_table__CP1256},
+    { wxFONTENCODING_CP1257, encoding_table__CP1257},
+    { wxFONTENCODING_KOI8, encoding_table__KOI8},
+    {wxFONTENCODING_MAX /*anything*/, NULL}
+ };
-- 
2.50.0

