diff options
| author | Martin Smith <martin.smith@digia.com> | 2012-11-27 14:07:27 +0100 |
|---|---|---|
| committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-11-27 15:54:45 +0100 |
| commit | 3e33d29a86a99c4dc068e640b23551a7a6e9ab90 (patch) | |
| tree | 0a02df617f904911643c02d53335645cf23594d5 /src/tools/qdoc/htmlgenerator.cpp | |
| parent | 11a38b63bd34b632e335a38f2e671bea0d6a9564 (diff) | |
qdoc: Listing group members across modules
This is a first attempt at fixing the problem, but
it probably is not the entire solution. The problem
requires adding attributes to the index files and
then reusing them when the index files are read.
The same problem will be affecting the module
lists themselves, but that is not fixed in this
update.
Task-number: QTBUG-28036
Change-Id: I8593d5b9446e51a5204b6c71f8c4f2b63f445972
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Diffstat (limited to 'src/tools/qdoc/htmlgenerator.cpp')
| -rw-r--r-- | src/tools/qdoc/htmlgenerator.cpp | 120 |
1 files changed, 39 insertions, 81 deletions
diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp index 8252d8b8cae..48b70ce0fff 100644 --- a/src/tools/qdoc/htmlgenerator.cpp +++ b/src/tools/qdoc/htmlgenerator.cpp @@ -459,9 +459,9 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark break; case Atom::AnnotatedList: { - NodeMap nodeMap; - qdb_->getGroup(atom->string(), nodeMap); - generateAnnotatedList(relative, marker, nodeMap); + DocNode* dn = qdb_->getGroup(atom->string()); + if (dn) + generateAnnotatedList(relative, marker, dn->members()); } break; case Atom::GeneratedList: @@ -487,44 +487,6 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark } } } - else if (atom->string().contains("classesbyedition")) { - QString arg = atom->string().trimmed(); - QString editionName = atom->string().mid(atom->string().indexOf("classesbyedition") + 16).trimmed(); - if (editionModuleMap.contains(editionName)) { - QDocDatabase* qdb = QDocDatabase::qdocDB(); - // Add all classes in the modules listed for that edition. - NodeMap editionClasses; - DocNodeMap::const_iterator i = qdb->modules().begin(); - while (i != qdb->modules().end()) { - NodeMap m; - DocNode* dn = i.value(); - dn->getMemberClasses(m); - if (!m.isEmpty()) - editionClasses.unite(m); - m.clear(); - ++i; - } - - // Add additional groups and remove groups of classes that - // should be excluded from the edition. - - const NodeMultiMap& groups = qdb_->groups(); - foreach (const QString &groupName, editionGroupMap[editionName]) { - QList<Node *> groupClasses; - if (groupName.startsWith(QLatin1Char('-'))) { - groupClasses = groups.values(groupName.mid(1)); - foreach (const Node *node, groupClasses) - editionClasses.remove(node->name()); - } - else { - groupClasses = groups.values(groupName); - foreach (const Node *node, groupClasses) - editionClasses.insert(node->name(), node); - } - } - generateAnnotatedList(relative, marker, editionClasses); - } - } else if (atom->string() == "classhierarchy") { generateClassHierarchy(relative, qdb_->getCppClasses()); } @@ -554,14 +516,8 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark } else if (atom->string() == "related") { const DocNode *dn = static_cast<const DocNode *>(relative); - if (dn && !dn->members().isEmpty()) { - NodeMap groupMembersMap; - foreach (const Node *node, dn->members()) { - if (node->type() == Node::Document) - groupMembersMap[node->fullName(relative)] = node; - } - generateAnnotatedList(dn, marker, groupMembersMap); - } + if (dn) + generateAnnotatedList(dn, marker, dn->members()); } else if (atom->string() == "relatedinline") { const DocNode *dn = static_cast<const DocNode *>(relative); @@ -1377,7 +1333,7 @@ void HtmlGenerator::generateCollisionPages() t += protectEnc(fullTitle); nm.insertMulti(t,n); } - generateAnnotatedList(ncn, marker, nm, true); + generateAnnotatedList(ncn, marker, nm); QList<QString> targets; if (!ncn->linkTargets().isEmpty()) { @@ -1616,22 +1572,10 @@ void HtmlGenerator::generateDocNode(DocNode* dn, CodeMarker* marker) generateAlsoList(dn, marker); generateExtractionMark(dn, EndMark); - if ((dn->subType() == Node::Group) && !dn->members().isEmpty()) { - NodeMap groupMembersMap; - foreach (const Node *node, dn->members()) { - if (node->type() == Node::Class || node->type() == Node::Namespace) - groupMembersMap[node->name()] = node; - } - generateAnnotatedList(dn, marker, groupMembersMap); - } - else if ((dn->subType() == Node::QmlModule) && !dn->members().isEmpty()) { - NodeMap qmlModuleMembersMap; - foreach (const Node* node, dn->members()) { - if (node->type() == Node::Document && node->subType() == Node::QmlClass) - qmlModuleMembersMap[node->name()] = node; - } - generateAnnotatedList(dn, marker, qmlModuleMembersMap); - } + if ((dn->subType() == Node::Group)) + generateAnnotatedList(dn, marker, dn->members()); + else if (dn->subType() == Node::QmlModule) + generateAnnotatedList(dn, marker, dn->members()); sections = marker->sections(dn, CodeMarker::Detailed, CodeMarker::Okay); s = sections.constBegin(); @@ -2202,15 +2146,15 @@ QString HtmlGenerator::generateLowStatusMemberFile(const InnerNode *inner, return fileName; } -void HtmlGenerator::generateClassHierarchy(const Node *relative, const NodeMap& classMap) +void HtmlGenerator::generateClassHierarchy(const Node *relative, NodeMap& classMap) { if (classMap.isEmpty()) return; NodeMap topLevel; - NodeMap::ConstIterator c = classMap.constBegin(); - while (c != classMap.constEnd()) { - const ClassNode *classe = static_cast<const ClassNode *>(*c); + NodeMap::Iterator c = classMap.begin(); + while (c != classMap.end()) { + ClassNode *classe = static_cast<ClassNode *>(*c); if (classe->baseClasses().isEmpty()) topLevel.insert(classe->name(), classe); ++c; @@ -2226,8 +2170,7 @@ void HtmlGenerator::generateClassHierarchy(const Node *relative, const NodeMap& out() << "</ul>\n"; } else { - const ClassNode *child = - static_cast<const ClassNode *>(*stack.top().constBegin()); + ClassNode* child = static_cast<ClassNode*>(*stack.top().begin()); out() << "<li>"; generateFullName(child, relative); out() << "</li>\n"; @@ -2246,21 +2189,36 @@ void HtmlGenerator::generateClassHierarchy(const Node *relative, const NodeMap& } } +/*! + Output an annotated list of the nodes in \a nodeMap. + A two-column table is output. + */ +void HtmlGenerator::generateAnnotatedList(const Node* relative, + CodeMarker* marker, + const NodeMap& nodeMap) +{ + if (nodeMap.isEmpty()) + return; + NodeList nl; + NodeMap::const_iterator i = nodeMap.begin(); + while (i != nodeMap.end()) { + nl.append(i.value()); + ++i; + } + generateAnnotatedList(relative, marker, nl); +} + void HtmlGenerator::generateAnnotatedList(const Node *relative, CodeMarker *marker, - const NodeMap &nodeMap, - bool allOdd) + const NodeList& nodes) { out() << "<table class=\"annotated\">\n"; - int row = 0; - foreach (const QString &name, nodeMap.keys()) { - const Node *node = nodeMap[name]; - + foreach (const Node* node, nodes) { if (node->status() == Node::Obsolete) continue; - if (allOdd || (++row % 2 == 1)) + if (++row % 2 == 1) out() << "<tr class=\"odd topAlign\">"; else out() << "<tr class=\"even topAlign\">"; @@ -2269,7 +2227,7 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative, out() << "</p></td>"; if (!(node->type() == Node::Document)) { - Text brief = node->doc().trimmedBriefText(name); + Text brief = node->doc().trimmedBriefText(node->name()); if (!brief.isEmpty()) { out() << "<td class=\"tblDescr\"><p>"; generateText(brief, node, marker); @@ -2630,7 +2588,7 @@ void HtmlGenerator::generateOverviewList(const Node *relative) else if (!isGroupPage) { // If we encounter a page that belongs to a group then // we add that page to the list for that group. - const DocNode* gn = qdb_->findGroupNode(QStringList(group)); + const DocNode* gn = qdb_->getGroup(group); if (gn) docNodeMap[gn].insert(sortKey, docNode); } |
