tools/assistant/lib/qhelpprojectdata.cpp
changeset 30 5dc02b23752f
parent 18 2f34d5167611
child 33 3e2da88830cd
--- a/tools/assistant/lib/qhelpprojectdata.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/tools/assistant/lib/qhelpprojectdata.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -41,11 +41,13 @@
 
 #include "qhelpprojectdata_p.h"
 
+#include <QtCore/QCoreApplication>
 #include <QtCore/QDir>
 #include <QtCore/QFileInfo>
 #include <QtCore/QStack>
 #include <QtCore/QMap>
 #include <QtCore/QRegExp>
+#include <QtCore/QUrl>
 #include <QtCore/QVariant>
 #include <QtXml/QXmlStreamReader>
 
@@ -76,13 +78,14 @@
     void readFiles();
     void raiseUnknownTokenError();
     void addMatchingFiles(const QString &pattern);
+    bool hasValidSyntax(const QString &nameSpace, const QString &vFolder) const;
 
     QMap<QString, QStringList> dirEntriesCache;
 };
 
 void QHelpProjectDataPrivate::raiseUnknownTokenError()
 {
-    raiseError(QObject::tr("Unknown token."));
+    raiseError(QCoreApplication::translate("QHelpProject", "Unknown token."));
 }
 
 void QHelpProjectDataPrivate::readData(const QByteArray &contents)
@@ -95,12 +98,14 @@
                 && attributes().value(QLatin1String("version")) == QLatin1String("1.0"))
                 readProject();
             else
-                raiseError(QObject::tr("Unknown token. Expected \"QtHelpProject\"!"));
+                raiseError(QCoreApplication::translate("QHelpProject",
+                               "Unknown token. Expected \"QtHelpProject\"!"));
         }
     }
 
     if (hasError()) {
-        raiseError(QObject::tr("Error in line %1: %2").arg(lineNumber())
+        raiseError(QCoreApplication::translate("QHelpProject",
+                       "Error in line %1: %2").arg(lineNumber())
             .arg(errorString()));
     }
 }
@@ -112,12 +117,14 @@
         if (isStartElement()) {
             if (name() == QLatin1String("virtualFolder")) {
                 virtualFolder = readElementText();
-                if (virtualFolder.contains(QLatin1String("/")))
-                    raiseError(QObject::tr("A virtual folder must not contain a \'/\' character!"));
+                if (!hasValidSyntax(QLatin1String("test"), virtualFolder))
+                    raiseError(QCoreApplication::translate("QHelpProject",
+                                   "Virtual folder has invalid syntax."));
             } else if (name() == QLatin1String("namespace")) {
                 namespaceName = readElementText();
-                if (namespaceName.contains(QLatin1String("/")))
-                    raiseError(QObject::tr("A namespace must not contain a \'/\' character!"));
+                if (!hasValidSyntax(namespaceName, QLatin1String("test")))
+                    raiseError(QCoreApplication::translate("QHelpProject",
+                                   "Namespace has invalid syntax."));
             } else if (name() == QLatin1String("customFilter")) {
                 readCustomFilter();
             } else if (name() == QLatin1String("filterSection")) {
@@ -125,17 +132,21 @@
             } else if (name() == QLatin1String("metaData")) {
                 QString n = attributes().value(QLatin1String("name")).toString();
                 if (!metaData.contains(n))
-                    metaData[n] = attributes().value(QLatin1String("value")).toString();
+                    metaData[n]
+                        = attributes().value(QLatin1String("value")).toString();
                 else
-                    metaData.insert(n, attributes().value(QLatin1String("value")).toString());
+                    metaData.insert(n, attributes().
+                                    value(QLatin1String("value")).toString());
             } else {
                 raiseUnknownTokenError();
             }
         } else if (isEndElement() && name() == QLatin1String("QtHelpProject")) {
             if (namespaceName.isEmpty())
-                raiseError(QObject::tr("Missing namespace in QtHelpProject."));
+                raiseError(QCoreApplication::translate("QHelpProject",
+                              "Missing namespace in QtHelpProject."));
             else if (virtualFolder.isEmpty())
-                raiseError(QObject::tr("Missing virtual folder in QtHelpProject"));
+                raiseError(QCoreApplication::translate("QHelpProject",
+                               "Missing virtual folder in QtHelpProject"));
             break;
         }
     }
@@ -223,12 +234,14 @@
                 if (attributes().value(QLatin1String("ref")).toString().isEmpty()
                     || (attributes().value(QLatin1String("name")).toString().isEmpty()
                     && attributes().value(QLatin1String("id")).toString().isEmpty()))
-                    raiseError(QObject::tr("Missing attribute in keyword at line %1.")
-                        .arg(lineNumber()));
-                filterSectionList.last().addIndex(
-                    QHelpDataIndexItem(attributes().value(QLatin1String("name")).toString(),
-                        attributes().value(QLatin1String("id")).toString(),
-                        attributes().value(QLatin1String("ref")).toString()));
+                    raiseError(QCoreApplication::translate("QHelpProject",
+                                   "Missing attribute in keyword at line %1.")
+                               .arg(lineNumber()));
+                filterSectionList.last()
+                    .addIndex(QHelpDataIndexItem(attributes().
+                                  value(QLatin1String("name")).toString(),
+                              attributes().value(QLatin1String("id")).toString(),
+                              attributes().value(QLatin1String("ref")).toString()));
             } else {
                 raiseUnknownTokenError();
             }
@@ -305,6 +318,22 @@
         filterSectionList.last().addFile(pattern);
 }
 
+bool QHelpProjectDataPrivate::hasValidSyntax(const QString &nameSpace,
+                                             const QString &vFolder) const
+{
+    const QLatin1Char slash('/');
+    if (nameSpace.contains(slash) || vFolder.contains(slash))
+        return false;
+    QUrl url;
+    const QLatin1String scheme("qthelp");
+    url.setScheme(scheme);
+    url.setHost(nameSpace);
+    url.setPath(vFolder);
+
+    const QString expectedUrl(scheme + QLatin1String("://") + nameSpace + slash + vFolder);
+    return url.isValid() && url.toString() == expectedUrl;
+}
+
 /*!
     \internal
     \class QHelpProjectData
@@ -346,8 +375,8 @@
     d->rootPath = QFileInfo(fileName).absolutePath();
     QFile file(fileName);
     if (!file.open(QIODevice::ReadOnly)) {
-        d->errorMsg = QObject::tr("The input file %1 could not be opened!")
-            .arg(fileName);
+        d->errorMsg = QCoreApplication::translate("QHelpProject",
+                          "The input file %1 could not be opened!").arg(fileName);
         return false;
     }