Add methods to convert between encoding and name to QStringConverter
Add static methods that allow converting between a name for an encoding and the Encoding enum. Change-Id: I12bc503cf757ea31d3ca8d5e1f1216efddcb16d4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
3ce9162ab5
commit
a639bcda1e
|
|
@ -1474,13 +1474,26 @@ static bool nameMatch(const char *a, const char *b)
|
|||
|
||||
QStringConverter::QStringConverter(const char *name)
|
||||
: iface(nullptr)
|
||||
{
|
||||
auto e = encodingForName(name);
|
||||
if (e)
|
||||
iface = encodingInterfaces + int(e.value());
|
||||
}
|
||||
|
||||
std::optional<QStringConverter::Encoding> QStringConverter::encodingForName(const char *name)
|
||||
{
|
||||
for (int i = 0; i < LastEncoding + 1; ++i) {
|
||||
if (nameMatch(encodingInterfaces[i].name, name)) {
|
||||
iface = encodingInterfaces + i;
|
||||
break;
|
||||
}
|
||||
if (nameMatch(encodingInterfaces[i].name, name))
|
||||
return QStringConverter::Encoding(i);
|
||||
}
|
||||
if (nameMatch(name, "latin1"))
|
||||
return QStringConverter::Latin1;
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
const char *QStringConverter::nameForEncoding(QStringConverter::Encoding e)
|
||||
{
|
||||
return encodingInterfaces[int(e)].name;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@
|
|||
#include <QtCore/qstringbuilder.h>
|
||||
#endif
|
||||
|
||||
#include <optional>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
// work around a compiler bug in GCC 7
|
||||
|
|
@ -148,7 +150,8 @@ protected:
|
|||
QSTRINGCONVERTER_CONSTEXPR QStringConverter(const Interface *i)
|
||||
: iface(i)
|
||||
{}
|
||||
QStringConverter(const char *name);
|
||||
Q_CORE_EXPORT QStringConverter(const char *name);
|
||||
|
||||
|
||||
public:
|
||||
bool isValid() const { return iface != nullptr; }
|
||||
|
|
@ -162,6 +165,9 @@ public:
|
|||
const char *name() const
|
||||
{ return isValid() ? iface->name : nullptr; }
|
||||
|
||||
Q_CORE_EXPORT static std::optional<Encoding> encodingForName(const char *name);
|
||||
Q_CORE_EXPORT static const char *nameForEncoding(Encoding e);
|
||||
|
||||
protected:
|
||||
const Interface *iface;
|
||||
State state;
|
||||
|
|
|
|||
|
|
@ -59,6 +59,12 @@ private slots:
|
|||
|
||||
void utfHeaders_data();
|
||||
void utfHeaders();
|
||||
|
||||
void encodingForName_data();
|
||||
void encodingForName();
|
||||
|
||||
void nameForEncoding_data();
|
||||
void nameForEncoding();
|
||||
};
|
||||
|
||||
void tst_QStringConverter::constructByName()
|
||||
|
|
@ -1611,6 +1617,53 @@ void tst_QStringConverter::utfHeaders()
|
|||
}
|
||||
}
|
||||
|
||||
void tst_QStringConverter::encodingForName_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("name");
|
||||
QTest::addColumn<std::optional<QStringConverter::Encoding>>("encoding");
|
||||
|
||||
QTest::newRow("UTF-8") << QByteArray("UTF-8") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
|
||||
QTest::newRow("utf8") << QByteArray("utf8") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
|
||||
QTest::newRow("Utf-8") << QByteArray("Utf-8") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
|
||||
QTest::newRow("UTF-16") << QByteArray("UTF-16") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16);
|
||||
QTest::newRow("UTF-16le") << QByteArray("UTF-16le") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16LE);
|
||||
QTest::newRow("ISO-8859-1") << QByteArray("ISO-8859-1") << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
|
||||
QTest::newRow("ISO8859-1") << QByteArray("ISO8859-1") << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
|
||||
QTest::newRow("iso8859-1") << QByteArray("iso8859-1") << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
|
||||
QTest::newRow("latin1") << QByteArray("latin1") << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
|
||||
QTest::newRow("latin2") << QByteArray("latin2") << std::optional<QStringConverter::Encoding>();
|
||||
QTest::newRow("latin15") << QByteArray("latin15") << std::optional<QStringConverter::Encoding>();
|
||||
}
|
||||
|
||||
void tst_QStringConverter::encodingForName()
|
||||
{
|
||||
QFETCH(QByteArray, name);
|
||||
QFETCH(std::optional<QStringConverter::Encoding>, encoding);
|
||||
|
||||
auto e = QStringConverter::encodingForName(name);
|
||||
QCOMPARE(e, encoding);
|
||||
}
|
||||
|
||||
void tst_QStringConverter::nameForEncoding_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("name");
|
||||
QTest::addColumn<QStringConverter::Encoding>("encoding");
|
||||
|
||||
QTest::newRow("UTF-8") << QByteArray("UTF-8") << QStringConverter::Utf8;
|
||||
QTest::newRow("UTF-16") << QByteArray("UTF-16") << QStringConverter::Utf16;
|
||||
QTest::newRow("UTF-16LE") << QByteArray("UTF-16LE") << QStringConverter::Utf16LE;
|
||||
QTest::newRow("ISO-8859-1") << QByteArray("ISO-8859-1") << QStringConverter::Latin1;
|
||||
}
|
||||
|
||||
void tst_QStringConverter::nameForEncoding()
|
||||
{
|
||||
QFETCH(QByteArray, name);
|
||||
QFETCH(QStringConverter::Encoding, encoding);
|
||||
|
||||
QByteArray n = QStringConverter::nameForEncoding(encoding);
|
||||
QCOMPARE(n, name);
|
||||
}
|
||||
|
||||
class LoadAndConvert: public QRunnable
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
Loading…
Reference in New Issue