diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2011-09-12 22:29:32 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@nokia.com> | 2011-09-13 20:17:44 +0200 |
commit | 7d0a7adede5166cf64ceb7b7826d2817d9f86e7d (patch) | |
tree | 705233a6ffdf0cc41a5906d5255798695ff1d601 /src/assistant/lib/qhelpprojectdata.cpp | |
parent | 5a818d1e1e7f63c30ea00753397f5c9831c6c0d6 (diff) |
Get assistant to compile against refactor
Give the source code a somewhat saner structure while
I'm at it.
Change-Id: I99766405debe231a0562dd623ba1d17f19333656
Reviewed-on: http://codereview.qt-project.org/4829
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/assistant/lib/qhelpprojectdata.cpp')
-rw-r--r-- | src/assistant/lib/qhelpprojectdata.cpp | 450 |
1 files changed, 0 insertions, 450 deletions
diff --git a/src/assistant/lib/qhelpprojectdata.cpp b/src/assistant/lib/qhelpprojectdata.cpp deleted file mode 100644 index bd59e289c..000000000 --- a/src/assistant/lib/qhelpprojectdata.cpp +++ /dev/null @@ -1,450 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt Assistant of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#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> - -QT_BEGIN_NAMESPACE - -class QHelpProjectDataPrivate : public QXmlStreamReader -{ -public: - void readData(const QByteArray &contents); - - QString virtualFolder; - QString namespaceName; - QString rootPath; - - QStringList fileList; - QList<QHelpDataCustomFilter> customFilterList; - QList<QHelpDataFilterSection> filterSectionList; - QMap<QString, QVariant> metaData; - - QString errorMsg; - -private: - void readProject(); - void readCustomFilter(); - void readFilterSection(); - void readTOC(); - void readKeywords(); - 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(QCoreApplication::translate("QHelpProject", "Unknown token.")); -} - -void QHelpProjectDataPrivate::readData(const QByteArray &contents) -{ - addData(contents); - while (!atEnd()) { - readNext(); - if (isStartElement()) { - if (name() == QLatin1String("QtHelpProject") - && attributes().value(QLatin1String("version")) == QLatin1String("1.0")) - readProject(); - else - raiseError(QCoreApplication::translate("QHelpProject", - "Unknown token. Expected \"QtHelpProject\"!")); - } - } - - if (hasError()) { - raiseError(QCoreApplication::translate("QHelpProject", - "Error in line %1: %2").arg(lineNumber()) - .arg(errorString())); - } -} - -void QHelpProjectDataPrivate::readProject() -{ - while (!atEnd()) { - readNext(); - if (isStartElement()) { - if (name() == QLatin1String("virtualFolder")) { - virtualFolder = readElementText(); - if (!hasValidSyntax(QLatin1String("test"), virtualFolder)) - raiseError(QCoreApplication::translate("QHelpProject", - "Virtual folder has invalid syntax.")); - } else if (name() == QLatin1String("namespace")) { - namespaceName = readElementText(); - if (!hasValidSyntax(namespaceName, QLatin1String("test"))) - raiseError(QCoreApplication::translate("QHelpProject", - "Namespace has invalid syntax.")); - } else if (name() == QLatin1String("customFilter")) { - readCustomFilter(); - } else if (name() == QLatin1String("filterSection")) { - readFilterSection(); - } else if (name() == QLatin1String("metaData")) { - QString n = attributes().value(QLatin1String("name")).toString(); - if (!metaData.contains(n)) - metaData[n] - = attributes().value(QLatin1String("value")).toString(); - else - metaData.insert(n, attributes(). - value(QLatin1String("value")).toString()); - } else { - raiseUnknownTokenError(); - } - } else if (isEndElement() && name() == QLatin1String("QtHelpProject")) { - if (namespaceName.isEmpty()) - raiseError(QCoreApplication::translate("QHelpProject", - "Missing namespace in QtHelpProject.")); - else if (virtualFolder.isEmpty()) - raiseError(QCoreApplication::translate("QHelpProject", - "Missing virtual folder in QtHelpProject")); - break; - } - } -} - -void QHelpProjectDataPrivate::readCustomFilter() -{ - QHelpDataCustomFilter filter; - filter.name = attributes().value(QLatin1String("name")).toString(); - while (!atEnd()) { - readNext(); - if (isStartElement()) { - if (name() == QLatin1String("filterAttribute")) - filter.filterAttributes.append(readElementText()); - else - raiseUnknownTokenError(); - } else if (isEndElement() && name() == QLatin1String("customFilter")) { - break; - } - } - customFilterList.append(filter); -} - -void QHelpProjectDataPrivate::readFilterSection() -{ - filterSectionList.append(QHelpDataFilterSection()); - while (!atEnd()) { - readNext(); - if (isStartElement()) { - if (name() == QLatin1String("filterAttribute")) - filterSectionList.last().addFilterAttribute(readElementText()); - else if (name() == QLatin1String("toc")) - readTOC(); - else if (name() == QLatin1String("keywords")) - readKeywords(); - else if (name() == QLatin1String("files")) - readFiles(); - else - raiseUnknownTokenError(); - } else if (isEndElement() && name() == QLatin1String("filterSection")) { - break; - } - } -} - -void QHelpProjectDataPrivate::readTOC() -{ - QStack<QHelpDataContentItem*> contentStack; - QHelpDataContentItem *itm = 0; - while (!atEnd()) { - readNext(); - if (isStartElement()) { - if (name() == QLatin1String("section")) { - QString title = attributes().value(QLatin1String("title")).toString(); - QString ref = attributes().value(QLatin1String("ref")).toString(); - if (contentStack.isEmpty()) { - itm = new QHelpDataContentItem(0, title, ref); - filterSectionList.last().addContent(itm); - } else { - itm = new QHelpDataContentItem(contentStack.top(), title, ref); - } - contentStack.push(itm); - } else { - raiseUnknownTokenError(); - } - } else if (isEndElement()) { - if (name() == QLatin1String("section")) { - contentStack.pop(); - continue; - } else if (name() == QLatin1String("toc") && contentStack.isEmpty()) { - break; - } else { - raiseUnknownTokenError(); - } - } - } -} - -void QHelpProjectDataPrivate::readKeywords() -{ - while (!atEnd()) { - readNext(); - if (isStartElement()) { - if (name() == QLatin1String("keyword")) { - if (attributes().value(QLatin1String("ref")).toString().isEmpty() - || (attributes().value(QLatin1String("name")).toString().isEmpty() - && attributes().value(QLatin1String("id")).toString().isEmpty())) - 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(); - } - } else if (isEndElement()) { - if (name() == QLatin1String("keyword")) - continue; - else if (name() == QLatin1String("keywords")) - break; - else - raiseUnknownTokenError(); - } - } -} - -void QHelpProjectDataPrivate::readFiles() -{ - while (!atEnd()) { - readNext(); - if (isStartElement()) { - if (name() == QLatin1String("file")) - addMatchingFiles(readElementText()); - else - raiseUnknownTokenError(); - } else if (isEndElement()) { - if (name() == QLatin1String("file")) - continue; - else if (name() == QLatin1String("files")) - break; - else - raiseUnknownTokenError(); - } - } -} - -// Expand file pattern and add matches into list. If the pattern does not match -// any files, insert the pattern itself so the QHelpGenerator will emit a -// meaningful warning later. -void QHelpProjectDataPrivate::addMatchingFiles(const QString &pattern) -{ - // The pattern matching is expensive, so we skip it if no - // wildcard symbols occur in the string. - if (!pattern.contains('?') && !pattern.contains('*') - && !pattern.contains('[') && !pattern.contains(']')) { - filterSectionList.last().addFile(pattern); - return; - } - - QFileInfo fileInfo(rootPath + '/' + pattern); - const QDir &dir = fileInfo.dir(); - const QString &path = dir.canonicalPath(); - - // QDir::entryList() is expensive, so we cache the results. - QMap<QString, QStringList>::ConstIterator it = dirEntriesCache.find(path); - const QStringList &entries = it != dirEntriesCache.constEnd() ? - it.value() : dir.entryList(QDir::Files); - if (it == dirEntriesCache.constEnd()) - dirEntriesCache.insert(path, entries); - - bool matchFound = false; -#ifdef Q_OS_WIN - Qt::CaseSensitivity cs = Qt::CaseInsensitive; -#else - Qt::CaseSensitivity cs = Qt::CaseSensitive; -#endif - QRegExp regExp(fileInfo.fileName(), cs, QRegExp::Wildcard); - foreach (const QString &file, entries) { - if (regExp.exactMatch(file)) { - matchFound = true; - filterSectionList.last(). - addFile(QFileInfo(pattern).dir().path() + '/' + file); - } - } - if (!matchFound) - 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); - const QString canonicalNamespace = nameSpace.toLower(); - url.setHost(canonicalNamespace); - url.setPath(vFolder); - - const QString expectedUrl(scheme + QLatin1String("://") - + canonicalNamespace + slash + vFolder); - return url.isValid() && url.toString() == expectedUrl; -} - -/*! - \internal - \class QHelpProjectData - \since 4.4 - \brief The QHelpProjectData class stores all information found - in a Qt help project file. - - The structure is filled with data by calling readData(). The - specified file has to have the Qt help project file format in - order to be read successfully. Possible reading errors can be - retrieved by calling errorMessage(). -*/ - -/*! - Constructs a Qt help project data structure. -*/ -QHelpProjectData::QHelpProjectData() -{ - d = new QHelpProjectDataPrivate; -} - -/*! - Destroys the help project data. -*/ -QHelpProjectData::~QHelpProjectData() -{ - delete d; -} - -/*! - Reads the file \a fileName and stores the help data. The file has to - have the Qt help project file format. Returns true if the file - was successfully read, otherwise false. - - \sa errorMessage() -*/ -bool QHelpProjectData::readData(const QString &fileName) -{ - d->rootPath = QFileInfo(fileName).absolutePath(); - QFile file(fileName); - if (!file.open(QIODevice::ReadOnly)) { - d->errorMsg = QCoreApplication::translate("QHelpProject", - "The input file %1 could not be opened!").arg(fileName); - return false; - } - - d->readData(file.readAll()); - return !d->hasError(); -} - -/*! - Returns an error message if the reading of the Qt help project - file failed. Otherwise, an empty QString is returned. - - \sa readData() -*/ -QString QHelpProjectData::errorMessage() const -{ - if (d->hasError()) - return d->errorString(); - return d->errorMsg; -} - -/*! - \internal -*/ -QString QHelpProjectData::namespaceName() const -{ - return d->namespaceName; -} - -/*! - \internal -*/ -QString QHelpProjectData::virtualFolder() const -{ - return d->virtualFolder; -} - -/*! - \internal -*/ -QList<QHelpDataCustomFilter> QHelpProjectData::customFilters() const -{ - return d->customFilterList; -} - -/*! - \internal -*/ -QList<QHelpDataFilterSection> QHelpProjectData::filterSections() const -{ - return d->filterSectionList; -} - -/*! - \internal -*/ -QMap<QString, QVariant> QHelpProjectData::metaData() const -{ - return d->metaData; -} - -/*! - \internal -*/ -QString QHelpProjectData::rootPath() const -{ - return d->rootPath; -} - -QT_END_NAMESPACE |