diff options
Diffstat (limited to 'src/qdoc/helpprojectwriter.cpp')
-rw-r--r-- | src/qdoc/helpprojectwriter.cpp | 106 |
1 files changed, 57 insertions, 49 deletions
diff --git a/src/qdoc/helpprojectwriter.cpp b/src/qdoc/helpprojectwriter.cpp index 226ca4154..3d45b60a4 100644 --- a/src/qdoc/helpprojectwriter.cpp +++ b/src/qdoc/helpprojectwriter.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. @@ -26,31 +26,31 @@ ** ****************************************************************************/ -#include <qcryptographichash.h> -#include <qdebug.h> -#include <qhash.h> -#include <qmap.h> +#include "helpprojectwriter.h" #include "atom.h" -#include "helpprojectwriter.h" -#include "htmlgenerator.h" #include "config.h" +#include "htmlgenerator.h" #include "node.h" #include "qdocdatabase.h" -#include <qdebug.h> + +#include <QtCore/qcryptographichash.h> +#include <QtCore/qdebug.h> +#include <QtCore/qhash.h> +#include <QtCore/qmap.h> QT_BEGIN_NAMESPACE HelpProjectWriter::HelpProjectWriter(const Config &config, const QString &defaultFileName, - Generator* g) + Generator *g) { reset(config, defaultFileName, g); } void HelpProjectWriter::reset(const Config &config, const QString &defaultFileName, - Generator* g) + Generator *g) { projects.clear(); gen_ = g; @@ -65,9 +65,9 @@ void HelpProjectWriter::reset(const Config &config, // generator. outputDir = config.getOutputDir(); - QStringList names = config.getStringList(CONFIG_QHP + Config::dot + "projects"); + const QStringList names = config.getStringList(CONFIG_QHP + Config::dot + "projects"); - foreach (const QString &projectName, names) { + for (const auto &projectName : names) { HelpProject project; project.name = projectName; @@ -82,20 +82,23 @@ void HelpProjectWriter::reset(const Config &config, project.extraFiles += config.getStringSet(CONFIG_QHP + Config::dot + "extraFiles"); project.indexTitle = config.getString(prefix + "indexTitle"); project.indexRoot = config.getString(prefix + "indexRoot"); - project.filterAttributes = config.getStringList(prefix + "filterAttributes").toSet(); + const auto &filterAttributes = config.getStringList(prefix + "filterAttributes"); + project.filterAttributes = QSet<QString>(filterAttributes.cbegin(), filterAttributes.cend()); project.includeIndexNodes = config.getBool(prefix + "includeIndexNodes"); - QSet<QString> customFilterNames = config.subVars(prefix + "customFilters"); - foreach (const QString &filterName, customFilterNames) { + const QSet<QString> customFilterNames = config.subVars(prefix + "customFilters"); + for (const auto &filterName : customFilterNames) { QString name = config.getString(prefix + "customFilters" + Config::dot + filterName + Config::dot + "name"); - QSet<QString> filters = config.getStringList(prefix + "customFilters" + Config::dot + filterName + Config::dot + "filterAttributes").toSet(); - project.customFilters[name] = filters; + const auto &filters = config.getStringList(prefix + "customFilters" + Config::dot + filterName + Config::dot + "filterAttributes"); + project.customFilters[name] = QSet<QString>(filters.cbegin(), filters.cend()); } //customFilters = config.defs. - foreach (QString name, config.getStringSet(prefix + "excluded")) + const auto excludedPrefixes = config.getStringSet(prefix + "excluded"); + for (auto name : excludedPrefixes) project.excluded.insert(name.replace(QLatin1Char('\\'), QLatin1Char('/'))); - foreach (const QString &name, config.getStringList(prefix + "subprojects")) { + const auto subprojectPrefixes = config.getStringList(prefix + "subprojects"); + for (const auto &name : subprojectPrefixes) { SubProject subproject; QString subprefix = prefix + "subprojects" + Config::dot + name + Config::dot; subproject.title = config.getString(subprefix + "title"); @@ -157,7 +160,7 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList for (auto it = pageTypeHash.cbegin(), end = pageTypeHash.cend(); it != end; ++it) fullSubset.insert(it.value()); - foreach (const QString &selector, selectors) { + for (const QString &selector : selectors) { QStringList pieces = selector.split(QLatin1Char(':')); if (pieces.size() == 1) { QString lower = selector.toLower(); @@ -273,8 +276,9 @@ bool HelpProjectWriter::generateSection(HelpProject &project, // Add all group members for '[group|module|qmlmodule]:name' selector if (node->isGroup() || node->isModule() || node->isQmlModule()) { if (project.subprojects[i].groups.contains(node->name().toLower())) { - const CollectionNode* cn = static_cast<const CollectionNode*>(node); - foreach (const Node* m, cn->members()) { + const CollectionNode *cn = static_cast<const CollectionNode *>(node); + const auto members = cn->members(); + for (const Node *m : members) { QString memberName = m->isTextPageNode() ? m->fullTitle() : m->fullDocumentName(); project.subprojects[i].nodes[memberName] = m; @@ -308,7 +312,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project, case Node::JsType: case Node::JsBasicType: if (node->doc().hasKeywords()) { - foreach (const Atom* keyword, node->doc().keywords()) { + const auto keywords = node->doc().keywords(); + for (const Atom *keyword : keywords) { if (!keyword->string().isEmpty()) { QStringList details; details << keyword->string() @@ -330,8 +335,9 @@ bool HelpProjectWriter::generateSection(HelpProject &project, case Node::Enum: project.keywords.append(keywordDetails(node)); { - const EnumNode *enumNode = static_cast<const EnumNode*>(node); - foreach (const EnumItem &item, enumNode->items()) { + const EnumNode *enumNode = static_cast<const EnumNode *>(node); + const auto items = enumNode->items(); + for (const auto &item : items) { QStringList details; if (enumNode->itemAccess(item.name()) == Node::Private) @@ -355,10 +361,11 @@ bool HelpProjectWriter::generateSection(HelpProject &project, case Node::QmlModule: case Node::JsModule: { - const CollectionNode* cn = static_cast<const CollectionNode*>(node); + const CollectionNode *cn = static_cast<const CollectionNode *>(node); if (!cn->fullTitle().isEmpty()) { if (cn->doc().hasKeywords()) { - foreach (const Atom* keyword, cn->doc().keywords()) { + const auto keywords = cn->doc().keywords(); + for (const Atom *keyword : keywords) { if (!keyword->string().isEmpty()) { QStringList details; details << keyword->string() @@ -438,10 +445,11 @@ bool HelpProjectWriter::generateSection(HelpProject &project, // Page nodes (such as manual pages) contain subtypes, titles and other // attributes. case Node::Page: { - const PageNode *pn = static_cast<const PageNode*>(node); + const PageNode *pn = static_cast<const PageNode *>(node); if (!pn->fullTitle().isEmpty()) { if (pn->doc().hasKeywords()) { - foreach (const Atom *keyword, pn->doc().keywords()) { + const auto keywords = pn->doc().keywords(); + for (const Atom *keyword : keywords) { if (!keyword->string().isEmpty()) { QStringList details; details << keyword->string() @@ -491,9 +499,9 @@ void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter const Aggregate *aggregate = static_cast<const Aggregate *>(node); // Ensure that we don't visit nodes more than once. - QSet<const Node*> childSet; + QSet<const Node *> childSet; const NodeList &children = aggregate->childNodes(); - foreach (const Node *child, children) { + for (const auto *child : children) { // Skip related non-members adopted by some other aggregate if (child->parent() != aggregate) continue; @@ -504,12 +512,12 @@ void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter } else { // Store member status of children project.memberStatus[node].insert(child->status()); - if (child->isFunction() && static_cast<const FunctionNode*>(child)->isOverload()) + if (child->isFunction() && static_cast<const FunctionNode *>(child)->isOverload()) continue; childSet << child; } } - foreach (const Node *child, childSet) + for (const auto *child : qAsConst(childSet)) generateSections(project, writer, child); } } @@ -617,7 +625,7 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer case Node::Page: { // Page nodes (such as manual pages) contain subtypes, titles and other // attributes. - const PageNode *pn = static_cast<const PageNode*>(node); + const PageNode *pn = static_cast<const PageNode *>(node); writer.writeStartElement("section"); writer.writeAttribute("ref", href); @@ -631,7 +639,7 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer case Node::JsModule: case Node::QmlModule: { - const CollectionNode* cn = static_cast<const CollectionNode*>(node); + const CollectionNode *cn = static_cast<const CollectionNode *>(node); writer.writeStartElement("section"); writer.writeAttribute("ref", href); writer.writeAttribute("title", cn->fullTitle()); @@ -648,7 +656,7 @@ void HelpProjectWriter::generateProject(HelpProject &project) const Node *rootNode; // Restrict searching only to the local (primary) tree - QVector<Tree*> searchOrder = qdb_->searchOrder(); + QVector<Tree *> searchOrder = qdb_->searchOrder(); qdb_->setLocalSearch(); if (!project.indexRoot.isEmpty()) @@ -685,9 +693,9 @@ void HelpProjectWriter::generateProject(HelpProject &project) for (it = project.customFilters.constBegin(); it != project.customFilters.constEnd(); ++it) { writer.writeStartElement("customFilter"); writer.writeAttribute("name", it.key()); - QStringList sortedAttributes = it.value().toList(); + QStringList sortedAttributes = it.value().values(); sortedAttributes.sort(); - foreach (const QString &filter, sortedAttributes) + for (const auto &filter : qAsConst(sortedAttributes)) writer.writeTextElement("filterAttribute", filter); writer.writeEndElement(); // customFilter } @@ -696,14 +704,14 @@ void HelpProjectWriter::generateProject(HelpProject &project) writer.writeStartElement("filterSection"); // Write filterAttribute elements. - QStringList sortedFilterAttributes = project.filterAttributes.toList(); + QStringList sortedFilterAttributes = project.filterAttributes.values(); sortedFilterAttributes.sort(); - foreach (const QString &filterName, sortedFilterAttributes) + for (const auto &filterName : qAsConst(sortedFilterAttributes)) writer.writeTextElement("filterAttribute", filterName); writer.writeStartElement("toc"); writer.writeStartElement("section"); - const Node* node = qdb_->findPageNodeByTitle(project.indexTitle); + const Node *node = qdb_->findPageNodeByTitle(project.indexTitle); if (node == nullptr) node = qdb_->findNodeByNameAndType(QStringList("index.html"), &Node::isPageNode); QString indexPath; @@ -785,14 +793,14 @@ void HelpProjectWriter::generateProject(HelpProject &project) if (subproject.sortPages) { QStringList titles = subproject.nodes.keys(); titles.sort(); - foreach (const QString &title, titles) { + for (const auto &title : qAsConst(titles)) { writeNode(project, writer, subproject.nodes[title]); } } else { // Find a contents node and navigate from there, using the NextLink values. QSet<QString> visited; bool contentsFound = false; - foreach (const Node *node, subproject.nodes) { + for (const auto *node : qAsConst(subproject.nodes)) { QString nextTitle = node->links().value(Node::NextLink).first; if (!nextTitle.isEmpty() && node->links().value(Node::ContentsLink).first.isEmpty()) { @@ -816,11 +824,11 @@ void HelpProjectWriter::generateProject(HelpProject &project) } // No contents/nextpage links found, write all nodes unsorted if (!contentsFound) { - QList<const Node*> subnodes = subproject.nodes.values(); + QList<const Node *> subnodes = subproject.nodes.values(); std::sort(subnodes.begin(), subnodes.end(), Node::nodeNameLessThan); - foreach (const Node *node, subnodes) + for (const auto *node : qAsConst(subnodes)) writeNode(project, writer, node); } } @@ -837,7 +845,7 @@ void HelpProjectWriter::generateProject(HelpProject &project) writer.writeStartElement("keywords"); std::sort(project.keywords.begin(), project.keywords.end()); - foreach (const QStringList &details, project.keywords) { + for (const QStringList &details : qAsConst(project.keywords)) { writer.writeStartElement("keyword"); writer.writeAttribute("name", details[0]); writer.writeAttribute("id", details[1]); @@ -850,12 +858,12 @@ void HelpProjectWriter::generateProject(HelpProject &project) // The list of files to write is the union of generated files and // other files (images and extras) included in the project - QSet<QString> files = QSet<QString>::fromList(gen_->outputFileNames()); + QSet<QString> files = QSet<QString>(gen_->outputFileNames().cbegin(), gen_->outputFileNames().cend()); files.unite(project.files); files.unite(project.extraFiles); - QStringList sortedFiles = files.toList(); + QStringList sortedFiles = files.values(); sortedFiles.sort(); - foreach (const QString &usedFile, sortedFiles) { + for (const auto &usedFile : qAsConst(sortedFiles)) { if (!usedFile.isEmpty()) writer.writeTextElement("file", usedFile); } |