QDoc: Add hand-written ditamaps as children of qt.ditamap

Known issues: the hand-written ditamap has to be a flat list. The
function used should preferably become a recursive function, which would
allow you to have as many nested items as you want.

Change-Id: I0dc897da5222f6409e2e58c42200c342bc8cacf2
Reviewed-by: Martin Smith <martin.smith@nokia.com>
This commit is contained in:
Casper van Donderen 2012-03-29 14:50:11 +02:00 committed by Qt by Nokia
parent c1cb279019
commit c3ccd3d41d

View File

@ -3886,12 +3886,14 @@ QString DitaXmlGenerator::guidForNode(const Node* node)
/*!
Constructs a file name appropriate for the \a node and returns
it. If the \a node is not a fake node, or if it is a fake node but
it is neither an external page node nor an image node, call the
PageGenerator::fileName() function.
it is neither an external page node nor an image node or a ditamap,
call the PageGenerator::fileName() function.
*/
QString DitaXmlGenerator::fileName(const Node* node)
{
if (node->type() == Node::Fake) {
if (static_cast<const FakeNode*>(node)->pageType() == Node::DitaMapPage)
return node->name();
if (static_cast<const FakeNode*>(node)->subType() == Node::ExternalPage)
return node->name();
if (static_cast<const FakeNode*>(node)->subType() == Node::Image)
@ -5974,7 +5976,57 @@ void DitaXmlGenerator::writeTopicrefs(NodeMultiMap* nmm, const QString& navtitle
return;
writeStartTag(DT_topicref);
xmlWriter().writeAttribute("navtitle",navtitle);
NodeMultiMap::iterator i = nmm->begin();
NodeMultiMap::iterator i;
NodeMultiMap *ditaMaps = pageTypeMaps[Node::DitaMapPage];
/*!
Put all pages that are already in a hand-written ditamap not in
the qt.ditamap separately. It loops through all ditamaps recursively
before deciding to write an article to qt.ditamap.
*/
if ((navtitle == "articles" && ditaMaps && ditaMaps->size() > 0)) {
NodeMultiMap::iterator mapIterator = ditaMaps->begin();
while (mapIterator != ditaMaps->end()) {
writeStartTag(DT_mapref);
xmlWriter().writeAttribute("navtitle",mapIterator.key());
xmlWriter().writeAttribute("href",fileName(mapIterator.value()));
writeEndTag();
++mapIterator;
}
i = nmm->begin();
while (i != nmm->end()) {
// Hardcode not writing index.dita multiple times in the tree.
// index.dita should only appear at the top of the ditamap.
if (fileName(i.value()) == "index.dita") {
i++;
continue;
}
bool foundInDitaMap = false;
mapIterator = ditaMaps->begin();
while (mapIterator != ditaMaps->end()) {
const DitaMapNode *dmNode = static_cast<const DitaMapNode *>(mapIterator.value());
for (int count = 0; count < dmNode->map().count(); count++) {
if (dmNode->map().at(count)->navtitle() == i.key()) {
foundInDitaMap = true;
}
++mapIterator;
}
}
if (!foundInDitaMap) {
writeStartTag(DT_topicref);
xmlWriter().writeAttribute("navtitle",i.key());
xmlWriter().writeAttribute("href",fileName(i.value()));
writeEndTag(); // </topicref>
}
++i;
}
}
/*!
Shortcut when there are no hand-written ditamaps or when we are
not generating the articles list.
*/
else {
i = nmm->begin();
while (i != nmm->end()) {
// Hardcode not writing index.dita multiple times in the tree.
// index.dita should only appear at the top of the ditamap.
@ -6007,6 +6059,7 @@ void DitaXmlGenerator::writeTopicrefs(NodeMultiMap* nmm, const QString& navtitle
writeEndTag(); // </topicref>
++i;
}
}
writeEndTag(); // </topicref>
}