remove symbian support vestiges from text codecs
Change-Id: I7b577d360cb9c7225da108ee56fd927a91a04dee Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>bb10
parent
1135aeb1d8
commit
f0841fe4cf
|
|
@ -35,7 +35,7 @@ unix {
|
|||
HEADERS += codecs/qiconvcodec_p.h
|
||||
SOURCES += codecs/qiconvcodec.cpp
|
||||
DEFINES += GNU_LIBICONV
|
||||
} else:!symbian {
|
||||
} else {
|
||||
# no iconv, so we put all plugins in the library
|
||||
HEADERS += \
|
||||
../plugins/codecs/cn/qgb18030codec.h \
|
||||
|
|
@ -56,4 +56,3 @@ unix {
|
|||
../plugins/codecs/jp/qfontjpcodec.cpp
|
||||
}
|
||||
}
|
||||
symbian:LIBS += -lcharconv
|
||||
|
|
|
|||
|
|
@ -54,7 +54,6 @@ static const struct {
|
|||
int mib;
|
||||
quint16 values[128];
|
||||
} unicodevalues[QSimpleTextCodec::numSimpleCodecs] = {
|
||||
#ifndef Q_OS_SYMBIAN
|
||||
// from RFC 1489, ftp://ftp.isi.edu/in-notes/rfc1489.txt
|
||||
{ "KOI8-R", { "csKOI8R", 0 }, 2084,
|
||||
{ 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524,
|
||||
|
|
@ -289,7 +288,6 @@ static const struct {
|
|||
0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
|
||||
0x0175, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x1E6B,
|
||||
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x0177, 0x00FF} },
|
||||
#endif
|
||||
{ "ISO-8859-16", { "iso-ir-226", "latin10", 0 }, 112,
|
||||
{ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
|
||||
0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
|
||||
|
|
@ -311,7 +309,6 @@ static const struct {
|
|||
// next bits generated again from tables on the Unicode 3.0 CD.
|
||||
|
||||
// $ for a in CP* ; do (awk '/^0x[89ABCDEF]/{ print $1, $2 }' < $a) | sort | sed -e 's/#UNDEF.*$/0xFFFD/' | cut -c6- | paste '-d ' - - - - - - - - | sed -e 's/ /, /g' -e 's/$/,/' -e '$ s/,$/} },/' -e '1 s/^/{ /' > ~/tmp/$a ; done
|
||||
#ifndef Q_OS_SYMBIAN
|
||||
{ "IBM850", { "CP850", "csPC850Multilingual", 0 }, 2009,
|
||||
{ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
|
||||
0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
|
||||
|
|
@ -346,7 +343,6 @@ static const struct {
|
|||
0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F,
|
||||
0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57,
|
||||
0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD} },
|
||||
#endif //Q_OS_SYMBIAN
|
||||
{ "IBM866", { "CP866", "csIBM866", 0 }, 2086,
|
||||
{ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
|
||||
0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||
|
|
@ -365,7 +361,6 @@ static const struct {
|
|||
0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E,
|
||||
0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0} },
|
||||
|
||||
#ifndef Q_OS_SYMBIAN
|
||||
{ "windows-1250", { "CP1250", 0 }, 2250,
|
||||
{ 0x20AC, 0xFFFD, 0x201A, 0xFFFD, 0x201E, 0x2026, 0x2020, 0x2021,
|
||||
0xFFFD, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
|
||||
|
|
@ -520,7 +515,6 @@ static const struct {
|
|||
0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7,
|
||||
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF} },
|
||||
|
||||
#endif
|
||||
{ "Apple Roman", { "macintosh", "MacRoman", 0 }, -168,
|
||||
{ 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1,
|
||||
0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8,
|
||||
|
|
@ -560,7 +554,6 @@ static const struct {
|
|||
0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
|
||||
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF} },
|
||||
|
||||
#ifndef Q_OS_SYMBIAN
|
||||
// this one is generated from the charmap file located in /usr/share/i18n/charmaps
|
||||
// on most Linux distributions. The thai character set tis620 is byte by byte equivalent
|
||||
// to iso8859-11, so we name it 8859-11 here, but recognise the name tis620 too.
|
||||
|
|
@ -584,7 +577,6 @@ static const struct {
|
|||
0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57,
|
||||
0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD } },
|
||||
|
||||
#endif
|
||||
/*
|
||||
Name: hp-roman8 [HP-PCL5,RFC1345,KXS2]
|
||||
MIBenum: 2004
|
||||
|
|
|
|||
|
|
@ -64,11 +64,7 @@ template <typename T> class QAtomicPointer;
|
|||
class QSimpleTextCodec: public QTextCodec
|
||||
{
|
||||
public:
|
||||
#ifdef Q_OS_SYMBIAN
|
||||
enum { numSimpleCodecs = 5 };
|
||||
#else
|
||||
enum { numSimpleCodecs = 30 };
|
||||
#endif
|
||||
explicit QSimpleTextCodec(int);
|
||||
~QSimpleTextCodec();
|
||||
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@
|
|||
#ifndef QT_NO_CODECS
|
||||
# include "qtsciicodec_p.h"
|
||||
# include "qisciicodec_p.h"
|
||||
#if !defined(Q_OS_SYMBIAN) && !defined(Q_OS_INTEGRITY)
|
||||
#if !defined(Q_OS_INTEGRITY)
|
||||
# if defined(QT_NO_ICONV) && !defined(QT_BOOTSTRAPPED)
|
||||
// no iconv(3) support, must build all codecs into the library
|
||||
# include "../../plugins/codecs/cn/qgb18030codec.h"
|
||||
|
|
@ -78,7 +78,7 @@
|
|||
# include "qfontlaocodec_p.h"
|
||||
# include "../../plugins/codecs/jp/qfontjpcodec.h"
|
||||
# endif
|
||||
#endif // QT_NO_SYMBIAN
|
||||
#endif // !Q_OS_INTEGRITY
|
||||
#endif // QT_NO_CODECS
|
||||
#include "qlocale.h"
|
||||
#include "qmutex.h"
|
||||
|
|
@ -95,10 +95,6 @@
|
|||
# define QT_NO_SETLOCALE
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_SYMBIAN
|
||||
#include "qtextcodec_symbian.cpp"
|
||||
#endif
|
||||
|
||||
|
||||
// enabling this is not exception safe!
|
||||
// #define Q_DEBUG_TEXTCODEC
|
||||
|
|
@ -231,14 +227,7 @@ Q_GLOBAL_STATIC(QTextCodecCleanup, createQTextCodecCleanup)
|
|||
|
||||
bool QTextCodec::validCodecs()
|
||||
{
|
||||
#ifdef Q_OS_SYMBIAN
|
||||
// If we don't have a trap handler, we're outside of the main() function,
|
||||
// ie. in global constructors or destructors. Don't use codecs in this
|
||||
// case as it would lead to crashes because we don't have a cleanup stack on Symbian
|
||||
return (User::TrapHandler() != NULL);
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -588,12 +577,6 @@ static QTextCodec *checkForCodec(const QByteArray &name) {
|
|||
*/
|
||||
static void setupLocaleMapper()
|
||||
{
|
||||
#ifdef Q_OS_SYMBIAN
|
||||
localeMapper = QSymbianTextCodec::localeMapper;
|
||||
if (localeMapper)
|
||||
return;
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE)
|
||||
localeMapper = QTextCodec::codecForName("System");
|
||||
#else
|
||||
|
|
@ -728,14 +711,6 @@ static void setup()
|
|||
if (all)
|
||||
return;
|
||||
|
||||
#ifdef Q_OS_SYMBIAN
|
||||
// If we don't have a trap handler, we're outside of the main() function,
|
||||
// ie. in global constructors or destructors. Don't create codecs in this
|
||||
// case as it would lead to crashes because of a missing cleanup stack on Symbian
|
||||
if (User::TrapHandler() == NULL)
|
||||
return;
|
||||
#endif
|
||||
|
||||
#ifdef Q_DEBUG_TEXTCODEC
|
||||
if (destroying_is_ok)
|
||||
qWarning("QTextCodec: Creating new codec during codec cleanup");
|
||||
|
|
@ -752,10 +727,6 @@ static void setup()
|
|||
for (int i = 0; i < QSimpleTextCodec::numSimpleCodecs; ++i)
|
||||
(void)new QSimpleTextCodec(i);
|
||||
|
||||
#ifdef Q_OS_SYMBIAN
|
||||
localeMapper = QSymbianTextCodec::init();
|
||||
#endif
|
||||
|
||||
# if defined(Q_OS_UNIX) && !defined(QT_BOOTSTRAPPED)
|
||||
// no font codecs when bootstrapping
|
||||
(void)new QFontLaoCodec;
|
||||
|
|
@ -773,7 +744,7 @@ static void setup()
|
|||
# endif // Q_OS_UNIX
|
||||
|
||||
|
||||
#if !defined(Q_OS_SYMBIAN) && !defined(Q_OS_INTEGRITY)
|
||||
#if !defined(Q_OS_INTEGRITY)
|
||||
# if defined(QT_NO_ICONV) && !defined(QT_BOOTSTRAPPED)
|
||||
// no asian codecs when bootstrapping, sorry
|
||||
(void)new QGb18030Codec;
|
||||
|
|
@ -787,7 +758,7 @@ static void setup()
|
|||
(void)new QBig5Codec;
|
||||
(void)new QBig5hkscsCodec;
|
||||
# endif // QT_NO_ICONV && !QT_BOOTSTRAPPED
|
||||
#endif //Q_OS_SYMBIAN
|
||||
#endif // !Q_OS_INTEGRITY
|
||||
#endif // QT_NO_CODECS
|
||||
|
||||
#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE)
|
||||
|
|
@ -800,13 +771,11 @@ static void setup()
|
|||
(void)new QUtf32Codec;
|
||||
(void)new QUtf32BECodec;
|
||||
(void)new QUtf32LECodec;
|
||||
#ifndef Q_OS_SYMBIAN
|
||||
(void)new QLatin15Codec;
|
||||
#endif
|
||||
(void)new QLatin1Codec;
|
||||
(void)new QUtf8Codec;
|
||||
|
||||
#if !defined(Q_OS_SYMBIAN) && !defined(Q_OS_INTEGRITY)
|
||||
#if !defined(Q_OS_INTEGRITY)
|
||||
#if defined(Q_OS_UNIX) && !defined(QT_NO_ICONV) && !defined(QT_BOOTSTRAPPED)
|
||||
// QIconvCodec depends on the UTF-16 codec, so it needs to be created last
|
||||
(void) new QIconvCodec();
|
||||
|
|
|
|||
|
|
@ -1,689 +0,0 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** This file may be used under the terms of the GNU Lesser General Public
|
||||
** License version 2.1 as published by the Free Software Foundation and
|
||||
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||
** file. Please review the following information to ensure the GNU Lesser
|
||||
** General Public License version 2.1 requirements will be met:
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU General
|
||||
** Public License version 3.0 as published by the Free Software Foundation
|
||||
** and appearing in the file LICENSE.GPL included in the packaging of this
|
||||
** file. Please review the following information to ensure the GNU General
|
||||
** Public License version 3.0 requirements will be met:
|
||||
** http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qtextcodec_p.h"
|
||||
|
||||
#include <private/qcore_symbian_p.h>
|
||||
#include <QThreadStorage>
|
||||
#include <QScopedPointer>
|
||||
|
||||
#include <charconv.h>
|
||||
|
||||
struct QSymbianCodecInitData {
|
||||
uint charsetId;
|
||||
int mib;
|
||||
const char *aliases;
|
||||
};
|
||||
|
||||
/* This table contains the known Symbian codecs aliases.
|
||||
It is required because symbian does not provide aliases for codecs.
|
||||
It is also faster to have a name here than asking the system.
|
||||
It is ordered by charsetId to allow binary search lookup
|
||||
*/
|
||||
static const QSymbianCodecInitData codecsData[] = {
|
||||
{ /*268439485*/ KCharacterSetIdentifierShiftJis, 17, "Shift_JIS\0MS_Kanji\0csShiftJIS\0SJIS\0" },
|
||||
{ /*268439486*/ KCharacterSetIdentifierGb2312, 57, "GB2312\0csGB2312\0CN-GB\0EUC-CN\0" }, // Note: ConvertCharacterSetIdentifierToMibEnumL returns Mib 0 instaead of 57
|
||||
{ /*268439487*/ KCharacterSetIdentifierBig5, 2026, "Big5\0csBig5\0Big5-ETen\0CP950\0BIG-FIVE\0CN-BIG5\0" },
|
||||
{ /*268440246*/ KCharacterSetIdentifierCodePage1252, 2252, "windows-1252\0Code Page 1252\0CP1252\0MS-ANSI\0" },
|
||||
// { /*268450576*/ KCharacterSetIdentifierIso88591, 4, "ISO-8859-1\0ISO_8859-1:1987\0iso-ir-100\0ISO_8859-1\0latin1\0l1\0IBM819\0CP819\0csISOLatin1\0ISO-IR-100\0ISO8859-1\0L1\0LATIN1\0CSISOLATIN1\0" },
|
||||
{ /*268451531*/ KCharacterSetIdentifierGbk, 113, "GBK\0MS936\0windows-936\0CP936\0" },
|
||||
{ /*268451866*/ KCharacterSetIdentifierGb12345, 0, "GB12345\0" },
|
||||
{ /*268455110*/ KCharacterSetIdentifierAscii, 3, "US-ASCII\0ANSI_X3.4-1968\0iso-ir-6\0ANSI_X3.4-1986\0ISO_646.irv:1991\0ASCII\0ISO646-US\0us\0IBM367\0cp367\0csASCII\0ISO-IR-6\0ISO_646.IRV:1991\0"},
|
||||
{ /*268456062*/ KCharacterSetIdentifierIso88592, 5, "ISO-8859-2\0ISO_8859-2:1987\0iso-ir-101\0latin2\0l2\0csISOLatin2\0" },
|
||||
{ /*268456063*/ KCharacterSetIdentifierIso88594, 7, "ISO-8859-4\0ISO_8859-4:1988\0iso-ir-110\0latin4\0l4\0csISOLatin4\0" },
|
||||
{ /*268456064*/ KCharacterSetIdentifierIso88595, 8, "ISO-8859-5\0ISO_8859-5:1988\0iso-ir-144\0cyrillic\0csISOLatinCyrillic\0" },
|
||||
{ /*268456065*/ KCharacterSetIdentifierIso88597, 10, "ISO-8859-7\0ISO_8859-7:1987\0iso-ir-126\0ELOT_928\0ECMA-118\0greek\0greek8\0csISOLatinGreek\0" },
|
||||
{ /*268456066*/ KCharacterSetIdentifierIso88599, 12, "ISO-8859-9\0ISO_8859-9:1989\0iso-ir-148\0latin5\0l5\0csISOLatin5\0" },
|
||||
{ /*268456875*/ KCharacterSetIdentifierSms7Bit, 0, "SMS 7-bit\0" },
|
||||
{ /*268458028*/ KCharacterSetIdentifierUtf7, 103, "UTF-7\0UNICODE-1-1-UTF-7\0CSUNICODE11UTF7\0" },
|
||||
// { /*268458029*/ KCharacterSetIdentifierUtf8, 106, "UTF-8\0" },
|
||||
{ /*268458030*/ KCharacterSetIdentifierImapUtf7, 0, "IMAP UTF-7\0" },
|
||||
{ /*268458031*/ KCharacterSetIdentifierJavaConformantUtf8, 0, "JAVA UTF-8\0" },
|
||||
{ /*268458454*/ 268458454, 2250, "Windows-1250\0CP1250\0MS-EE\0" },
|
||||
{ /*268458455*/ 268458455, 2251, "Windows-1251\0CP1251\0MS-CYRL\0" },
|
||||
{ /*268458456*/ 268458456, 2253, "Windows-1253\0CP1253\0MS-GREEK\0" },
|
||||
{ /*268458457*/ 268458457, 2254, "Windows-1254\0CP1254\0MS-TURK\0" },
|
||||
{ /*268458458*/ 268458458, 2257, "Windows-1257\0CP1257\0WINBALTRIM\0" },
|
||||
{ /*268460133*/ KCharacterSetIdentifierHz, 2085, "HZ-GB-2312\0HZ\0" },
|
||||
{ /*268460134*/ KCharacterSetIdentifierJis, 16, "JIS_Encoding\0JIS\0" },
|
||||
{ /*268460135*/ KCharacterSetIdentifierEucJpPacked, 18, "EUC-JP\0Extended_UNIX_Code_Packed_Format_for_Japanese\0csEUCPkdFmtJapanese\0EUCJP_PACKED\0" },
|
||||
{ /*268461728*/ KCharacterSetIdentifierIso2022Jp, 39, "ISO-2022-JP\0csISO2022JP\0JIS7\0" },
|
||||
{ /*268461731*/ KCharacterSetIdentifierIso2022Jp1, 0, "ISO2022JP1\0" },
|
||||
{ /*268470824*/ KCharacterSetIdentifierIso88593, 6, "ISO-8859-3\0ISO_8859-3:1988\0iso-ir-109\0latin3\0l3\0csISOLatin3\0" },
|
||||
{ /*268470825*/ KCharacterSetIdentifierIso88596, 9, "ISO-8859-6\0ISO_8859-6:1987\0iso-ir-127\0ECMA-114\0ASMO-708\0arabic\0ISO88596\0csISOLatinArabic\0ARABIC\0" },
|
||||
{ /*268470826*/ KCharacterSetIdentifierIso88598, 11, "ISO-8859-8\0ISO_8859-8:1988\0iso-ir-138\0hebrew\0csISOLatinHebrew\0" },
|
||||
{ /*268470827*/ KCharacterSetIdentifierIso885910, 13, "ISO-8859-10\0iso-ir-157\0l6\0ISO_8859-10:1992\0csISOLatin6\0latin6\0" },
|
||||
{ /*268470828*/ KCharacterSetIdentifierIso885913, 109, "ISO-8859-13\0ISO885913\0ISO-IR-179\0ISO8859-13\0L7\0LATIN7\0CSISOLATIN7\0" },
|
||||
{ /*268470829*/ KCharacterSetIdentifierIso885914, 110, "ISO-8859-14\0iso-ir-199\0ISO_8859-14:1998\0latin8\0iso-celtic\0l8\0" },
|
||||
{ /*268470830*/ KCharacterSetIdentifierIso885915, 111, "ISO-8859-15\0latin-9\0ISO-IR-203\0" },
|
||||
// { /*270483374*/ KCharacterSetIdentifierUnicodeLittle, 1014, "UTF-16LE\0Little-Endian UNICODE\0" },
|
||||
// { /*270483538*/ KCharacterSetIdentifierUnicodeBig, 1013, "UTF-16BE\0Big-Endian UNICODE\0" },
|
||||
{ /*270501191*/ 270501191, 2255, "Windows-1255\0CP1255\0MS-HEBR\0" },
|
||||
{ /*270501192*/ 270501192, 2256, "Windows-1256\0CP1256\0MS-ARAB\0" },
|
||||
{ /*270501193*/ 270501193, 2259, "TIS-620\0ISO-IR-166\0TIS620-0\0TIS620.2529-1\0TIS620.2533-0\0TIS620.2533-1\0" },
|
||||
{ /*270501194*/ 270501194, 0, "windows-874\0CP874\0IBM874\0" },
|
||||
{ /*270501325*/ 270501325, 0, "SmsStrict\0" },
|
||||
{ /*270501521*/ 270501521, 0, "ShiftJisDirectmap\0" },
|
||||
{ /*270501542*/ 270501542, 0, "EucJpDirectmap\0" },
|
||||
/* 270501691 (duplicate) Windows-1252 | windows-1252 |Windows-1252 |Code Page 1252 |CP1252 |MS-ANSI |WINDOWS-1252 |2252 */
|
||||
{ /*270501729*/ 270501729, 2088, "KOI8-U\0" },
|
||||
{ /*270501752*/ 270501752, 2084, "KOI8-R\0csKOI8R\0" },
|
||||
{ /*270529682*/ 270529682, 1000, "ISO-10646-UCS-2\0UCS-2\0CSUNICODE\0" },
|
||||
{ /*270562232*/ 270562232, 2258, "Windows-1258\0CP1258\0WINDOWS-1258\0" },
|
||||
{ /*270586888*/ 270586888, 0, "J5\0" },
|
||||
{ /*271011982*/ 271011982, 0, "ISCII\0" },
|
||||
{ /*271066541*/ 271066541, 2009, "CP850\0IBM850\0""850\0csPC850Multilingual\0" }, // Note: ConvertCharacterSetIdentifierToMibEnumL returns Mib 0 instead of 2009
|
||||
{ /*271082493*/ 271082493, 0, "EXTENDED_SMS_7BIT\0" },
|
||||
{ /*271082494*/ 271082494, 0, "gsm7_turkish_single\0" },
|
||||
{ /*271082495*/ 271082495, 0, "turkish_locking_gsm7ext\0" },
|
||||
{ /*271082496*/ 271082496, 0, "turkish_locking_single\0" },
|
||||
{ /*271082503*/ 271082503, 0, "portuguese_gsm7_single\0" },
|
||||
{ /*271082504*/ 271082504, 0, "portuguese_locking_gsm7ext\0" },
|
||||
{ /*271082505*/ 271082505, 0, "portuguese_locking_single\0" },
|
||||
{ /*271082506*/ 271082506, 0, "spanish_gsm7_single\0" },
|
||||
{ /*271085624*/ 271085624, 114, "GB18030\0" },
|
||||
{ /*536929574*/ 536929574, 38, "EUC-KR\0" },
|
||||
{ /*536936703*/ 536936703, 0, "CP949\0" },
|
||||
{ /*536936705*/ 536936705, 37, "ISO-2022-KR\0csISO2022KR\0" },
|
||||
{ /*536941517*/ 536941517, 36, "KS_C_5601-1987\0iso-ir-149\0KS_C_5601-1989\0KSC_5601\0Korean\0csKSC56011987\0" }
|
||||
};
|
||||
|
||||
|
||||
class QSymbianTextCodec : public QTextCodec
|
||||
{
|
||||
public:
|
||||
QString convertToUnicode(const char*, int, ConverterState*) const;
|
||||
QByteArray convertFromUnicode(const QChar*, int, ConverterState*) const;
|
||||
QList<QByteArray> aliases() const;
|
||||
QByteArray name() const;
|
||||
int mibEnum() const;
|
||||
|
||||
explicit QSymbianTextCodec(uint charsetId, int staticIndex = -1) : m_charsetId(charsetId), m_staticIndex(staticIndex) { }
|
||||
|
||||
static QSymbianTextCodec *init();
|
||||
static QSymbianTextCodec *localeMapper;
|
||||
private:
|
||||
static CCnvCharacterSetConverter *converter();
|
||||
static uint getLanguageDependentCharacterSet();
|
||||
uint m_charsetId;
|
||||
int m_staticIndex;
|
||||
};
|
||||
|
||||
QSymbianTextCodec *QSymbianTextCodec::localeMapper = 0;
|
||||
|
||||
class QSymbianTextCodecWithName : public QSymbianTextCodec
|
||||
{
|
||||
public:
|
||||
QSymbianTextCodecWithName(uint charsetId, const QByteArray &name)
|
||||
: QSymbianTextCodec(charsetId) , m_name(name) { }
|
||||
QByteArray name() const { return m_name; }
|
||||
QList<QByteArray> aliases() const { return QList<QByteArray>(); }
|
||||
private:
|
||||
QByteArray m_name;
|
||||
};
|
||||
|
||||
Q_GLOBAL_STATIC(QThreadStorage<CCnvCharacterSetConverter *>,gs_converterStore);
|
||||
|
||||
CCnvCharacterSetConverter *QSymbianTextCodec::converter()
|
||||
{
|
||||
CCnvCharacterSetConverter *&conv = gs_converterStore()->localData();
|
||||
if (!conv)
|
||||
QT_TRAP_THROWING(conv = CCnvCharacterSetConverter::NewL())
|
||||
return conv;
|
||||
}
|
||||
|
||||
|
||||
QByteArray QSymbianTextCodec::name() const
|
||||
{
|
||||
if (m_staticIndex >= 0)
|
||||
return QByteArray(codecsData[m_staticIndex].aliases);
|
||||
QScopedPointer<HBufC8> buf;
|
||||
QT_TRAP_THROWING(buf.reset(converter()->ConvertCharacterSetIdentifierToStandardNameL(m_charsetId, qt_s60GetRFs())))
|
||||
if (buf)
|
||||
return QByteArray(reinterpret_cast<const char *>(buf->Ptr()), buf->Length());
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
int QSymbianTextCodec::mibEnum() const
|
||||
{
|
||||
if (m_staticIndex >= 0)
|
||||
return codecsData[m_staticIndex].mib;
|
||||
int mib;
|
||||
QT_TRAP_THROWING(mib = converter()->ConvertCharacterSetIdentifierToMibEnumL(m_charsetId, qt_s60GetRFs()))
|
||||
return mib;
|
||||
}
|
||||
|
||||
QList<QByteArray> QSymbianTextCodec::aliases() const
|
||||
{
|
||||
QList<QByteArray> result;
|
||||
if (m_staticIndex >= 0) {
|
||||
const char *aliases = codecsData[m_staticIndex].aliases;
|
||||
aliases += strlen(aliases) + 1;
|
||||
while (*aliases) {
|
||||
int len = strlen(aliases);
|
||||
result += QByteArray(aliases, len);
|
||||
aliases += len + 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
QString QSymbianTextCodec::convertToUnicode(const char *str, int len, ConverterState *state) const
|
||||
{
|
||||
uint charsetId = m_charsetId;
|
||||
|
||||
// no support for utf7 with state
|
||||
if (state && (charsetId == KCharacterSetIdentifierUtf7 ||
|
||||
charsetId == KCharacterSetIdentifierImapUtf7)) {
|
||||
return QString();
|
||||
}
|
||||
CCnvCharacterSetConverter *converter = QSymbianTextCodec::converter();
|
||||
if (!str) {
|
||||
return QString();
|
||||
}
|
||||
|
||||
//Search the character set array containing all of the character sets for which conversion is available
|
||||
CCnvCharacterSetConverter::TAvailability av;
|
||||
QT_TRAP_THROWING(av = converter->PrepareToConvertToOrFromL(charsetId, qt_s60GetRFs()))
|
||||
if (av == CCnvCharacterSetConverter::ENotAvailable) {
|
||||
return QString();
|
||||
}
|
||||
|
||||
char *str2;
|
||||
int len2;
|
||||
QByteArray helperBA;
|
||||
if (state && (state->remainingChars > 0)) {
|
||||
// we should prepare the input string ourselves
|
||||
// the real size
|
||||
len2 = len + state->remainingChars;
|
||||
helperBA.resize(len2);
|
||||
str2 = helperBA.data();
|
||||
if (state->remainingChars > 3) { // doesn't happen usually
|
||||
memcpy(str2, state->d, state->remainingChars);
|
||||
free(state->d);
|
||||
state->d = 0;
|
||||
} else {
|
||||
char charTbl[3];
|
||||
charTbl[0] = state->state_data[0];
|
||||
charTbl[1] = state->state_data[1];
|
||||
charTbl[2] = state->state_data[2];
|
||||
memcpy(str2, charTbl, state->remainingChars);
|
||||
}
|
||||
memcpy(str2+state->remainingChars, str, len);
|
||||
}
|
||||
else {
|
||||
len2 = len;
|
||||
str2 = const_cast<char*>(str);
|
||||
}
|
||||
|
||||
QString UnicodeText(len2, Qt::Uninitialized);
|
||||
TPtrC8 remainderOfForeignText;
|
||||
remainderOfForeignText.Set(reinterpret_cast<const unsigned char *>(str2), len2);
|
||||
|
||||
int numberOfUnconvertibleCharacters = 0;
|
||||
int indexOfFirstUnconvertibleCharacter;
|
||||
|
||||
// Use null character as replacement, if it is asked
|
||||
bool convertToNull = (state && (state->flags & QTextCodec::ConvertInvalidToNull));
|
||||
if (convertToNull) {
|
||||
_LIT8(KReplacement, "\x00");
|
||||
QT_TRAP_THROWING(converter->SetReplacementForUnconvertibleUnicodeCharactersL(KReplacement))
|
||||
}
|
||||
// use state->invalidChars for keeping symbian state
|
||||
int sState = CCnvCharacterSetConverter::KStateDefault;
|
||||
if (state && (state->invalidChars != CCnvCharacterSetConverter::KStateDefault)) {
|
||||
sState = state->invalidChars;
|
||||
}
|
||||
//Convert text encoded in a non-Unicode character set into the Unicode character set (UCS-2).
|
||||
int remainingChars = -1;
|
||||
int initial_size=0;
|
||||
while (1) {
|
||||
TPtr16 UnicodePtr(reinterpret_cast<unsigned short *>(UnicodeText.data()+initial_size), UnicodeText.size());
|
||||
QT_TRAP_THROWING(remainingChars = converter->ConvertToUnicode(UnicodePtr,
|
||||
remainderOfForeignText,
|
||||
sState,
|
||||
numberOfUnconvertibleCharacters,
|
||||
indexOfFirstUnconvertibleCharacter))
|
||||
|
||||
initial_size += UnicodePtr.Length();
|
||||
// replace 0xFFFD with 0x0000 and only if state set to convert to it
|
||||
if (numberOfUnconvertibleCharacters>0 && convertToNull) {
|
||||
int len2 = UnicodePtr.Length();
|
||||
for (int i = indexOfFirstUnconvertibleCharacter; i < len2; i++) {
|
||||
UnicodePtr[i] = 0x0000;
|
||||
}
|
||||
}
|
||||
// success
|
||||
if (remainingChars==KErrNone) {
|
||||
break;
|
||||
}
|
||||
// if ConvertToUnicode could not consume the foreign text at all
|
||||
// UTF-8: EErrorIllFormedInput = KErrCorrupt
|
||||
// UCS-2: KErrNotFound
|
||||
if (remainingChars == CCnvCharacterSetConverter::EErrorIllFormedInput ||
|
||||
remainingChars == KErrNotFound) {
|
||||
remainingChars = remainderOfForeignText.Size();
|
||||
break;
|
||||
}
|
||||
else {
|
||||
if (remainingChars < 0) {
|
||||
return QString();
|
||||
}
|
||||
}
|
||||
//
|
||||
UnicodeText.resize(UnicodeText.size() + remainingChars*2);
|
||||
remainderOfForeignText.Set(reinterpret_cast<const unsigned char *>(str2+len2-remainingChars), remainingChars);
|
||||
}
|
||||
// save symbian state
|
||||
if (state) {
|
||||
state->invalidChars = sState;
|
||||
}
|
||||
|
||||
if (remainingChars > 0) {
|
||||
if (!state) {
|
||||
// No way to signal, if there is still remaining chars, for ex. UTF-8 still can have
|
||||
// some characters hanging around.
|
||||
return QString();
|
||||
}
|
||||
const unsigned char *charPtr = remainderOfForeignText.Right(remainingChars).Ptr();
|
||||
if (remainingChars > 3) { // doesn't happen usually
|
||||
state->d = (void*)malloc(remainingChars);
|
||||
if (!state->d)
|
||||
return QString();
|
||||
// copy characters there
|
||||
memcpy(state->d, charPtr, remainingChars);
|
||||
}
|
||||
else {
|
||||
// fallthru is correct
|
||||
switch (remainingChars) {
|
||||
case 3:
|
||||
state->state_data[2] = charPtr[2];
|
||||
case 2:
|
||||
state->state_data[1] = charPtr[1];
|
||||
case 1:
|
||||
state->state_data[0] = charPtr[0];
|
||||
}
|
||||
}
|
||||
state->remainingChars = remainingChars;
|
||||
}
|
||||
else {
|
||||
if (state) {
|
||||
// If we continued from an earlier iteration
|
||||
state->remainingChars = 0;
|
||||
}
|
||||
}
|
||||
// check if any ORIGINAL headers should be left
|
||||
if (initial_size > 0) {
|
||||
if (!state || (state && !(state->flags & QTextCodec::IgnoreHeader))) {
|
||||
// always skip headers on following state loops
|
||||
if (state) {
|
||||
state->flags |= QTextCodec::IgnoreHeader;
|
||||
}
|
||||
const TUint16 *ptr = reinterpret_cast<const TUint16 *>(UnicodeText.data());
|
||||
if (ptr[0] == QChar::ByteOrderMark || ptr[0] == QChar::ByteOrderSwapped) {
|
||||
return UnicodeText.mid(1, initial_size - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (initial_size >= 0) {
|
||||
UnicodeText.resize(initial_size);
|
||||
return UnicodeText;
|
||||
}
|
||||
else {
|
||||
return QString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QByteArray QSymbianTextCodec::convertFromUnicode(const QChar *str, int len, ConverterState *state) const
|
||||
{
|
||||
uint charsetId = m_charsetId;
|
||||
CCnvCharacterSetConverter *converter = QSymbianTextCodec::converter();
|
||||
if (!str)
|
||||
return QByteArray();
|
||||
|
||||
if (len == 0)
|
||||
return QByteArray();
|
||||
|
||||
// no support for utf7 with state
|
||||
if (state && (charsetId == KCharacterSetIdentifierUtf7 ||
|
||||
charsetId == KCharacterSetIdentifierImapUtf7))
|
||||
return QByteArray();
|
||||
|
||||
//Get reference file session from backend
|
||||
RFs &fileSession = qt_s60GetRFs();
|
||||
|
||||
//Search the character set array containing all of the character sets for which conversion is available
|
||||
CCnvCharacterSetConverter::TAvailability av = CCnvCharacterSetConverter::ENotAvailable;
|
||||
QT_TRAP_THROWING(av = converter->PrepareToConvertToOrFromL(charsetId, fileSession))
|
||||
if (av == CCnvCharacterSetConverter::ENotAvailable)
|
||||
return QByteArray();
|
||||
|
||||
// Use null character as replacement, if it is asked
|
||||
if (state && (state->flags & QTextCodec::ConvertInvalidToNull)) {
|
||||
_LIT8(KReplacement, "\x00");
|
||||
QT_TRAP_THROWING(converter->SetReplacementForUnconvertibleUnicodeCharactersL(KReplacement))
|
||||
}
|
||||
else {
|
||||
_LIT8(KReplacement, "?");
|
||||
QT_TRAP_THROWING(converter->SetReplacementForUnconvertibleUnicodeCharactersL(KReplacement))
|
||||
}
|
||||
QByteArray outputBuffer;
|
||||
|
||||
// add header if no state (one run), or if no ignoreheader (from first state)
|
||||
int bomofs = 0;
|
||||
if (!state || (state && !(state->flags & QTextCodec::IgnoreHeader))) {
|
||||
|
||||
QChar bom(QChar::ByteOrderMark);
|
||||
|
||||
if (state)
|
||||
state->flags |= QTextCodec::IgnoreHeader; // bom handling only on first state
|
||||
|
||||
switch (charsetId) {
|
||||
case KCharacterSetIdentifierUcs2:
|
||||
outputBuffer.append(bom.row());
|
||||
outputBuffer.append(bom.cell());
|
||||
bomofs = 2;
|
||||
break;
|
||||
|
||||
case KCharacterSetIdentifierUtf8: // we don't add bom for UTF-8
|
||||
case KCharacterSetIdentifierJavaConformantUtf8:
|
||||
/*outputBuffer.append("\xef\xbb\xbf");
|
||||
bomofs = 3;
|
||||
*/
|
||||
break;
|
||||
|
||||
case KCharacterSetIdentifierUnicodeLittle:
|
||||
outputBuffer.append(bom.cell());
|
||||
outputBuffer.append(bom.row());
|
||||
bomofs = 2;
|
||||
break;
|
||||
|
||||
case KCharacterSetIdentifierUnicodeBig:
|
||||
outputBuffer.append(bom.row());
|
||||
outputBuffer.append(bom.cell());
|
||||
bomofs = 2;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// len is 16bit chars, reserve 3 8bit chars for each input char
|
||||
// jsz - it could be differentiated, to allocate less
|
||||
outputBuffer.resize(len * 3 + bomofs);
|
||||
|
||||
// loop for too short output buffer
|
||||
int unconverted;
|
||||
int numberOfUnconvertibleCharacters = len;
|
||||
int indexOfFirstUnconvertibleCharacter;
|
||||
int convertedSize;
|
||||
int lastUnconverted = 0;
|
||||
int initial_size=0;
|
||||
int remainderToConvert = len;
|
||||
while (1) {
|
||||
TPtr8 outputPtr(reinterpret_cast<unsigned char *>(outputBuffer.data() + bomofs + initial_size), outputBuffer.size() - bomofs);
|
||||
|
||||
TPtrC16 UnicodeText(reinterpret_cast<const unsigned short *>(str+len-remainderToConvert), remainderToConvert);
|
||||
|
||||
//Convert text encoded in the Unicode character set (UCS-2) into other character sets
|
||||
unconverted = -1;
|
||||
QT_TRAP_THROWING( unconverted = converter->ConvertFromUnicode(outputPtr,
|
||||
UnicodeText,
|
||||
numberOfUnconvertibleCharacters,
|
||||
indexOfFirstUnconvertibleCharacter))
|
||||
initial_size += outputPtr.Length();
|
||||
if (unconverted < 0) {
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
|
||||
if (unconverted == 0 ) {
|
||||
convertedSize = initial_size;
|
||||
break;
|
||||
}
|
||||
|
||||
// check what means unconverted > 0
|
||||
if (indexOfFirstUnconvertibleCharacter<0) {
|
||||
// 8859-6 and 8859-8 break with certain input (string of \xc0 - \xd9 converted to unicode and back)
|
||||
if (unconverted == lastUnconverted) {
|
||||
return QByteArray();
|
||||
}
|
||||
lastUnconverted = unconverted;
|
||||
}
|
||||
else {
|
||||
// were some character not possible to convert
|
||||
|
||||
}
|
||||
remainderToConvert = unconverted; // len - indexOfFirstUnconvertibleCharacter;
|
||||
// resize output buffer, use =op for the null check
|
||||
outputBuffer.resize(outputBuffer.size() + remainderToConvert * 3 + bomofs);
|
||||
};
|
||||
|
||||
// shorten output
|
||||
outputBuffer.resize(convertedSize + bomofs);
|
||||
|
||||
if (state) {
|
||||
state->invalidChars = numberOfUnconvertibleCharacters;
|
||||
|
||||
// check if any Symbian CONVERTED headers should be removed
|
||||
if (state->flags & QTextCodec::IgnoreHeader && state->state_data[0] == 0) {
|
||||
|
||||
state->state_data[0] = 0xff; // bom handling only on first state
|
||||
|
||||
if (charsetId == KCharacterSetIdentifierUcs2 && outputBuffer.size() > 1) {
|
||||
|
||||
QChar bom(QChar::ByteOrderMark);
|
||||
if (outputBuffer.at(0) == bom.row() && outputBuffer.at(1) == bom.cell()) {
|
||||
outputBuffer.remove(0, 2);
|
||||
} else if (outputBuffer.at(0) == bom.cell() && outputBuffer.at(1) == bom.row()) {
|
||||
outputBuffer.remove(0, 2);
|
||||
}
|
||||
|
||||
} else if ((charsetId == KCharacterSetIdentifierUtf8 ||
|
||||
charsetId == KCharacterSetIdentifierJavaConformantUtf8) &&
|
||||
outputBuffer.size() > 2) {
|
||||
if (outputBuffer.at(0) == 0xef && outputBuffer.at(1) == 0xbb && outputBuffer.at(2) == 0xbf) {
|
||||
outputBuffer.remove(0, 3);
|
||||
}
|
||||
|
||||
} else if (charsetId == KCharacterSetIdentifierUnicodeLittle &&
|
||||
outputBuffer.size() > 1) {
|
||||
|
||||
QChar bom(QChar::ByteOrderMark);
|
||||
if (outputBuffer.at(0) == bom.row() && outputBuffer.at(1) == bom.cell()) {
|
||||
outputBuffer.remove(0, 2);
|
||||
}
|
||||
|
||||
} else if (charsetId == KCharacterSetIdentifierUnicodeBig &&
|
||||
outputBuffer.size() > 1) {
|
||||
|
||||
QChar bom(QChar::ByteOrderSwapped);
|
||||
if (outputBuffer.at(0) == bom.row() && outputBuffer.at(1) == bom.cell()) {
|
||||
outputBuffer.remove(0, 2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return outputBuffer;
|
||||
}
|
||||
|
||||
|
||||
uint QSymbianTextCodec::getLanguageDependentCharacterSet()
|
||||
{
|
||||
TLanguage lang = User::Language();
|
||||
|
||||
uint langIndex = 0;
|
||||
|
||||
switch (lang) {
|
||||
case 14: //ELangTurkish
|
||||
langIndex = KCharacterSetIdentifierIso88599; break;
|
||||
case 16: //ELangRussian
|
||||
langIndex = KCharacterSetIdentifierIso88595; break;
|
||||
case 17: //ELangHungarian
|
||||
langIndex = KCharacterSetIdentifierIso88592; break;
|
||||
case 25: //ELangCzec
|
||||
case 26: //ELangSlovak
|
||||
case 27: //ELangPolish
|
||||
case 28: //ELangSlovenian
|
||||
langIndex = KCharacterSetIdentifierIso88592; break;
|
||||
case 29: //ELangTaiwanChinese
|
||||
case 30: //ELangHongKongChinese
|
||||
langIndex = KCharacterSetIdentifierBig5; break;
|
||||
case 31: //ELangPrcChinese
|
||||
langIndex = KCharacterSetIdentifierGbk; break;
|
||||
case 32: //ELangJapanese
|
||||
langIndex = KCharacterSetIdentifierShiftJis; break;
|
||||
case 33: //ELangThai
|
||||
langIndex = 270501193 /*KCharacterSetIdentifierTis620*/; break;
|
||||
case 37: //ELangArabic
|
||||
langIndex = KCharacterSetIdentifierIso88596; break;
|
||||
case 40: //ELangBelarussian
|
||||
case 42: //ELangBulgarian
|
||||
langIndex = KCharacterSetIdentifierIso88595; break;
|
||||
case 45: //ELangCroatian
|
||||
langIndex = KCharacterSetIdentifierIso88592; break;
|
||||
case 49: //ELangEstonian
|
||||
langIndex = KCharacterSetIdentifierIso88594; break;
|
||||
case 54: //ELangGreek
|
||||
case 55: //ELangCyprusGreek
|
||||
langIndex = KCharacterSetIdentifierIso88597; break;
|
||||
case 57: //ELangHebrew
|
||||
langIndex = KCharacterSetIdentifierIso88598; break;
|
||||
case 58: //ELangHindi
|
||||
langIndex = 271011982/*KCharacterSetIdentifierIscii*/; break;
|
||||
case 67: //ELangLatvian
|
||||
case 68: //ELangLithuanian
|
||||
langIndex = KCharacterSetIdentifierIso88594; break;
|
||||
case 69: //ELangMacedonian
|
||||
langIndex = KCharacterSetIdentifierIso88595; break;
|
||||
case 78: //ELangRomanian
|
||||
langIndex = KCharacterSetIdentifierIso88592; break;
|
||||
case 79: //ELangSerbian
|
||||
langIndex = KCharacterSetIdentifierIso88592; break;
|
||||
case 91: //ELangCyprusTurkish
|
||||
langIndex = KCharacterSetIdentifierIso88599; break;
|
||||
case 93: //ELangUkrainian
|
||||
langIndex = KCharacterSetIdentifierIso88595; break;
|
||||
case 94: //ELangUrdu
|
||||
langIndex = KCharacterSetIdentifierIso88596; break;
|
||||
case 157: //ELangEnglish_Taiwan
|
||||
case 158: //ELangEnglish_HongKong
|
||||
langIndex = KCharacterSetIdentifierBig5; break;
|
||||
case 159: //ELangEnglish_Prc
|
||||
langIndex = KCharacterSetIdentifierGbk; break;
|
||||
case 160:
|
||||
langIndex = KCharacterSetIdentifierShiftJis; break;
|
||||
case 161: //ELangEnglish_Thailand
|
||||
langIndex = 270501193/*KCharacterSetIdentifierTis620*/; break;
|
||||
}
|
||||
|
||||
if (langIndex > 0) {
|
||||
return langIndex;
|
||||
}
|
||||
return KCharacterSetIdentifierCodePage1252;
|
||||
}
|
||||
|
||||
/* Create the codecs that have aliases and return the locale mapper*/
|
||||
QSymbianTextCodec *QSymbianTextCodec::init()
|
||||
{
|
||||
const uint localeMapperId = getLanguageDependentCharacterSet();
|
||||
QScopedPointer<CArrayFix<CCnvCharacterSetConverter::SCharacterSet> > array;
|
||||
QT_TRAP_THROWING(array.reset(CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL(qt_s60GetRFs())))
|
||||
CCnvCharacterSetConverter *converter = QSymbianTextCodec::converter();
|
||||
int count = array->Count();
|
||||
for (int i = 0; i < count; i++) {
|
||||
int charsetId = array->At(i).Identifier();
|
||||
|
||||
// skip builtin Qt codecs
|
||||
if (charsetId == KCharacterSetIdentifierUtf8 || charsetId == KCharacterSetIdentifierUnicodeLittle
|
||||
|| charsetId == KCharacterSetIdentifierUnicodeLittle || charsetId == KCharacterSetIdentifierUnicodeBig
|
||||
|| charsetId == KCharacterSetIdentifierIso88591
|
||||
|| charsetId == 270501691 /* skip Windows-1252 duplicate*/) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int begin = 0;
|
||||
int n = sizeof(codecsData) / sizeof(codecsData[0]);
|
||||
int half;
|
||||
|
||||
while (n > 0) {
|
||||
half = n >> 1;
|
||||
int middle = begin + half;
|
||||
if (codecsData[middle].charsetId < charsetId) {
|
||||
begin = middle + 1;
|
||||
n -= half + 1;
|
||||
} else {
|
||||
n = half;
|
||||
}
|
||||
}
|
||||
if (codecsData[begin].charsetId == charsetId) {
|
||||
QSymbianTextCodec *c = new QSymbianTextCodec(charsetId, begin);
|
||||
if (charsetId == localeMapperId)
|
||||
localeMapper = c;
|
||||
} else {
|
||||
// We did not find the charsetId in our codecsData[], therefore we ask
|
||||
// the OS for the codec name. We first try to get a "standard name" and fall
|
||||
// back to array->At(i).Name(), if really needed. array->At(i).Name() is not
|
||||
// guaranteed to be a correct name for QTextCodec::codecFromName().
|
||||
QScopedPointer<HBufC8> buf;
|
||||
QT_TRAP_THROWING(buf.reset(converter->ConvertCharacterSetIdentifierToStandardNameL(charsetId, qt_s60GetRFs())))
|
||||
QByteArray name;
|
||||
if (buf && buf->Length()) {
|
||||
name = QByteArray(reinterpret_cast<const char *>(buf->Ptr()), buf->Length());
|
||||
} else {
|
||||
TPtrC charSetName = array->At(i).NameIsFileName() ? TParsePtrC(array->At(i).Name()).Name() : array->At(i).Name();
|
||||
int len = charSetName.Length();
|
||||
QString str;
|
||||
str.setUnicode(reinterpret_cast<const QChar*>(charSetName.Ptr()), len);
|
||||
name = str.toLatin1();
|
||||
}
|
||||
if (!name.isEmpty())
|
||||
new QSymbianTextCodecWithName(charsetId, name);
|
||||
}
|
||||
|
||||
}
|
||||
return localeMapper;
|
||||
}
|
||||
|
|
@ -12,5 +12,3 @@ SOURCES = qgb18030codec.cpp \
|
|||
|
||||
target.path += $$[QT_INSTALL_PLUGINS]/codecs
|
||||
INSTALLS += target
|
||||
|
||||
symbian:TARGET.UID3=0x2001E615
|
||||
|
|
|
|||
|
|
@ -23,5 +23,3 @@ unix {
|
|||
|
||||
target.path += $$[QT_INSTALL_PLUGINS]/codecs
|
||||
INSTALLS += target
|
||||
|
||||
symbian:TARGET.UID3=0x2001E614
|
||||
|
|
|
|||
|
|
@ -16,5 +16,3 @@ wince*: {
|
|||
|
||||
target.path += $$[QT_INSTALL_PLUGINS]/codecs
|
||||
INSTALLS += target
|
||||
|
||||
symbian:TARGET.UID3=0x2001B2E5
|
||||
|
|
|
|||
|
|
@ -12,5 +12,3 @@ SOURCES = qbig5codec.cpp \
|
|||
|
||||
target.path += $$[QT_INSTALL_PLUGINS]/codecs
|
||||
INSTALLS += target
|
||||
|
||||
symbian:TARGET.UID3=0x2001B2E4
|
||||
|
|
|
|||
Loading…
Reference in New Issue