tools/linguist/lupdate/main.cpp
changeset 30 5dc02b23752f
parent 18 2f34d5167611
child 33 3e2da88830cd
--- a/tools/linguist/lupdate/main.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/tools/linguist/lupdate/main.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -83,7 +83,7 @@
     printOut(QObject::tr(
         "Usage:\n"
         "    lupdate [options] [project-file]...\n"
-        "    lupdate [options] [source-file|path]... -ts ts-files\n\n"
+        "    lupdate [options] [source-file|path|@lst-file]... -ts ts-files|@lst-file\n\n"
         "lupdate is part of Qt's Linguist tool chain. It extracts translatable\n"
         "messages from Qt UI files, C++, Java and JavaScript/QtScript source code.\n"
         "Extracted messages are stored in textual translation source files (typically\n"
@@ -132,6 +132,8 @@
         "           Specify the codec assumed for tr() calls. Effective only with -ts.\n"
         "    -version\n"
         "           Display the version of lupdate and exit.\n"
+        "    @lst-file\n"
+        "           Read additional file names (one per line) from lst-file.\n"
     ).arg(m_defaultExtensions));
 }
 
@@ -267,6 +269,8 @@
         else if (it->endsWith(QLatin1String(".js"), Qt::CaseInsensitive)
                  || it->endsWith(QLatin1String(".qs"), Qt::CaseInsensitive))
             loadQScript(fetchedTor, *it, cd);
+        else if (it->endsWith(QLatin1String(".qml"), Qt::CaseInsensitive))
+            loadQml(fetchedTor, *it, cd);
         else
             sourceFilesCpp << *it;
     }
@@ -405,7 +409,7 @@
 int main(int argc, char **argv)
 {
     QCoreApplication app(argc, argv);
-    m_defaultExtensions = QLatin1String("ui,c,c++,cc,cpp,cxx,ch,h,h++,hh,hpp,hxx");
+    m_defaultExtensions = QLatin1String("java,jui,ui,c,c++,cc,cpp,cxx,ch,h,h++,hh,hpp,hxx,js,qs,qml");
 
     QStringList args = app.arguments();
     QStringList tsFileNames;
@@ -560,73 +564,93 @@
             return 1;
         }
 
