tools/linguist/lupdate/qscript.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
child 37 758a864f9613
equal deleted inserted replaced
30:5dc02b23752f 33:3e2da88830cd
    50 #include <QtCore/qdebug.h>
    50 #include <QtCore/qdebug.h>
    51 #include <QtCore/qnumeric.h>
    51 #include <QtCore/qnumeric.h>
    52 #include <QtCore/qstring.h>
    52 #include <QtCore/qstring.h>
    53 #include <QtCore/qtextcodec.h>
    53 #include <QtCore/qtextcodec.h>
    54 #include <QtCore/qvariant.h>
    54 #include <QtCore/qvariant.h>
       
    55 
       
    56 #include <iostream>
    55 
    57 
    56 #include <ctype.h>
    58 #include <ctype.h>
    57 #include <stdlib.h>
    59 #include <stdlib.h>
    58 #include <stdio.h>
    60 #include <stdio.h>
    59 #include <string.h>
    61 #include <string.h>
  2212 case 66: {
  2214 case 66: {
  2213     QString name = sym(1).toString();
  2215     QString name = sym(1).toString();
  2214     if ((name == QLatin1String("qsTranslate")) || (name == QLatin1String("QT_TRANSLATE_NOOP"))) {
  2216     if ((name == QLatin1String("qsTranslate")) || (name == QLatin1String("QT_TRANSLATE_NOOP"))) {
  2215         QVariantList args = sym(2).toList();
  2217         QVariantList args = sym(2).toList();
  2216         if (args.size() < 2) {
  2218         if (args.size() < 2) {
  2217             qWarning("%s:%d: %s() requires at least two arguments",
  2219             std::cerr << qPrintable(fileName) << ':' << identLineNo << ": "
  2218                      qPrintable(fileName), identLineNo, qPrintable(name));
  2220                       << qPrintable(name) << "() requires at least two arguments.\n";
  2219         } else {
  2221         } else {
  2220             if ((args.at(0).type() != QVariant::String)
  2222             if ((args.at(0).type() != QVariant::String)
  2221                 || (args.at(1).type() != QVariant::String)) {
  2223                 || (args.at(1).type() != QVariant::String)) {
  2222                 qWarning("%s:%d: %s(): both arguments must be literal strings",
  2224                 std::cerr << qPrintable(fileName) << ':' << identLineNo << ": "
  2223                          qPrintable(fileName), identLineNo, qPrintable(name));
  2225                           << qPrintable(name) << "(): both arguments must be literal strings.\n";
  2224             } else {
  2226             } else {
  2225                 QString context = args.at(0).toString();
  2227                 QString context = args.at(0).toString();
  2226                 QString text = args.at(1).toString();
  2228                 QString text = args.at(1).toString();
  2227                 QString comment = args.value(2).toString();
  2229                 QString comment = args.value(2).toString();
  2228                 QString extracomment;
  2230                 QString extracomment;
  2232             }
  2234             }
  2233         }
  2235         }
  2234     } else if ((name == QLatin1String("qsTr")) || (name == QLatin1String("QT_TR_NOOP"))) {
  2236     } else if ((name == QLatin1String("qsTr")) || (name == QLatin1String("QT_TR_NOOP"))) {
  2235         QVariantList args = sym(2).toList();
  2237         QVariantList args = sym(2).toList();
  2236         if (args.size() < 1) {
  2238         if (args.size() < 1) {
  2237             qWarning("%s:%d: %s() requires at least one argument",
  2239             std::cerr << qPrintable(fileName) << ':' << identLineNo << ": "
  2238                      qPrintable(fileName), identLineNo, qPrintable(name));
  2240                       << qPrintable(name) << "() requires at least one argument.\n";
  2239         } else {
  2241         } else {
  2240             if (args.at(0).type() != QVariant::String) {
  2242             if (args.at(0).type() != QVariant::String) {
  2241                 qWarning("%s:%d: %s(): text to translate must be a literal string",
  2243                 std::cerr << qPrintable(fileName) << ':' << identLineNo << ": "
  2242                          qPrintable(fileName), identLineNo, qPrintable(name));
  2244                           << qPrintable(name) << "(): text to translate must be a literal string.\n";
  2243             } else {
  2245             } else {
  2244                 QString context = QFileInfo(fileName).baseName();
  2246                 QString context = QFileInfo(fileName).baseName();
  2245                 QString text = args.at(0).toString();
  2247                 QString text = args.at(0).toString();
  2246                 QString comment = args.value(1).toString();
  2248                 QString comment = args.value(1).toString();
  2247                 QString extracomment;
  2249                 QString extracomment;
  2375     QString code = ts.readAll();
  2377     QString code = ts.readAll();
  2376     QScript::Lexer lexer;
  2378     QScript::Lexer lexer;
  2377     lexer.setCode(code, /*lineNumber=*/1);
  2379     lexer.setCode(code, /*lineNumber=*/1);
  2378     QScriptParser parser;
  2380     QScriptParser parser;
  2379     if (!parser.parse(&lexer, filename, &translator)) {
  2381     if (!parser.parse(&lexer, filename, &translator)) {
  2380         qWarning("%s:%d: %s", qPrintable(filename), parser.errorLineNumber(),
  2382         std::cerr << qPrintable(filename) << ':' << parser.errorLineNumber() << ": "
  2381                  qPrintable(parser.errorMessage()));
  2383                   << qPrintable(parser.errorMessage()) << std::endl;
  2382         return false;
  2384         return false;
  2383     }
  2385     }
  2384 
  2386 
  2385     // Java uses UTF-16 internally and Jambi makes UTF-8 for tr() purposes of it.
  2387     // Java uses UTF-16 internally and Jambi makes UTF-8 for tr() purposes of it.
  2386     translator.setCodecName("UTF-8");
  2388     translator.setCodecName("UTF-8");