summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTopi Reinio <topi.reinio@qt.io>2019-09-20 00:19:45 +0200
committerTopi Reinio <topi.reinio@qt.io>2019-09-26 13:46:42 +0200
commitc8e79294237260d735324663932a676d8084efcb (patch)
tree1517a467aa08536fb3124e4ac6bf8cb7b15dda6d
parent3f3cf9dd93bfcb6c8989afa45f391633d007c8ce (diff)
downloadqttools-c8e79294237260d735324663932a676d8084efcb.tar.gz
qdoc: WebXML output: Fix output for \group and \annotatedlist
The WebXMLGenerator did not handle atoms of type AnnotatedList. Adding this enables listing of grouped pages with the \annotatedlist command. Similarly, empty output page was generated for the \group page itself. This was because QDocIndexFiles::generateIndexSections() only handled groups when processing the root node, which we must skip in this generator. Add explicit handling for group nodes, enabling us to receive callbacks from QDocIndexFiles to add content for these pages. Task-number: PYSIDE-1088 Change-Id: Id72d589a51fc7aae21ad5cdbb3c1dfa78d4c23ae Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
-rw-r--r--src/qdoc/webxmlgenerator.cpp34
-rw-r--r--src/qdoc/webxmlgenerator.h1
2 files changed, 29 insertions, 6 deletions
diff --git a/src/qdoc/webxmlgenerator.cpp b/src/qdoc/webxmlgenerator.cpp
index 20c655890..cc067b480 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;
@@ -865,13 +880,16 @@ 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 bdd28dd2f..cfb87382b 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);