diff options
Diffstat (limited to 'src/tools/qdoc/helpprojectwriter.cpp')
-rw-r--r-- | src/tools/qdoc/helpprojectwriter.cpp | 111 |
1 files changed, 85 insertions, 26 deletions
diff --git a/src/tools/qdoc/helpprojectwriter.cpp b/src/tools/qdoc/helpprojectwriter.cpp index d46f887518..a1121a95cb 100644 --- a/src/tools/qdoc/helpprojectwriter.cpp +++ b/src/tools/qdoc/helpprojectwriter.cpp @@ -131,22 +131,23 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList typeHash["function"] = Node::Function; typeHash["property"] = Node::Property; typeHash["variable"] = Node::Variable; + typeHash["group"] = Node::Group; + typeHash["module"] = Node::Module; + typeHash["qmlmodule"] = Node::QmlModule; typeHash["qmlproperty"] = Node::QmlProperty; typeHash["qmlsignal"] = Node::QmlSignal; typeHash["qmlsignalhandler"] = Node::QmlSignalHandler; typeHash["qmlmethod"] = Node::QmlMethod; typeHash["qmlpropertygroup"] = Node::QmlPropertyGroup; + typeHash["qmlclass"] = Node::QmlType; + typeHash["qmlbasictype"] = Node::QmlBasicType; QHash<QString, Node::SubType> subTypeHash; subTypeHash["example"] = Node::Example; subTypeHash["headerfile"] = Node::HeaderFile; subTypeHash["file"] = Node::File; - subTypeHash["group"] = Node::Group; - subTypeHash["module"] = Node::Module; subTypeHash["page"] = Node::Page; subTypeHash["externalpage"] = Node::ExternalPage; - subTypeHash["qmlclass"] = Node::QmlClass; - subTypeHash["qmlbasictype"] = Node::QmlBasicType; QSet<Node::SubType> allSubTypes = QSet<Node::SubType>::fromList(subTypeHash.values()); @@ -210,16 +211,14 @@ QStringList HelpProjectWriter::keywordDetails(const Node *node) const // "id" details << node->parent()->name()+"::"+node->name(); } - else if (node->type() == Node::Document) { + else if (node->isQmlType() || node->isQmlBasicType()) { + details << node->name(); + details << "QML." + node->name(); + } + else if (node->isDocNode()) { const DocNode *fake = static_cast<const DocNode *>(node); - if (fake->subType() == Node::QmlClass) { - details << (QmlClassNode::qmlOnly ? fake->name() : fake->fullTitle()); - details << "QML." + fake->name(); - } - else { - details << fake->fullTitle(); - details << fake->fullTitle(); - } + details << fake->fullTitle(); + details << fake->fullTitle(); } else { details << node->name(); @@ -247,7 +246,7 @@ bool HelpProjectWriter::generateSection(HelpProject &project, return false; QString objName; - if (node->type() == Node::Document) { + if (node->isDocNode()) { const DocNode *fake = static_cast<const DocNode *>(node); objName = fake->fullTitle(); } @@ -287,6 +286,25 @@ bool HelpProjectWriter::generateSection(HelpProject &project, project.keywords.append(keywordDetails(node)); project.files.insert(gen_->fullDocumentLocation(node,Generator::useOutputSubdirs())); break; + case Node::QmlType: + case Node::QmlBasicType: + if (node->doc().hasKeywords()) { + foreach (const Atom* keyword, node->doc().keywords()) { + if (!keyword->string().isEmpty()) { + QStringList details; + details << keyword->string() + << keyword->string() + << gen_->fullDocumentLocation(node,Generator::useOutputSubdirs()) + + QLatin1Char('#') + Doc::canonicalTitle(keyword->string()); + project.keywords.append(details); + } + else + node->doc().location().warning(tr("Bad keyword in %1").arg(gen_->fullDocumentLocation(node,Generator::useOutputSubdirs()))); + } + } + project.keywords.append(keywordDetails(node)); + project.files.insert(gen_->fullDocumentLocation(node,Generator::useOutputSubdirs())); + break; case Node::Namespace: project.keywords.append(keywordDetails(node)); @@ -316,6 +334,34 @@ bool HelpProjectWriter::generateSection(HelpProject &project, } break; + case Node::Group: + case Node::Module: + case Node::QmlModule: + { + const CollectionNode* cn = static_cast<const CollectionNode*>(node); + if (!cn->fullTitle().isEmpty()) { + if (cn->doc().hasKeywords()) { + foreach (const Atom* keyword, cn->doc().keywords()) { + if (!keyword->string().isEmpty()) { + QStringList details; + details << keyword->string() + << keyword->string() + << gen_->fullDocumentLocation(node, Generator::useOutputSubdirs()) + + QLatin1Char('#') + Doc::canonicalTitle(keyword->string()); + project.keywords.append(details); + } + else + cn->doc().location().warning( + tr("Bad keyword in %1").arg(gen_->fullDocumentLocation(node,Generator::useOutputSubdirs())) + ); + } + } + project.keywords.append(keywordDetails(node)); + project.files.insert(gen_->fullDocumentLocation(node,Generator::useOutputSubdirs())); + } + } + break; + case Node::Property: case Node::QmlProperty: case Node::QmlSignal: @@ -529,17 +575,14 @@ void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &write if (href.isEmpty()) return; - Node::SubType subType = static_cast<const DocNode*>(node)->subType(); - bool derivedClass = false; if (node->type() == Node::Class) derivedClass = !(static_cast<const ClassNode *>(node)->baseClasses().isEmpty()); // 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->type() != Node::Namespace && subType != Node::HeaderFile && - (derivedClass || subType == Node::QmlClass || - !project.memberStatus[node].isEmpty())) { + if (!node->isNamespace() && !node->isHeaderFile() && + (derivedClass || node->isQmlType() || !project.memberStatus[node].isEmpty())) { QString membersPath = href + QStringLiteral("-members.html"); project.files.insert(membersPath); if (writeSections) @@ -583,6 +626,14 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer writeSection(writer, href, objName); break; + case Node::QmlType: + writer.writeStartElement("section"); + writer.writeAttribute("ref", href); + writer.writeAttribute("title", tr("%1 Type Reference").arg(node->fullTitle())); + addMembers(project, writer, node); + writer.writeEndElement(); // section + break; + case Node::Document: { // Document nodes (such as manual pages) contain subtypes, titles and other // attributes. @@ -590,17 +641,25 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer writer.writeStartElement("section"); writer.writeAttribute("ref", href); - if (docNode->subType() == Node::QmlClass) - writer.writeAttribute("title", tr("%1 Type Reference").arg(docNode->fullTitle())); - else - writer.writeAttribute("title", docNode->fullTitle()); + writer.writeAttribute("title", docNode->fullTitle()); - if ((docNode->subType() == Node::HeaderFile) || (docNode->subType() == Node::QmlClass)) + if (docNode->subType() == Node::HeaderFile) addMembers(project, writer, node); writer.writeEndElement(); // section } break; + case Node::Group: + case Node::Module: + 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: ; } @@ -612,7 +671,7 @@ void HelpProjectWriter::generateProject(HelpProject &project) if (!project.indexRoot.isEmpty()) rootNode = qdb_->findDocNodeByTitle(project.indexRoot); else - rootNode = qdb_->treeRoot(); + rootNode = qdb_->primaryTreeRoot(); if (!rootNode) return; @@ -655,7 +714,7 @@ void HelpProjectWriter::generateProject(HelpProject &project) writer.writeStartElement("section"); const Node* node = qdb_->findDocNodeByTitle(project.indexTitle); if (node == 0) - node = qdb_->findNode(QStringList("index.html")); + node = qdb_->findNodeByNameAndType(QStringList("index.html"), Node::Document); QString indexPath; // Never use a collision node as a landing page if (node && !node->isCollisionNode()) |