tools/linguist/shared/po.cpp
changeset 37 758a864f9613
parent 33 3e2da88830cd
--- a/tools/linguist/shared/po.cpp	Fri Sep 17 08:34:18 2010 +0300
+++ b/tools/linguist/shared/po.cpp	Mon Oct 04 01:19:32 2010 +0300
@@ -50,8 +50,6 @@
 
 #include <ctype.h>
 
-#define MAGIC_OBSOLETE_REFERENCE "Obsolete_PO_entries"
-
 // Uncomment if you wish to hard wrap long lines in .po files. Note that this
 // affects only msg strings, not comments.
 //#define HARD_WRAP_LONG_WORDS
@@ -555,15 +553,26 @@
             TranslatorMessage msg;
             msg.setContext(codec->toUnicode(item.context));
             if (!item.references.isEmpty()) {
+                QString xrefs;
                 foreach (const QString &ref,
                          codec->toUnicode(item.references).split(
                                  QRegExp(QLatin1String("\\s")), QString::SkipEmptyParts)) {
-                    int pos = ref.lastIndexOf(QLatin1Char(':'));
-                    if (pos != -1)
-                        msg.addReference(ref.left(pos), ref.mid(pos + 1).toInt());
+                    int pos = ref.indexOf(QLatin1Char(':'));
+                    int lpos = ref.lastIndexOf(QLatin1Char(':'));
+                    if (pos != -1 && pos == lpos) {
+                        bool ok;
+                        int lno = ref.mid(pos + 1).toInt(&ok);
+                        if (ok) {
+                            msg.addReference(ref.left(pos), lno);
+                            continue;
+                        }
+                    }
+                    if (!xrefs.isEmpty())
+                        xrefs += QLatin1Char(' ');
+                    xrefs += ref;
                 }
-            } else if (isObsolete) {
-                msg.setFileName(QLatin1String(MAGIC_OBSOLETE_REFERENCE));
+                if (!xrefs.isEmpty())
+                    item.extra[QLatin1String("po-references")] = xrefs;
             }
             msg.setId(codec->toUnicode(item.id));
             msg.setSourceText(codec->toUnicode(item.msgId));
@@ -660,6 +669,8 @@
                         item.isPlural = true;
                     } else if (line.startsWith("#~ msgctxt ")) {
                         item.tscomment = slurpEscapedString(lines, l, 11, "#~ ", cd);
+                        if (qtContexts)
+                            splitContext(&item.tscomment, &item.context);
                     } else {
                         cd.appendError(QString(QLatin1String("PO-format parse error in line %1: '%2'"))
                             .arg(l + 1).arg(codec->toUnicode(lines[l])));
@@ -773,11 +784,14 @@
         if (!msg.id().isEmpty())
             out << QLatin1String("#. ts-id ") << msg.id() << '\n';
 
-        if (!msg.fileName().isEmpty() && msg.fileName() != QLatin1String(MAGIC_OBSOLETE_REFERENCE)) {
+        QString xrefs = msg.extra(QLatin1String("po-references"));
+        if (!msg.fileName().isEmpty() || !xrefs.isEmpty()) {
             QStringList refs;
             foreach (const TranslatorMessage::Reference &ref, msg.allReferences())
                 refs.append(QString(QLatin1String("%2:%1"))
                                     .arg(ref.lineNumber()).arg(ref.fileName()));
+            if (!xrefs.isEmpty())
+                refs << xrefs;
             out << poWrappedEscapedLines(QLatin1String("#:"), true, refs.join(QLatin1String(" ")));
         }