diff --git a/docs/changes.txt b/docs/changes.txt index 51b8a4d090..6dd0708c9b 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -91,6 +91,7 @@ All (GUI): resulting in much better display of scaled images - Added UpdateSize to wxSplitterWindow to allow layout while hidden - implemented Freeze/Thaw() for wxGenericTreeCtrl (Kevin Hock) +- support for KOI8-U encoding added (Yuriy Tkachenko) wxMSW: diff --git a/include/wx/fontenc.h b/include/wx/fontenc.h index 622c78fde3..0f4b1ca9bc 100644 --- a/include/wx/fontenc.h +++ b/include/wx/fontenc.h @@ -39,7 +39,8 @@ enum wxFontEncoding wxFONTENCODING_ISO8859_MAX, // Cyrillic charset soup (see http://czyborra.com/charsets/cyrillic.html) - wxFONTENCODING_KOI8, // we don't support any of KOI8 variants + wxFONTENCODING_KOI8, // KOI8 Russian + wxFONTENCODING_KOI8_U, // KOI8 Ukrainian wxFONTENCODING_ALTERNATIVE, // same as MS-DOS CP866 wxFONTENCODING_BULGARIAN, // used under Linux in Bulgaria diff --git a/samples/font/font.cpp b/samples/font/font.cpp index 10242436c9..8277b873e9 100644 --- a/samples/font/font.cpp +++ b/samples/font/font.cpp @@ -425,6 +425,7 @@ void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event)) wxFONTENCODING_ISO8859_7, wxFONTENCODING_ISO8859_15, wxFONTENCODING_KOI8, + wxFONTENCODING_KOI8_U, wxFONTENCODING_CP1250, wxFONTENCODING_CP1251, wxFONTENCODING_CP1252, @@ -438,6 +439,7 @@ void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event)) wxT("Greek (ISO-8859-7)"), wxT("Western European with Euro (ISO-8859-15)"), wxT("KOI8-R"), + wxT("KOI8-U"), wxT("Windows Central European (CP 1250)"), wxT("Windows Cyrillic (CP 1251)"), wxT("Windows Western European (CP 1252)"), diff --git a/src/common/encconv.cpp b/src/common/encconv.cpp index 13850247c9..d679bd9b3f 100644 --- a/src/common/encconv.cpp +++ b/src/common/encconv.cpp @@ -412,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} diff --git a/src/common/fmapbase.cpp b/src/common/fmapbase.cpp index e9b303613c..07faf9ef98 100644 --- a/src/common/fmapbase.cpp +++ b/src/common/fmapbase.cpp @@ -72,6 +72,7 @@ static wxFontEncoding gs_encodings[] = wxFONTENCODING_ISO8859_14, wxFONTENCODING_ISO8859_15, wxFONTENCODING_KOI8, + wxFONTENCODING_KOI8_U, wxFONTENCODING_CP932, wxFONTENCODING_CP936, wxFONTENCODING_CP949, @@ -115,6 +116,7 @@ static const wxChar* gs_encodingDescs[] = wxTRANSLATE( "Celtic (ISO-8859-14)" ), wxTRANSLATE( "Western European with Euro (ISO-8859-15)" ), wxTRANSLATE( "KOI8-R" ), + wxTRANSLATE( "KOI8-U" ), wxTRANSLATE( "Windows Japanese (CP 932)" ), wxTRANSLATE( "Windows Chinese Simplified (CP 936)" ), wxTRANSLATE( "Windows Korean (CP 949)" ), @@ -158,6 +160,7 @@ static const wxChar* gs_encodingNames[] = wxT( "iso-8859-14" ), wxT( "iso-8859-15" ), wxT( "koi8-r" ), + wxT( "koi8-u" ), wxT( "windows-932" ), wxT( "windows-936" ), wxT( "windows-949" ), @@ -517,14 +520,17 @@ wxFontMapperBase::NonInteractiveCharsetToEncoding(const wxString& charset) encoding = wxFONTENCODING_EUC_JP; } else if ( cs == wxT("KOI8-R") || - cs == wxT("KOI8-U") || cs == wxT("KOI8-RU") ) { // although koi8-ru is not strictly speaking the same as koi8-r, // they are similar enough to make mapping it to koi8 better than - // not reckognizing it at all + // not recognizing it at all encoding = wxFONTENCODING_KOI8; } + else if ( cs == wxT("KOI8-U") ) + { + encoding = wxFONTENCODING_KOI8_U; + } else if ( cs.Left(3) == wxT("ISO") ) { // the dash is optional (or, to be exact, it is not, but diff --git a/src/common/fontmap.cpp b/src/common/fontmap.cpp index ccf61230d9..8be47e51c2 100644 --- a/src/common/fontmap.cpp +++ b/src/common/fontmap.cpp @@ -77,6 +77,7 @@ wxBEGIN_ENUM( wxFontEncoding ) wxENUM_MEMBER( wxFONTENCODING_ISO8859_15 ) wxENUM_MEMBER( wxFONTENCODING_ISO8859_MAX ) wxENUM_MEMBER( wxFONTENCODING_KOI8 ) + wxENUM_MEMBER( wxFONTENCODING_KOI8_U ) wxENUM_MEMBER( wxFONTENCODING_ALTERNATIVE ) wxENUM_MEMBER( wxFONTENCODING_BULGARIAN ) wxENUM_MEMBER( wxFONTENCODING_CP437 ) diff --git a/src/common/unictabl.inc b/src/common/unictabl.inc index bf3c163370..b7e76fc04c 100644 --- a/src/common/unictabl.inc +++ b/src/common/unictabl.inc @@ -586,6 +586,31 @@ static wxUint16 encoding_table__KOI8[128] = { }; +/* + * KOI8_U to Unicode recoding table + * based on file mappings/KOI8-U.TXT by Unicode Consortium + */ + +static wxUint16 encoding_table__KOI8_U[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, 0x0454, 0x2554, 0x0456, 0x0457, + 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x0491, 0x255D, 0x255E, + 0x255F, 0x2560, 0x2561, 0x0401, 0x0403, 0x2563, 0x0406, 0x0407, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x0490, 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 + }; + + @@ -842,5 +867,6 @@ static struct { { wxFONTENCODING_CP1256, encoding_table__CP1256}, { wxFONTENCODING_CP1257, encoding_table__CP1257}, { wxFONTENCODING_KOI8, encoding_table__KOI8}, + { wxFONTENCODING_KOI8_U, encoding_table__KOI8_U}, {wxFONTENCODING_MAX /*anything*/, NULL} }; diff --git a/src/unix/fontutil.cpp b/src/unix/fontutil.cpp index e422117996..df38f593be 100644 --- a/src/unix/fontutil.cpp +++ b/src/unix/fontutil.cpp @@ -715,6 +715,7 @@ bool wxGetNativeFontEncoding(wxFontEncoding encoding, break; case wxFONTENCODING_KOI8: + case wxFONTENCODING_KOI8_U: info->xregistry = wxT("koi8"); // we don't make distinction between koi8-r, koi8-u and koi8-ru (so far)