+        QStringList files;
+        if (arg.startsWith(QLatin1String("@"))) {
+            QFile lstFile(arg.mid(1));
+            if (!lstFile.open(QIODevice::ReadOnly)) {
+                qWarning("lupdate error: List file '%s' is not readable",
+                         qPrintable(lstFile.fileName()));
+                return 1;
+            }
+            while (!lstFile.atEnd())
+                files << QString::fromLocal8Bit(lstFile.readLine().trimmed());
+        } else {
+            files << arg;
+        }
         if (metTsFlag) {
-            bool found = false;
-            foreach (const Translator::FileFormat &fmt, Translator::registeredFileFormats()) {
-                if (arg.endsWith(QLatin1Char('.') + fmt.extension, Qt::CaseInsensitive)) {
-                    QFileInfo fi(arg);
-                    if (!fi.exists() || fi.isWritable()) {
-                        tsFileNames.append(QFileInfo(arg).absoluteFilePath());
-                    } else {
-                        qWarning("lupdate warning: For some reason, '%s' is not writable.\n",
-                                qPrintable(arg));
+            foreach (const QString &file, files) {
+                bool found = false;
+                foreach (const Translator::FileFormat &fmt, Translator::registeredFileFormats()) {
+                    if (file.endsWith(QLatin1Char('.') + fmt.extension, Qt::CaseInsensitive)) {
+                        QFileInfo fi(file);
+                        if (!fi.exists() || fi.isWritable()) {
+                            tsFileNames.append(QFileInfo(file).absoluteFilePath());
+                        } else {
+                            qWarning("lupdate warning: For some reason, '%s' is not writable.\n",
+                                    qPrintable(file));
+                        }
+                        found = true;
+                        break;
                     }
-                    found = true;
-                    break;
+                }
+                if (!found) {
+                    qWarning("lupdate error: File '%s' has no recognized extension\n",
+                             qPrintable(file));
+                    return 1;
                 }
             }
-            if (!found) {
-                qWarning("lupdate error: File '%s' has no recognized extension\n",
-                         qPrintable(arg));
-                return 1;
-            }
-        } else if (arg.endsWith(QLatin1String(".pro"), Qt::CaseInsensitive)
-                || arg.endsWith(QLatin1String(".pri"), Qt::CaseInsensitive)) {
-            proFiles << arg;
             numFiles++;
         } else {
-            QFileInfo fi(arg);
-            if (!fi.exists()) {
-                qWarning("lupdate error: File '%s' does not exists\n", qPrintable(arg));
-                return 1;
-            } else if (fi.isDir()) {
-                if (options & Verbose)
-                    printOut(QObject::tr("Scanning directory '%1'...").arg(arg));
-                QDir dir = QDir(fi.filePath());
-                projectRoots.insert(dir.absolutePath() + QLatin1Char('/'));
-                if (extensionsNameFilters.isEmpty()) {
-                    foreach (QString ext, extensions.split(QLatin1Char(','))) {
-                        ext = ext.trimmed();
-                        if (ext.startsWith(QLatin1Char('.')))
-                            ext.remove(0, 1);
-                        extensionsNameFilters.insert(ext);
-                    }
+            foreach (const QString &file, files) {
+                QFileInfo fi(file);
+                if (!fi.exists()) {
+                    qWarning("lupdate error: File '%s' does not exists\n", qPrintable(file));
+                    return 1;
                 }
-                QDir::Filters filters = QDir::Files | QDir::NoSymLinks;
-                if (recursiveScan)
-                    filters |= QDir::AllDirs | QDir::NoDotAndDotDot;
-                QFileInfoList fileinfolist;
-                recursiveFileInfoList(dir, extensionsNameFilters, filters, &fileinfolist);
-                int scanRootLen = dir.absolutePath().length();
-                foreach (const QFileInfo &fi, fileinfolist) {
-                    QString fn = QDir::cleanPath(fi.absoluteFilePath());
-                    sourceFiles << fn;
+                if (file.endsWith(QLatin1String(".pro"), Qt::CaseInsensitive)
+                    || file.endsWith(QLatin1String(".pri"), Qt::CaseInsensitive)) {
+                    proFiles << file;
+                } else if (fi.isDir()) {
+                    if (options & Verbose)
+                        printOut(QObject::tr("Scanning directory '%1'...").arg(file));
+                    QDir dir = QDir(fi.filePath());
+                    projectRoots.insert(dir.absolutePath() + QLatin1Char('/'));
+                    if (extensionsNameFilters.isEmpty()) {
+                        foreach (QString ext, extensions.split(QLatin1Char(','))) {
+                            ext = ext.trimmed();
+                            if (ext.startsWith(QLatin1Char('.')))
+                                ext.remove(0, 1);
+                            extensionsNameFilters.insert(ext);
+                        }
+                    }
+                    QDir::Filters filters = QDir::Files | QDir::NoSymLinks;
+                    if (recursiveScan)
+                        filters |= QDir::AllDirs | QDir::NoDotAndDotDot;
+                    QFileInfoList fileinfolist;
+                    recursiveFileInfoList(dir, extensionsNameFilters, filters, &fileinfolist);
+                    int scanRootLen = dir.absolutePath().length();
+                    foreach (const QFileInfo &fi, fileinfolist) {
+                        QString fn = QDir::cleanPath(fi.absoluteFilePath());
+                        sourceFiles << fn;
 
-                    if (!fn.endsWith(QLatin1String(".java"))
-                        && !fn.endsWith(QLatin1String(".ui"))
-                        && !fn.endsWith(QLatin1String(".js"))
-                        && !fn.endsWith(QLatin1String(".qs"))) {
-                        int offset = 0;
-                        int depth = 0;
-                        do {
-                            offset = fn.lastIndexOf(QLatin1Char('/'), offset - 1);
-                            QString ffn = fn.mid(offset + 1);
-                            allCSources.insert(ffn, fn);
-                        } while (++depth < 3 && offset > scanRootLen);
+                        if (!fn.endsWith(QLatin1String(".java"))
+                            && !fn.endsWith(QLatin1String(".jui"))
+                            && !fn.endsWith(QLatin1String(".ui"))
+                            && !fn.endsWith(QLatin1String(".js"))
+                            && !fn.endsWith(QLatin1String(".qs"))
+                            && !fn.endsWith(QLatin1String(".qml"))) {
+                            int offset = 0;
+                            int depth = 0;
+                            do {
+                                offset = fn.lastIndexOf(QLatin1Char('/'), offset - 1);
+                                QString ffn = fn.mid(offset + 1);
+                                allCSources.insert(ffn, fn);
+                            } while (++depth < 3 && offset > scanRootLen);
+                        }
                     }
+                } else {
+                    sourceFiles << QDir::cleanPath(fi.absoluteFilePath());;
                 }
-            } else {
-                sourceFiles << QDir::cleanPath(fi.absoluteFilePath());;
             }
             numFiles++;
         }