summaryrefslogtreecommitdiffstats
path: root/src/linguist/shared
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-05-18 11:22:02 +0200
committerLars Knoll <lars.knoll@qt.io>2020-05-18 21:05:16 +0200
commit75f2945476a80e33f7ec29d42f04244467b04e1e (patch)
tree50b234fad6122980657f6294420b35326c379258 /src/linguist/shared
parent74826870c3a1e56884c3b15755de5fda9b73660b (diff)
Get rid of the QTextCodec dependency in linguist
Change-Id: I9f09578b816ff24a23e17b3255ac93c5eb7c321e Reviewed-by: Liang Qi <liang.qi@qt.io>
Diffstat (limited to 'src/linguist/shared')
-rw-r--r--src/linguist/shared/po.cpp57
-rw-r--r--src/linguist/shared/qm.cpp10
-rw-r--r--src/linguist/shared/qph.cpp2
-rw-r--r--src/linguist/shared/ts.cpp9
-rw-r--r--src/linguist/shared/xliff.cpp2
5 files changed, 32 insertions, 48 deletions
diff --git a/src/linguist/shared/po.cpp b/src/linguist/shared/po.cpp
index 62c0402e6..dd6fcbbf2 100644
--- a/src/linguist/shared/po.cpp
+++ b/src/linguist/shared/po.cpp
@@ -33,7 +33,7 @@
#include <QtCore/QHash>
#include <QtCore/QRegularExpression>
#include <QtCore/QString>
-#include <QtCore/QTextCodec>
+#include <QtCore/QStringConverter>
#include <QtCore/QTextStream>
#include <ctype.h>
@@ -397,7 +397,7 @@ static QByteArray QByteArrayList_join(const QList<QByteArray> &that, char sep)
bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
{
- QTextCodec *codec = QTextCodec::codecForName("UTF-8");
+ QStringDecoder toUnicode(QStringConverter::Utf8, QStringDecoder::Flag::Stateless);
bool error = false;
// format of a .po file entry:
@@ -476,18 +476,18 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
.arg(QString::fromLatin1(hdrValue)));
error = true;
// This will avoid a flood of conversion errors.
- codec = QTextCodec::codecForName("latin1");
+ toUnicode = QStringConverter::Latin1;
} else {
QByteArray cod = hdrValue.mid(20);
- QTextCodec *cdc = QTextCodec::codecForName(cod);
- if (!cdc) {
- cd.appendError(QString::fromLatin1("Unsupported codec '%1'")
+ auto enc = QStringConverter::encodingForName(cod);
+ if (!enc) {
+ cd.appendError(QString::fromLatin1("Unsupported encoding '%1'")
.arg(QString::fromLatin1(cod)));
error = true;
// This will avoid a flood of conversion errors.
- codec = QTextCodec::codecForName("latin1");
+ toUnicode = QStringConverter::Latin1;
} else {
- codec = cdc;
+ toUnicode = *enc;
}
}
} else if (hdrName == "Content-Transfer-Encoding") {
@@ -537,17 +537,17 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
for (QHash<QString, QByteArray>::ConstIterator it = extras.constBegin(),
end = extras.constEnd();
it != end; ++it)
- translator.setExtra(it.key(), codec->toUnicode(it.value()));
+ translator.setExtra(it.key(), toUnicode(it.value()));
item = PoItem();
continue;
}
// build translator message
TranslatorMessage msg;
- msg.setContext(codec->toUnicode(item.context));
+ msg.setContext(toUnicode(item.context));
if (!item.references.isEmpty()) {
QString xrefs;
foreach (const QString &ref,
- codec->toUnicode(item.references).split(
+ QString(toUnicode(item.references)).split(
QRegularExpression(QLatin1String("\\s")), Qt::SkipEmptyParts)) {
int pos = ref.indexOf(QLatin1Char(':'));
int lpos = ref.lastIndexOf(QLatin1Char(':'));
@@ -566,17 +566,17 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
if (!xrefs.isEmpty())
item.extra[QLatin1String("po-references")] = xrefs;
}
- msg.setId(codec->toUnicode(item.id));
- msg.setSourceText(codec->toUnicode(item.msgId));
- msg.setOldSourceText(codec->toUnicode(item.oldMsgId));
- msg.setComment(codec->toUnicode(item.tscomment));
- msg.setOldComment(codec->toUnicode(item.oldTscomment));
- msg.setExtraComment(codec->toUnicode(item.automaticComments));
- msg.setTranslatorComment(codec->toUnicode(item.translatorComments));
+ msg.setId(toUnicode(item.id));
+ msg.setSourceText(toUnicode(item.msgId));
+ msg.setOldSourceText(toUnicode(item.oldMsgId));
+ msg.setComment(toUnicode(item.tscomment));
+ msg.setOldComment(toUnicode(item.oldTscomment));
+ msg.setExtraComment(toUnicode(item.automaticComments));
+ msg.setTranslatorComment(toUnicode(item.translatorComments));
msg.setPlural(item.isPlural || item.msgStr.size() > 1);
QStringList translations;
foreach (const QByteArray &bstr, item.msgStr) {
- QString str = codec->toUnicode(bstr);
+ QString str = toUnicode(bstr);
str.replace(QChar(Translator::TextVariantSeparator),
QChar(Translator::BinaryVariantSeparator));
translations << str;
@@ -642,14 +642,14 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
QByteArray extra = slurpEscapedString(lines, l, 16, "#| ", cd);
if (extra != item.oldMsgId)
item.extra[QLatin1String("po-old_msgid_plural")] =
- codec->toUnicode(extra);
+ toUnicode(extra);
} else if (line.startsWith("#| msgctxt ")) {
item.oldTscomment = slurpEscapedString(lines, l, 11, "#| ", cd);
if (qtContexts)
splitContext(&item.oldTscomment, &item.context);
} else {
cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'"))
- .arg(l + 1).arg(codec->toUnicode(lines[l])));
+ .arg(l + 1).arg(toUnicode(lines[l])));
error = true;
}
break;
@@ -660,7 +660,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
QByteArray extra = slurpEscapedString(lines, l, 16, "#~ ", cd);
if (extra != item.msgId)
item.extra[QLatin1String("po-msgid_plural")] =
- codec->toUnicode(extra);
+ toUnicode(extra);
item.isPlural = true;
} else if (line.startsWith("#~ msgctxt ")) {
item.tscomment = slurpEscapedString(lines, l, 11, "#~ ", cd);
@@ -672,20 +672,20 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
QByteArray extra = slurpEscapedString(lines, l, 17, "#~| ", cd);
if (extra != item.oldMsgId)
item.extra[QLatin1String("po-old_msgid_plural")] =
- codec->toUnicode(extra);
+ toUnicode(extra);
} else if (line.startsWith("#~| msgctxt ")) {
item.oldTscomment = slurpEscapedString(lines, l, 12, "#~| ", cd);
if (qtContexts)
splitContext(&item.oldTscomment, &item.context);
} else {
cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'"))
- .arg(l + 1).arg(codec->toUnicode(lines[l])));
+ .arg(l + 1).arg(toUnicode(lines[l])));
error = true;
}
break;
default:
cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'"))
- .arg(l + 1).arg(codec->toUnicode(lines[l])));
+ .arg(l + 1).arg(toUnicode(lines[l])));
error = true;
break;
}
@@ -699,11 +699,11 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd)
} else if (line.startsWith("msgid_plural ")) {
QByteArray extra = slurpEscapedString(lines, l, 13, QByteArray(), cd);
if (extra != item.msgId)
- item.extra[QLatin1String("po-msgid_plural")] = codec->toUnicode(extra);
+ item.extra[QLatin1String("po-msgid_plural")] = toUnicode(extra);
item.isPlural = true;
} else {
cd.appendError(QString(QLatin1String("PO-format error in line %1: '%2'"))
- .arg(l + 1).arg(codec->toUnicode(lines[l])));
+ .arg(l + 1).arg(toUnicode(lines[l])));
error = true;
}
}
@@ -735,7 +735,6 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &)
bool ok = true;
QTextStream out(&dev);
- out.setCodec("UTF-8");
bool qtContexts = false;
foreach (const TranslatorMessage &msg, translator.messages())
@@ -754,7 +753,7 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &)
// Keep in sync with loadPO
addPoHeader(headers, hdrOrder, "MIME-Version", QLatin1String("1.0"));
addPoHeader(headers, hdrOrder, "Content-Type",
- QLatin1String("text/plain; charset=" + out.codec()->name()));
+ QLatin1String("text/plain; charset=UTF-8"));
addPoHeader(headers, hdrOrder, "Content-Transfer-Encoding", QLatin1String("8bit"));
if (!translator.languageCode().isEmpty()) {
QLocale::Language l;
diff --git a/src/linguist/shared/qm.cpp b/src/linguist/shared/qm.cpp
index 288607824..3c047bc8d 100644
--- a/src/linguist/shared/qm.cpp
+++ b/src/linguist/shared/qm.cpp
@@ -38,7 +38,6 @@
#include <QtCore/QFileInfo>
#include <QtCore/QMap>
#include <QtCore/QString>
-#include <QtCore/QTextCodec>
QT_BEGIN_NAMESPACE
@@ -456,10 +455,9 @@ static quint32 read32(const uchar *data)
static void fromBytes(const char *str, int len, QString *out, bool *utf8Fail)
{
- static QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
- QTextCodec::ConverterState cvtState;
- *out = utf8Codec->toUnicode(str, len, &cvtState);
- *utf8Fail = cvtState.invalidChars;
+ QStringDecoder toUnicode(QStringDecoder::Utf8, QStringDecoder::Flag::Stateless);
+ *out = toUnicode(str, len);
+ *utf8Fail = toUnicode.hasError();
}
bool loadQM(Translator &translator, QIODevice &dev, ConversionData &cd)
@@ -623,7 +621,7 @@ bool loadQM(Translator &translator, QIODevice &dev, ConversionData &cd)
translator.append(msg);
}
if (utf8Fail) {
- cd.appendError(QLatin1String("Cannot read file with UTF-8 codec"));
+ cd.appendError(QLatin1String("Error: File contains invalid UTF-8 sequences."));
return false;
}
return ok;
diff --git a/src/linguist/shared/qph.cpp b/src/linguist/shared/qph.cpp
index f29b3789b..a1895d387 100644
--- a/src/linguist/shared/qph.cpp
+++ b/src/linguist/shared/qph.cpp
@@ -30,7 +30,6 @@
#include <QtCore/QByteArray>
#include <QtCore/QDebug>
-#include <QtCore/QTextCodec>
#include <QtCore/QTextStream>
#include <QtCore/QXmlStreamReader>
@@ -147,7 +146,6 @@ static QString protect(const QString &str)
static bool saveQPH(const Translator &translator, QIODevice &dev, ConversionData &)
{
QTextStream t(&dev);
- t.setCodec(QTextCodec::codecForName("UTF-8"));
t << "<!DOCTYPE QPH>\n<QPH";
QString languageCode = translator.languageCode();
if (!languageCode.isEmpty() && languageCode != QLatin1String("C"))
diff --git a/src/linguist/shared/ts.cpp b/src/linguist/shared/ts.cpp
index 5d727b6ab..2d59fab30 100644
--- a/src/linguist/shared/ts.cpp
+++ b/src/linguist/shared/ts.cpp
@@ -31,7 +31,6 @@
#include <QtCore/QByteArray>
#include <QtCore/QDebug>
#include <QtCore/QRegularExpression>
-#include <QtCore/QTextCodec>
#include <QtCore/QTextStream>
#include <QtCore/QXmlStreamReader>
@@ -191,7 +190,6 @@ bool TSReader::read(Translator &translator)
STRING(catalog);
STRING(comment);
STRING(context);
- STRING(defaultcodec);
STRING(dependencies);
STRING(dependency);
STRING(extracomment);
@@ -250,11 +248,6 @@ bool TSReader::read(Translator &translator)
break;
} else if (isWhiteSpace()) {
// ignore these, just whitespace
- } else if (elementStarts(strdefaultcodec)) {
- // <defaultcodec>
- readElementText();
- m_cd.appendError(QString::fromLatin1("Warning: ignoring <defaultcodec> element"));
- // </defaultcodec>
} else if (isStartElement()
&& name().toString().startsWith(strextrans)) {
// <extra-...>
@@ -516,8 +509,6 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd)
{
bool result = true;
QTextStream t(&dev);
- t.setCodec(QTextCodec::codecForName("UTF-8"));
- //qDebug() << translator.codecName();
// The xml prolog allows processors to easily detect the correct encoding
t << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n";
diff --git a/src/linguist/shared/xliff.cpp b/src/linguist/shared/xliff.cpp
index e1cc64c59..7d869e06f 100644
--- a/src/linguist/shared/xliff.cpp
+++ b/src/linguist/shared/xliff.cpp
@@ -34,7 +34,6 @@
#include <QtCore/QRegularExpression>
#include <QtCore/QStack>
#include <QtCore/QString>
-#include <QtCore/QTextCodec>
#include <QtCore/QTextStream>
// The string value is historical and reflects the main purpose: Keeping
@@ -757,7 +756,6 @@ bool saveXLIFF(const Translator &translator, QIODevice &dev, ConversionData &cd)
int indent = 0;
QTextStream ts(&dev);
- ts.setCodec(QTextCodec::codecForName("UTF-8"));
QStringList dtgs = cd.dropTags();
dtgs << QLatin1String("po-(old_)?msgid_plural");