summaryrefslogtreecommitdiffstats
path: root/src/qdoc/helpprojectwriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qdoc/helpprojectwriter.cpp')
-rw-r--r--src/qdoc/helpprojectwriter.cpp221
1 files changed, 99 insertions, 122 deletions
diff --git a/src/qdoc/helpprojectwriter.cpp b/src/qdoc/helpprojectwriter.cpp
index 4ef77f06a..6f231f232 100644
--- a/src/qdoc/helpprojectwriter.cpp
+++ b/src/qdoc/helpprojectwriter.cpp
@@ -41,16 +41,13 @@
QT_BEGIN_NAMESPACE
-HelpProjectWriter::HelpProjectWriter(const Config &config,
- const QString &defaultFileName,
+HelpProjectWriter::HelpProjectWriter(const Config &config, const QString &defaultFileName,
Generator *g)
{
reset(config, defaultFileName, g);
}
-void HelpProjectWriter::reset(const Config &config,
- const QString &defaultFileName,
- Generator *g)
+void HelpProjectWriter::reset(const Config &config, const QString &defaultFileName, Generator *g)
{
projects.clear();
gen_ = g;
@@ -83,15 +80,19 @@ void HelpProjectWriter::reset(const Config &config,
project.indexTitle = config.getString(prefix + "indexTitle");
project.indexRoot = config.getString(prefix + "indexRoot");
const auto &filterAttributes = config.getStringList(prefix + "filterAttributes");
- project.filterAttributes = QSet<QString>(filterAttributes.cbegin(), filterAttributes.cend());
+ project.filterAttributes =
+ QSet<QString>(filterAttributes.cbegin(), filterAttributes.cend());
project.includeIndexNodes = config.getBool(prefix + "includeIndexNodes");
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");
- const auto &filters = config.getStringList(prefix + "customFilters" + Config::dot + filterName + Config::dot + "filterAttributes");
+ QString name = config.getString(prefix + "customFilters" + Config::dot + filterName
+ + Config::dot + "name");
+ 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.
+ // customFilters = config.defs.
const auto excludedPrefixes = config.getStringSet(prefix + "excluded");
for (auto name : excludedPrefixes)
@@ -128,7 +129,7 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList
typeHash["union"] = Node::Union;
typeHash["header"] = Node::HeaderFile;
typeHash["headerfile"] = Node::HeaderFile;
- typeHash["doc"] = Node::Page; // to be removed from qdocconf files
+ typeHash["doc"] = Node::Page; // to be removed from qdocconf files
typeHash["fake"] = Node::Page; // to be removed from qdocconf files
typeHash["page"] = Node::Page;
typeHash["enum"] = Node::Enum;
@@ -155,7 +156,6 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList
pageTypeHash["page"] = Node::Page;
pageTypeHash["externalpage"] = Node::ExternalPage;
-
NodeTypeSet fullSubset;
for (auto it = pageTypeHash.constBegin(); it != pageTypeHash.constEnd(); ++it)
fullSubset.insert(it.value());
@@ -215,29 +215,25 @@ QStringList HelpProjectWriter::keywordDetails(const Node *node) const
if (node->parent() && !node->parent()->name().isEmpty()) {
// "name"
if (node->isEnumType() || node->isTypedef())
- details << node->parent()->name()+"::"+node->name();
+ details << node->parent()->name() + "::" + node->name();
else
details << node->name();
// "id"
if (!node->isRelatedNonmember())
- details << node->parent()->name()+"::"+node->name();
+ details << node->parent()->name() + "::" + node->name();
else
details << node->name();
- }
- else if (node->isQmlType() || node->isQmlBasicType()) {
+ } else if (node->isQmlType() || node->isQmlBasicType()) {
details << node->name();
details << "QML." + node->name();
- }
- else if (node->isJsType() || node->isJsBasicType()) {
+ } else if (node->isJsType() || node->isJsBasicType()) {
details << node->name();
details << "JS." + node->name();
- }
- else if (node->isTextPageNode()) {
+ } else if (node->isTextPageNode()) {
const PageNode *fake = static_cast<const PageNode *>(node);
details << fake->fullTitle();
details << fake->fullTitle();
- }
- else {
+ } else {
details << node->name();
details << node->name();
}
@@ -245,8 +241,7 @@ QStringList HelpProjectWriter::keywordDetails(const Node *node) const
return details;
}
-bool HelpProjectWriter::generateSection(HelpProject &project,
- QXmlStreamWriter & /* writer */,
+bool HelpProjectWriter::generateSection(HelpProject &project, QXmlStreamWriter & /* writer */,
const Node *node)
{
if (!node->url().isEmpty() && !(project.includeIndexNodes && !node->url().startsWith("http")))
@@ -271,16 +266,15 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
// No selectors: accept all nodes.
if (subproject.selectors.isEmpty()) {
project.subprojects[i].nodes[objName] = node;
- }
- else if (subproject.selectors.contains(node->nodeType())) {
+ } else if (subproject.selectors.contains(node->nodeType())) {
// 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);
const auto members = cn->members();
for (const Node *m : members) {
- QString memberName = m->isTextPageNode()
- ? m->fullTitle() : m->fullDocumentName();
+ QString memberName =
+ m->isTextPageNode() ? m->fullTitle() : m->fullDocumentName();
project.subprojects[i].nodes[memberName] = m;
}
}
@@ -291,8 +285,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
else {
// Accept only doc nodes with subtypes contained in the selector's
// mask.
- if (subproject.selectors[node->nodeType()].contains(node->nodeType()) &&
- !node->isExternalPage() && !node->fullTitle().isEmpty()) {
+ if (subproject.selectors[node->nodeType()].contains(node->nodeType())
+ && !node->isExternalPage() && !node->fullTitle().isEmpty()) {
project.subprojects[i].nodes[objName] = node;
}
@@ -316,13 +310,12 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
for (const Atom *keyword : keywords) {
if (!keyword->string().isEmpty()) {
QStringList details;
- details << keyword->string()
- << keyword->string()
+ details << keyword->string() << keyword->string()
<< gen_->fullDocumentLocation(node, false);
project.keywords.append(details);
- }
- else
- node->doc().location().warning(tr("Bad keyword in %1").arg(gen_->fullDocumentLocation(node, false)));
+ } else
+ node->doc().location().warning(
+ tr("Bad keyword in %1").arg(gen_->fullDocumentLocation(node, false)));
}
}
project.keywords.append(keywordDetails(node));
@@ -334,55 +327,51 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
case Node::Enum:
project.keywords.append(keywordDetails(node));
- {
- const EnumNode *enumNode = static_cast<const EnumNode *>(node);
- const auto items = enumNode->items();
- for (const auto &item : items) {
- QStringList details;
+ {
+ 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)
- continue;
+ if (enumNode->itemAccess(item.name()) == Node::Private)
+ continue;
- if (!node->parent()->name().isEmpty()) {
- details << node->parent()->name()+"::"+item.name(); // "name"
- details << node->parent()->name()+"::"+item.name(); // "id"
- } else {
- details << item.name(); // "name"
- details << item.name(); // "id"
+ if (!node->parent()->name().isEmpty()) {
+ details << node->parent()->name() + "::" + item.name(); // "name"
+ details << node->parent()->name() + "::" + item.name(); // "id"
+ } else {
+ details << item.name(); // "name"
+ details << item.name(); // "id"
+ }
+ details << gen_->fullDocumentLocation(node, false);
+ project.keywords.append(details);
}
- details << gen_->fullDocumentLocation(node, false);
- project.keywords.append(details);
}
- }
break;
case Node::Group:
case Node::Module:
case Node::QmlModule:
- case Node::JsModule:
- {
- const CollectionNode *cn = static_cast<const CollectionNode *>(node);
- if (!cn->fullTitle().isEmpty()) {
- if (cn->doc().hasKeywords()) {
- const auto keywords = cn->doc().keywords();
- for (const Atom *keyword : keywords) {
- if (!keyword->string().isEmpty()) {
- QStringList details;
- details << keyword->string()
- << keyword->string()
- << gen_->fullDocumentLocation(node, false);
- project.keywords.append(details);
- }
- else
- cn->doc().location().warning(
- tr("Bad keyword in %1").arg(gen_->fullDocumentLocation(node, false))
- );
- }
+ case Node::JsModule: {
+ const CollectionNode *cn = static_cast<const CollectionNode *>(node);
+ if (!cn->fullTitle().isEmpty()) {
+ if (cn->doc().hasKeywords()) {
+ const auto keywords = cn->doc().keywords();
+ for (const Atom *keyword : keywords) {
+ if (!keyword->string().isEmpty()) {
+ QStringList details;
+ details << keyword->string() << keyword->string()
+ << gen_->fullDocumentLocation(node, false);
+ project.keywords.append(details);
+ } else
+ cn->doc().location().warning(
+ tr("Bad keyword in %1")
+ .arg(gen_->fullDocumentLocation(node, false)));
}
- project.keywords.append(keywordDetails(node));
}
+ project.keywords.append(keywordDetails(node));
}
- break;
+ } break;
case Node::Property:
case Node::QmlProperty:
@@ -390,8 +379,7 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
project.keywords.append(keywordDetails(node));
break;
- case Node::Function:
- {
+ case Node::Function: {
const FunctionNode *funcNode = static_cast<const FunctionNode *>(node);
/*
@@ -419,11 +407,9 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
if (node->parent())
project.memberStatus[node->parent()].insert(node->status());
- }
- break;
+ } break;
- case Node::Typedef:
- {
+ case Node::Typedef: {
const TypedefNode *typedefNode = static_cast<const TypedefNode *>(node);
QStringList typedefDetails = keywordDetails(node);
const EnumNode *enumNode = typedefNode->associatedEnum();
@@ -433,14 +419,11 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
typedefDetails[2] = gen_->fullDocumentLocation(enumNode, false);
project.keywords.append(typedefDetails);
- }
- break;
+ } break;
- case Node::Variable:
- {
+ case Node::Variable: {
project.keywords.append(keywordDetails(node));
- }
- break;
+ } break;
// Page nodes (such as manual pages) contain subtypes, titles and other
// attributes.
@@ -452,8 +435,7 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
for (const Atom *keyword : keywords) {
if (!keyword->string().isEmpty()) {
QStringList details;
- details << keyword->string()
- << keyword->string()
+ details << keyword->string() << keyword->string()
<< gen_->fullDocumentLocation(node, false);
project.keywords.append(details);
} else {
@@ -466,8 +448,7 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
}
break;
}
- default:
- ;
+ default:;
}
// Add all images referenced in the page to the set of files to include.
@@ -485,7 +466,8 @@ bool HelpProjectWriter::generateSection(HelpProject &project,
return true;
}
-void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter &writer, const Node *node)
+void HelpProjectWriter::generateSections(HelpProject &project, QXmlStreamWriter &writer,
+ const Node *node)
{
/*
Don't include index nodes in the help file.
@@ -542,7 +524,7 @@ void HelpProjectWriter::writeHashFile(QFile &file)
}
void HelpProjectWriter::writeSection(QXmlStreamWriter &writer, const QString &path,
- const QString &value)
+ const QString &value)
{
writer.writeStartElement(QStringLiteral("section"));
writer.writeAttribute(QStringLiteral("ref"), path);
@@ -553,11 +535,10 @@ void HelpProjectWriter::writeSection(QXmlStreamWriter &writer, const QString &pa
/*!
Write subsections for all members, compatibility members and obsolete members.
*/
-void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &writer,
- const Node *node)
+void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &writer, const Node *node)
{
QString href = gen_->fullDocumentLocation(node, false);
- href = href.left(href.size()-5);
+ href = href.left(href.size() - 5);
if (href.isEmpty())
return;
@@ -567,9 +548,9 @@ void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &write
// Do not generate a 'List of all members' for namespaces or header files,
// but always generate it for derived classes and QML classes
- if (!node->isNamespace() && !node->isHeader() &&
- (derivedClass || node->isQmlType() || node->isJsType() ||
- !project.memberStatus[node].isEmpty())) {
+ if (!node->isNamespace() && !node->isHeader()
+ && (derivedClass || node->isQmlType() || node->isJsType()
+ || !project.memberStatus[node].isEmpty())) {
QString membersPath = href + QStringLiteral("-members.html");
writeSection(writer, membersPath, tr("List of all members"));
}
@@ -579,8 +560,7 @@ void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &write
}
}
-void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer,
- const Node *node)
+void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer, const Node *node)
{
QString href = gen_->fullDocumentLocation(node, false);
QString objName = node->name();
@@ -593,7 +573,8 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer
writer.writeStartElement("section");
writer.writeAttribute("ref", href);
if (node->parent() && !node->parent()->name().isEmpty())
- writer.writeAttribute("title", tr("%1::%2 Class Reference").arg(node->parent()->name()).arg(objName));
+ writer.writeAttribute(
+ "title", tr("%1::%2 Class Reference").arg(node->parent()->name()).arg(objName));
else
writer.writeAttribute("title", tr("%1 Class Reference").arg(objName));
@@ -632,22 +613,18 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer
writer.writeAttribute("title", pn->fullTitle());
writer.writeEndElement(); // section
- }
- break;
+ } break;
case Node::Group:
case Node::Module:
case Node::JsModule:
- case Node::QmlModule:
- {
- const CollectionNode *cn = static_cast<const CollectionNode *>(node);
- writer.writeStartElement("section");
- writer.writeAttribute("ref", href);
- writer.writeAttribute("title", cn->fullTitle());
- writer.writeEndElement(); // section
- }
- break;
- default:
- ;
+ case Node::QmlModule: {
+ const CollectionNode *cn = static_cast<const CollectionNode *>(node);
+ writer.writeStartElement("section");
+ writer.writeAttribute("ref", href);
+ writer.writeAttribute("title", cn->fullTitle());
+ writer.writeEndElement(); // section
+ } break;
+ default:;
}
}
@@ -689,7 +666,8 @@ void HelpProjectWriter::generateProject(HelpProject &project)
writer.writeEndElement();
// Write customFilter elements.
- for (auto it = project.customFilters.constBegin(); it != project.customFilters.constEnd(); ++it) {
+ for (auto it = project.customFilters.constBegin(); it != project.customFilters.constEnd();
+ ++it) {
writer.writeStartElement("customFilter");
writer.writeAttribute("name", it.key());
QStringList sortedAttributes = it.value().values();
@@ -768,8 +746,7 @@ void HelpProjectWriter::generateProject(HelpProject &project)
sectionStack.top() += 1;
}
break;
- default:
- ;
+ default:;
}
if (atom == indexBody.lastAtom())
@@ -778,14 +755,13 @@ void HelpProjectWriter::generateProject(HelpProject &project)
}
} else
rootNode->doc().location().warning(
- tr("Failed to find index: %1").arg(subproject.indexTitle)
- );
+ tr("Failed to find index: %1").arg(subproject.indexTitle));
} else {
writer.writeStartElement("section");
- QString indexPath = gen_->fullDocumentLocation(qdb_->findNodeForTarget(subproject.indexTitle, nullptr),
- false);
+ QString indexPath = gen_->fullDocumentLocation(
+ qdb_->findNodeForTarget(subproject.indexTitle, nullptr), false);
writer.writeAttribute("ref", indexPath);
writer.writeAttribute("title", subproject.title);
@@ -801,8 +777,8 @@ void HelpProjectWriter::generateProject(HelpProject &project)
bool contentsFound = false;
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()) {
+ if (!nextTitle.isEmpty()
+ && node->links().value(Node::ContentsLink).first.isEmpty()) {
const Node *nextPage = qdb_->findNodeForTarget(nextTitle, nullptr);
@@ -849,7 +825,7 @@ void HelpProjectWriter::generateProject(HelpProject &project)
writer.writeAttribute("name", details[0]);
writer.writeAttribute("id", details[1]);
writer.writeAttribute("ref", details[2]);
- writer.writeEndElement(); //keyword
+ writer.writeEndElement(); // keyword
}
writer.writeEndElement(); // keywords
@@ -857,7 +833,8 @@ 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>(gen_->outputFileNames().cbegin(), gen_->outputFileNames().cend());
+ QSet<QString> files =
+ QSet<QString>(gen_->outputFileNames().cbegin(), gen_->outputFileNames().cend());
files.unite(project.files);
files.unite(project.extraFiles);
QStringList sortedFiles = files.values();