diff --git a/src/linguist/shared/ts.cpp b/src/linguist/shared/ts.cpp index f7dab9c55c507f20c003178b7465348c9fd58de3..74ad45e9aa3d8770fd46d439dff962999a8c7f3c 100644 --- a/src/linguist/shared/ts.cpp +++ b/src/linguist/shared/ts.cpp @@ -60,10 +60,6 @@ QT_BEGIN_NAMESPACE * in that encoding or as UTF-8 to trUtf8() if it is flagged as such. * For ts 2.0, the file content is always uniformly in UTF-8. The file stores * the codecForTr default and marks deviating messages accordingly. - * For ts 1.1, the file content is in mixed encoding. Each message is encoded - * the way it will be passed to tr() (with 8-bit characters encoded as numeric - * entities) or trUtf8(). The file stores the encoding and codecForTr in one - * attribute, for both the default and each deviating message. */ @@ -504,33 +500,6 @@ static QString protect(const QString &str) return result; } -static QString evilBytes(const QString& str, - bool isUtf8, int format, const QByteArray &codecName) -{ - //qDebug() << "EVIL: " << str << isUtf8 << format << codecName; - if (isUtf8) - return protect(str); - if (format == 20) - return protect(str); - if (codecName == "UTF-8") - return protect(str); - QTextCodec *codec = QTextCodec::codecForName(codecName); - if (!codec) - return protect(str); - QString t = QString::fromLatin1(codec->fromUnicode(protect(str)).data()); - int len = (int) t.length(); - QString result; - // FIXME: Factor is sensible only for latin scripts, probably. - result.reserve(t.length() * 2); - for (int k = 0; k < len; k++) { - if (t[k].unicode() >= 0x7f) - result += numericEntity(t[k].unicode()); - else - result += t[k]; - } - return result; -} - static void writeExtras(QTextStream &t, const char *indent, const TranslatorMessage::ExtraData &extras, QRegExp drops) { @@ -570,31 +539,25 @@ static void writeVariants(QTextStream &t, const char *indent, const QString &inp } } -bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd, int format) +bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd) { bool result = true; QTextStream t(&dev); t.setCodec(QTextCodec::codecForName("UTF-8")); bool trIsUtf8 = (translator.codecName() == "UTF-8"); //qDebug() << translator.codecName(); - bool fileIsUtf8 = (format == 20 || trIsUtf8); // The xml prolog allows processors to easily detect the correct encoding t << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n"; - if (format == 11) - t << "<TS version=\"1.1\""; - else - t << "<TS version=\"2.0\""; + t << "<TS version=\"2.0\""; QString languageCode = translator.languageCode(); if (!languageCode.isEmpty() && languageCode != QLatin1String("C")) t << " language=\"" << languageCode << "\""; - if (format == 20) { - languageCode = translator.sourceLanguageCode(); - if (!languageCode.isEmpty() && languageCode != QLatin1String("C")) - t << " sourcelanguage=\"" << languageCode << "\""; - } + languageCode = translator.sourceLanguageCode(); + if (!languageCode.isEmpty() && languageCode != QLatin1String("C")) + t << " sourcelanguage=\"" << languageCode << "\""; t << ">\n"; QByteArray codecName = translator.codecName(); @@ -611,8 +574,7 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd, in QRegExp drops(cd.dropTags().join(QLatin1String("|"))); - if (format == 20) - writeExtras(t, " ", translator.extras(), drops); + writeExtras(t, " ", translator.extras(), drops); QHash<QString, QList<TranslatorMessage> > messageOrder; QList<QString> contextOrder; @@ -632,34 +594,23 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd, in QHash<QString, int> currentLine; QString currentFile; foreach (const QString &context, contextOrder) { - const TranslatorMessage &firstMsg = messageOrder[context].first(); - t << "<context" << ((!fileIsUtf8 && firstMsg.isUtf8()) ? " encoding=\"UTF-8\"" : "") << ">\n"; - - t << " <name>" - << evilBytes(context, firstMsg.isUtf8() || fileIsUtf8, format, codecName) + t << "<context>\n" + " <name>" + << protect(context) << "</name>\n"; foreach (const TranslatorMessage &msg, messageOrder[context]) { //msg.dump(); - bool isUtf8 = msg.isUtf8(); - bool second = false; - forever { - t << " <message"; if (!msg.id().isEmpty()) t << " id=\"" << msg.id() << "\""; if (!trIsUtf8) { - if (format == 11) { - if (isUtf8) - t << " encoding=\"UTF-8\""; - } else { if (msg.isUtf8()) { if (msg.isNonUtf8()) t << " utf8=\"both\""; else t << " utf8=\"true\""; } - } } if (msg.isPlural()) t << " numerus=\"yes\""; @@ -703,20 +654,18 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd, in } t << " <source>" - << evilBytes(msg.sourceText(), isUtf8, format, codecName) + << protect(msg.sourceText()) << "</source>\n"; - if (format != 11 && !msg.oldSourceText().isEmpty()) + if (!msg.oldSourceText().isEmpty()) t << " <oldsource>" << protect(msg.oldSourceText()) << "</oldsource>\n"; if (!msg.comment().isEmpty()) { t << " <comment>" - << evilBytes(msg.comment(), isUtf8, format, codecName) + << protect(msg.comment()) << "</comment>\n"; } - if (format != 11) { - if (!msg.oldComment().isEmpty()) t << " <oldcomment>" << protect(msg.oldComment()) << "</oldcomment>\n"; @@ -728,8 +677,6 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd, in t << " <translatorcomment>" << protect(msg.translatorComment()) << "</translatorcomment>\n"; - } - t << " <translation"; if (msg.type() == TranslatorMessage::Unfinished) t << " type=\"unfinished\""; @@ -749,18 +696,11 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd, in } t << "</translation>\n"; - if (format != 11) - writeExtras(t, " ", msg.extras(), drops); + writeExtras(t, " ", msg.extras(), drops); if (!msg.userData().isEmpty()) t << " <userdata>" << msg.userData() << "</userdata>\n"; t << " </message>\n"; - - if (format != 11 || second || !msg.isUtf8() || !msg.isNonUtf8()) - break; - isUtf8 = false; - second = true; - } } t << "</context>\n"; } @@ -775,43 +715,16 @@ bool loadTS(Translator &translator, QIODevice &dev, ConversionData &cd) return reader.read(translator); } -bool saveTS11(const Translator &translator, QIODevice &dev, ConversionData &cd) -{ - return saveTS(translator, dev, cd, 11); -} - -bool saveTS20(const Translator &translator, QIODevice &dev, ConversionData &cd) -{ - return saveTS(translator, dev, cd, 20); -} - int initTS() { Translator::FileFormat format; - format.extension = QLatin1String("ts11"); - format.fileType = Translator::FileFormat::TranslationSource; - format.priority = -1; - format.description = QObject::tr("Qt translation sources (format 1.1)"); - format.loader = &loadTS; - format.saver = &saveTS11; - Translator::registerFileFormat(format); - - format.extension = QLatin1String("ts20"); - format.fileType = Translator::FileFormat::TranslationSource; - format.priority = -1; - format.description = QObject::tr("Qt translation sources (format 2.0)"); - format.loader = &loadTS; - format.saver = &saveTS20; - Translator::registerFileFormat(format); - - // "ts" is always the latest. right now it's ts20. format.extension = QLatin1String("ts"); format.fileType = Translator::FileFormat::TranslationSource; format.priority = 0; - format.description = QObject::tr("Qt translation sources (latest format)"); + format.description = QObject::tr("Qt translation sources"); format.loader = &loadTS; - format.saver = &saveTS20; + format.saver = &saveTS; Translator::registerFileFormat(format); return 1; diff --git a/tests/auto/linguist/lconvert/data/test11.ts b/tests/auto/linguist/lconvert/data/test11.ts deleted file mode 100644 index aeb46af9f44737e39431d1d944c513e5142ef1be..0000000000000000000000000000000000000000 --- a/tests/auto/linguist/lconvert/data/test11.ts +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="1.1" language="de_DE"> -<context> - <name>FindDialog</name> - <message> - <location filename="finddialog.cpp" line="57"/> - <source>Enter the text you want to find.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="finddialog.cpp" line="107"/> - <source>Search reached end of the document</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="finddialog.cpp" line="109"/> - <source>Search reached start of the document</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="finddialog.cpp" line="111"/> - <source>Text not found</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="finddialog.cpp" line="122"/> - <source>Should be obsolete</source> - <translation type="unfinished">SHOULD BE OBSOLETE</translation> - </message> -</context> -</TS> diff --git a/tests/auto/linguist/lconvert/tst_lconvert.cpp b/tests/auto/linguist/lconvert/tst_lconvert.cpp index 83f58539fe3dd06c0920ea2bb9355bb05c46300d..0f4dfcdadc47bfdbdb8a1d2ea42c98f736796d4a 100644 --- a/tests/auto/linguist/lconvert/tst_lconvert.cpp +++ b/tests/auto/linguist/lconvert/tst_lconvert.cpp @@ -285,9 +285,7 @@ void tst_lconvert::roundtrips_data() QStringList poTsPo; poTsPo << "po" << "ts" << "po"; QStringList poXlfPo; poXlfPo << "po" << "xlf" << "po"; - QStringList tsTs11Ts; tsTs11Ts << "ts" << "ts11" << "ts"; QStringList tsPoTs; tsPoTs << "ts" << "po" << "ts"; - QStringList ts11PoTs11; ts11PoTs11 << "ts11" << "po" << "ts11"; QStringList tsXlfTs; tsXlfTs << "ts" << "xlf" << "ts"; QStringList tsQmTs; tsQmTs << "ts" << "qm" << "ts"; @@ -301,7 +299,6 @@ void tst_lconvert::roundtrips_data() QTest::newRow("po-ts-po (developer comment)") << "test-developer-comment.po" << poTsPo << noArgs; QTest::newRow("po-xliff-po (developer comment)") << "test-developer-comment.po" << poXlfPo << noArgs; - QTest::newRow("ts11-po-ts11") << "test11.ts" << ts11PoTs11 << filterPoArgs; QTest::newRow("ts20-po-ts20") << "test20.ts" << tsPoTs << filterPoArgs; QTest::newRow("po-ts-po (de)") << "test1-de.po" << poTsPo << noArgs; QTest::newRow("po-ts-po (cn)") << "test1-cn.po" << poTsPo << noArgs; @@ -319,10 +316,6 @@ void tst_lconvert::roundtrips_data() QTest::newRow("po-ts-po (references)") << "test-refs.po" << poTsPo << noArgs; - QTest::newRow("ts20-ts11-ts20 (utf8)") << "codec-utf8.ts" << tsTs11Ts << noArgs; - QTest::newRow("ts20-ts11-ts20 (cp1252)") << "codec-cp1252.ts" << tsTs11Ts << noArgs; - QTest::newRow("ts20-ts11-ts20 (dual-encoding)") << "dual-encoding.ts" << tsTs11Ts << noArgs; - QTest::newRow("ts-qm-ts (dual-encoding)") << "dual-encoding.ts" << tsQmTs << noArgs; QTest::newRow("ts-qm-ts (plurals-de)") << "plurals-de.ts" << tsQmTs << outDeArgs; QTest::newRow("ts-qm-ts (plurals-cn)") << "plurals-cn.ts" << tsQmTs << outCnArgs; diff --git a/tests/auto/linguist/lrelease/testdata/mixedcodecs-ts11.ts b/tests/auto/linguist/lrelease/testdata/mixedcodecs-ts11.ts deleted file mode 100644 index 991f354322da8712ed1fcd78170efd4ddfd1fece..0000000000000000000000000000000000000000 --- a/tests/auto/linguist/lrelease/testdata/mixedcodecs-ts11.ts +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="1.1"> -<defaultcodec>windows-1252</defaultcodec> -<context> - <name>FooBar</name> - <message> - <location filename="main.cpp" line="11"/> - <source>this contains an umlaut ü &uuml;</source> - <translation>random stuff with umlaut</translation> - </message> - <message encoding="UTF-8"> - <location filename="main.cpp" line="13"/> - <source>umlaut ü &uuml; in utf8</source> - <translation>more random stuff with umlaut</translation> - </message> -</context> -</TS> diff --git a/tests/auto/linguist/lrelease/tst_lrelease.cpp b/tests/auto/linguist/lrelease/tst_lrelease.cpp index fc9f96d5f6a6d13f4c04db3b7d2b36a42e410408..c3593da680522a2c8f2391ab98ccb0b7ca9595ce 100644 --- a/tests/auto/linguist/lrelease/tst_lrelease.cpp +++ b/tests/auto/linguist/lrelease/tst_lrelease.cpp @@ -173,16 +173,10 @@ void tst_lrelease::translate() void tst_lrelease::mixedcodecs() { - QVERIFY(!QProcess::execute(binDir + "/lrelease " + dataDir + "mixedcodecs-ts11.ts")); QVERIFY(!QProcess::execute(binDir + "/lrelease " + dataDir + "mixedcodecs-ts20.ts")); -#ifdef Q_OS_WIN - QVERIFY(!QProcess::execute("fc /b testdata\\mixedcodecs-ts11.qm testdata\\mixedcodecs-ts20.qm")); -#else - QVERIFY(!QProcess::execute("cmp " + dataDir + "mixedcodecs-ts11.qm " + dataDir + "mixedcodecs-ts20.qm")); -#endif QTranslator translator; - QVERIFY(translator.load(dataDir + "mixedcodecs-ts11.qm")); + QVERIFY(translator.load(dataDir + "mixedcodecs-ts20.qm")); qApp->installTranslator(&translator); QCOMPARE(QCoreApplication::translate("FooBar", "this contains an umlaut \xfc ü"),