From 415b44ffb6ffcdeb4ad5b7cdd6d9d9e17ab3e47f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Mon, 3 May 2010 12:34:27 +0200 Subject: Initial checkin --- qthelpprojectwriter.cpp | 172 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 qthelpprojectwriter.cpp (limited to 'qthelpprojectwriter.cpp') diff --git a/qthelpprojectwriter.cpp b/qthelpprojectwriter.cpp new file mode 100644 index 0000000..22ea738 --- /dev/null +++ b/qthelpprojectwriter.cpp @@ -0,0 +1,172 @@ +/**************************************************************************** + ** + ** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). + ** Contact: Nokia Corporation (qt-info@nokia.com) + ** + ** This file is part of the doxygen2qthelp project on Trolltech Labs. + ** + ** This file may be used under the terms of the GNU General Public + ** License version 2.0 or 3.0 as published by the Free Software Foundation + ** and appearing in the file LICENSE.GPL included in the packaging of + ** this file. Please review the following information to ensure GNU + ** General Public Licensing requirements will be met: + ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and + ** http://www.gnu.org/copyleft/gpl.html. + ** + ** If you are unsure which license is appropriate for your use, please + ** contact the sales department at qt-sales@nokia.com. + ** + ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + ** + ****************************************************************************/ + +#include "qthelpprojectwriter_p.h" +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QtHelpProjectWriter::QtHelpProjectWriter() + : m_helpData(NULL) { + setAutoFormatting(true); +} + +void QtHelpProjectWriter::writeHead() +{ + writeStartDocument(); + writeStartElement(QLatin1String("QtHelpProject")); + writeAttribute(QLatin1String("version"), QLatin1String("1.0")); + + Q_ASSERT(m_helpData != NULL); + writeTextElement(QLatin1String("namespace"), + m_helpData->namespaceName()); + writeTextElement(QLatin1String("virtualFolder"), + m_helpData->virtualFolder()); +} + +void QtHelpProjectWriter::writeCustomFilters() +{ + Q_ASSERT(m_helpData != NULL); + const QList filters = m_helpData->customFilters(); + foreach (const QHelpDataCustomFilter & filter, filters) { + writeStartElement(QLatin1String("customFilter")); + writeAttribute(QLatin1String("name"), filter.name); + foreach (const QString & att, filter.filterAttributes) { + writeTextElement(QLatin1String("filterAttribute"), att); + } + writeEndElement(); + } +} + +void QtHelpProjectWriter::writeTocItems( + const QList &items) +{ + if (items.isEmpty()) { + return; + } + + foreach (const QHelpDataContentItem *item, items) { + const QList children = item->children(); + if (children.isEmpty()) { + writeEmptyElement(QLatin1String("section")); + } else { + writeStartElement(QLatin1String("section")); + } + writeAttribute(QLatin1String("title"), item->title()); + writeAttribute(QLatin1String("ref"), item->reference()); + if (!children.isEmpty()) { + writeTocItems(children); + writeEndElement(); + } + } +} + +void QtHelpProjectWriter::writeFilterSections() +{ + Q_ASSERT(m_helpData != NULL); + const QList sections = m_helpData->filterSections(); + foreach (const QHelpDataFilterSection & section, sections) { + // Filter section + writeStartElement(QLatin1String("filterSection")); + + // Filter attributes + const QStringList atts = section.filterAttributes(); + foreach (const QString & att, atts) { + writeTextElement(QLatin1String("filterAttribute"), att); + } + + // TOC + writeStartElement(QLatin1String("toc")); + writeTocItems(section.contents()); + writeEndElement(); + + // Keywords + const QList indices = section.indices(); + writeStartElement(QLatin1String("keywords")); + foreach (const QHelpDataIndexItem & indexItem, indices) { + const bool nameEmpty = indexItem.name.isEmpty(); + const bool idEmpty = indexItem.identifier.isEmpty(); + if (nameEmpty && idEmpty) { + continue; + } + + writeEmptyElement(QLatin1String("keyword")); + if (!nameEmpty) { + writeAttribute(QLatin1String("name"), indexItem.name); + } + if (!idEmpty) { + writeAttribute(QLatin1String("id"), indexItem.identifier); + } + writeAttribute(QLatin1String("ref"), indexItem.reference); + } + writeEndElement(); + + // Files + const QStringList files = section.files(); + writeStartElement(QLatin1String("files")); + foreach (const QString & file, files) { + writeTextElement(QLatin1String("file"), file); + } + writeEndElement(); + + // Filter section + writeEndElement(); + } +} + +void QtHelpProjectWriter::writeBody() +{ + writeCustomFilters(); + writeFilterSections(); +} + +void QtHelpProjectWriter::writeFoot() +{ + writeEndElement(); + writeEndDocument(); +} + +bool QtHelpProjectWriter::writeFile(const QHelpDataInterface *helpData, + const QString &fileName) +{ + Q_ASSERT(helpData != NULL); + m_helpData = helpData; + + QFile out(fileName); + if (!out.open(QIODevice::WriteOnly)) + return false; + setDevice(&out); + + writeHead(); + writeBody(); + writeFoot(); + + out.close(); + return true; +} + +QT_END_NAMESPACE -- cgit v1.2.3