From 6597b915b8df43b905f937d0ad87ae9e560ab3b5 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Date: Wed, 6 Mar 2013 15:29:08 +0100 Subject: [PATCH] support only utf-8 and utf-16 for source code utf-16 is optionally used by java and msvc. it doesn't hurt to support it. all other encodings are not used anyway (other than 8-bit pass-through, but this is a matter for (the also removed) CodecForTr). Change-Id: Ie6482e187a9a8276918b53e97faeac88a40eb52c Reviewed-by: hjk <hjk121@nokiamail.com> --- src/linguist/lupdate/cpp.cpp | 4 +--- src/linguist/lupdate/java.cpp | 7 +------ src/linguist/lupdate/lupdate.h | 3 ++- src/linguist/lupdate/main.cpp | 35 +++++++++++++++++--------------- src/linguist/shared/translator.h | 2 +- 5 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/linguist/lupdate/cpp.cpp b/src/linguist/lupdate/cpp.cpp index 8288cbff5..ec02be157 100644 --- a/src/linguist/lupdate/cpp.cpp +++ b/src/linguist/lupdate/cpp.cpp @@ -2217,9 +2217,7 @@ const ParseResults *CppParser::recordResults(bool isHeader) void loadCPP(Translator &translator, const QStringList &filenames, ConversionData &cd) { - QByteArray codecName = cd.m_codecForSource.isEmpty() - ? "UTF-8" : cd.m_codecForSource; - QTextCodec *codec = QTextCodec::codecForName(codecName); + QTextCodec *codec = QTextCodec::codecForName(cd.m_sourceIsUtf16 ? "UTF-16" : "UTF-8"); foreach (const QString &filename, filenames) { if (!CppFiles::getResults(filename).isEmpty() || CppFiles::isBlacklisted(filename)) diff --git a/src/linguist/lupdate/java.cpp b/src/linguist/lupdate/java.cpp index 079847f43..210b85458 100644 --- a/src/linguist/lupdate/java.cpp +++ b/src/linguist/lupdate/java.cpp @@ -622,12 +622,7 @@ bool loadJava(Translator &translator, const QString &filename, ConversionData &c yyParenLineNo = 1; QTextStream ts(&file); - QByteArray codecName; - if (!cd.m_codecForSource.isEmpty()) - codecName = cd.m_codecForSource; - else - codecName = "UTF-8"; - ts.setCodec(QTextCodec::codecForName(codecName)); + ts.setCodec(QTextCodec::codecForName(cd.m_sourceIsUtf16 ? "UTF-16" : "UTF-8")); ts.setAutoDetectUnicode(true); yyInStr = ts.readAll(); yyInPos = 0; diff --git a/src/linguist/lupdate/lupdate.h b/src/linguist/lupdate/lupdate.h index 3f3095a89..05a3ce583 100644 --- a/src/linguist/lupdate/lupdate.h +++ b/src/linguist/lupdate/lupdate.h @@ -65,7 +65,8 @@ enum UpdateOption { AbsoluteLocations = 256, RelativeLocations = 512, NoLocations = 1024, - NoUiLines = 2048 + NoUiLines = 2048, + SourceIsUtf16 = 4096 }; Q_DECLARE_FLAGS(UpdateOptions, UpdateOption) diff --git a/src/linguist/lupdate/main.cpp b/src/linguist/lupdate/main.cpp index ff7538de7..56078a5ae 100644 --- a/src/linguist/lupdate/main.cpp +++ b/src/linguist/lupdate/main.cpp @@ -52,7 +52,6 @@ #include <QtCore/QFileInfo> #include <QtCore/QString> #include <QtCore/QStringList> -#include <QtCore/QTextCodec> #include <QtCore/QTranslator> #include <QtCore/QLibraryInfo> @@ -354,26 +353,29 @@ static void processSources(Translator &fetchedTor, static void processProjects(bool topLevel, bool nestComplain, const QStringList &proFiles, const QHash<QString, QString> &outDirMap, ProFileGlobals *option, QMakeParser *parser, - UpdateOptions options, const QByteArray &codecForSource, + UpdateOptions options, const QString &targetLanguage, const QString &sourceLanguage, Translator *parentTor, bool *fail); static void processProject( bool nestComplain, const QString &proFile, ProFileGlobals *option, QMakeParser *parser, ProFileEvaluator &visitor, - UpdateOptions options, const QByteArray &_codecForSource, + UpdateOptions options, const QString &targetLanguage, const QString &sourceLanguage, Translator *fetchedTor, bool *fail) { - QByteArray codecForSource = _codecForSource; QStringList tmp = visitor.values(QLatin1String("CODECFORSRC")); if (!tmp.isEmpty()) { - codecForSource = tmp.last().toLatin1(); - if (!QTextCodec::codecForName(codecForSource)) { + QByteArray codecForSource = tmp.last().toLatin1().toUpper(); + if (codecForSource == "UTF16" || codecForSource == "UTF-16") { + options |= SourceIsUtf16; + } else if (codecForSource == "UTF8" || codecForSource == "UTF-8") { + options &= ~SourceIsUtf16; + } else { printErr(LU::tr("lupdate warning: Codec for source '%1' is invalid." - " Falling back to codec for tr().\n") + " Falling back to UTF-8.\n") .arg(QString::fromLatin1(codecForSource))); - codecForSource.clear(); + options &= ~SourceIsUtf16; } } QString proPath = QFileInfo(proFile).path(); @@ -395,12 +397,12 @@ static void processProject( subProFiles << subPro; } processProjects(false, nestComplain, subProFiles, QHash<QString, QString>(), - option, parser, options, codecForSource, + option, parser, options, targetLanguage, sourceLanguage, fetchedTor, fail); } else { ConversionData cd; cd.m_noUiLines = options & NoUiLines; - cd.m_codecForSource = codecForSource; + cd.m_sourceIsUtf16 = options & SourceIsUtf16; cd.m_includePath = visitor.values(QLatin1String("INCLUDEPATH")); QStringList sourceFiles = getSources(visitor, proPath); QSet<QString> sourceDirs; @@ -421,7 +423,7 @@ static void processProject( static void processProjects(bool topLevel, bool nestComplain, const QStringList &proFiles, const QHash<QString, QString> &outDirMap, ProFileGlobals *option, QMakeParser *parser, - UpdateOptions options, const QByteArray &codecForSource, + UpdateOptions options, const QString &targetLanguage, const QString &sourceLanguage, Translator *parentTor, bool *fail) { @@ -471,7 +473,7 @@ static void processProjects(bool topLevel, bool nestComplain, const QStringList continue; } Translator tor; - processProject(false, proFile, option, parser, visitor, options, codecForSource, + processProject(false, proFile, option, parser, visitor, options, targetLanguage, sourceLanguage, &tor, fail); updateTsFiles(tor, tsFiles, QStringList(), sourceLanguage, targetLanguage, options, fail); @@ -484,10 +486,10 @@ static void processProjects(bool topLevel, bool nestComplain, const QStringList printErr(LU::tr("lupdate warning: no TS files specified. Only diagnostics " "will be produced for '%1'.\n").arg(proFile)); Translator tor; - processProject(nestComplain, proFile, option, parser, visitor, options, codecForSource, + processProject(nestComplain, proFile, option, parser, visitor, options, targetLanguage, sourceLanguage, &tor, fail); } else { - processProject(nestComplain, proFile, option, parser, visitor, options, codecForSource, + processProject(nestComplain, proFile, option, parser, visitor, options, targetLanguage, sourceLanguage, parentTor, fail); } pro->deref(); @@ -802,6 +804,7 @@ int main(int argc, char **argv) Translator fetchedTor; ConversionData cd; cd.m_noUiLines = options & NoUiLines; + cd.m_sourceIsUtf16 = options & SourceIsUtf16; cd.m_projectRoots = projectRoots; cd.m_includePath = includePath; cd.m_allCSources = allCSources; @@ -827,12 +830,12 @@ int main(int argc, char **argv) if (!tsFileNames.isEmpty()) { Translator fetchedTor; - processProjects(true, true, proFiles, outDirMap, &option, &parser, options, QByteArray(), + processProjects(true, true, proFiles, outDirMap, &option, &parser, options, targetLanguage, sourceLanguage, &fetchedTor, &fail); updateTsFiles(fetchedTor, tsFileNames, alienFiles, sourceLanguage, targetLanguage, options, &fail); } else { - processProjects(true, false, proFiles, outDirMap, &option, &parser, options, QByteArray(), + processProjects(true, false, proFiles, outDirMap, &option, &parser, options, targetLanguage, sourceLanguage, 0, &fail); } } diff --git a/src/linguist/shared/translator.h b/src/linguist/shared/translator.h index 712098219..17dc3d53d 100644 --- a/src/linguist/shared/translator.h +++ b/src/linguist/shared/translator.h @@ -97,7 +97,7 @@ public: public: QString m_defaultContext; - QByteArray m_codecForSource; // CPP, PO & QM specific + bool m_sourceIsUtf16; // CPP & JAVA specific QString m_unTrPrefix; // QM specific QString m_sourceFileName; QString m_targetFileName; -- GitLab