summaryrefslogtreecommitdiffstats
path: root/tools/qdoc3/htmlgenerator.cpp
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-04-17 18:30:02 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-04-17 18:30:02 (GMT)
commit66620e60c9526baf0d3c7a7198e3ab15d9abc0f8 (patch)
tree10a0fd8097aa2322fd91fe477b5b44e62d850396 /tools/qdoc3/htmlgenerator.cpp
parentfd36b47e8758562fc9ff350f292fc9ae9ed91d4e (diff)
parent14845c8f3bba8437a89fa0843a884a5bdd2ad07f (diff)
downloadQt-66620e60c9526baf0d3c7a7198e3ab15d9abc0f8.zip
Qt-66620e60c9526baf0d3c7a7198e3ab15d9abc0f8.tar.gz
Qt-66620e60c9526baf0d3c7a7198e3ab15d9abc0f8.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1: (71 commits) Autotest: increase wait time to 3s on Windows to bypass 2s-granularity limitation Autotest: update to the new values for the locale do not expand variables in read()'s file name remove ability to use break() a block outside any loop don't add -unix to the qmake command line Increase the timeout for the QNAM getter test to 30 seconds Remove unstable hosts from the list qdoc: Output TOC for more class ref pages. Other fixes to the remote network stresstester Fix SSL connection problem. Make sure we don't try URLs that aren't HTTP or HTTPS Fix menu bar visibility. Add SSL remote host tests Split the remote and the local tests in two, in preparation for SSL tests Add tests for remote hosts Change the way we calculate the average transfer rates. Finish renaming Move these tests to tests/manual. Add a QNetworkAccessManager stresstest Add a non-blocking native function too ...
Diffstat (limited to 'tools/qdoc3/htmlgenerator.cpp')
-rw-r--r--tools/qdoc3/htmlgenerator.cpp148
1 files changed, 86 insertions, 62 deletions
diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp
index 4985f64..a5dc7b7 100644
--- a/tools/qdoc3/htmlgenerator.cpp
+++ b/tools/qdoc3/htmlgenerator.cpp
@@ -902,17 +902,14 @@ int HtmlGenerator::generateAtom(const Atom *atom,
else if (atom->string() == ATOM_LIST_VALUE) {
threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom);
if (threeColumnEnumValueTable) {
- out() << "<p><table class=\"valuelist\" border=\"1\" cellpadding=\"2\" "
- << "cellspacing=\"1\" width=\"100%\">\n"
- << "<tr><th width=\"25%\">Constant</th>"
- << "<th width=\"15%\">Value</th>"
- << "<th width=\"60%\">Description</th></tr>\n";
+ out() << "<p><table class=\"valuelist\">"
+ << "<tr><th>Constant</th>"
+ << "<th>Value</th>"
+ << "<th>Description</th></tr>\n";
}
else {
- out() << "<p><table class=\"valuelist\" border=\"1\" cellpadding=\"2\" "
- << "cellspacing=\"1\" width=\"40%\">\n"
- << "<tr><th width=\"60%\">Constant</th><th "
- << "width=\"40%\">Value</th></tr>\n";
+ out() << "<p><table class=\"valuelist\">"
+ << "<tr><th>Constant</th><th>Value</th></tr>\n";
}
}
else {
@@ -1087,16 +1084,13 @@ int HtmlGenerator::generateAtom(const Atom *atom,
if (!atom->string().isEmpty()) {
if (atom->string().contains("%"))
out() << "<p><table class=\"generic\" width=\"" << atom->string() << "\" "
- << "align=\"center\" cellpadding=\"2\" "
- << "cellspacing=\"1\" border=\"0\">\n";
+ << "align=\"center\">\n";
else {
- out() << "<p><table class=\"generic\" align=\"center\" cellpadding=\"2\" "
- << "cellspacing=\"1\" border=\"0\">\n";
+ out() << "<p><table class=\"generic\" align=\"center\">\n";
}
}
else {
- out() << "<p><table class=\"generic\" align=\"center\" cellpadding=\"2\" "
- << "cellspacing=\"1\" border=\"0\">\n";
+ out() << "<p><table class=\"generic\" align=\"center\">\n";
}
numTableRows = 0;
break;
@@ -1262,6 +1256,8 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner,
}
generateHeader(title, inner, marker, true);
+ sections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay);
+ generateTableOfContents(inner,marker,&sections);
generateTitle(title, subtitleText, SmallSubTitle, inner, marker);
#ifdef QDOC_QML
@@ -1305,7 +1301,9 @@ void HtmlGenerator::generateClassLikeNode(const InnerNode *inner,
bool needOtherSection = false;
- sections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay);
+ /*
+ sections is built above for the call to generateTableOfContents().
+ */
s = sections.begin();
while (s != sections.end()) {
if (s->members.isEmpty() && s->reimpMembers.isEmpty()) {
@@ -1475,7 +1473,7 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker)
Don't generate a TOC for the home page.
*/
if (fake->name() != QString("index.html"))
- generateTableOfContents(fake,marker);
+ generateTableOfContents(fake,marker,0);
generateTitle(fullTitle,
Text() << fake->subTitle(),
@@ -1489,10 +1487,12 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker)
generateStatus(fake, marker);
if (moduleNamespaceMap.contains(fake->name())) {
+ out() << "<a name=\"" << registerRef("namespaces") << "\"></a>\n";
out() << "<h2>Namespaces</h2>\n";
generateAnnotatedList(fake, marker, moduleNamespaceMap[fake->name()]);
}
if (moduleClassMap.contains(fake->name())) {
+ out() << "<a name=\"" << registerRef("classes") << "\"></a>\n";
out() << "<h2>Classes</h2>\n";
generateAnnotatedList(fake, marker, moduleClassMap[fake->name()]);
}
@@ -1888,7 +1888,8 @@ void HtmlGenerator::generateTitle(const QString& title,
const Node *relative,
CodeMarker *marker)
{
- out() << "<h1 class=\"title\">" << protectEnc(title);
+ if (!title.isEmpty())
+ out() << "<h1 class=\"title\">" << protectEnc(title);
if (!subTitle.isEmpty()) {
out() << "<br />";
if (subTitleSize == SmallSubTitle)
@@ -1898,7 +1899,8 @@ void HtmlGenerator::generateTitle(const QString& title,
generateText(subTitle, relative, marker);
out() << "</span>\n";
}
- out() << "</h1>\n";
+ if (!title.isEmpty())
+ out() << "</h1>\n";
}
void HtmlGenerator::generateFooter(const Node *node)
@@ -1948,6 +1950,7 @@ void HtmlGenerator::generateTableOfContents(const Node *node,
const Node *relative)
{
+ return;
if (!node->doc().hasTableOfContents())
return;
QList<Atom *> toc = node->doc().tableOfContents();
@@ -2026,37 +2029,70 @@ void HtmlGenerator::generateTableOfContents(const Node *node,
Revised for the new doc format.
Generates a table of contents begining at \a node.
*/
-void HtmlGenerator::generateTableOfContents(const Node *node, CodeMarker *marker)
+void HtmlGenerator::generateTableOfContents(const Node *node,
+ CodeMarker *marker,
+ QList<Section>* sections)
{
- if (!node->doc().hasTableOfContents())
- return;
- QList<Atom *> toc = node->doc().tableOfContents();
- if (toc.isEmpty())
+ QList<Atom*> toc;
+ if (node->doc().hasTableOfContents())
+ toc = node->doc().tableOfContents();
+ if (toc.isEmpty() && !sections && (node->subType() != Node::Module))
return;
- Doc::SectioningUnit sectioningUnit = Doc::Section4;
- QString nodeName = node->name();
-
QStringList sectionNumber;
- int columnSize = 0;
+ int detailsBase = 0;
// disable nested links in table of contents
inContents = true;
inLink = true;
out() << "<div class=\"toc\">\n";
-
- for (int i = 0; i < toc.size(); ++i) {
- Atom *atom = toc.at(i);
+ out() << "<h3>Table of Contents</h3>\n";
+ sectionNumber.append("1");
+ out() << "<ul class=\"level" << sectionNumber.size() << "\">\n";
- int nextLevel = atom->string().toInt();
- if (nextLevel > (int)sectioningUnit)
- continue;
+ if (node->subType() == Node::Module) {
+ if (moduleNamespaceMap.contains(node->name())) {
+ out() << "<li><a href=\"#" << registerRef("namespaces") << "\">Namespaces</a></li>\n";
+ }
+ if (moduleClassMap.contains(node->name())) {
+ out() << "<li><a href=\"#" << registerRef("classes") << "\">Classes</a></li>\n";
+ }
+ out() << "<li><a href=\"#" << registerRef("details") << "\">Detailed Description</a></li>\n";
+ for (int i = 0; i < toc.size(); ++i) {
+ if (toc.at(i)->string().toInt() == 1) {
+ detailsBase = 1;
+ break;
+ }
+ }
+ }
+ else if (sections && (node->type() == Node::Class)) {
+ QList<Section>::ConstIterator s = sections->begin();
+ while (s != sections->end()) {
+ if (!s->members.isEmpty() || !s->reimpMembers.isEmpty()) {
+ out() << "<li><a href=\"#"
+ << registerRef((*s).pluralMember)
+ << "\">" << (*s).name
+ << "</a></li>\n";
+ }
+ ++s;
+ }
+ out() << "<li><a href=\"#" << registerRef("details") << "\">Detailed Description</a></li>\n";
+ for (int i = 0; i < toc.size(); ++i) {
+ if (toc.at(i)->string().toInt() == 1) {
+ detailsBase = 1;
+ break;
+ }
+ }
+ }
+ for (int i = 0; i < toc.size(); ++i) {
+ Atom *atom = toc.at(i);
+ int nextLevel = atom->string().toInt() + detailsBase;
if (sectionNumber.size() < nextLevel) {
do {
- out() << "<ul>\n";
sectionNumber.append("1");
+ out() << "<ul class=\"level" << sectionNumber.size() << "\">\n";
} while (sectionNumber.size() < nextLevel);
}
else {
@@ -2075,8 +2111,6 @@ void HtmlGenerator::generateTableOfContents(const Node *node, CodeMarker *marker
<< "\">";
generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms);
out() << "</a></li>\n";
-
- ++columnSize;
}
while (!sectionNumber.isEmpty()) {
out() << "</ul>\n";
@@ -2270,8 +2304,7 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative,
CodeMarker *marker,
const NodeMap &nodeMap)
{
- out() << "<p><table width=\"100%\" class=\"annotated\" cellpadding=\"2\" "
- << "cellspacing=\"1\" border=\"0\">\n";
+ out() << "<p><table class=\"annotated\">\n";
int row = 0;
foreach (const QString &name, nodeMap.keys()) {
@@ -2456,7 +2489,7 @@ void HtmlGenerator::generateCompactList(const Node *relative,
}
firstOffset[NumColumns] = classMap.count();
- out() << "<p><table class=\"generic\" width=\"100%\">\n";
+ out() << "<p><table class=\"generic\">\n";
for (k = 0; k < numRows; k++) {
out() << "<tr>\n";
for (i = 0; i < NumColumns; i++) {
@@ -2795,15 +2828,12 @@ void HtmlGenerator::generateSection(const NodeList& nl,
name_alignment = false;
}
if (name_alignment) {
- out() << "<table class=\"alignedsummary\" border=\"0\" cellpadding=\"0\" "
- << "cellspacing=\"0\" width=\"100%\">\n";
+ out() << "<table class=\"alignedsummary\">\n";
}
else {
if (twoColumn)
- out() << "<p><table class=\"propsummary\" width=\"100%\" "
- << "border=\"0\" cellpadding=\"0\""
- << " cellspacing=\"0\">\n"
- << "<tr><td width=\"45%\" valign=\"top\">";
+ out() << "<p><table class=\"propsummary\">\n"
+ << "<tr><td valign=\"top\">";
out() << "<ul>\n";
}
@@ -2860,15 +2890,12 @@ void HtmlGenerator::generateSectionList(const Section& section,
name_alignment = false;
}
if (name_alignment) {
- out() << "<table class=\"alignedsummary\" border=\"0\" cellpadding=\"0\" "
- << "cellspacing=\"0\" width=\"100%\">\n";
+ out() << "<table class=\"alignedsummary\">\n";
}
else {
if (twoColumn)
- out() << "<p><table class=\"propsummary\" width=\"100%\" "
- << "border=\"0\" cellpadding=\"0\""
- << " cellspacing=\"0\">\n"
- << "<tr><td width=\"45%\" valign=\"top\">";
+ out() << "<p><table class=\"propsummary\">\n"
+ << "<tr><td valign=\"top\">";
out() << "<ul>\n";
}
@@ -3165,9 +3192,8 @@ void HtmlGenerator::generateSectionList(const Section& section,
twoColumn = (section.members.count() >= 5);
}
if (twoColumn)
- out() << "<p><table class=\"generic\" width=\"100%\" border=\"0\" "
- << "cellpadding=\"0\" cellspacing=\"0\">\n"
- << "<tr><td width=\"45%\" valign=\"top\">";
+ out() << "<p><table class=\"generic\">\n"
+ << "<tr><td valign=\"top\">";
out() << "<ul>\n";
int i = 0;
@@ -4350,7 +4376,7 @@ QT_END_NAMESPACE
#ifdef QDOC_QML
/*!
- Generates the summary for for the \a section. Only used for
+ Generates the summary for the \a section. Only used for
sections of QML element documentation.
Currently handles only the QML property group.
@@ -4367,9 +4393,8 @@ void HtmlGenerator::generateQmlSummary(const Section& section,
twoColumn = (count >= 5);
}
if (twoColumn)
- out() << "<p><table width=\"100%\" border=\"0\" cellpadding=\"0\""
- " cellspacing=\"0\">\n"
- << "<tr><td width=\"45%\" valign=\"top\">";
+ out() << "<p><table class=\"qmlsummary\">\n"
+ << "<tr><td valign=\"top\">";
out() << "<ul>\n";
int row = 0;
@@ -4404,7 +4429,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node,
const QmlPropGroupNode* qpgn = static_cast<const QmlPropGroupNode*>(node);
NodeList::ConstIterator p = qpgn->childNodes().begin();
out() << "<div class=\"qmlproto\">";
- out() << "<table width=\"100%\" class=\"qmlname\">";
+ out() << "<table class=\"qmlname\">";
while (p != qpgn->childNodes().end()) {
if ((*p)->type() == Node::QmlProperty) {
@@ -4421,8 +4446,7 @@ void HtmlGenerator::generateDetailedQmlMember(const Node *node,
<< "<div class=\"qmlitem\">"
<< "<div class=\"qmlproto\">"
<< "<table class=\"qmlname\">"
- << "<tr><td><font color=\"green\">"
- << "default</font></td></tr>";
+ << "<tr><td>default</td></tr>";
}
}
++p;