From 0770668614e8445cb452ccbc50543eede5fed2d1 Mon Sep 17 00:00:00 2001
From: Martin Smith
Date: Mon, 13 Sep 2010 14:43:42 +0200
Subject: qdoc: Implemented stacking of XML stream writers.
---
tools/qdoc3/ditaxmlgenerator.cpp | 1893 ++++++++++++++++++--------------------
tools/qdoc3/ditaxmlgenerator.h | 24 +-
tools/qdoc3/pagegenerator.h | 18 +-
3 files changed, 886 insertions(+), 1049 deletions(-)
diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp
index 1ff9592..f572cc7 100644
--- a/tools/qdoc3/ditaxmlgenerator.cpp
+++ b/tools/qdoc3/ditaxmlgenerator.cpp
@@ -508,7 +508,7 @@ QString DitaXmlGenerator::format()
QString DitaXmlGenerator::writeGuidAttribute(QString text)
{
QString guid = lookupGuid(text);
- writer.writeAttribute("id",guid);
+ xmlWriter().writeAttribute("id",guid);
return guid;
}
@@ -595,11 +595,11 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
endLink();
}
else {
- writer.writeCharacters(protectEnc(atom->string()));
+ xmlWriter().writeCharacters(protectEnc(atom->string()));
}
}
else {
- writer.writeCharacters(protectEnc(atom->string()));
+ xmlWriter().writeCharacters(protectEnc(atom->string()));
}
break;
case Atom::BaseName:
@@ -609,7 +609,7 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
skipAhead = skipAtoms(atom, Atom::BriefRight);
break;
}
- writer.writeStartElement(SHORTDESC);
+ xmlWriter().writeStartElement(SHORTDESC);
if (relative->type() == Node::Property ||
relative->type() == Node::Variable) {
QString str;
@@ -624,94 +624,94 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
str[0] = str[0].toLower();
if (str.right(1) == ".")
str.truncate(str.length() - 1);
- writer.writeCharacters("This ");
+ xmlWriter().writeCharacters("This ");
if (relative->type() == Node::Property)
- writer.writeCharacters("property");
+ xmlWriter().writeCharacters("property");
else
- writer.writeCharacters("variable");
+ xmlWriter().writeCharacters("variable");
QStringList words = str.split(" ");
if (!(words.first() == "contains" || words.first() == "specifies"
|| words.first() == "describes" || words.first() == "defines"
|| words.first() == "holds" || words.first() == "determines"))
- writer.writeCharacters(" holds ");
+ xmlWriter().writeCharacters(" holds ");
else
- writer.writeCharacters(" ");
- writer.writeCharacters(str + ".");
+ xmlWriter().writeCharacters(" ");
+ xmlWriter().writeCharacters(str + ".");
}
break;
case Atom::BriefRight:
if (relative->type() != Node::Fake) {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
break;
case Atom::C:
- writer.writeStartElement(formattingLeftMap()[ATOM_FORMATTING_TELETYPE]);
+ xmlWriter().writeStartElement(formattingLeftMap()[ATOM_FORMATTING_TELETYPE]);
if (inLink) {
- writer.writeCharacters(protectEnc(plainCode(atom->string())));
+ xmlWriter().writeCharacters(protectEnc(plainCode(atom->string())));
}
else {
writeText(atom->string(), marker, relative);
}
- writer.writeEndElement(); // sse writeStartElement() above
+ xmlWriter().writeEndElement(); // sse writeStartElement() above
break;
case Atom::Code:
- writer.writeStartElement("pre");
- writer.writeAttribute("outputclass","highlightedcode");
+ xmlWriter().writeStartElement("pre");
+ xmlWriter().writeAttribute("outputclass","highlightedcode");
writeText(trimmedTrailing(atom->string()), marker, relative);
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
break;
case Atom::Qml:
- writer.writeStartElement("pre");
- writer.writeAttribute("outputclass","highlightedcode");
+ xmlWriter().writeStartElement("pre");
+ xmlWriter().writeAttribute("outputclass","highlightedcode");
writeText(trimmedTrailing(atom->string()), marker, relative);
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
break;
case Atom::CodeNew:
- writer.writeStartElement("p");
- writer.writeCharacters("you can rewrite it as");
- writer.writeEndElement(); //
- writer.writeStartElement("pre");
- writer.writeAttribute("outputclass","highlightedcode");
+ xmlWriter().writeStartElement("p");
+ xmlWriter().writeCharacters("you can rewrite it as");
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeStartElement("pre");
+ xmlWriter().writeAttribute("outputclass","highlightedcode");
writeText(trimmedTrailing(atom->string()), marker, relative);
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
break;
case Atom::CodeOld:
- writer.writeStartElement("p");
- writer.writeCharacters("For example, if you have code like");
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement("p");
+ xmlWriter().writeCharacters("For example, if you have code like");
+ xmlWriter().writeEndElement(); //
// fallthrough
case Atom::CodeBad:
- writer.writeStartElement("pre");
- writer.writeAttribute("outputclass","highlightedcode");
- writer.writeCharacters(trimmedTrailing(protectEnc(plainCode(atom->string()))));
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement("pre");
+ xmlWriter().writeAttribute("outputclass","highlightedcode");
+ xmlWriter().writeCharacters(trimmedTrailing(protectEnc(plainCode(atom->string()))));
+ xmlWriter().writeEndElement(); //
break;
case Atom::FootnoteLeft:
// ### For now
if (in_para) {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
in_para = false;
}
- writer.writeCharacters("");
+ xmlWriter().writeCharacters("-->");
break;
case Atom::FormatElse:
case Atom::FormatEndif:
case Atom::FormatIf:
break;
case Atom::FormattingLeft:
- writer.writeStartElement(formattingLeftMap()[atom->string()]);
+ xmlWriter().writeStartElement(formattingLeftMap()[atom->string()]);
if (atom->string() == ATOM_FORMATTING_PARAMETER) {
if (atom->next() != 0 && atom->next()->type() == Atom::String) {
QRegExp subscriptRegExp("([a-z]+)_([0-9n])");
if (subscriptRegExp.exactMatch(atom->next()->string())) {
- writer.writeCharacters(subscriptRegExp.cap(1));
- writer.writeStartElement("sub");
- writer.writeCharacters(subscriptRegExp.cap(2));
- writer.writeEndElement(); //
+ xmlWriter().writeCharacters(subscriptRegExp.cap(1));
+ xmlWriter().writeStartElement("sub");
+ xmlWriter().writeCharacters(subscriptRegExp.cap(2));
+ xmlWriter().writeEndElement(); //
skipAhead = 1;
}
}
@@ -722,7 +722,7 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
endLink();
}
else {
- writer.writeEndElement(); // ?
+ xmlWriter().writeEndElement(); // ?
}
break;
case Atom::AnnotatedList:
@@ -924,7 +924,7 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
/*
First generate the table of contents.
*/
- writer.writeStartElement("ul");
+ xmlWriter().writeStartElement("ul");
s = sections.constBegin();
while (s != sections.constEnd()) {
if (!(*s).members.isEmpty()) {
@@ -933,17 +933,17 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
}
++s;
}
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
int idx = 0;
s = sections.constBegin();
while (s != sections.constEnd()) {
if (!(*s).members.isEmpty()) {
- writer.writeStartElement("p");
+ xmlWriter().writeStartElement("p");
writeGuidAttribute(Doc::canonicalTitle((*s).name));
- writer.writeAttribute("outputclass","h3");
- writer.writeCharacters(protectEnc((*s).name));
- writer.writeEndElement(); //
+ xmlWriter().writeAttribute("outputclass","h3");
+ xmlWriter().writeCharacters(protectEnc((*s).name));
+ xmlWriter().writeEndElement(); //
if (idx == Class)
generateCompactList(0, marker, ncmap.value(), false, QString("Q"));
else if (idx == QmlClass)
@@ -963,23 +963,24 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
pmap = parentmaps.begin();
while (pmap != parentmaps.end()) {
NodeList nlist = pmap->values();
- writer.writeStartElement("p");
- writer.writeCharacters("Class ");
- writer.writeStartElement("xref");
- writer.writeAttribute("href",linkForNode(pmap.key(), 0));
+ xmlWriter().writeStartElement("p");
+ xmlWriter().writeCharacters("Class ");
+ xmlWriter().writeStartElement("xref");
+ xmlWriter().writeAttribute("href",linkForNode(pmap.key(), 0));
QStringList pieces = fullName(pmap.key(), 0, marker).split("::");
- writer.writeCharacters(protectEnc(pieces.last()));
- writer.writeEndElement(); //
- writer.writeCharacters(":");
- writer.writeEndElement(); //
+ xmlWriter().writeCharacters(protectEnc(pieces.last()));
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeCharacters(":");
+ xmlWriter().writeEndElement(); //
generateSection(nlist, 0, marker, CodeMarker::Summary);
- writer.writeEmptyElement("br");
+ xmlWriter().writeEmptyElement("br");
++pmap;
}
}
- else
+ else {
generateSection(s->members, 0, marker, CodeMarker::Summary);
+ }
}
++idx;
++s;
@@ -995,39 +996,39 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
if (atom->next() != 0)
text = atom->next()->string();
if (atom->type() == Atom::Image) {
- writer.writeStartElement("p");
- writer.writeAttribute("outputclass","centerAlign");
+ xmlWriter().writeStartElement("p");
+ xmlWriter().writeAttribute("outputclass","centerAlign");
}
if (fileName.isEmpty()) {
- writer.writeStartElement("font");
- writer.writeAttribute("color","red");
- writer.writeCharacters("[Missing image: ");
- writer.writeCharacters(protectEnc(atom->string()));
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement("font");
+ xmlWriter().writeAttribute("color","red");
+ xmlWriter().writeCharacters("[Missing image: ");
+ xmlWriter().writeCharacters(protectEnc(atom->string()));
+ xmlWriter().writeEndElement(); //
}
else {
- writer.writeStartElement("img");
- writer.writeAttribute("src",protectEnc(fileName));
+ xmlWriter().writeStartElement("img");
+ xmlWriter().writeAttribute("src",protectEnc(fileName));
if (!text.isEmpty())
- writer.writeAttribute("alt",protectEnc(text));
- writer.writeEndElement(); //
+ xmlWriter().writeAttribute("alt",protectEnc(text));
+ xmlWriter().writeEndElement(); //
}
if (atom->type() == Atom::Image)
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
break;
case Atom::ImageText:
// nothing
break;
case Atom::LegaleseLeft:
- writer.writeStartElement("p");
- writer.writeAttribute("outputclass","legalese");
+ xmlWriter().writeStartElement("p");
+ xmlWriter().writeAttribute("outputclass","legalese");
break;
case Atom::LegaleseRight:
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
break;
case Atom::LineBreak:
- writer.writeEmptyElement("br");
+ xmlWriter().writeEmptyElement("br");
break;
case Atom::Link:
{
@@ -1051,64 +1052,64 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::ListLeft:
if (in_para) {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
in_para = false;
}
if (atom->string() == ATOM_LIST_BULLET) {
- writer.writeStartElement("ul");
+ xmlWriter().writeStartElement("ul");
}
else if (atom->string() == ATOM_LIST_TAG) {
- writer.writeStartElement("dl");
+ xmlWriter().writeStartElement("dl");
}
else if (atom->string() == ATOM_LIST_VALUE) {
threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom);
if (threeColumnEnumValueTable) {
- writer.writeStartElement("simpletable");
- writer.writeAttribute("outputclass","valuelist");
- writer.writeStartElement("sthead");
+ xmlWriter().writeStartElement("simpletable");
+ xmlWriter().writeAttribute("outputclass","valuelist");
+ xmlWriter().writeStartElement("sthead");
if (++numTableRows % 2 == 1)
- writer.writeAttribute("outputclass","odd");
+ xmlWriter().writeAttribute("outputclass","odd");
else
- writer.writeAttribute("outputclass","even");
- writer.writeStartElement("stentry");
- writer.writeCharacters("Constant");
- writer.writeEndElement(); //
- writer.writeStartElement("stentry");
- writer.writeCharacters("Value");
- writer.writeEndElement(); //
- writer.writeStartElement("stentry");
- writer.writeCharacters("Description");
- writer.writeEndElement(); //
- writer.writeEndElement(); //
+ xmlWriter().writeAttribute("outputclass","even");
+ xmlWriter().writeStartElement("stentry");
+ xmlWriter().writeCharacters("Constant");
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeStartElement("stentry");
+ xmlWriter().writeCharacters("Value");
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeStartElement("stentry");
+ xmlWriter().writeCharacters("Description");
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
else {
- writer.writeStartElement("simpletable");
- writer.writeAttribute("outputclass","valuelist");
- writer.writeStartElement("sthead");
- writer.writeStartElement("stentry");
- writer.writeCharacters("Constant");
- writer.writeEndElement(); //
- writer.writeStartElement("stentry");
- writer.writeCharacters("Value");
- writer.writeEndElement(); //
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement("simpletable");
+ xmlWriter().writeAttribute("outputclass","valuelist");
+ xmlWriter().writeStartElement("sthead");
+ xmlWriter().writeStartElement("stentry");
+ xmlWriter().writeCharacters("Constant");
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeStartElement("stentry");
+ xmlWriter().writeCharacters("Value");
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
}
else {
- writer.writeStartElement("ol");
+ xmlWriter().writeStartElement("ol");
if (atom->string() == ATOM_LIST_UPPERALPHA)
- writer.writeAttribute("outputclass","upperalpha");
+ xmlWriter().writeAttribute("outputclass","upperalpha");
else if (atom->string() == ATOM_LIST_LOWERALPHA)
- writer.writeAttribute("outputclass","loweralpha");
+ xmlWriter().writeAttribute("outputclass","loweralpha");
else if (atom->string() == ATOM_LIST_UPPERROMAN)
- writer.writeAttribute("outputclass","upperroman");
+ xmlWriter().writeAttribute("outputclass","upperroman");
else if (atom->string() == ATOM_LIST_LOWERROMAN)
- writer.writeAttribute("outputclass","lowerroman");
+ xmlWriter().writeAttribute("outputclass","lowerroman");
else // (atom->string() == ATOM_LIST_NUMERIC)
- writer.writeAttribute("outputclass","numeric");
+ xmlWriter().writeAttribute("outputclass","numeric");
if (atom->next() != 0 && atom->next()->string().toInt() != 1) {
// I don't think this attribute is supported.
- writer.writeAttribute("start",atom->next()->string());
+ xmlWriter().writeAttribute("start",atom->next()->string());
}
}
break;
@@ -1117,19 +1118,19 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::ListTagLeft:
if (atom->string() == ATOM_LIST_TAG) {
- writer.writeStartElement("dt");
+ xmlWriter().writeStartElement("dt");
}
else { // (atom->string() == ATOM_LIST_VALUE)
- writer.writeStartElement("strow");
- writer.writeStartElement("stentry");
- writer.writeAttribute("outputclass","topAlign");
- writer.writeStartElement("tt");
- writer.writeCharacters(protectEnc(plainCode(marker->markedUpEnumValue(atom->next()->string(),
+ xmlWriter().writeStartElement("strow");
+ xmlWriter().writeStartElement("stentry");
+ xmlWriter().writeAttribute("outputclass","topAlign");
+ xmlWriter().writeStartElement("tt");
+ xmlWriter().writeCharacters(protectEnc(plainCode(marker->markedUpEnumValue(atom->next()->string(),
relative))));
- writer.writeEndElement(); //
- writer.writeEndElement(); //
- writer.writeStartElement("stentry");
- writer.writeAttribute("outputclass","topAlign");
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeStartElement("stentry");
+ xmlWriter().writeAttribute("outputclass","topAlign");
QString itemValue;
if (relative->type() == Node::Enum) {
@@ -1138,105 +1139,105 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
}
if (itemValue.isEmpty())
- writer.writeCharacters("?");
+ xmlWriter().writeCharacters("?");
else {
- writer.writeStartElement("tt");
- writer.writeCharacters(protectEnc(itemValue));
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement("tt");
+ xmlWriter().writeCharacters(protectEnc(itemValue));
+ xmlWriter().writeEndElement(); //
}
skipAhead = 1;
}
break;
case Atom::ListTagRight:
if (atom->string() == ATOM_LIST_TAG)
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
break;
case Atom::ListItemLeft:
if (atom->string() == ATOM_LIST_TAG) {
- writer.writeStartElement("dd");
+ xmlWriter().writeStartElement("dd");
}
else if (atom->string() == ATOM_LIST_VALUE) {
if (threeColumnEnumValueTable) {
- writer.writeEndElement(); //
- writer.writeStartElement("stentry");
- writer.writeAttribute("outputclass","topAlign");
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeStartElement("stentry");
+ xmlWriter().writeAttribute("outputclass","topAlign");
if (matchAhead(atom, Atom::ListItemRight))
- writer.writeCharacters(" ");
+ xmlWriter().writeCharacters(" ");
}
}
else {
- writer.writeStartElement("li");
+ xmlWriter().writeStartElement("li");
}
if (matchAhead(atom, Atom::ParaLeft))
skipAhead = 1;
break;
case Atom::ListItemRight:
if (atom->string() == ATOM_LIST_TAG) {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
else if (atom->string() == ATOM_LIST_VALUE) {
- writer.writeEndElement(); //
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
else {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
break;
case Atom::ListRight:
if (atom->string() == ATOM_LIST_BULLET) {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
else if (atom->string() == ATOM_LIST_TAG) {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
else if (atom->string() == ATOM_LIST_VALUE) {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
else {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
break;
case Atom::Nop:
// nothing
break;
case Atom::ParaLeft:
- writer.writeStartElement("p");
+ xmlWriter().writeStartElement("p");
in_para = true;
break;
case Atom::ParaRight:
endLink();
if (in_para) {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
break;
case Atom::RawString:
- writer.writeCharacters(atom->string());
+ xmlWriter().writeCharacters(atom->string());
break;
case Atom::SectionLeft:
- writer.writeStartElement("p");
+ xmlWriter().writeStartElement("p");
writeGuidAttribute(Doc::canonicalTitle(Text::sectionHeading(atom).toString()));
- writer.writeAttribute("outputclass","target");
- writer.writeCharacters(protectEnc(Text::sectionHeading(atom).toString()));
- writer.writeEndElement(); //
+ xmlWriter().writeAttribute("outputclass","target");
+ xmlWriter().writeCharacters(protectEnc(Text::sectionHeading(atom).toString()));
+ xmlWriter().writeEndElement(); //
break;
case Atom::SectionRight:
// nothing
break;
case Atom::SectionHeadingLeft:
- writer.writeStartElement("p");
+ xmlWriter().writeStartElement("p");
hx = "h" + QString::number(atom->string().toInt() + hOffset(relative));
- writer.writeAttribute("outputclass",hx);
+ xmlWriter().writeAttribute("outputclass",hx);
inSectionHeading = true;
break;
case Atom::SectionHeadingRight:
- writer.writeEndElement(); // (see case Atom::SectionHeadingLeft)
+ xmlWriter().writeEndElement(); // (see case Atom::SectionHeadingLeft)
inSectionHeading = false;
break;
case Atom::SidebarLeft:
@@ -1250,17 +1251,17 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
generateLink(atom, relative, marker);
}
else {
- writer.writeCharacters(protectEnc(atom->string()));
+ xmlWriter().writeCharacters(protectEnc(atom->string()));
}
break;
case Atom::TableLeft:
{
if (in_para) {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
in_para = false;
}
- writer.writeStartElement("table");
- writer.writeAttribute("outputclass","generic");
+ xmlWriter().writeStartElement("table");
+ xmlWriter().writeAttribute("outputclass","generic");
numTableRows = 0;
if (tableColumnCount != 0) {
qDebug() << "ERROR: Nested tables!";
@@ -1274,62 +1275,62 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
++tableColumnCount;
t = t->next();
}
- writer.writeStartElement("tgroup");
- writer.writeAttribute("cols",QString::number(tableColumnCount));
+ xmlWriter().writeStartElement("tgroup");
+ xmlWriter().writeAttribute("cols",QString::number(tableColumnCount));
}
break;
case Atom::TableRight:
- writer.writeEndElement(); //
- writer.writeEndElement(); //
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeEndElement(); //
tableColumnCount = 0;
break;
case Atom::TableHeaderLeft:
- writer.writeStartElement("thead");
- writer.writeStartElement("row");
- writer.writeAttribute("outputclass","qt-style topAlign");
+ xmlWriter().writeStartElement("thead");
+ xmlWriter().writeStartElement("row");
+ xmlWriter().writeAttribute("outputclass","qt-style topAlign");
inTableHeader = true;
inTableBody = false;
break;
case Atom::TableHeaderRight:
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
if (matchAhead(atom, Atom::TableHeaderLeft)) {
skipAhead = 1;
- writer.writeStartElement("row");
- writer.writeAttribute("outputclass","qt-style topAlign");
+ xmlWriter().writeStartElement("row");
+ xmlWriter().writeAttribute("outputclass","qt-style topAlign");
}
else {
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
inTableHeader = false;
inTableBody = true;
- writer.writeStartElement("tbody");
+ xmlWriter().writeStartElement("tbody");
}
break;
case Atom::TableRowLeft:
if (!inTableHeader && !inTableBody) {
inTableBody = true;
- writer.writeStartElement("tbody");
+ xmlWriter().writeStartElement("tbody");
}
- writer.writeStartElement("row");
+ xmlWriter().writeStartElement("row");
if (++numTableRows % 2 == 1)
- writer.writeAttribute("outputclass","odd topAlign");
+ xmlWriter().writeAttribute("outputclass","odd topAlign");
else
- writer.writeAttribute("outputclass","even topAlign");
+ xmlWriter().writeAttribute("outputclass","even topAlign");
break;
case Atom::TableRowRight:
- writer.writeEndElement(); // \n";
+ xmlWriter().writeEndElement(); // \n";
break;
case Atom::TableItemLeft:
{
if (inTableHeader)
- writer.writeStartElement("entry");
+ xmlWriter().writeStartElement("entry");
else
- writer.writeStartElement("entry");
+ xmlWriter().writeStartElement("entry");
QStringList spans = atom->string().split(",");
if (spans.size() == 2) {
if (!inTableHeader)
- writer.writeStartElement("p");
+ xmlWriter().writeStartElement("p");
}
if (matchAhead(atom, Atom::ParaLeft))
skipAhead = 1;
@@ -1337,10 +1338,10 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::TableItemRight:
if (inTableHeader)
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
else {
- writer.writeEndElement(); //
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
if (matchAhead(atom, Atom::ParaLeft))
skipAhead = 1;
@@ -1375,23 +1376,23 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
}
break;
case Atom::Target:
- writer.writeStartElement("p");
+ xmlWriter().writeStartElement("p");
writeGuidAttribute(Doc::canonicalTitle(atom->string()));
- writer.writeAttribute("outputclass","target");
- writer.writeCharacters(protectEnc(atom->string()));
- writer.writeEndElement(); //
+ xmlWriter().writeAttribute("outputclass","target");
+ xmlWriter().writeCharacters(protectEnc(atom->string()));
+ xmlWriter().writeEndElement(); //
break;
case Atom::UnhandledFormat:
- writer.writeStartElement("b");
- writer.writeAttribute("outputclass","redFont");
- writer.writeCharacters("<Missing DITAXML>");
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement("b");
+ xmlWriter().writeAttribute("outputclass","redFont");
+ xmlWriter().writeCharacters("<Missing DITAXML>");
+ xmlWriter().writeEndElement(); //
break;
case Atom::UnknownCommand:
- writer.writeStartElement("b");
- writer.writeAttribute("outputclass","redFont code");
- writer.writeCharacters(protectEnc(atom->string()));
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement("b");
+ xmlWriter().writeAttribute("outputclass","redFont code");
+ xmlWriter().writeCharacters(protectEnc(atom->string()));
+ xmlWriter().writeEndElement(); //
break;
case Atom::QmlText:
case Atom::EndQmlText:
@@ -1433,51 +1434,44 @@ DitaXmlGenerator::generateClassLikeNode(const InnerNode* inner, CodeMarker* mark
fullTitle = marker->plainFullName(inner);
title = rawTitle + " Class Reference";
- generateHeader(inner);
-
- writer.writeStartElement(CXXCLASS);
- writer.writeAttribute("id",cn->guid());
- writer.writeStartElement(APINAME);
- writer.writeCharacters(fullTitle);
- writer.writeEndElement(); //
-
+ generateHeader(inner, fullTitle);
generateBrief(inner, marker); //
// not included:
- writer.writeStartElement(CXXCLASSDETAIL);
- writer.writeStartElement(CXXCLASSDEFINITION);
- writer.writeStartElement(CXXCLASSACCESSSPECIFIER);
- writer.writeAttribute("value",inner->accessString());
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement(CXXCLASSDETAIL);
+ xmlWriter().writeStartElement(CXXCLASSDEFINITION);
+ xmlWriter().writeStartElement(CXXCLASSACCESSSPECIFIER);
+ xmlWriter().writeAttribute("value",inner->accessString());
+ xmlWriter().writeEndElement(); //
if (cn->isAbstract()) {
- writer.writeStartElement(CXXCLASSABSTRACT);
- writer.writeAttribute("name","abstract");
- writer.writeAttribute("value","abstract");
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement(CXXCLASSABSTRACT);
+ xmlWriter().writeAttribute("name","abstract");
+ xmlWriter().writeAttribute("value","abstract");
+ xmlWriter().writeEndElement(); //
}
writeDerivations(cn, marker); //
// not included:
writeLocation(cn);
- writer.writeEndElement(); //
- writer.writeStartElement(APIDESC);
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeStartElement(APIDESC);
if (!inner->doc().isEmpty()) {
- writer.writeStartElement("p");
- writer.writeAttribute("outputclass","h2");
- writer.writeCharacters("Detailed Description");
- writer.writeEndElement(); //
+ xmlWriter().writeStartElement("p");
+ xmlWriter().writeAttribute("outputclass","h2");
+ xmlWriter().writeCharacters("Detailed Description");
+ xmlWriter().writeEndElement(); //
generateBody(inner, marker);
// generateAlsoList(inner, marker);
}
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
// not included: , , or
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
// not included:
// not included:
@@ -1506,7 +1500,7 @@ DitaXmlGenerator::generateClassLikeNode(const InnerNode* inner, CodeMarker* mark
// not included:
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
}
@@ -1518,15 +1512,15 @@ void DitaXmlGenerator::writeTargetAndHeader(const QString& target,
const QString& header,
const QString& attribute)
{
- writer.writeStartElement("p");
+ xmlWriter().writeStartElement("p");
writeGuidAttribute(registerRef(target));
- writer.writeAttribute("outputclass","target");
- writer.writeCharacters(header);
- writer.writeEndElement(); //
- writer.writeStartElement("p");
- writer.writeAttribute("outputclass",attribute);
- writer.writeCharacters(header);
- writer.writeEndElement(); //
+ xmlWriter().writeAttribute("outputclass","target");
+ xmlWriter().writeCharacters(header);
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeStartElement("p");
+ xmlWriter().writeAttribute("outputclass",attribute);
+ xmlWriter().writeCharacters(header);
+ xmlWriter().writeEndElement(); //
}
/*!
@@ -1534,12 +1528,15 @@ void DitaXmlGenerator::writeTargetAndHeader(const QString& target,
*/
void DitaXmlGenerator::writeXrefListItem(const QString& link, const QString& text)
{
- writer.writeStartElement("li");
- writer.writeStartElement("xref");
- writer.writeAttribute("href",link);
- writer.writeCharacters(text);
- writer.writeEndElement(); //
- writer.writeEndElement(); //
+ qDebug() << "WXLI 1" << link;
+ xmlWriter().writeStartElement("li");
+ xmlWriter().writeStartElement("xref");
+ xmlWriter().writeAttribute("href",link);
+ qDebug() << "WXLI 2";
+ xmlWriter().writeCharacters(text);
+ xmlWriter().writeEndElement(); //
+ xmlWriter().writeEndElement(); //
+ qDebug() << "WXLI 3";
}
/*!
@@ -1554,12 +1551,6 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker
QString fullTitle = fake->fullTitle();
QString htmlTitle = fullTitle;
- /*
- NOTE: For now we only handle \page elements.
- */
- //if (fake->subType() != Node::Page)
- //return;
-
if (fake->subType() == Node::File && !fake->subTitle().isEmpty()) {
subTitleSize = SmallSubTitle;
htmlTitle += " (" + fake->subTitle() + ")";
@@ -1569,47 +1560,7 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker
htmlTitle = fullTitle;
}
- QString outputclass;
- switch (fake->subType()) {
- case Node::Page:
- outputclass = "page";
- break;
- case Node::Group:
- outputclass = "group";
- break;
- case Node::Example:
- outputclass = "example";
- break;
- case Node::HeaderFile:
- outputclass = "header";
- break;
- case Node::File:
- outputclass = "file";
- break;
- case Node::Image:
- outputclass = "image";
- break;
- case Node::Module:
- outputclass = "module";
- break;
- case Node::ExternalPage:
- outputclass = "externalpage";
- break;
- case Node::QmlClass:
- outputclass = "QML";
- break;
- default:
- return;
- }
-
- generateHeader(fake);
-
- writer.writeStartElement("topic");
- writer.writeAttribute("id",fake->guid());
- writer.writeAttribute("outputclass",outputclass);
- writer.writeStartElement("title");
- writer.writeCharacters(fullTitle);
- writer.writeEndElement(); //
+ generateHeader(fake, fullTitle);
generateBrief(fake, marker); //
if (fake->subType() == Node::Module) {
@@ -1625,7 +1576,7 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker
}
else if (fake->subType() == Node::HeaderFile) {
generateStatus(fake, marker);
- writer.writeStartElement("ul");
+ xmlWriter().writeStartElement("ul");
QString membersLink = generateListOfAllMemberFile(fake, marker);
if (!membersLink.isEmpty()) {
@@ -1646,11 +1597,11 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker
writeXrefListItem(compatLink,"Qt 3 support members");
}
- writer.writeEndElement(); //
+ xmlWriter().writeEndElement(); //
}
if (!fake->doc().isEmpty()) {
- writer.writeStartElement("body");
+ xmlWriter().writeStartElement("body");
if (fake->subType() == Node::Module) {
writeTargetAndHeader("details","Detailed Description","h2");
}
@@ -1666,9 +1617,9 @@ void DitaXmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker
generateAnnotatedList(fake, marker, groupMembersMap);
}
- writer.writeEndElement(); //