From edbe8f8f8c284b4cac52ff1e97a2065dc4f89d74 Mon Sep 17 00:00:00 2001
From: Martin Smith
Date: Mon, 4 Oct 2010 13:14:22 +0200
Subject: qdoc: Outputting each namespace as a element.
Still missing nested classes.
---
tools/qdoc3/ditaxmlgenerator.cpp | 164 +++++++++++++++++++++++++++++++++++++--
tools/qdoc3/ditaxmlgenerator.h | 2 +-
2 files changed, 159 insertions(+), 7 deletions(-)
diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp
index 2d8eec2..2b90d8e 100644
--- a/tools/qdoc3/ditaxmlgenerator.cpp
+++ b/tools/qdoc3/ditaxmlgenerator.cpp
@@ -1534,16 +1534,160 @@ DitaXmlGenerator::generateClassLikeNode(const InnerNode* inner, CodeMarker* mark
QList::ConstIterator s;
const ClassNode* cn = 0;
- const NamespaceNode* namespasse = 0;
+ const NamespaceNode* nsn = 0;
QString title;
QString rawTitle;
QString fullTitle;
if (inner->type() == Node::Namespace) {
- namespasse = const_cast(static_cast(inner));
+ nsn = const_cast(static_cast(inner));
rawTitle = marker->plainName(inner);
fullTitle = marker->plainFullName(inner);
title = rawTitle + " Namespace";
+
+ /*
+ Note: Because the C++ specialization we are using
+ has no element, we are using the
+ element with an outputclass attribute
+ set to "namespace" .
+ */
+ generateHeader(inner, fullTitle);
+ generateBrief(inner, marker); //
+
+ // not included:
+
+ xmlWriter().writeStartElement(CXXCLASSDETAIL);
+ xmlWriter().writeStartElement(CXXCLASSDEFINITION);
+ writeLocation(nsn);
+ xmlWriter().writeEndElement(); //
+
+ xmlWriter().writeStartElement(APIDESC);
+ xmlWriter().writeAttribute("spectitle",title);
+ Text brief = nsn->doc().briefText();
+ if (!brief.isEmpty()) {
+ xmlWriter().writeStartElement("p");
+ generateText(brief, nsn, marker);
+ xmlWriter().writeEndElement(); //
+ }
+ generateIncludes(nsn, marker);
+ generateStatus(nsn, marker);
+ generateThreadSafeness(nsn, marker);
+ generateSince(nsn, marker);
+
+ xmlWriter().writeStartElement("ul");
+
+ QString membersLink = generateListOfAllMemberFile(inner, marker);
+ if (!membersLink.isEmpty()) {
+ writeXrefListItem(membersLink,"List of all members, including inherited members");
+ }
+
+ QString obsoleteLink = generateLowStatusMemberFile(inner,
+ marker,
+ CodeMarker::Obsolete);
+ if (!obsoleteLink.isEmpty()) {
+ writeXrefListItem(obsoleteLink,"Obsolete members");
+ }
+
+ QString compatLink = generateLowStatusMemberFile(inner,
+ marker,
+ CodeMarker::Compat);
+ if (!compatLink.isEmpty()) {
+ writeXrefListItem(compatLink,"Qt 3 support members");
+ }
+
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeEndElement(); //
+
+ bool needOtherSection = false;
+ QList summarySections;
+ summarySections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay);
+ s = summarySections.begin();
+ while (s != summarySections.end()) {
+ if (s->members.isEmpty() && s->reimpMembers.isEmpty()) {
+ if (!s->inherited.isEmpty())
+ needOtherSection = true;
+ }
+ else {
+ QString attr;
+ if (!s->members.isEmpty()) {
+ xmlWriter().writeStartElement("section");
+ attr = cleanRef((*s).name).toLower() + " redundant";
+ xmlWriter().writeAttribute("outputclass",attr);
+ xmlWriter().writeStartElement("title");
+ xmlWriter().writeAttribute("outputclass","h2");
+ xmlWriter().writeCharacters(protectEnc((*s).name));
+ xmlWriter().writeEndElement(); //
+ generateSection(s->members, inner, marker, CodeMarker::Summary);
+ generateSectionInheritedList(*s, inner, marker);
+ xmlWriter().writeEndElement(); //
+ }
+ if (!s->reimpMembers.isEmpty()) {
+ QString name = QString("Reimplemented ") + (*s).name;
+ attr = cleanRef(name).toLower() + " redundant";
+ xmlWriter().writeStartElement("section");
+ xmlWriter().writeAttribute("outputclass",attr);
+ xmlWriter().writeStartElement("title");
+ xmlWriter().writeAttribute("outputclass","h2");
+ xmlWriter().writeCharacters(protectEnc(name));
+ xmlWriter().writeEndElement(); //
+ generateSection(s->reimpMembers, inner, marker, CodeMarker::Summary);
+ generateSectionInheritedList(*s, inner, marker);
+ xmlWriter().writeEndElement(); //
+ }
+ }
+ ++s;
+ }
+ if (needOtherSection) {
+ xmlWriter().writeStartElement("section");
+ xmlWriter().writeAttribute("outputclass","additional-inherited-members redundant");
+ xmlWriter().writeStartElement("title");
+ xmlWriter().writeAttribute("outputclass","h3");
+ xmlWriter().writeCharacters("Additional Inherited Members");
+ xmlWriter().writeEndElement(); //
+ s = summarySections.begin();
+ while (s != summarySections.end()) {
+ if (s->members.isEmpty())
+ generateSectionInheritedList(*s, inner, marker);
+ ++s;
+ }
+ xmlWriter().writeEndElement(); //
+ }
+
+ writeDetailedDescription(nsn, marker, false, QString("Detailed Description"));
+
+ // not included: or
+
+ xmlWriter().writeEndElement(); //
+
+ // not included:
+ // not included:
+
+ QList detailSections;
+ detailSections = marker->sections(inner, CodeMarker::Detailed, CodeMarker::Okay);
+ s = detailSections.begin();
+ while (s != detailSections.end()) {
+ if ((*s).name == "Function Documentation") {
+ writeFunctions((*s),nsn,marker);
+ }
+ else if ((*s).name == "Type Documentation") {
+ writeEnumerations((*s),marker);
+ writeTypedefs((*s),marker);
+ }
+ else if ((*s).name == "Variable Documentation") {
+ writeDataMembers((*s),marker);
+ }
+ else if ((*s).name == "Property Documentation") {
+ writeProperties((*s),marker);
+ }
+ else if ((*s).name == "Macro Documentation") {
+ writeMacros((*s),marker);
+ }
+ ++s;
+ }
+
+ // not included:
+
+ xmlWriter().writeEndElement(); //
}
else if (inner->type() == Node::Class) {
cn = const_cast(static_cast(inner));
@@ -1826,7 +1970,6 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker
generateQmlText(cn->doc().body(), cn, marker, fake->name());
generateAlsoList(fake, marker);
- //out() << "
\n";
sections = marker->qmlSections(qml_cn,CodeMarker::Detailed,0);
s = sections.begin();
@@ -2095,6 +2238,16 @@ void DitaXmlGenerator::generateHeader(const Node* node,
" PUBLIC \"-//NOKIA//DTD DITA C++ API Class Reference Type v" +
version + "//EN\" \"" + dtd + "\">";
}
+ else if (node->type() == Node::Namespace) {
+ mainElement = "cxxClass";
+ nameElement = "apiName";
+ dtd = "dtd/cxxClass.dtd";
+ version = "0.6.0";
+ doctype = "";
+ outputclass = "namespace";
+ }
xmlWriter().writeDTD(doctype);
xmlWriter().writeComment(node->doc().location().fileName());
@@ -2899,7 +3052,6 @@ void DitaXmlGenerator::generateLegaleseList(const Node* relative,
QMap::ConstIterator it = legaleseTexts.begin();
while (it != legaleseTexts.end()) {
Text text = it.key();
- //out() << "
\n";
generateText(text, relative, marker);
xmlWriter().writeStartElement("ul");
do {
@@ -4668,7 +4820,7 @@ void DitaXmlGenerator::writeLocation(const Node* n)
Write the elements.
*/
void DitaXmlGenerator::writeFunctions(const Section& s,
- const ClassNode* cn,
+ const Node* n,
CodeMarker* marker)
{
NodeList::ConstIterator m = s.members.begin();
@@ -4728,7 +4880,7 @@ void DitaXmlGenerator::writeFunctions(const Section& s,
}
}
- if (fn->name() == cn->name()) {
+ if (fn->name() == n->name()) {
xmlWriter().writeStartElement(CXXFUNCTIONCONSTRUCTOR);
xmlWriter().writeAttribute("name","constructor");
xmlWriter().writeAttribute("value","constructor");
diff --git a/tools/qdoc3/ditaxmlgenerator.h b/tools/qdoc3/ditaxmlgenerator.h
index 484ff2f..746bbe9 100644
--- a/tools/qdoc3/ditaxmlgenerator.h
+++ b/tools/qdoc3/ditaxmlgenerator.h
@@ -117,7 +117,7 @@ class DitaXmlGenerator : public PageGenerator
void writeDerivations(const ClassNode* cn, CodeMarker* marker);
void writeLocation(const Node* n);
void writeFunctions(const Section& s,
- const ClassNode* cn,
+ const Node* n,
CodeMarker* marker);
void writeParameters(const FunctionNode* fn);
void writeEnumerations(const Section& s, CodeMarker* marker);
--
cgit v0.12