summaryrefslogtreecommitdiffstats
path: root/src/tools/qdoc/htmlgenerator.cpp
diff options
context:
space:
mode:
authorMartin Smith <martin.smith@nokia.com>2012-09-13 11:38:45 +0200
committerQt by Nokia <qt-info@nokia.com>2012-09-14 15:23:15 +0200
commit14f7eb86ca2275d91f284279af5f77205d4ae3c0 (patch)
treeed4e91d6422dd814ac3e81739ad4a3b55bf050c7 /src/tools/qdoc/htmlgenerator.cpp
parent817a4474676b30a964de476d26bd70ddba3d379a (diff)
qdoc: Refactoring of qdoc data structures
This commit is the beginning of a significant overhaul of qdoc. A new class, QDocDatabase, is added, which will eventually encapsulate all the data structures used by qdoc. In this commit, the Tree class is made private and only accessible from QDocDatabase. Several maps structures are also moved into QDocDatabase from other classes. Much dead code and unused parameters were removed. Further simplification will follow. Change-Id: I237411c50f3ced0d2fc8d3b0fbfdf4e55880f8e9 Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Jerome Pasion <jerome.pasion@nokia.com>
Diffstat (limited to 'src/tools/qdoc/htmlgenerator.cpp')
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp610
1 files changed, 201 insertions, 409 deletions
diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp
index bd4dc79f05..558b0c6248 100644
--- a/src/tools/qdoc/htmlgenerator.cpp
+++ b/src/tools/qdoc/htmlgenerator.cpp
@@ -48,6 +48,7 @@
#include "helpprojectwriter.h"
#include "htmlgenerator.h"
#include "node.h"
+#include "qdocdatabase.h"
#include "separator.h"
#include "tree.h"
#include <ctype.h>
@@ -89,23 +90,20 @@ static void addLink(const QString &linkTarget,
}
}
-
+/*!
+ Constructs the HTML output generator.
+ */
HtmlGenerator::HtmlGenerator()
: helpProjectWriter(0),
- inLink(false),
inObsoleteLink(false),
- inContents(false),
- inSectionHeading(false),
- inTableHeader(false),
- numTableRows(0),
- threeColumnEnumValueTable(true),
funcLeftParen("\\S(\\()"),
obsoleteLinks(false)
{
}
/*!
- The destructor deletes the instance of HelpProjectWriter.
+ Destroys the HTML output generator. Deletes the singleton
+ instance of HelpProjectWriter.
*/
HtmlGenerator::~HtmlGenerator()
{
@@ -113,6 +111,10 @@ HtmlGenerator::~HtmlGenerator()
delete helpProjectWriter;
}
+/*!
+ Initializes the HTML output generator's data structures
+ from the configuration class \a config.
+ */
void HtmlGenerator::initializeGenerator(const Config &config)
{
static const struct {
@@ -209,16 +211,11 @@ void HtmlGenerator::initializeGenerator(const Config &config)
codeIndent = config.getInt(CONFIG_CODEINDENT);
- helpProjectWriter = new HelpProjectWriter(config,
- project.toLower() + ".qhp",
- this);
+ helpProjectWriter = new HelpProjectWriter(config, project.toLower() + ".qhp", this);
// Documentation template handling
- headerScripts = config.getString(HtmlGenerator::format() + Config::dot +
- CONFIG_HEADERSCRIPTS);
- headerStyles = config.getString(HtmlGenerator::format() +
- Config::dot +
- CONFIG_HEADERSTYLES);
+ headerScripts = config.getString(HtmlGenerator::format() + Config::dot + CONFIG_HEADERSCRIPTS);
+ headerStyles = config.getString(HtmlGenerator::format() + Config::dot + CONFIG_HEADERSTYLES);
QString prefix = CONFIG_QHP + Config::dot + "Qt" + Config::dot;
manifestDir = "qthelp://" + config.getString(prefix + "namespace");
@@ -239,6 +236,9 @@ void HtmlGenerator::initializeGenerator(const Config &config)
}
}
+/*!
+ Gracefully terminates the HTML output generator.
+ */
void HtmlGenerator::terminateGenerator()
{
Generator::terminateGenerator();
@@ -250,60 +250,25 @@ QString HtmlGenerator::format()
}
/*!
- This is where the HTML files are written.
- \note The HTML file generation is done in the base class,
- PageGenerator::generateTree().
+ Traverses the database generating all the HTML documentation.
*/
-void HtmlGenerator::generateTree(Tree *tree)
+void HtmlGenerator::generateTree()
{
- tree_ = tree;
- nonCompatClasses.clear();
- mainClasses.clear();
- compatClasses.clear();
- obsoleteClasses.clear();
- moduleClassMap.clear();
- moduleNamespaceMap.clear();
- funcIndex.clear();
- legaleseTexts.clear();
- serviceClasses.clear();
- qmlClasses.clear();
-
- findAllClasses(tree->root());
- findAllFunctions(tree->root());
- findAllLegaleseTexts(tree->root());
- findAllNamespaces(tree->root());
- findAllSince(tree->root());
-
- Generator::generateTree(tree);
- //reportOrphans(tree->root());
+ qdb_->buildCollections();
+ Generator::generateTree();
generateCollisionPages();
QString fileBase = project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-'));
generateIndex(fileBase, projectUrl, projectDescription);
- helpProjectWriter->generate(tree_);
+ helpProjectWriter->generate();
generateManifestFiles();
}
-void HtmlGenerator::startText(const Node * /* relative */,
- CodeMarker * /* marker */)
-{
- inLink = false;
- inContents = false;
- inSectionHeading = false;
- inTableHeader = false;
- numTableRows = 0;
- threeColumnEnumValueTable = true;
- link.clear();
- sectionNumber.clear();
-}
-
/*!
Generate html from an instance of Atom.
*/
-int HtmlGenerator::generateAtom(const Atom *atom,
- const Node *relative,
- CodeMarker *marker)
+int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker)
{
int skipAhead = 0;
static bool in_para = false;
@@ -318,12 +283,12 @@ int HtmlGenerator::generateAtom(const Atom *atom,
case Atom::AbstractRight:
break;
case Atom::AutoLink:
- if (!inLink && !inContents && !inSectionHeading) {
+ if (!inLink_ && !inContents_ && !inSectionHeading_) {
const Node *node = 0;
- QString link = getLink(atom, relative, marker, &node);
+ QString link = getLink(atom, relative, &node);
if (!link.isEmpty()) {
- beginLink(link, node, relative, marker);
- generateLink(atom, relative, marker);
+ beginLink(link, node, relative);
+ generateLink(atom, marker);
endLink();
}
else {
@@ -383,7 +348,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
// now widely used to write teletype text. As a result, text marked
// with the \c command is not passed to a code marker.
out() << formattingLeftMap()[ATOM_FORMATTING_TELETYPE];
- if (inLink) {
+ if (inLink_) {
out() << protectEnc(plainCode(atom->string()));
}
else {
@@ -404,27 +369,23 @@ int HtmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::Code:
out() << "<pre class=\"cpp\">"
- << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
- marker,relative))
+ << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative))
<< "</pre>\n";
break;
case Atom::Qml:
out() << "<pre class=\"qml\">"
- << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
- marker,relative))
+ << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative))
<< "</pre>\n";
break;
case Atom::JavaScript:
out() << "<pre class=\"js\">"
- << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
- marker,relative))
+ << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative))
<< "</pre>\n";
break;
case Atom::CodeNew:
out() << "<p>you can rewrite it as</p>\n"
<< "<pre class=\"cpp\">"
- << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
- marker,relative))
+ << trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),relative))
<< "</pre>\n";
break;
case Atom::CodeOld:
@@ -489,54 +450,57 @@ int HtmlGenerator::generateAtom(const Atom *atom,
}
break;
case Atom::AnnotatedList:
- {
- QList<Node*> values = tree_->groups().values(atom->string());
- NodeMap nodeMap;
- for (int i = 0; i < values.size(); ++i) {
- const Node* n = values.at(i);
- if ((n->status() != Node::Internal) && (n->access() != Node::Private)) {
- nodeMap.insert(n->nameForLists(),n);
- }
+ {
+ NodeMap nodeMap;
+ qdb_->getGroup(atom->string(), nodeMap);
+ generateAnnotatedList(relative, marker, nodeMap);
}
- generateAnnotatedList(relative, marker, nodeMap);
- }
break;
case Atom::GeneratedList:
if (atom->string() == "annotatedclasses") {
- generateAnnotatedList(relative, marker, nonCompatClasses);
+ generateAnnotatedList(relative, marker, qdb_->getCppClasses());
}
else if (atom->string() == "classes") {
- generateCompactList(relative, marker, nonCompatClasses, true);
+ generateCompactList(relative, qdb_->getCppClasses(), true);
}
else if (atom->string() == "qmlclasses") {
- generateCompactList(relative, marker, qmlClasses, true);
+ generateCompactList(relative, qdb_->getQmlTypes(), true);
}
else if (atom->string().contains("classesbymodule")) {
QString arg = atom->string().trimmed();
- QString moduleName = atom->string().mid(atom->string().indexOf(
- "classesbymodule") + 15).trimmed();
- if (moduleClassMap.contains(moduleName))
- generateAnnotatedList(relative, marker, moduleClassMap[moduleName]);
+ QString moduleName = atom->string().mid(atom->string().indexOf("classesbymodule") + 15).trimmed();
+ QDocDatabase* qdb = QDocDatabase::qdocDB();
+ DocNode* dn = qdb->findModule(moduleName);
+ if (dn) {
+ NodeMap m;
+ dn->getMemberClasses(m);
+ if (!m.isEmpty()) {
+ generateAnnotatedList(relative, marker, m);
+ }
+ }
}
else if (atom->string().contains("classesbyedition")) {
-
QString arg = atom->string().trimmed();
- QString editionName = atom->string().mid(atom->string().indexOf(
- "classesbyedition") + 16).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;
- foreach (const QString &moduleName, editionModuleMap[editionName]) {
- if (moduleClassMap.contains(moduleName))
- editionClasses.unite(moduleClassMap[moduleName]);
+ 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.
- QMultiMap <QString, Node *> groups = tree_->groups();
+ const NodeMultiMap& groups = qdb_->groups();
foreach (const QString &groupName, editionGroupMap[editionName]) {
QList<Node *> groupClasses;
if (groupName.startsWith(QLatin1Char('-'))) {
@@ -554,51 +518,51 @@ int HtmlGenerator::generateAtom(const Atom *atom,
}
}
else if (atom->string() == "classhierarchy") {
- generateClassHierarchy(relative, marker, nonCompatClasses);
+ generateClassHierarchy(relative, qdb_->getCppClasses());
}
else if (atom->string() == "compatclasses") {
- generateCompactList(relative, marker, compatClasses, false);
+ generateCompactList(relative, qdb_->getCompatibilityClasses(), false);
}
else if (atom->string() == "obsoleteclasses") {
- generateCompactList(relative, marker, obsoleteClasses, false);
+ generateCompactList(relative, qdb_->getObsoleteClasses(), false);
}
else if (atom->string() == "functionindex") {
- generateFunctionIndex(relative, marker);
+ generateFunctionIndex(relative);
}
else if (atom->string() == "legalese") {
generateLegaleseList(relative, marker);
}
else if (atom->string() == "mainclasses") {
- generateCompactList(relative, marker, mainClasses, true);
+ generateCompactList(relative, qdb_->getMainClasses(), true);
}
else if (atom->string() == "services") {
- generateCompactList(relative, marker, serviceClasses, false);
+ generateCompactList(relative, qdb_->getServiceClasses(), false);
}
else if (atom->string() == "overviews") {
- generateOverviewList(relative, marker);
+ generateOverviewList(relative);
}
else if (atom->string() == "namespaces") {
- generateAnnotatedList(relative, marker, namespaceIndex);
+ generateAnnotatedList(relative, marker, qdb_->getNamespaces());
}
else if (atom->string() == "related") {
const DocNode *dn = static_cast<const DocNode *>(relative);
- if (dn && !dn->groupMembers().isEmpty()) {
+ if (dn && !dn->members().isEmpty()) {
NodeMap groupMembersMap;
- foreach (const Node *node, dn->groupMembers()) {
+ foreach (const Node *node, dn->members()) {
if (node->type() == Node::Document)
- groupMembersMap[fullName(node, relative, marker)] = node;
+ groupMembersMap[node->fullName(relative)] = node;
}
generateAnnotatedList(dn, marker, groupMembersMap);
}
}
else if (atom->string() == "relatedinline") {
const DocNode *dn = static_cast<const DocNode *>(relative);
- if (dn && !dn->groupMembers().isEmpty()) {
+ if (dn && !dn->members().isEmpty()) {
// Reverse the list into the original scan order.
// Should be sorted. But on what? It may not be a
// regular class or page definition.
QList<const Node *> list;
- foreach (const Node *node, dn->groupMembers())
+ foreach (const Node *node, dn->members())
list.prepend(node);
foreach (const Node *node, list)
generateBody(node, marker);
@@ -607,24 +571,19 @@ int HtmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::SinceList:
{
- NewSinceMaps::const_iterator nsmap;
- nsmap = newSinceMaps.constFind(atom->string());
- NewClassMaps::const_iterator ncmap;
- ncmap = newClassMaps.constFind(atom->string());
- NewClassMaps::const_iterator nqcmap;
- nqcmap = newQmlClassMaps.constFind(atom->string());
-
- if ((nsmap != newSinceMaps.constEnd()) && !nsmap.value().isEmpty()) {
+ const NodeMultiMap& nsmap = qdb_->getSinceMap(atom->string());
+ const NodeMap& ncmap = qdb_->getClassMap(atom->string());
+ const NodeMap& nqcmap = qdb_->getQmlTypeMap(atom->string());
+
+ if (!nsmap.isEmpty()) {
QList<Section> sections;
QList<Section>::ConstIterator s;
for (int i=0; i<LastSinceType; ++i)
sections.append(Section(sinceTitle(i),QString(),QString(),QString()));
- NodeMultiMap::const_iterator n = nsmap.value().constBegin();
-
- while (n != nsmap.value().constEnd()) {
-
+ NodeMultiMap::const_iterator n = nsmap.constBegin();
+ while (n != nsmap.constEnd()) {
const Node* node = n.value();
switch (node->type()) {
case Node::Document:
@@ -691,9 +650,6 @@ int HtmlGenerator::generateAtom(const Atom *atom,
++n;
}
- /*
- First generate the table of contents.
- */
out() << "<ul>\n";
s = sections.constBegin();
while (s != sections.constEnd()) {
@@ -719,9 +675,9 @@ int HtmlGenerator::generateAtom(const Atom *atom,
<< "\"></a>\n";
out() << "<h3>" << protectEnc((*s).name) << "</h3>\n";
if (idx == Class)
- generateCompactList(0, marker, ncmap.value(), false, QString("Q"));
+ generateCompactList(0, ncmap, false, QString("Q"));
else if (idx == QmlClass)
- generateCompactList(0, marker, nqcmap.value(), false, QString("Q"));
+ generateCompactList(0, nqcmap, false, QString("Q"));
else if (idx == MemberFunction) {
ParentMaps parentmaps;
ParentMaps::iterator pmap;
@@ -742,7 +698,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
out() << "<a href=\""
<< linkForNode(pmap.key(), 0)
<< "\">";
- QStringList pieces = fullName(pmap.key(), 0, marker).split("::");
+ QStringList pieces = pmap.key()->fullName().split("::");
out() << protectEnc(pieces.last());
out() << "</a>" << ":</p>\n";
@@ -836,7 +792,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
case Atom::Link:
{
const Node *node = 0;
- QString myLink = getLink(atom, relative, marker, &node);
+ QString myLink = getLink(atom, relative, &node);
if (myLink.isEmpty()) {
myLink = getCollisionLink(atom);
if (myLink.isEmpty()) {
@@ -846,14 +802,14 @@ int HtmlGenerator::generateAtom(const Atom *atom,
else
node = 0;
}
- beginLink(myLink, node, relative, marker);
+ beginLink(myLink, node, relative);
skipAhead = 1;
}
break;
case Atom::LinkNode:
{
const Node *node = CodeMarker::nodeForString(atom->string());
- beginLink(linkForNode(node, relative), node, relative, marker);
+ beginLink(linkForNode(node, relative), node, relative);
skipAhead = 1;
}
break;
@@ -869,10 +825,10 @@ int HtmlGenerator::generateAtom(const Atom *atom,
out() << "<dl>\n";
}
else if (atom->string() == ATOM_LIST_VALUE) {
- threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom);
- if (threeColumnEnumValueTable) {
+ threeColumnEnumValueTable_ = isThreeColumnEnumValueTable(atom);
+ if (threeColumnEnumValueTable_) {
out() << "<table class=\"valuelist\">";
- if (++numTableRows % 2 == 1)
+ if (++numTableRows_ % 2 == 1)
out() << "<tr valign=\"top\" class=\"odd\">";
else
out() << "<tr valign=\"top\" class=\"even\">";
@@ -943,7 +899,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
out() << "<dd>";
}
else if (atom->string() == ATOM_LIST_VALUE) {
- if (threeColumnEnumValueTable) {
+ if (threeColumnEnumValueTable_) {
out() << "</td><td class=\"topAlign\">";
if (matchAhead(atom, Atom::ListItemRight))
out() << "&nbsp;";
@@ -1012,19 +968,19 @@ int HtmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::SectionHeadingLeft:
out() << "<h" + QString::number(atom->string().toInt() + hOffset(relative)) + QLatin1Char('>');
- inSectionHeading = true;
+ inSectionHeading_ = true;
break;
case Atom::SectionHeadingRight:
out() << "</h" + QString::number(atom->string().toInt() + hOffset(relative)) + ">\n";
- inSectionHeading = false;
+ inSectionHeading_ = false;
break;
case Atom::SidebarLeft:
break;
case Atom::SidebarRight:
break;
case Atom::String:
- if (inLink && !inContents && !inSectionHeading) {
- generateLink(atom, relative, marker);
+ if (inLink_ && !inContents_ && !inSectionHeading_) {
+ generateLink(atom, marker);
}
else {
out() << protectEnc(atom->string());
@@ -1060,7 +1016,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
if (!width.isEmpty())
out() << " width=\"" << width << "\"";
out() << ">\n ";
- numTableRows = 0;
+ numTableRows_ = 0;
}
break;
case Atom::TableRight:
@@ -1068,7 +1024,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::TableHeaderLeft:
out() << "<thead><tr class=\"qt-style\">";
- inTableHeader = true;
+ inTableHeader_ = true;
break;
case Atom::TableHeaderRight:
out() << "</tr>";
@@ -1078,13 +1034,13 @@ int HtmlGenerator::generateAtom(const Atom *atom,
}
else {
out() << "</thead>\n";
- inTableHeader = false;
+ inTableHeader_ = false;
}
break;
case Atom::TableRowLeft:
if (!atom->string().isEmpty())
out() << "<tr " << atom->string() << '>';
- else if (++numTableRows % 2 == 1)
+ else if (++numTableRows_ % 2 == 1)
out() << "<tr valign=\"top\" class=\"odd\">";
else
out() << "<tr valign=\"top\" class=\"even\">";
@@ -1094,7 +1050,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::TableItemLeft:
{
- if (inTableHeader)
+ if (inTableHeader_)
out() << "<th ";
else
out() << "<td ";
@@ -1116,7 +1072,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
}
}
}
- if (inTableHeader)
+ if (inTableHeader_)
out() << '>';
else {
out() << '>';
@@ -1127,7 +1083,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
}
break;
case Atom::TableItemRight:
- if (inTableHeader)
+ if (inTableHeader_)
out() << "</th>";
else {
out() << "</td>";
@@ -1172,21 +1128,20 @@ void HtmlGenerator::generateClassLikeNode(InnerNode* inner, CodeMarker* marker)
QString rawTitle;
QString fullTitle;
if (inner->type() == Node::Namespace) {
- rawTitle = marker->plainName(inner);
- fullTitle = marker->plainFullName(inner);
+ rawTitle = inner->plainName();
+ fullTitle = inner->plainFullName();
title = rawTitle + " Namespace";
}
else if (inner->type() == Node::Class) {
classe = static_cast<ClassNode*>(inner);
- rawTitle = marker->plainName(inner);
- fullTitle = marker->plainFullName(inner);
+ rawTitle = inner->plainName();
+ fullTitle = inner->plainFullName();
title = rawTitle + " Class";
}
Text subtitleText;
if (rawTitle != fullTitle)
- subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")"
- << Atom(Atom::LineBreak);
+ subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")" << Atom(Atom::LineBreak);
generateHeader(title, inner, marker);
sections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay);
@@ -1259,7 +1214,7 @@ void HtmlGenerator::generateClassLikeNode(InnerNode* inner, CodeMarker* marker)
if (!s->inherited.isEmpty()) {
out() << "<ul>\n";
- generateSectionInheritedList(*s, inner, marker);
+ generateSectionInheritedList(*s, inner);
out() << "</ul>\n";
}
}
@@ -1273,7 +1228,7 @@ void HtmlGenerator::generateClassLikeNode(InnerNode* inner, CodeMarker* marker)
s = sections.constBegin();
while (s != sections.constEnd()) {
if (s->members.isEmpty() && !s->inherited.isEmpty())
- generateSectionInheritedList(*s, inner, marker);
+ generateSectionInheritedList(*s, inner);
++s;
}
out() << "</ul>\n";
@@ -1308,7 +1263,7 @@ void HtmlGenerator::generateClassLikeNode(InnerNode* inner, CodeMarker* marker)
generateDetailedMember(*m, inner, marker);
else {
out() << "<h3> class ";
- generateFullName(*m, inner, marker);
+ generateFullName(*m, inner);
out() << "</h3>";
generateBrief(*m, marker, inner);
}
@@ -1532,16 +1487,21 @@ void HtmlGenerator::generateDocNode(DocNode* dn, CodeMarker* marker)
generateStatus(dn, marker);
generateSince(dn, marker);
- if (moduleNamespaceMap.contains(dn->name())) {
+ NodeMap nm;
+ dn->getMemberNamespaces(nm);
+ if (!nm.isEmpty()) {
out() << "<a name=\"" << registerRef("namespaces") << "\"></a>" << divNavTop << '\n';
out() << "<h2>Namespaces</h2>\n";
- generateAnnotatedList(dn, marker, moduleNamespaceMap[dn->name()]);
+ generateAnnotatedList(dn, marker, nm);
}
- if (moduleClassMap.contains(dn->name())) {
+ nm.clear();
+ dn->getMemberClasses(nm);
+ if (!nm.isEmpty()) {
out() << "<a name=\"" << registerRef("classes") << "\"></a>" << divNavTop << '\n';
out() << "<h2>Classes</h2>\n";
- generateAnnotatedList(dn, marker, moduleClassMap[dn->name()]);
+ generateAnnotatedList(dn, marker, nm);
}
+ nm.clear();
}
else if (dn->subType() == Node::HeaderFile) {
// Generate brief text and status for modules.
@@ -1651,17 +1611,17 @@ void HtmlGenerator::generateDocNode(DocNode* dn, CodeMarker* marker)
generateAlsoList(dn, marker);
generateExtractionMark(dn, EndMark);
- if ((dn->subType() == Node::Group) && !dn->groupMembers().isEmpty()) {
+ if ((dn->subType() == Node::Group) && !dn->members().isEmpty()) {
NodeMap groupMembersMap;
- foreach (const Node *node, dn->groupMembers()) {
+ 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->qmlModuleMembers().isEmpty()) {
+ else if ((dn->subType() == Node::QmlModule) && !dn->members().isEmpty()) {
NodeMap qmlModuleMembersMap;
- foreach (const Node* node, dn->qmlModuleMembers()) {
+ foreach (const Node* node, dn->members()) {
if (node->type() == Node::Document && node->subType() == Node::QmlClass)
qmlModuleMembersMap[node->name()] = node;
}
@@ -1830,7 +1790,7 @@ void HtmlGenerator::generateHeader(const QString& title,
if (node && !node->doc().location().isEmpty())
out() << "<!-- " << node->doc().location().fileName() << " -->\n";
- QString shortVersion = tree_->version();
+ QString shortVersion = qdb_->version();
if (shortVersion.count(QChar('.')) == 2)
shortVersion.truncate(shortVersion.lastIndexOf(QChar('.')));
if (!project.isEmpty())
@@ -1854,9 +1814,9 @@ void HtmlGenerator::generateHeader(const QString& title,
generateMacRef(node, marker);
#endif
- out() << QString(postHeader).replace("\\" + COMMAND_VERSION, tree_->version());
+ out() << QString(postHeader).replace("\\" + COMMAND_VERSION, qdb_->version());
generateBreadCrumbs(title,node,marker);
- out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, tree_->version());
+ out() << QString(postPostHeader).replace("\\" + COMMAND_VERSION, qdb_->version());
navigationLinks.clear();
@@ -1867,7 +1827,9 @@ void HtmlGenerator::generateHeader(const QString& title,
if (node->links().contains(Node::PreviousLink)) {
linkPair = node->links()[Node::PreviousLink];
- linkNode = findNodeForTarget(linkPair.first, node, marker);
+ linkNode = qdb_->findNodeForTarget(linkPair.first, node);
+ if (!linkNode)
+ node->doc().location().warning(tr("Cannot link to '%1'").arg(linkPair.first));
if (!linkNode || linkNode == node)
anchorPair = linkPair;
else
@@ -1885,7 +1847,9 @@ void HtmlGenerator::generateHeader(const QString& title,
}
if (node->links().contains(Node::NextLink)) {
linkPair = node->links()[Node::NextLink];
- linkNode = findNodeForTarget(linkPair.first, node, marker);
+ linkNode = qdb_->findNodeForTarget(linkPair.first, node);
+ if (!linkNode)
+ node->doc().location().warning(tr("Cannot link to '%1'").arg(linkPair.first));
if (!linkNode || linkNode == node)
anchorPair = linkPair;
else
@@ -1903,7 +1867,9 @@ void HtmlGenerator::generateHeader(const QString& title,
}
if (node->links().contains(Node::StartLink)) {
linkPair = node->links()[Node::StartLink];
- linkNode = findNodeForTarget(linkPair.first, node, marker);
+ linkNode = qdb_->findNodeForTarget(linkPair.first, node);
+ if (!linkNode)
+ node->doc().location().warning(tr("Cannot link to '%1'").arg(linkPair.first));
if (!linkNode || linkNode == node)
anchorPair = linkPair;
else
@@ -1941,8 +1907,8 @@ void HtmlGenerator::generateFooter(const Node *node)
if (node && !node->links().empty())
out() << "<p class=\"naviNextPrevious footerNavi\">\n" << navigationLinks << "</p>\n";
- out() << QString(footer).replace("\\" + COMMAND_VERSION, tree_->version())
- << QString(address).replace("\\" + COMMAND_VERSION, tree_->version());
+ out() << QString(footer).replace("\\" + COMMAND_VERSION, qdb_->version())
+ << QString(address).replace("\\" + COMMAND_VERSION, qdb_->version());
out() << "</body>\n";
out() << "</html>\n";
@@ -1974,7 +1940,7 @@ void HtmlGenerator::generateIncludes(const InnerNode *inner, CodeMarker *marker)
out() << "<pre class=\"cpp\">"
<< trimmedTrailing(highlightedCode(indent(codeIndent,
marker->markedUpIncludes(inner->includes())),
- marker,inner))
+ inner))
<< "</pre>";
}
}
@@ -1997,8 +1963,8 @@ void HtmlGenerator::generateTableOfContents(const Node *node,
int detailsBase = 0;
// disable nested links in table of contents
- inContents = true;
- inLink = true;
+ inContents_ = true;
+ inLink_ = true;
out() << "<div class=\"toc\">\n";
out() << "<h3><a name=\"toc\">Contents</a></h3>\n";
@@ -2006,14 +1972,14 @@ void HtmlGenerator::generateTableOfContents(const Node *node,
out() << "<ul>\n";
if (node->subType() == Node::Module) {
- if (moduleNamespaceMap.contains(node->name())) {
+ if (node->hasNamespaces()) {
out() << "<li class=\"level"
<< sectionNumber.size()
<< "\"><a href=\"#"
<< registerRef("namespaces")
<< "\">Namespaces</a></li>\n";
}
- if (moduleClassMap.contains(node->name())) {
+ if (node->hasClasses()) {
out() << "<li class=\"level"
<< sectionNumber.size()
<< "\"><a href=\"#"
@@ -2094,8 +2060,8 @@ void HtmlGenerator::generateTableOfContents(const Node *node,
}
out() << "</ul>\n";
out() << "</div>\n";
- inContents = false;
- inLink = false;
+ inContents_ = false;
+ inLink_ = false;
}
QString HtmlGenerator::generateListOfAllMemberFile(const InnerNode *inner,
@@ -2116,7 +2082,7 @@ QString HtmlGenerator::generateListOfAllMemberFile(const InnerNode *inner,
generateHeader(title, inner, marker);
generateTitle(title, Text(), SmallSubTitle, inner, marker);
out() << "<p>This is the complete list of members for ";
- generateFullName(inner, 0, marker);
+ generateFullName(inner, 0);
out() << ", including inherited members.</p>\n";
Section section = sections.first();
@@ -2148,7 +2114,7 @@ QString HtmlGenerator::generateAllQmlMembersFile(const QmlClassNode* qml_cn,
generateHeader(title, qml_cn, marker);
generateTitle(title, Text(), SmallSubTitle, qml_cn, marker);
out() << "<p>This is the complete list of members for ";
- generateFullName(qml_cn, 0, marker);
+ generateFullName(qml_cn, 0);
out() << ", including inherited members.</p>\n";
Section section = sections.first();
@@ -2231,9 +2197,7 @@ QString HtmlGenerator::generateLowStatusMemberFile(const InnerNode *inner,
return fileName;
}
-void HtmlGenerator::generateClassHierarchy(const Node *relative,
- CodeMarker *marker,
- const QMap<QString,const Node*> &classMap)
+void HtmlGenerator::generateClassHierarchy(const Node *relative, const NodeMap& classMap)
{
if (classMap.isEmpty())
return;
@@ -2260,7 +2224,7 @@ void HtmlGenerator::generateClassHierarchy(const Node *relative,
const ClassNode *child =
static_cast<const ClassNode *>(*stack.top().constBegin());
out() << "<li>";
- generateFullName(child, relative, marker);
+ generateFullName(child, relative);
out() << "</li>\n";
stack.top().erase(stack.top().begin());
@@ -2296,7 +2260,7 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative,
else
out() << "<tr class=\"even topAlign\">";
out() << "<td class=\"tblName\"><p>";
- generateFullName(node, relative, marker);
+ generateFullName(node, relative);
out() << "</p></td>";
if (!(node->type() == Node::Document)) {
@@ -2327,7 +2291,6 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative,
the name of the first and last classes in \a classMap.
*/
void HtmlGenerator::generateCompactList(const Node *relative,
- CodeMarker *marker,
const NodeMap &classMap,
bool includeAlphabet,
QString commonPrefix)
@@ -2443,7 +2406,7 @@ void HtmlGenerator::generateCompactList(const Node *relative,
Output a <div> element to contain all the <dl> elements.
*/
out() << "<div class=\"flowListDiv\">\n";
- numTableRows = 0;
+ numTableRows_ = 0;
int curParNr = 0;
int curParOffset = 0;
@@ -2461,7 +2424,7 @@ void HtmlGenerator::generateCompactList(const Node *relative,
if (curParOffset == 0) {
if (i > 0)
out() << "</dl>\n";
- if (++numTableRows % 2 == 1)
+ if (++numTableRows_ % 2 == 1)
out() << "<dl class=\"flowList odd\">";
else
out() << "<dl class=\"flowList even\">";
@@ -2497,12 +2460,12 @@ void HtmlGenerator::generateCompactList(const Node *relative,
if (it.value()->subType() == Node::QmlClass)
pieces << it.value()->name();
else
- pieces = fullName(it.value(), relative, marker).split("::");
+ pieces = it.value()->fullName(relative).split("::");
out() << protectEnc(pieces.last());
out() << "</a>";
if (pieces.size() > 1) {
out() << " (";
- generateFullName(it.value()->parent(), relative, marker);
+ generateFullName(it.value()->parent(), relative);
out() << ')';
}
}
@@ -2515,8 +2478,7 @@ void HtmlGenerator::generateCompactList(const Node *relative,
out() << "</div>\n";
}
-void HtmlGenerator::generateFunctionIndex(const Node *relative,
- CodeMarker *marker)
+void HtmlGenerator::generateFunctionIndex(const Node *relative)
{
out() << "<p class=\"centerAlign functionIndex\"><b>";
for (int i = 0; i < 26; i++) {
@@ -2529,6 +2491,7 @@ void HtmlGenerator::generateFunctionIndex(const Node *relative,
char currentLetter;
out() << "<ul>\n";
+ NodeMapMap funcIndex = qdb_->getFunctionIndex();
QMap<QString, NodeMap >::ConstIterator f = funcIndex.constBegin();
while (f != funcIndex.constEnd()) {
out() << "<li>";
@@ -2543,7 +2506,7 @@ void HtmlGenerator::generateFunctionIndex(const Node *relative,
NodeMap::ConstIterator s = (*f).constBegin();
while (s != (*f).constEnd()) {
out() << ' ';
- generateFullName((*s)->parent(), relative, marker, *s);
+ generateFullName((*s)->parent(), relative, *s);
++s;
}
out() << "</li>";
@@ -2553,9 +2516,9 @@ void HtmlGenerator::generateFunctionIndex(const Node *relative,
out() << "</ul>\n";
}
-void HtmlGenerator::generateLegaleseList(const Node *relative,
- CodeMarker *marker)
+void HtmlGenerator::generateLegaleseList(const Node *relative, CodeMarker *marker)
{
+ TextToNodeMap& legaleseTexts = qdb_->getLegaleseTexts();
QMap<Text, const Node *>::ConstIterator it = legaleseTexts.constBegin();
while (it != legaleseTexts.constEnd()) {
Text text = it.key();
@@ -2564,7 +2527,7 @@ void HtmlGenerator::generateLegaleseList(const Node *relative,
out() << "<ul>\n";
do {
out() << "<li>";
- generateFullName(it.value(), relative, marker);
+ generateFullName(it.value(), relative);
out() << "</li>\n";
++it;
} while (it != legaleseTexts.constEnd() && it.key() == text);
@@ -2600,17 +2563,17 @@ void HtmlGenerator::generateQmlItem(const Node *node,
marked.remove("<@type>");
marked.remove("</@type>");
}
- out() << highlightedCode(marked, marker, relative, false, node);
+ out() << highlightedCode(marked, relative, false, node);
}
-void HtmlGenerator::generateOverviewList(const Node *relative, CodeMarker * /* marker */)
+void HtmlGenerator::generateOverviewList(const Node *relative)
{
QMap<const DocNode *, QMap<QString, DocNode *> > docNodeMap;
QMap<QString, const DocNode *> groupTitlesMap;
QMap<QString, DocNode *> uncategorizedNodeMap;
QRegExp singleDigit("\\b([0-9])\\b");
- const NodeList children = tree_->root()->childNodes();
+ const NodeList children = qdb_->treeRoot()->childNodes();
foreach (Node *child, children) {
if (child->type() == Node::Document && child != relative) {
DocNode *docNode = static_cast<DocNode *>(child);
@@ -2645,7 +2608,7 @@ void HtmlGenerator::generateOverviewList(const Node *relative, CodeMarker * /* m
if (isGroupPage) {
// If we encounter a group definition page, we add all
// the pages in that group to the list for that group.
- foreach (Node *member, docNode->groupMembers()) {
+ foreach (Node *member, docNode->members()) {
if (member->type() != Node::Document)
continue;
DocNode *page = static_cast<DocNode *>(member);
@@ -2662,7 +2625,7 @@ void HtmlGenerator::generateOverviewList(const Node *relative, CodeMarker * /* m
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 = tree_->findGroupNode(QStringList(group));
+ const DocNode* gn = qdb_->findGroupNode(QStringList(group));
if (gn)
docNodeMap[gn].insert(sortKey, docNode);
}
@@ -2841,14 +2804,12 @@ void HtmlGenerator::generateSectionList(const Section& section,
if (style == CodeMarker::Summary && !section.inherited.isEmpty()) {
out() << "<ul>\n";
- generateSectionInheritedList(section, relative, marker);
+ generateSectionInheritedList(section, relative);
out() << "</ul>\n";
}
}
-void HtmlGenerator::generateSectionInheritedList(const Section& section,
- const Node *relative,
- CodeMarker *marker)
+void HtmlGenerator::generateSectionInheritedList(const Section& section, const Node *relative)
{
QList<QPair<InnerNode *, int> >::ConstIterator p = section.inherited.constBegin();
while (p != section.inherited.constEnd()) {
@@ -2862,7 +2823,7 @@ void HtmlGenerator::generateSectionInheritedList(const Section& section,
}
out() << " inherited from <a href=\"" << fileName((*p).first)
<< '#' << HtmlGenerator::cleanRef(section.name.toLower()) << "\">"
- << protectEnc(marker->plainFullName((*p).first, relative))
+ << protectEnc((*p).first->plainFullName(relative))
<< "</a></li>\n";
++p;
}
@@ -2910,11 +2871,10 @@ void HtmlGenerator::generateSynopsis(const Node *node,
marked.remove("</@type>");
}
- out() << highlightedCode(marked, marker, relative, alignNames);
+ out() << highlightedCode(marked, relative, alignNames);
}
QString HtmlGenerator::highlightedCode(const QString& markedCode,
- CodeMarker* marker,
const Node* relative,
bool alignNames,
const Node* self)
@@ -2966,9 +2926,7 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode,
i += 2;
if (parseArg(src, funcTag, &i, srcSize, &arg, &par1)) {
- const Node* n = marker->resolveTarget(par1.toString(),
- tree_,
- relative);
+ const Node* n = qdb_->resolveTarget(par1.toString(), relative);
QString link = linkForNode(n, relative);
addLink(link, arg, &html);
par1 = QStringRef();
@@ -2993,7 +2951,7 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode,
bool handled = false;
if (parseArg(src, typeTag, &i, srcSize, &arg, &par1)) {
par1 = QStringRef();
- const Node* n = marker->resolveTarget(arg.toString(), tree_, relative, self);
+ const Node* n = qdb_->resolveTarget(arg.toString(), relative, self);
html += QLatin1String("<span class=\"type\">");
if (n && n->subType() == Node::QmlBasicType) {
if (relative && relative->subType() == Node::QmlClass)
@@ -3008,13 +2966,13 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode,
}
else if (parseArg(src, headerTag, &i, srcSize, &arg, &par1)) {
par1 = QStringRef();
- const Node* n = marker->resolveTarget(arg.toString(), tree_, relative);
+ const Node* n = qdb_->resolveTarget(arg.toString(), relative);
addLink(linkForNode(n,relative), arg, &html);
handled = true;
}
else if (parseArg(src, funcTag, &i, srcSize, &arg, &par1)) {
par1 = QStringRef();
- const Node* n = marker->resolveTarget(arg.toString(), tree_, relative);
+ const Node* n = qdb_->resolveTarget(arg.toString(), relative);
addLink(linkForNode(n,relative), arg, &html);
handled = true;
}
@@ -3099,9 +3057,7 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode,
return html;
}
-void HtmlGenerator::generateLink(const Atom* atom,
- const Node* /* relative */,
- CodeMarker* marker)
+void HtmlGenerator::generateLink(const Atom* atom, CodeMarker* marker)
{
static QRegExp camelCase("[A-Z][A-Z][a-z]|[a-z][A-Z0-9]|_");
@@ -3109,13 +3065,13 @@ void HtmlGenerator::generateLink(const Atom* atom,
// hack for C++: move () outside of link
int k = funcLeftParen.pos(1);
out() << protectEnc(atom->string().left(k));
- if (link.isEmpty()) {
+ if (link_.isEmpty()) {
if (showBrokenLinks)
out() << "</i>";
} else {
out() << "</a>";
}
- inLink = false;
+ inLink_ = false;
out() << protectEnc(atom->string().mid(k));
} else {
out() << protectEnc(atom->string());
@@ -3405,10 +3361,7 @@ QString HtmlGenerator::refForAtom(Atom *atom, const Node * /* node */)
}
}
-void HtmlGenerator::generateFullName(const Node *apparentNode,
- const Node *relative,
- CodeMarker *marker,
- const Node *actualNode)
+void HtmlGenerator::generateFullName(const Node *apparentNode, const Node *relative, const Node *actualNode)
{
if (actualNode == 0)
actualNode = apparentNode;
@@ -3426,7 +3379,7 @@ void HtmlGenerator::generateFullName(const Node *apparentNode,
}
}
out() << "\">";
- out() << protectEnc(fullName(apparentNode, relative, marker));
+ out() << protectEnc(apparentNode->fullName(relative));
out() << "</a>";
}
@@ -3505,130 +3458,6 @@ void HtmlGenerator::generateDetailedMember(const Node *node,
generateExtractionMark(node, EndMark);
}
-void HtmlGenerator::findAllClasses(const InnerNode *node)
-{
- NodeList::const_iterator c = node->childNodes().constBegin();
- while (c != node->childNodes().constEnd()) {
- if ((*c)->access() != Node::Private && (*c)->url().isEmpty()) {
- if ((*c)->type() == Node::Class && !(*c)->doc().isEmpty()) {
- QString className = (*c)->name();
- if ((*c)->parent() &&
- (*c)->parent()->type() == Node::Namespace &&
- !(*c)->parent()->name().isEmpty())
- className = (*c)->parent()->name()+"::"+className;
-
- if (!(static_cast<const ClassNode *>(*c))->hideFromMainList()) {
- if ((*c)->status() == Node::Compat) {
- compatClasses.insert(className, *c);
- }
- else if ((*c)->status() == Node::Obsolete) {
- obsoleteClasses.insert(className, *c);
- }
- else {
- nonCompatClasses.insert(className, *c);
- if ((*c)->status() == Node::Main)
- mainClasses.insert(className, *c);
- }
- }
-
- QString moduleName = (*c)->moduleName();
- if (moduleName == "Qt3SupportLight") {
- moduleClassMap[moduleName].insert((*c)->name(), *c);
- moduleName = "Qt3Support";
- }
- if (!moduleName.isEmpty())
- moduleClassMap[moduleName].insert((*c)->name(), *c);
-
- QString serviceName =
- (static_cast<const ClassNode *>(*c))->serviceName();
- if (!serviceName.isEmpty())
- serviceClasses.insert(serviceName, *c);
- }
- else if ((*c)->type() == Node::Document &&
- (*c)->subType() == Node::QmlClass &&
- !(*c)->doc().isEmpty()) {
- QString qmlClassName = (*c)->name();
- /*
- Remove the "QML:" prefix, if present.
- It shouldn't be present anymore.
- */
- if (qmlClassName.startsWith(QLatin1String("QML:")))
- qmlClasses.insert(qmlClassName.mid(4),*c);
- else
- qmlClasses.insert(qmlClassName,*c);
- }
- else if ((*c)->isInnerNode()) {
- findAllClasses(static_cast<InnerNode *>(*c));
- }
- }
- ++c;
- }
-}
-
-void HtmlGenerator::findAllFunctions(const InnerNode *node)
-{
- NodeList::ConstIterator c = node->childNodes().constBegin();
- while (c != node->childNodes().constEnd()) {
- if ((*c)->access() != Node::Private) {
- if ((*c)->isInnerNode() && (*c)->url().isEmpty()) {
- findAllFunctions(static_cast<const InnerNode *>(*c));
- }
- else if ((*c)->type() == Node::Function) {
- const FunctionNode *func = static_cast<const FunctionNode *>(*c);
- if ((func->status() > Node::Obsolete) &&
- !func->isInternal() &&
- (func->metaness() != FunctionNode::Ctor) &&
- (func->metaness() != FunctionNode::Dtor)) {
- funcIndex[(*c)->name()].insert((*c)->parent()->fullDocumentName(), *c);
- }
- }
- }
- ++c;
- }
-}
-
-void HtmlGenerator::findAllLegaleseTexts(const InnerNode *node)
-{
- NodeList::ConstIterator c = node->childNodes().constBegin();
- while (c != node->childNodes().constEnd()) {
- if ((*c)->access() != Node::Private) {
- if (!(*c)->doc().legaleseText().isEmpty())
- legaleseTexts.insertMulti((*c)->doc().legaleseText(), *c);
- if ((*c)->isInnerNode())
- findAllLegaleseTexts(static_cast<const InnerNode *>(*c));
- }
- ++c;
- }
-}
-
-void HtmlGenerator::findAllNamespaces(const InnerNode *node)
-{
- NodeList::ConstIterator c = node->childNodes().constBegin();
- while (c != node->childNodes().constEnd()) {
- if ((*c)->access() != Node::Private) {
- if ((*c)->isInnerNode() && (*c)->url().isEmpty()) {
- findAllNamespaces(static_cast<const InnerNode *>(*c));
- if ((*c)->type() == Node::Namespace) {
- const NamespaceNode *nspace = static_cast<const NamespaceNode *>(*c);
- // Ensure that the namespace's name is not empty (the root
- // namespace has no name).
- if (!nspace->name().isEmpty()) {
- namespaceIndex.insert(nspace->name(), *c);
- QString moduleName = (*c)->moduleName();
- if (moduleName == "Qt3SupportLight") {
- moduleNamespaceMap[moduleName].insert((*c)->name(), *c);
- moduleName = "Qt3Support";
- }
- if (!moduleName.isEmpty())
- moduleNamespaceMap[moduleName].insert((*c)->name(), *c);
- }
- }
- }
- }
- ++c;
- }
-}
-
int HtmlGenerator::hOffset(const Node *node)
{
switch (node->type()) {
@@ -3656,33 +3485,6 @@ bool HtmlGenerator::isThreeColumnEnumValueTable(const Atom *atom)
return false;
}
-const Node *HtmlGenerator::findNodeForTarget(const QString &target,
- const Node *relative,
- CodeMarker *marker,
- const Atom *atom)
-{
- const Node *node = 0;
-
- if (target.isEmpty()) {
- node = relative;
- }
- else if (target.endsWith(".html")) {
- node = tree_->root()->findChildNodeByNameAndType(target, Node::Document);
- }
- else if (marker) {
- node = marker->resolveTarget(target, tree_, relative);
- if (!node) {
- node = tree_->findDocNodeByTitle(target, relative);
- }
- if (!node && atom) {
- node = tree_->findUnambiguousTarget(target, *const_cast<Atom**>(&atom), relative);
- }
- }
-
- if (!node)
- relative->doc().location().warning(tr("Cannot link to '%1'").arg(target));
- return node;
-}
const QPair<QString,QString> HtmlGenerator::anchorForNode(const Node *node)
{
@@ -3697,10 +3499,7 @@ const QPair<QString,QString> HtmlGenerator::anchorForNode(const Node *node)
return anchorPair;
}
-QString HtmlGenerator::getLink(const Atom *atom,
- const Node *relative,
- CodeMarker *marker,
- const Node** node)
+QString HtmlGenerator::getLink(const Atom *atom, const Node *relative, const Node** node)
{
QString link;
*node = 0;
@@ -3736,15 +3535,15 @@ QString HtmlGenerator::getLink(const Atom *atom,
node, which must be a direct child of the tree
root.
*/
- *node = tree_->root()->findChildNodeByNameAndType(first, Node::Document);
+ *node = qdb_->treeRoot()->findChildNodeByNameAndType(first, Node::Document);
}
else {
- *node = marker->resolveTarget(first, tree_, relative);
+ *node = qdb_->resolveTarget(first, relative);
if (!*node) {
- *node = tree_->findDocNodeByTitle(first, relative);
+ *node = qdb_->findDocNodeByTitle(first, relative);
}
if (!*node) {
- *node = tree_->findUnambiguousTarget(first, targetAtom, relative);
+ *node = qdb_->findUnambiguousTarget(first, targetAtom, relative);
}
}
if (*node) {
@@ -3770,7 +3569,7 @@ QString HtmlGenerator::getLink(const Atom *atom,
if (dn->title().startsWith("Porting"))
porting = true;
}
- QString name = marker->plainFullName(relative);
+ QString name = relative->plainFullName();
if (!porting && !name.startsWith("Q3")) {
if (obsoleteLinks) {
relative->doc().location().warning(tr("Link to obsolete item '%1' in %2")
@@ -3798,7 +3597,7 @@ QString HtmlGenerator::getLink(const Atom *atom,
target.
*/
while (!path.isEmpty()) {
- targetAtom = tree_->findTarget(path.first(), *node);
+ targetAtom = qdb_->findTarget(path.first(), *node);
if (targetAtom == 0)
break;
path.removeFirst();
@@ -3841,7 +3640,7 @@ void HtmlGenerator::generateIndex(const QString &fileBase,
const QString &url,
const QString &title)
{
- tree_->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index", url, title, this);
+ qdb_->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index", url, title, this);
}
void HtmlGenerator::generateStatus(const Node *node, CodeMarker *marker)
@@ -3865,13 +3664,12 @@ void HtmlGenerator::generateStatus(const Node *node, CodeMarker *marker)
<< "We strongly advise against "
<< "using it in new code. See ";
- const DocNode *docNode = tree_->findDocNodeByTitle("Porting To Qt 4");
+ const DocNode *docNode = qdb_->findDocNodeByTitle("Porting To Qt 4");
Atom *targetAtom = 0;
if (docNode && node->type() == Node::Class) {
QString oldName(node->name());
oldName.remove(QLatin1Char('3'));
- targetAtom = tree_->findTarget(oldName,
- docNode);
+ targetAtom = qdb_->findTarget(oldName, docNode);
}
if (targetAtom) {
@@ -3909,42 +3707,36 @@ void HtmlGenerator::generateMacRef(const Node *node, CodeMarker *marker)
}
#endif
-void HtmlGenerator::beginLink(const QString &link,
- const Node *node,
- const Node *relative,
- CodeMarker *marker)
+void HtmlGenerator::beginLink(const QString &link, const Node *node, const Node *relative)
{
- Q_UNUSED(marker)
- Q_UNUSED(relative)
-
- this->link = link;
- if (link.isEmpty()) {
+ link_ = link;
+ if (link_.isEmpty()) {
if (showBrokenLinks)
out() << "<i>";
}
else if (node == 0 ||
(relative != 0 && node->status() == relative->status())) {
- out() << "<a href=\"" << link << "\">";
+ out() << "<a href=\"" << link_ << "\">";
}
else {
switch (node->status()) {
case Node::Obsolete:
- out() << "<a href=\"" << link << "\" class=\"obsolete\">";
+ out() << "<a href=\"" << link_ << "\" class=\"obsolete\">";
break;
case Node::Compat:
- out() << "<a href=\"" << link << "\" class=\"compat\">";
+ out() << "<a href=\"" << link_ << "\" class=\"compat\">";
break;
default:
- out() << "<a href=\"" << link << "\">";
+ out() << "<a href=\"" << link_ << "\">";
}
}
- inLink = true;
+ inLink_ = true;
}
void HtmlGenerator::endLink()
{
- if (inLink) {
- if (link.isEmpty()) {
+ if (inLink_) {
+ if (link_.isEmpty()) {
if (showBrokenLinks)
out() << "</i>";
}
@@ -3955,7 +3747,7 @@ void HtmlGenerator::endLink()
out() << "</a>";
}
}
- inLink = false;
+ inLink_ = false;
inObsoleteLink = false;
}
@@ -4007,7 +3799,7 @@ void HtmlGenerator::generateDetailedQmlMember(Node *node,
out() << "<td class=\"tblQmlPropNode\"><p>";
out() << "<a name=\"" + refForNode(qpn) + "\"></a>";
- if (!qpn->isWritable(tree_))
+ if (!qpn->isWritable(qdb_))
out() << "<span class=\"qmlreadonly\">read-only</span>";
if (qpn->isDefault())
out() << "<span class=\"qmldefault\">default</span>";
@@ -4043,7 +3835,7 @@ void HtmlGenerator::generateDetailedQmlMember(Node *node,
out() << "<a name=\"" + refForNode(qpn) + "\"></a>";
if (!qpn->isReadOnlySet()) {
if (qpn->declarativeCppNode())
- qpn->setReadOnly(!qpn->isWritable(tree_));
+ qpn->setReadOnly(!qpn->isWritable(qdb_));
}
if (qpn->isReadOnly())
out() << "<span class=\"qmlreadonly\">read-only</span>";
@@ -4070,7 +3862,7 @@ void HtmlGenerator::generateDetailedQmlMember(Node *node,
out() << "<td class=\"tblQmlPropNode\"><p>";
out() << "<a name=\"" + refForNode(q) + "\"></a>";
if (!qpn->isReadOnlySet())
- qpn->setReadOnly(!qpn->isWritable(tree_));
+ qpn->setReadOnly(!qpn->isWritable(qdb_));
if (qpn->isReadOnly())
out() << "<span class=\"qmlreadonly\">read-only</span>";
if (qpn->isDefault())
@@ -4638,7 +4430,7 @@ void HtmlGenerator::writeDitaRefs(const DitaRefList& ditarefs)
xmlWriter().writeStartElement("topicref");
xmlWriter().writeAttribute("navtitle",t->navtitle());
if (t->href().isEmpty()) {
- const DocNode* fn = tree_->findDocNodeByTitle(t->navtitle());
+ const DocNode* fn = qdb_->findDocNodeByTitle(t->navtitle());
if (fn)
xmlWriter().writeAttribute("href",fileName(fn));
}