diff --git a/src/qdoc/webxmlgenerator.cpp b/src/qdoc/webxmlgenerator.cpp index 20c65589083b470d3fbca3ebf2e8fb4e88d83a35..cc067b480a5269b68eab26b1c16af83e35f22d2f 100644 --- a/src/qdoc/webxmlgenerator.cpp +++ b/src/qdoc/webxmlgenerator.cpp @@ -166,6 +166,9 @@ void WebXMLGenerator::generateIndexSections(QXmlStreamWriter &writer, Node *node { marker_ = CodeMarker::markerForFileName(node->location().filePath()); QDocIndexFiles::qdocIndexFiles()->generateIndexSections(writer, node, this); + // generateIndexSections does nothing for groups, so handle them explicitly + if (node->isGroup()) + QDocIndexFiles::qdocIndexFiles()->generateIndexSection(writer, node, this); } // Handles callbacks from QDocIndexFiles to add documentation to node @@ -230,10 +233,15 @@ void WebXMLGenerator::append(QXmlStreamWriter &writer, Node *node) } writer.writeEndElement(); // see-also } + if (node->isExample()) { supplement = true; generateRequiredLinks(node, marker_); supplement = false; + } else if (node->isGroup()) { + CollectionNode *cn = static_cast<CollectionNode *>(node); + if (!cn->noAutoList()) + generateAnnotatedList(writer, node, cn->members()); } writer.writeEndElement(); // description @@ -281,6 +289,13 @@ const Atom *WebXMLGenerator::addAtomElements(QXmlStreamWriter &writer, bool keepQuoting = false; switch (atom->type()) { + case Atom::AnnotatedList: + { + const CollectionNode* cn = qdb_->getCollectionNode(atom->string(), Node::Group); + if (cn) + generateAnnotatedList(writer, relative, cn->members()); + } + break; case Atom::AutoLink: if (!inLink && !inSectionHeading) { const Node *node = nullptr; @@ -864,14 +879,17 @@ void WebXMLGenerator::generateRelations(QXmlStreamWriter &writer, const Node *no void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative, const NodeMap &nodeMap) +{ + generateAnnotatedList(writer, relative, nodeMap.values()); +} + +void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, + const Node *relative, const NodeList &nodeList) { writer.writeStartElement("table"); writer.writeAttribute("width", "100%"); - for (NodeMap::const_iterator it = nodeMap.cbegin(), - end = nodeMap.cend(); it != end; ++it) { - const Node *node = it.value(); - + for (const auto *node : nodeList) { writer.writeStartElement("row"); writer.writeStartElement("heading"); generateFullName(writer, node, relative); @@ -888,10 +906,14 @@ void WebXMLGenerator::generateAnnotatedList(QXmlStreamWriter &writer, void WebXMLGenerator::generateFullName(QXmlStreamWriter &writer, const Node *node, const Node *relative) { + QString type = targetType(node); + QString name = node->fullName(relative); writer.writeStartElement("link"); writer.writeAttribute("href", fullDocumentLocation(node)); - writer.writeAttribute("type", targetType(node)); - writer.writeCharacters(node->fullName(relative)); + writer.writeAttribute("type", type); + if (type == QLatin1String("page")) + writer.writeAttribute("page", name); + writer.writeCharacters(name); writer.writeEndElement(); // link } diff --git a/src/qdoc/webxmlgenerator.h b/src/qdoc/webxmlgenerator.h index bdd28dd2f7ba7b717573519bb393648a11c13726..cfb87382b6a3157ab1b6975fcd8ce284d724a583 100644 --- a/src/qdoc/webxmlgenerator.h +++ b/src/qdoc/webxmlgenerator.h @@ -67,6 +67,7 @@ protected: private: const QPair<QString,QString> anchorForNode(const Node *node); void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative, const NodeMap &nodeMap); + void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative, const NodeList &nodeList); void generateFullName(QXmlStreamWriter &writer, const Node *node, const Node *relative); void generateRelations(QXmlStreamWriter &writer, const Node *node);