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:
parent
c1cb279019
commit
c3ccd3d41d
@ -3886,12 +3886,14 @@ QString DitaXmlGenerator::guidForNode(const Node* node)
|
|||||||
/*!
|
/*!
|
||||||
Constructs a file name appropriate for the \a node and returns
|
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. 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
|
it is neither an external page node nor an image node or a ditamap,
|
||||||
PageGenerator::fileName() function.
|
call the PageGenerator::fileName() function.
|
||||||
*/
|
*/
|
||||||
QString DitaXmlGenerator::fileName(const Node* node)
|
QString DitaXmlGenerator::fileName(const Node* node)
|
||||||
{
|
{
|
||||||
if (node->type() == Node::Fake) {
|
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)
|
if (static_cast<const FakeNode*>(node)->subType() == Node::ExternalPage)
|
||||||
return node->name();
|
return node->name();
|
||||||
if (static_cast<const FakeNode*>(node)->subType() == Node::Image)
|
if (static_cast<const FakeNode*>(node)->subType() == Node::Image)
|
||||||
@ -5974,7 +5976,57 @@ void DitaXmlGenerator::writeTopicrefs(NodeMultiMap* nmm, const QString& navtitle
|
|||||||
return;
|
return;
|
||||||
writeStartTag(DT_topicref);
|
writeStartTag(DT_topicref);
|
||||||
xmlWriter().writeAttribute("navtitle",navtitle);
|
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()) {
|
while (i != nmm->end()) {
|
||||||
// Hardcode not writing index.dita multiple times in the tree.
|
// Hardcode not writing index.dita multiple times in the tree.
|
||||||
// index.dita should only appear at the top of the ditamap.
|
// 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>
|
writeEndTag(); // </topicref>
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
writeEndTag(); // </topicref>
|
writeEndTag(); // </topicref>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user