do not claim support for codecs with unknown MIB

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2021-02-12 12:59:43 +02:00
parent 346f64587e
commit 93f9d23ca3
3 changed files with 119 additions and 94 deletions

View file

@ -1044,7 +1044,7 @@ QByteArray QIcuCodec::convertFromUnicode(const QChar *unicode, int length,
return result;
}
#ifndef QT_NO_TEXTCODEC
QByteArray QIcuCodec::name() const
{
return m_name;
@ -1112,14 +1112,29 @@ int QIcuCodec::mibEnum() const
return 2;
}
#ifndef QT_NO_TEXTCODEC
QList<QByteArray> QIcuCodec::allCodecs()
{
QList<QByteArray> allcodecs;
for (int i = 0; i < ucnv_countAvailable(); i++) {
const char *name = ucnv_getAvailableName(i);
allcodecs += QByteArray::fromRawData(name, qstrlen(name));
UErrorCode error = U_ZERO_ERROR;
const char *iana = ucnv_getStandardName(name, "IANA", &error);
if (Q_UNLIKELY(U_FAILURE(error))) {
#ifdef QICUCODEC_DEBUG
qWarning("QIcuCodec::allCodecs: ucnv_getStandardName(%s) failed %s",
name, u_errorName(error));
#endif
continue;
} else if (Q_UNLIKELY(!iana)) {
continue;
}
for (qint16 m = 0; m < MIBTblSize; m++) {
if (ucnv_compareNames(iana, MIBTbl[m].name) == 0) {
allcodecs += QByteArray::fromRawData(name, qstrlen(name));
break;
}
}
}
return allcodecs;
@ -1131,9 +1146,23 @@ QList<int> QIcuCodec::allMibs()
for (int i = 0; i < ucnv_countAvailable(); i++) {
const char *name = ucnv_getAvailableName(i);
UErrorCode error = U_ZERO_ERROR;
const char *iana = ucnv_getStandardName(name, "IANA", &error);
if (Q_UNLIKELY(U_FAILURE(error))) {
#ifdef QICUCODEC_DEBUG
qWarning("QIcuCodec::allMibs: ucnv_getStandardName(%s) failed %s",
name, u_errorName(error));
#endif
continue;
} else if (Q_UNLIKELY(!iana)) {
continue;
}
for (qint16 m = 0; m < MIBTblSize; m++) {
if (ucnv_compareNames(name, MIBTbl[m].name) == 0) {
allmibs.append(MIBTbl[m].mib);
if (ucnv_compareNames(iana, MIBTbl[m].name) == 0) {
if (!allmibs.contains(MIBTbl[m].mib)) {
allmibs.append(MIBTbl[m].mib);
}
break;
}
}
}

View file

@ -51,11 +51,11 @@ public:
QString convertToUnicode(const char *data, int len, ConverterState *state) const;
QByteArray convertFromUnicode(const QChar *unicode, int len, ConverterState *state) const;
#ifndef QT_NO_TEXTCODEC
QByteArray name() const;
QList<QByteArray> aliases() const;
int mibEnum() const;
#ifndef QT_NO_TEXTCODEC
static QList<QByteArray> allCodecs();
static QList<int> allMibs();
static QTextCodec* codecForUtf(const QByteArray &text, QTextCodec *defaultCodec);

View file

@ -228,89 +228,92 @@ QTextCodec::ConverterState& QTextCodec::ConverterState::operator=(const QTextCod
Some of the supported encodings are:
\list
\o Adobe-Standard-Encoding
\o Big5
\o Big5-HKSCS
\o BOCU-1
\o CESU-8
\o cp851
\o EUC-JP
\o EUC-KR
\o GB18030
\o GB2312
\o GB_2312-80
\o GBK
\o hp-roman8
\o HZ-GB-2312
\o IBM00858
\o IBM01140
\o IBM01141
\o IBM01142
\o IBM01143
\o IBM01144
\o IBM01145
\o IBM01146
\o IBM01147
\o IBM01148
\o IBM01149
\o IBM037
\o IBM1026
\o IBM1047
\o IBM273
\o IBM277
\o IBM278
\o IBM280
\o IBM284
\o IBM285
\o IBM290
\o IBM297
\o IBM420
\o IBM424
\o IBM437
\o IBM500
\o IBM775
\o IBM850
\o IBM852
\o IBM855
\o IBM857
\o IBM860
\o IBM861
\o IBM862
\o IBM863
\o IBM864
\o IBM865
\o IBM866
\o IBM868
\o IBM869
\o IBM870
\o IBM871
\o IBM918
\o IBM-Thai
\o ISO-2022-CN
\o ISO-2022-CN-EXT
\o ISO-2022-JP
\o ISO-2022-JP-1
\o ISO-2022-JP-2
\o ISO-2022-KR
\o euc-jp-2007
\o gb18030
\o HZ
\o ibm-1026_P100-1995
\o ibm-1047_P100-1995
\o ibm-1051_P100-1995
\o ibm-1089_P100-1995
\o ibm-1140_P100-1997
\o ibm-1141_P100-1997
\o ibm-1142_P100-1997
\o ibm-1143_P100-1997
\o ibm-1144_P100-1997
\o ibm-1145_P100-1997
\o ibm-1146_P100-1997
\o ibm-1147_P100-1997
\o ibm-1148_P100-1997
\o ibm-1149_P100-1997
\o ibm-1168_P100-2002
\o ibm-1276_P100-1995
\o ibm-1363_P11B-1998
\o ibm-1375_P100-2008
\o ibm-1383_P110-1999
\o ibm-273_P100-1995
\o ibm-277_P100-1995
\o ibm-278_P100-1995
\o ibm-280_P100-1995
\o ibm-284_P100-1995
\o ibm-285_P100-1995
\o ibm-290_P100-1995
\o ibm-297_P100-1995
\o ibm-37_P100-1995
\o ibm-420_X120-1999
\o ibm-424_P100-1995
\o ibm-437_P100-1995
\o ibm-500_P100-1995
\o ibm-5012_P100-1999
\o ibm-5346_P100-1998
\o ibm-5347_P100-1998
\o ibm-5348_P100-1997
\o ibm-5349_P100-1998
\o ibm-5350_P100-1998
\o ibm-5354_P100-1998
\o ibm-5478_P100-1995
\o ibm-775_P100-1996
\o ibm-838_P100-1995
\o ibm-850_P100-1995
\o ibm-851_P100-1995
\o ibm-852_P100-1995
\o ibm-855_P100-1995
\o ibm-857_P100-1995
\o ibm-858_P100-1997
\o ibm-860_P100-1995
\o ibm-861_P100-1995
\o ibm-862_P100-1995
\o ibm-863_P100-1995
\o ibm-864_X110-1999
\o ibm-865_P100-1995
\o ibm-866_P100-1995
\o ibm-868_P100-1995
\o ibm-869_P100-1995
\o ibm-870_P100-1995
\o ibm-871_P100-1995
\o ibm-874_P100-1995
\o ibm-878_P100-1996
\o ibm-9005_X110-2007
\o ibm-912_P100-1995
\o ibm-913_P100-2000
\o ibm-914_P100-1995
\o ibm-915_P100-1995
\o ibm-918_P100-1995
\o ibm-920_P100-1995
\o ibm-921_P100-1995
\o ibm-923_P100-1998
\o ibm-943_P15A-2003
\o ibm-9447_P100-2002
\o ibm-9448_X100-2005
\o ibm-9449_P100-2002
\o ibm-970_P110_P110-2006_U2
\o ISO_2022
\o ISO-8859-1
\o ISO-8859-10
\o ISO-8859-13
\o ISO-8859-14
\o ISO-8859-15
\o ISO-8859-2
\o ISO-8859-3
\o ISO-8859-4
\o ISO-8859-5
\o ISO-8859-6
\o ISO-8859-7
\o ISO-8859-8
\o ISO-8859-9
\o KOI8-R
\o KOI8-U
\o macintosh
\o iso-8859_10-1998
\o iso-8859_14-1998
\o macos-0_2-10.2
\o SCSU
\o Shift_JIS
\o TIS-620
\o US-ASCII
\o UTF-16
\o UTF-16BE
@ -320,15 +323,8 @@ QTextCodec::ConverterState& QTextCodec::ConverterState::operator=(const QTextCod
\o UTF-32LE
\o UTF-7
\o UTF-8
\o windows-1250
\o windows-1251
\o windows-1252
\o windows-1253
\o windows-1254
\o windows-1255
\o windows-1256
\o windows-1257
\o windows-1258
\o windows-936-2000
\o windows-950-2000
\o System Any of the above depending on the system locale
\endlist