summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Wicking <paul.wicking@qt.io>2020-02-11 14:19:34 +0100
committerPaul Wicking <paul.wicking@qt.io>2020-02-12 09:09:35 +0000
commit6651813b9b0b372319f51723f63692907d70e787 (patch)
treec7b2f16c45ad4349b090682dfbcdb06396b2ac43
parentfff8104c31214dbe3319a4aa0408cc170089305e (diff)
Refactor DocBookGenerator
- Stop passing a writer reference around, make it a member. - Make static functions non-static members. - Initialize one variable per line and remove a commented out line. Task-number: QTBUG-37355 Change-Id: I32a7494dbc7425d3bd8357821c51c88f29f1c6c1 Reviewed-by: Topi Reiniƶ <topi.reinio@qt.io>
-rw-r--r--src/qdoc/docbookgenerator.cpp2596
-rw-r--r--src/qdoc/docbookgenerator.h163
2 files changed, 1380 insertions, 1379 deletions
diff --git a/src/qdoc/docbookgenerator.cpp b/src/qdoc/docbookgenerator.cpp
index 2344428f2..e7b53cbf3 100644
--- a/src/qdoc/docbookgenerator.cpp
+++ b/src/qdoc/docbookgenerator.cpp
@@ -49,50 +49,50 @@ QT_BEGIN_NAMESPACE
static const char dbNamespace[] = "http://docbook.org/ns/docbook";
static const char xlinkNamespace[] = "http://www.w3.org/1999/xlink";
-static void newLine(QXmlStreamWriter &writer)
+inline void DocBookGenerator::newLine()
{
- writer.writeCharacters("\n");
+ writer->writeCharacters("\n");
}
-static void startSectionBegin(QXmlStreamWriter &writer)
+void DocBookGenerator::startSectionBegin()
{
- writer.writeStartElement(dbNamespace, "section");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "title");
+ writer->writeStartElement(dbNamespace, "section");
+ newLine();
+ writer->writeStartElement(dbNamespace, "title");
}
-static void startSectionBegin(QXmlStreamWriter &writer, const QString &id)
+void DocBookGenerator::startSectionBegin(const QString &id)
{
- writer.writeStartElement(dbNamespace, "section");
- writer.writeAttribute("xml:id", id);
- newLine(writer);
- writer.writeStartElement(dbNamespace, "title");
+ writer->writeStartElement(dbNamespace, "section");
+ writer->writeAttribute("xml:id", id);
+ newLine();
+ writer->writeStartElement(dbNamespace, "title");
}
-static void startSectionEnd(QXmlStreamWriter &writer)
+void DocBookGenerator::startSectionEnd()
{
- writer.writeEndElement(); // title
- newLine(writer);
+ writer->writeEndElement(); // title
+ newLine();
}
-static void startSection(QXmlStreamWriter &writer, const QString &id, const QString &title)
+void DocBookGenerator::startSection(const QString &id, const QString &title)
{
- startSectionBegin(writer, id);
- writer.writeCharacters(title);
- startSectionEnd(writer);
+ startSectionBegin(id);
+ writer->writeCharacters(title);
+ startSectionEnd();
}
-static void endSection(QXmlStreamWriter &writer)
+void DocBookGenerator::endSection()
{
- writer.writeEndElement(); // section
- newLine(writer);
+ writer->writeEndElement(); // section
+ newLine();
}
-static void writeAnchor(QXmlStreamWriter &writer, QString id)
+void DocBookGenerator::writeAnchor(const QString &id)
{
- writer.writeEmptyElement(dbNamespace, "anchor");
- writer.writeAttribute("xml:id", id);
- newLine(writer);
+ writer->writeEmptyElement(dbNamespace, "anchor");
+ writer->writeAttribute("xml:id", id);
+ newLine();
}
/*!
@@ -136,17 +136,17 @@ QString DocBookGenerator::fileExtension() const
is the node that represents the entity where a qdoc comment
was found, and \a text represents the qdoc comment.
*/
-bool DocBookGenerator::generateText(QXmlStreamWriter &writer, const Text &text,
- const Node *relative)
+bool DocBookGenerator::generateText(const Text &text, const Node *relative, CodeMarker *marker)
{
+ Q_UNUSED(marker);
// From Generator::generateText.
if (!text.firstAtom())
return false;
int numAtoms = 0;
initializeTextOutput();
- generateAtomList(writer, text.firstAtom(), relative, true, numAtoms);
- closeTextSections(writer);
+ generateAtomList(text.firstAtom(), relative, true, numAtoms);
+ closeTextSections();
return true;
}
@@ -157,21 +157,22 @@ bool DocBookGenerator::generateText(QXmlStreamWriter &writer, const Text &text,
\a numAtoms. The returned value is the first atom that was not
generated.
*/
-const Atom *DocBookGenerator::generateAtomList(QXmlStreamWriter &writer, const Atom *atom,
- const Node *relative, bool generate, int &numAtoms)
+const Atom *DocBookGenerator::generateAtomList(const Atom *atom, const Node *relative,
+ bool generate, int &numAtoms)
{
+ Q_ASSERT(writer);
// From Generator::generateAtomList.
while (atom) {
switch (atom->type()) {
case Atom::FormatIf: {
int numAtoms0 = numAtoms;
- atom = generateAtomList(writer, atom->next(), relative, generate, numAtoms);
+ atom = generateAtomList(atom->next(), relative, generate, numAtoms);
if (!atom)
return nullptr;
if (atom->type() == Atom::FormatElse) {
++numAtoms;
- atom = generateAtomList(writer, atom->next(), relative, false, numAtoms);
+ atom = generateAtomList(atom->next(), relative, false, numAtoms);
if (!atom)
return nullptr;
}
@@ -181,7 +182,7 @@ const Atom *DocBookGenerator::generateAtomList(QXmlStreamWriter &writer, const A
relative->location().warning(
tr("Output format %1 not handled %2").arg(format()).arg(outFileName()));
Atom unhandledFormatAtom(Atom::UnhandledFormat, format());
- generateAtomList(writer, &unhandledFormatAtom, relative, generate, numAtoms);
+ generateAtomList(&unhandledFormatAtom, relative, generate, numAtoms);
}
atom = atom->next();
}
@@ -192,7 +193,7 @@ const Atom *DocBookGenerator::generateAtomList(QXmlStreamWriter &writer, const A
default:
int n = 1;
if (generate) {
- n += generateAtom(writer, atom, relative);
+ n += generateAtom(atom, relative);
numAtoms += n;
}
while (n-- > 0)
@@ -205,10 +206,13 @@ const Atom *DocBookGenerator::generateAtomList(QXmlStreamWriter &writer, const A
/*!
Generate DocBook from an instance of Atom.
*/
-int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, const Node *relative)
+int DocBookGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker)
{
+ Q_ASSERT(writer);
+ Q_UNUSED(marker);
// From HtmlGenerator::generateAtom, without warning generation.
- int idx, skipAhead = 0;
+ int idx = 0;
+ int skipAhead = 0;
static bool inPara = false;
switch (atom->type()) {
@@ -222,14 +226,14 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
link.clear();
}
if (link.isEmpty()) {
- writer.writeCharacters(atom->string());
+ writer->writeCharacters(atom->string());
} else {
- beginLink(writer, link, node, relative);
- generateLink(writer, atom);
- endLink(writer);
+ beginLink(link, node, relative);
+ generateLink(atom);
+ endLink();
}
} else {
- writer.writeCharacters(atom->string());
+ writer->writeCharacters(atom->string());
}
break;
case Atom::BaseName:
@@ -239,84 +243,84 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
skipAhead = skipAtoms(atom, Atom::BriefRight);
break;
}
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "para");
rewritePropertyBrief(atom, relative);
break;
case Atom::BriefRight:
if (hasBrief(relative)) {
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
}
break;
case Atom::C:
// This may at one time have been used to mark up C++ code but it is
// now widely used to write teletype text. As a result, text marked
// with the \c command is not passed to a code marker.
- writer.writeTextElement(dbNamespace, "code", plainCode(atom->string()));
+ writer->writeTextElement(dbNamespace, "code", plainCode(atom->string()));
break;
case Atom::CaptionLeft:
- writer.writeStartElement(dbNamespace, "title");
+ writer->writeStartElement(dbNamespace, "title");
break;
case Atom::CaptionRight:
- endLink(writer);
- writer.writeEndElement(); // title
- newLine(writer);
+ endLink();
+ writer->writeEndElement(); // title
+ newLine();
break;
case Atom::Qml:
- writer.writeStartElement(dbNamespace, "programlisting");
- writer.writeAttribute("language", "qml");
- writer.writeCharacters(atom->string());
- writer.writeEndElement(); // programlisting
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "programlisting");
+ writer->writeAttribute("language", "qml");
+ writer->writeCharacters(atom->string());
+ writer->writeEndElement(); // programlisting
+ newLine();
break;
case Atom::JavaScript:
- writer.writeStartElement(dbNamespace, "programlisting");
- writer.writeAttribute("language", "js");
- writer.writeCharacters(atom->string());
- writer.writeEndElement(); // programlisting
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "programlisting");
+ writer->writeAttribute("language", "js");
+ writer->writeCharacters(atom->string());
+ writer->writeEndElement(); // programlisting
+ newLine();
break;
case Atom::CodeNew:
- writer.writeTextElement(dbNamespace, "para", "you can rewrite it as");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "programlisting");
- writer.writeAttribute("language", "cpp");
- writer.writeAttribute("role", "new");
- writer.writeCharacters(atom->string());
- writer.writeEndElement(); // programlisting
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "para", "you can rewrite it as");
+ newLine();
+ writer->writeStartElement(dbNamespace, "programlisting");
+ writer->writeAttribute("language", "cpp");
+ writer->writeAttribute("role", "new");
+ writer->writeCharacters(atom->string());
+ writer->writeEndElement(); // programlisting
+ newLine();
break;
case Atom::Code:
- writer.writeStartElement(dbNamespace, "programlisting");
- writer.writeAttribute("language", "cpp");
- writer.writeCharacters(atom->string());
- writer.writeEndElement(); // programlisting
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "programlisting");
+ writer->writeAttribute("language", "cpp");
+ writer->writeCharacters(atom->string());
+ writer->writeEndElement(); // programlisting
+ newLine();
break;
case Atom::CodeOld:
- writer.writeTextElement(dbNamespace, "para", "For example, if you have code like");
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "para", "For example, if you have code like");
+ newLine();
Q_FALLTHROUGH();
case Atom::CodeBad:
- writer.writeStartElement(dbNamespace, "programlisting");
- writer.writeAttribute("language", "cpp");
- writer.writeAttribute("role", "bad");
- writer.writeCharacters(atom->string());
- writer.writeEndElement(); // programlisting
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "programlisting");
+ writer->writeAttribute("language", "cpp");
+ writer->writeAttribute("role", "bad");
+ writer->writeCharacters(atom->string());
+ writer->writeEndElement(); // programlisting
+ newLine();
break;
case Atom::DivLeft:
case Atom::DivRight:
break;
case Atom::FootnoteLeft:
- writer.writeStartElement(dbNamespace, "footnote");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "footnote");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
break;
case Atom::FootnoteRight:
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // footnote
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // footnote
break;
case Atom::FormatElse:
case Atom::FormatEndif:
@@ -324,22 +328,23 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
break;
case Atom::FormattingLeft:
if (atom->string() == ATOM_FORMATTING_BOLD) {
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
} else if (atom->string() == ATOM_FORMATTING_ITALIC) {
- writer.writeStartElement(dbNamespace, "emphasis");
+ writer->writeStartElement(dbNamespace, "emphasis");
} else if (atom->string() == ATOM_FORMATTING_UNDERLINE) {
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "underline");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "underline");
} else if (atom->string() == ATOM_FORMATTING_SUBSCRIPT) {
- writer.writeStartElement(dbNamespace, "sub");
+ writer->writeStartElement(dbNamespace, "sub");
} else if (atom->string() == ATOM_FORMATTING_SUPERSCRIPT) {
- writer.writeStartElement(dbNamespace, "sup");
- } else if (atom->string() == ATOM_FORMATTING_TELETYPE || atom->string() == ATOM_FORMATTING_PARAMETER) {
- writer.writeStartElement(dbNamespace, "code");
+ writer->writeStartElement(dbNamespace, "sup");
+ } else if (atom->string() == ATOM_FORMATTING_TELETYPE
+ || atom->string() == ATOM_FORMATTING_PARAMETER) {
+ writer->writeStartElement(dbNamespace, "code");
if (atom->string() == ATOM_FORMATTING_PARAMETER)
- writer.writeAttribute("role", "parameter");
+ writer->writeAttribute("role", "parameter");
}
break;
case Atom::FormattingRight:
@@ -349,14 +354,14 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
|| atom->string() == ATOM_FORMATTING_SUPERSCRIPT
|| atom->string() == ATOM_FORMATTING_TELETYPE
|| atom->string() == ATOM_FORMATTING_PARAMETER) {
- writer.writeEndElement();
+ writer->writeEndElement();
}
if (atom->string() == ATOM_FORMATTING_LINK)
- endLink(writer);
+ endLink();
break;
case Atom::AnnotatedList:
if (const CollectionNode *cn = qdb_->getCollectionNode(atom->string(), Node::Group))
- generateList(writer, cn, atom->string());
+ generateList(cn, atom->string());
break;
case Atom::GeneratedList:
if (atom->string() == QLatin1String("annotatedclasses")
@@ -366,13 +371,13 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
? qdb_->getCppClasses()
: atom->string() == QLatin1String("attributions") ? qdb_->getAttributions()
: qdb_->getNamespaces();
- generateAnnotatedList(writer, relative, things, atom->string());
+ generateAnnotatedList(relative, things, atom->string());
} else if (atom->string() == QLatin1String("annotatedexamples")
|| atom->string() == QLatin1String("annotatedattributions")) {
const NodeMultiMap things = atom->string() == QLatin1String("annotatedexamples")
? qdb_->getAttributions()
: qdb_->getExamples();
- generateAnnotatedLists(writer, relative, things, atom->string());
+ generateAnnotatedLists(relative, things, atom->string());
} else if (atom->string() == QLatin1String("classes")
|| atom->string() == QLatin1String("qmlbasictypes")
|| atom->string() == QLatin1String("qmltypes")) {
@@ -380,11 +385,10 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
? qdb_->getCppClasses()
: atom->string() == QLatin1String("qmlbasictypes") ? qdb_->getQmlBasicTypes()
: qdb_->getQmlTypes();
- generateCompactList(writer, Generic, relative, things, QString(), atom->string());
+ generateCompactList(Generic, relative, things, QString(), atom->string());
} else if (atom->string().contains("classes ")) {
QString rootName = atom->string().mid(atom->string().indexOf("classes") + 7).trimmed();
- generateCompactList(writer, Generic, relative, qdb_->getCppClasses(), rootName,
- atom->string());
+ generateCompactList(Generic, relative, qdb_->getCppClasses(), rootName, atom->string());
} else if ((idx = atom->string().indexOf(QStringLiteral("bymodule"))) != -1) {
QString moduleName = atom->string().mid(idx + 8).trimmed();
Node::NodeType type = typeFromString(atom);
@@ -394,9 +398,9 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
NodeMap m;
cn->getMemberClasses(m);
if (!m.isEmpty())
- generateAnnotatedList(writer, relative, m, atom->string());
+ generateAnnotatedList(relative, m, atom->string());
} else {
- generateAnnotatedList(writer, relative, cn->members(), atom->string());
+ generateAnnotatedList(relative, cn->members(), atom->string());
}
}
} else if (atom->string().startsWith("examplefiles")
@@ -404,7 +408,7 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
if (relative->isExample())
qDebug() << "GENERATE FILE LIST CALLED" << relative->name() << atom->string();
} else if (atom->string() == QLatin1String("classhierarchy")) {
- generateClassHierarchy(writer, relative, qdb_->getCppClasses());
+ generateClassHierarchy(relative, qdb_->getCppClasses());
} else if (atom->string().startsWith("obsolete")) {
ListType type = atom->string().endsWith("members") ? Obsolete : Generic;
QString prefix = atom->string().contains("cpp") ? QStringLiteral("Q") : QString();
@@ -415,16 +419,16 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
: atom->string() == QLatin1String("obsoletecppmembers")
? qdb_->getClassesWithObsoleteMembers()
: qdb_->getQmlTypesWithObsoleteMembers();
- generateCompactList(writer, type, relative, things, prefix, atom->string());
+ generateCompactList(type, relative, things, prefix, atom->string());
} else if (atom->string() == QLatin1String("functionindex")) {
- generateFunctionIndex(writer, relative);
+ generateFunctionIndex(relative);
} else if (atom->string() == QLatin1String("legalese")) {
- generateLegaleseList(writer, relative);
+ generateLegaleseList(relative);
} else if (atom->string() == QLatin1String("overviews")
|| atom->string() == QLatin1String("cpp-modules")
|| atom->string() == QLatin1String("qml-modules")
|| atom->string() == QLatin1String("related")) {
- generateList(writer, relative, atom->string());
+ generateList(relative, atom->string());
}
break;
case Atom::SinceList:
@@ -438,54 +442,54 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
case Atom::Image: // mediaobject
case Atom::InlineImage: { // inlinemediaobject
QString tag = atom->type() == Atom::Image ? "mediaobject" : "inlinemediaobject";
- writer.writeStartElement(dbNamespace, tag);
- newLine(writer);
+ writer->writeStartElement(dbNamespace, tag);
+ newLine();
QString fileName = imageFileName(relative, atom->string());
if (fileName.isEmpty()) {
- writer.writeStartElement(dbNamespace, "textobject");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- writer.writeTextElement(dbNamespace, "emphasis",
- "[Missing image " + atom->string() + "]");
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // textobject
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "textobject");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeTextElement(dbNamespace, "emphasis",
+ "[Missing image " + atom->string() + "]");
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // textobject
+ newLine();
} else {
if (atom->next() && !atom->next()->string().isEmpty())
- writer.writeTextElement(dbNamespace, "alt", atom->next()->string());
+ writer->writeTextElement(dbNamespace, "alt", atom->next()->string());
- writer.writeStartElement(dbNamespace, "imageobject");
- newLine(writer);
- writer.writeEmptyElement(dbNamespace, "imagedata");
- writer.writeAttribute("fileref", fileName);
- newLine(writer);
- writer.writeEndElement(); // imageobject
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "imageobject");
+ newLine();
+ writer->writeEmptyElement(dbNamespace, "imagedata");
+ writer->writeAttribute("fileref", fileName);
+ newLine();
+ writer->writeEndElement(); // imageobject
+ newLine();
setImageFileName(relative, fileName);
}
- writer.writeEndElement(); // [inline]mediaobject
+ writer->writeEndElement(); // [inline]mediaobject
if (atom->type() == Atom::Image)
- newLine(writer);
+ newLine();
} break;
case Atom::ImageText:
break;
case Atom::ImportantLeft:
case Atom::NoteLeft: {
QString tag = atom->type() == Atom::ImportantLeft ? "important" : "note";
- writer.writeStartElement(dbNamespace, tag);
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, tag);
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
} break;
case Atom::ImportantRight:
case Atom::NoteRight:
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // note/important
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // note/important
+ newLine();
break;
case Atom::LegaleseLeft:
case Atom::LegaleseRight:
@@ -494,156 +498,156 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
case Atom::NavLink: {
const Node *node = nullptr;
QString link = getLink(atom, relative, &node);
- beginLink(writer, link, node, relative); // Ended at Atom::FormattingRight
+ beginLink(link, node, relative); // Ended at Atom::FormattingRight
skipAhead = 1;
} break;
case Atom::LinkNode: {
const Node *node = CodeMarker::nodeForString(atom->string());
- beginLink(writer, linkForNode(node, relative), node, relative);
+ beginLink(linkForNode(node, relative), node, relative);
skipAhead = 1;
} break;
case Atom::ListLeft:
if (inPara) {
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
inPara = false;
}
if (atom->string() == ATOM_LIST_BULLET) {
- writer.writeStartElement(dbNamespace, "itemizedlist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
} else if (atom->string() == ATOM_LIST_TAG) {
- writer.writeStartElement(dbNamespace, "variablelist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "variablelist");
+ newLine();
} else if (atom->string() == ATOM_LIST_VALUE) {
- writer.writeStartElement(dbNamespace, "informaltable");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "thead");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "tr");
- newLine(writer);
- writer.writeTextElement(dbNamespace, "th", "Constant");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "informaltable");
+ newLine();
+ writer->writeStartElement(dbNamespace, "thead");
+ newLine();
+ writer->writeStartElement(dbNamespace, "tr");
+ newLine();
+ writer->writeTextElement(dbNamespace, "th", "Constant");
+ newLine();
threeColumnEnumValueTable_ = isThreeColumnEnumValueTable(atom);
if (threeColumnEnumValueTable_ && relative->nodeType() == Node::Enum) {
// If not in \enum topic, skip the value column
- writer.writeTextElement(dbNamespace, "th", "Value");
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "th", "Value");
+ newLine();
}
- writer.writeTextElement(dbNamespace, "th", "Description");
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "th", "Description");
+ newLine();
- writer.writeEndElement(); // tr
- newLine(writer);
- writer.writeEndElement(); // thead
- newLine(writer);
+ writer->writeEndElement(); // tr
+ newLine();
+ writer->writeEndElement(); // thead
+ newLine();
} else {
- writer.writeStartElement(dbNamespace, "orderedlist");
+ writer->writeStartElement(dbNamespace, "orderedlist");
if (atom->next() != nullptr && atom->next()->string().toInt() > 1)
- writer.writeAttribute("startingnumber", atom->next()->string());
+ writer->writeAttribute("startingnumber", atom->next()->string());
if (atom->string() == ATOM_LIST_UPPERALPHA)
- writer.writeAttribute("numeration", "upperalpha");
+ writer->writeAttribute("numeration", "upperalpha");
else if (atom->string() == ATOM_LIST_LOWERALPHA)
- writer.writeAttribute("numeration", "loweralpha");
+ writer->writeAttribute("numeration", "loweralpha");
else if (atom->string() == ATOM_LIST_UPPERROMAN)
- writer.writeAttribute("numeration", "upperroman");
+ writer->writeAttribute("numeration", "upperroman");
else if (atom->string() == ATOM_LIST_LOWERROMAN)
- writer.writeAttribute("numeration", "lowerroman");
+ writer->writeAttribute("numeration", "lowerroman");
else // (atom->string() == ATOM_LIST_NUMERIC)
- writer.writeAttribute("numeration", "arabic");
+ writer->writeAttribute("numeration", "arabic");
- newLine(writer);
+ newLine();
}
break;
case Atom::ListItemNumber:
break;
case Atom::ListTagLeft:
if (atom->string() == ATOM_LIST_TAG) {
- writer.writeStartElement(dbNamespace, "varlistentry");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "item");
+ writer->writeStartElement(dbNamespace, "varlistentry");
+ newLine();
+ writer->writeStartElement(dbNamespace, "item");
} else { // (atom->string() == ATOM_LIST_VALUE)
QPair<QString, int> pair = getAtomListValue(atom);
skipAhead = pair.second;
- writer.writeStartElement(dbNamespace, "tr");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "td");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- generateEnumValue(writer, pair.first, relative);
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // td
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "tr");
+ newLine();
+ writer->writeStartElement(dbNamespace, "td");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ generateEnumValue(pair.first, relative);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // td
+ newLine();
if (relative->nodeType() == Node::Enum) {
const auto enume = static_cast<const EnumNode *>(relative);
QString itemValue = enume->itemValue(atom->next()->string());
- writer.writeStartElement(dbNamespace, "td");
+ writer->writeStartElement(dbNamespace, "td");
if (itemValue.isEmpty())
- writer.writeCharacters("?");
+ writer->writeCharacters("?");
else
- writer.writeTextElement(dbNamespace, "code", itemValue);
- writer.writeEndElement(); // td
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "code", itemValue);
+ writer->writeEndElement(); // td
+ newLine();
}
}
break;
case Atom::SinceTagRight:
case Atom::ListTagRight:
if (atom->string() == ATOM_LIST_TAG) {
- writer.writeEndElement(); // item
- newLine(writer);
+ writer->writeEndElement(); // item
+ newLine();
}
break;
case Atom::ListItemLeft:
inListItemLineOpen = false;
if (atom->string() == ATOM_LIST_TAG) {
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
} else if (atom->string() == ATOM_LIST_VALUE) {
if (threeColumnEnumValueTable_) {
if (matchAhead(atom, Atom::ListItemRight)) {
- writer.writeEmptyElement(dbNamespace, "td");
- newLine(writer);
+ writer->writeEmptyElement(dbNamespace, "td");
+ newLine();
inListItemLineOpen = false;
} else {
- writer.writeStartElement(dbNamespace, "td");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "td");
+ newLine();
inListItemLineOpen = true;
}
}
} else {
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
}
// Don't skip a paragraph, DocBook requires them within list items.
break;
case Atom::ListItemRight:
if (atom->string() == ATOM_LIST_TAG) {
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // listitem
- newLine(writer);
- writer.writeEndElement(); // varlistentry
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // listitem
+ newLine();
+ writer->writeEndElement(); // varlistentry
+ newLine();
} else if (atom->string() == ATOM_LIST_VALUE) {
if (inListItemLineOpen) {
- writer.writeEndElement(); // td
- newLine(writer);
+ writer->writeEndElement(); // td
+ newLine();
inListItemLineOpen = false;
}
- writer.writeEndElement(); // tr
- newLine(writer);
+ writer->writeEndElement(); // tr
+ newLine();
} else {
- writer.writeEndElement(); // listitem
- newLine(writer);
+ writer->writeEndElement(); // listitem
+ newLine();
}
break;
case Atom::ListRight:
@@ -652,33 +656,33 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
// - ATOM_LIST_TAG: variablelist
// - ATOM_LIST_VALUE: informaltable
// - ATOM_LIST_NUMERIC: orderedlist
- writer.writeEndElement();
- newLine(writer);
+ writer->writeEndElement();
+ newLine();
break;
case Atom::Nop:
break;
case Atom::ParaLeft:
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "para");
inPara = true;
break;
case Atom::ParaRight:
- endLink(writer);
+ endLink();
if (inPara) {
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
inPara = false;
}
break;
case Atom::QuotationLeft:
- writer.writeStartElement(dbNamespace, "blockquote");
+ writer->writeStartElement(dbNamespace, "blockquote");
inPara = true;
break;
case Atom::QuotationRight:
- writer.writeEndElement(); // blockquote
- newLine(writer);
+ writer->writeEndElement(); // blockquote
+ newLine();
break;
case Atom::RawString:
- writer.writeCharacters(atom->string());
+ writer->writeCharacters(atom->string());
break;
case Atom::SectionLeft:
currentSectionLevel = atom->string().toInt() + hOffset(relative);
@@ -688,15 +692,16 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
// i.e. going to a new section, even deeper.
while (!sectionLevels.empty() && sectionLevels.top() >= currentSectionLevel) {
sectionLevels.pop();
- writer.writeEndElement(); // section
- newLine(writer);
+ writer->writeEndElement(); // section
+ newLine();
}
sectionLevels.push(currentSectionLevel);
- writer.writeStartElement(dbNamespace, "section");
- writer.writeAttribute("xml:id", Doc::canonicalTitle(Text::sectionHeading(atom).toString()));
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "section");
+ writer->writeAttribute("xml:id",
+ Doc::canonicalTitle(Text::sectionHeading(atom).toString()));
+ newLine();
// Unlike startSectionBegin, don't start a title here.
}
break;
@@ -707,30 +712,30 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
case Atom::SectionHeadingLeft:
// Level 1 is dealt with at the header level (info tag).
if (currentSectionLevel > 1) {
- writer.writeStartElement(dbNamespace, "title");
+ writer->writeStartElement(dbNamespace, "title");
inSectionHeading_ = true;
}
break;
case Atom::SectionHeadingRight:
// Level 1 is dealt with at the header level (info tag).
if (currentSectionLevel > 1) {
- writer.writeEndElement(); // title
- newLine(writer);
+ writer->writeEndElement(); // title
+ newLine();
inSectionHeading_ = false;
}
break;
case Atom::SidebarLeft:
- writer.writeStartElement(dbNamespace, "sidebar");
+ writer->writeStartElement(dbNamespace, "sidebar");
break;
case Atom::SidebarRight:
- writer.writeEndElement(); // sidebar
- newLine(writer);
+ writer->writeEndElement(); // sidebar
+ newLine();
break;
case Atom::String:
if (inLink && !inContents_ && !inSectionHeading_)
- generateLink(writer, atom);
+ generateLink(atom);
else
- writer.writeCharacters(atom->string());
+ writer->writeCharacters(atom->string());
break;
case Atom::TableLeft: {
QPair<QString, QString> pair = getTableWidthAttr(atom);
@@ -738,46 +743,46 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
QString width = pair.first;
if (inPara) {
- writer.writeEndElement(); // para or blockquote
- newLine(writer);
+ writer->writeEndElement(); // para or blockquote
+ newLine();
inPara = false;
}
- writer.writeStartElement(dbNamespace, "informaltable");
- writer.writeAttribute("style", attr);
+ writer->writeStartElement(dbNamespace, "informaltable");
+ writer->writeAttribute("style", attr);
if (!width.isEmpty())
- writer.writeAttribute("width", width);
- newLine(writer);
+ writer->writeAttribute("width", width);
+ newLine();
numTableRows_ = 0;
} break;
case Atom::TableRight:
- writer.writeEndElement(); // table
- newLine(writer);
+ writer->writeEndElement(); // table
+ newLine();
break;
case Atom::TableHeaderLeft:
- writer.writeStartElement(dbNamespace, "thead");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "tr");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "thead");
+ newLine();
+ writer->writeStartElement(dbNamespace, "tr");
+ newLine();
inTableHeader_ = true;
break;
case Atom::TableHeaderRight:
- writer.writeEndElement(); // tr
- newLine(writer);
+ writer->writeEndElement(); // tr
+ newLine();
if (matchAhead(atom, Atom::TableHeaderLeft)) {
skipAhead = 1;
- writer.writeStartElement(dbNamespace, "tr");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "tr");
+ newLine();
} else {
- writer.writeEndElement(); // thead
- newLine(writer);
+ writer->writeEndElement(); // thead
+ newLine();
inTableHeader_ = false;
}
break;
case Atom::TableRowLeft:
- writer.writeStartElement(dbNamespace, "tr");
+ writer->writeStartElement(dbNamespace, "tr");
if (atom->string().isEmpty()) {
- writer.writeAttribute("valign", "top");
+ writer->writeAttribute("valign", "top");
} else {
// Basic parsing of attributes, should be enough. The input string (atom->string())
// looks like:
@@ -792,60 +797,60 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
.arg(atom->string()));
}
for (int i = 0; i + 1 < args.size(); i += 2)
- writer.writeAttribute(args.at(i).chopped(1), args.at(i + 1));
+ writer->writeAttribute(args.at(i).chopped(1), args.at(i + 1));
}
- newLine(writer);
+ newLine();
break;
case Atom::TableRowRight:
- writer.writeEndElement(); // tr
- newLine(writer);
+ writer->writeEndElement(); // tr
+ newLine();
break;
case Atom::TableItemLeft:
- writer.writeStartElement(dbNamespace, inTableHeader_ ? "th" : "td");
+ writer->writeStartElement(dbNamespace, inTableHeader_ ? "th" : "td");
for (int i = 0; i < atom->count(); ++i) {
const QString &p = atom->string(i);
if (p.contains('=')) {
QStringList lp = p.split(QLatin1Char('='));
- writer.writeAttribute(lp.at(0), lp.at(1));
+ writer->writeAttribute(lp.at(0), lp.at(1));
} else {
QStringList spans = p.split(QLatin1Char(','));
if (spans.size() == 2) {
if (spans.at(0) != "1")
- writer.writeAttribute("colspan", spans.at(0));
+ writer->writeAttribute("colspan", spans.at(0));
if (spans.at(1) != "1")
- writer.writeAttribute("rowspan", spans.at(1));
+ writer->writeAttribute("rowspan", spans.at(1));
}
}
}
- newLine(writer);
+ newLine();
// No skipahead, as opposed to HTML: in DocBook, the text must be wrapped in paragraphs.
break;
case Atom::TableItemRight:
- writer.writeEndElement(); // th if inTableHeader_, otherwise td
- newLine(writer);
+ writer->writeEndElement(); // th if inTableHeader_, otherwise td
+ newLine();
break;
case Atom::TableOfContents:
break;
case Atom::Keyword:
break;
case Atom::Target:
- writeAnchor(writer, Doc::canonicalTitle(atom->string()));
+ writeAnchor(Doc::canonicalTitle(atom->string()));
break;
case Atom::UnhandledFormat:
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
- writer.writeCharacters("&lt;Missing DocBook&gt;");
- writer.writeEndElement(); // emphasis
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
+ writer->writeCharacters("&lt;Missing DocBook&gt;");
+ writer->writeEndElement(); // emphasis
break;
case Atom::UnknownCommand:
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
- writer.writeCharacters("&lt;Unknown command&gt;");
- writer.writeStartElement(dbNamespace, "code");
- writer.writeCharacters(atom->string());
- writer.writeEndElement(); // code
- writer.writeEndElement(); // emphasis
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
+ writer->writeCharacters("&lt;Unknown command&gt;");
+ writer->writeStartElement(dbNamespace, "code");
+ writer->writeCharacters(atom->string());
+ writer->writeEndElement(); // code
+ writer->writeEndElement(); // emphasis
break;
case Atom::QmlText:
case Atom::EndQmlText:
@@ -864,8 +869,7 @@ int DocBookGenerator::generateAtom(QXmlStreamWriter &writer, const Atom *atom, c
return skipAhead;
}
-void DocBookGenerator::generateClassHierarchy(QXmlStreamWriter &writer, const Node *relative,
- NodeMap &classMap)
+void DocBookGenerator::generateClassHierarchy(const Node *relative, NodeMap &classMap)
{
// From HtmlGenerator::generateClassHierarchy.
if (classMap.isEmpty())
@@ -883,23 +887,23 @@ void DocBookGenerator::generateClassHierarchy(QXmlStreamWriter &writer, const No
QStack<NodeMap> stack;
stack.push(topLevel);
- writer.writeStartElement(dbNamespace, "itemizedlist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
while (!stack.isEmpty()) {
if (stack.top().isEmpty()) {
stack.pop();
- writer.writeEndElement(); // listitem
- newLine(writer);
- writer.writeEndElement(); // itemizedlist
- newLine(writer);
+ writer->writeEndElement(); // listitem
+ newLine();
+ writer->writeEndElement(); // itemizedlist
+ newLine();
} else {
ClassNode *child = static_cast<ClassNode *>(*stack.top().begin());
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- generateFullName(writer, child, relative);
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ generateFullName(child, relative);
+ writer->writeEndElement(); // para
+ newLine();
// Don't close the listitem now, as DocBook requires sublists to reside in items.
stack.top().erase(stack.top().begin());
@@ -910,26 +914,26 @@ void DocBookGenerator::generateClassHierarchy(QXmlStreamWriter &writer, const No
}
if (!newTop.isEmpty()) {
stack.push(newTop);
- writer.writeStartElement(dbNamespace, "itemizedlist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
}
}
}
}
-void DocBookGenerator::generateLink(QXmlStreamWriter &writer, const Atom *atom)
+void DocBookGenerator::generateLink(const Atom *atom)
{
// From HtmlGenerator::generateLink.
QRegExp funcLeftParen("\\S(\\()");
if (funcLeftParen.indexIn(atom->string()) != -1) {
// hack for C++: move () outside of link
int k = funcLeftParen.pos(1);
- writer.writeCharacters(atom->string().left(k));
- writer.writeEndElement(); // link
+ writer->writeCharacters(atom->string().left(k));
+ writer->writeEndElement(); // link
inLink = false;
- writer.writeCharacters(atom->string().mid(k));
+ writer->writeCharacters(atom->string().mid(k));
} else {
- writer.writeCharacters(atom->string());
+ writer->writeCharacters(atom->string());
}
}
@@ -937,28 +941,26 @@ void DocBookGenerator::generateLink(QXmlStreamWriter &writer, const Atom *atom)
This version of the function is called when the \a link is known
to be correct.
*/
-void DocBookGenerator::beginLink(QXmlStreamWriter &writer, const QString &link, const Node *node,
- const Node *relative)
+void DocBookGenerator::beginLink(const QString &link, const Node *node, const Node *relative)
{
// From HtmlGenerator::beginLink.
- writer.writeStartElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "href", link);
+ writer->writeStartElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "href", link);
if (node && !(relative && node->status() == relative->status())
&& node->status() == Node::Obsolete)
- writer.writeAttribute("role", "obsolete");
+ writer->writeAttribute("role", "obsolete");
inLink = true;
}
-void DocBookGenerator::endLink(QXmlStreamWriter &writer)
+void DocBookGenerator::endLink()
{
// From HtmlGenerator::endLink.
if (inLink)
- writer.writeEndElement(); // link
+ writer->writeEndElement(); // link
inLink = false;
}
-void DocBookGenerator::generateList(QXmlStreamWriter &writer, const Node *relative,
- const QString &selector)
+void DocBookGenerator::generateList(const Node *relative, const QString &selector)
{
// From HtmlGenerator::generateList, without warnings, changing prototype.
CNMap cnm;
@@ -979,7 +981,7 @@ void DocBookGenerator::generateList(QXmlStreamWriter &writer, const Node *relati
nodeList.reserve(collectionList.size());
for (auto *collectionNode : collectionList)
nodeList.append(collectionNode);
- generateAnnotatedList(writer, relative, nodeList, selector);
+ generateAnnotatedList(relative, nodeList, selector);
} else {
/*
\generatelist {selector} is only allowed in a
@@ -989,7 +991,7 @@ void DocBookGenerator::generateList(QXmlStreamWriter &writer, const Node *relati
Node *n = const_cast<Node *>(relative);
auto *cn = static_cast<CollectionNode *>(n);
qdb_->mergeCollections(cn);
- generateAnnotatedList(writer, cn, cn->members(), selector);
+ generateAnnotatedList(cn, cn->members(), selector);
}
}
@@ -997,60 +999,60 @@ void DocBookGenerator::generateList(QXmlStreamWriter &writer, const Node *relati
Output an annotated list of the nodes in \a nodeMap.
A two-column table is output.
*/
-void DocBookGenerator::generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
- const NodeMultiMap &nmm, const QString &selector)
+void DocBookGenerator::generateAnnotatedList(const Node *relative, const NodeMultiMap &nmm,
+ const QString &selector)
{
// From HtmlGenerator::generateAnnotatedList
if (nmm.isEmpty())
return;
- generateAnnotatedList(writer, relative, nmm.values(), selector);
+ generateAnnotatedList(relative, nmm.values(), selector);
}
-void DocBookGenerator::generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
- const NodeList &nodeList, const QString &selector)
+void DocBookGenerator::generateAnnotatedList(const Node *relative, const NodeList &nodeList,
+ const QString &selector)
{
// From WebXMLGenerator::generateAnnotatedList.
- writer.writeStartElement(dbNamespace, "variablelist");
- writer.writeAttribute("role", selector);
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "variablelist");
+ writer->writeAttribute("role", selector);
+ newLine();
for (auto node : nodeList) {
- writer.writeStartElement(dbNamespace, "varlistentry");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "term");
- generateFullName(writer, node, relative);
- writer.writeEndElement(); // term
- newLine(writer);
-
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters(node->doc().briefText().toString());
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // listitem
- newLine(writer);
- writer.writeEndElement(); // varlistentry
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "varlistentry");
+ newLine();
+ writer->writeStartElement(dbNamespace, "term");
+ generateFullName(node, relative);
+ writer->writeEndElement(); // term
+ newLine();
+
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters(node->doc().briefText().toString());
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // listitem
+ newLine();
+ writer->writeEndElement(); // varlistentry
+ newLine();
}
- writer.writeEndElement(); // variablelist
- newLine(writer);
+ writer->writeEndElement(); // variablelist
+ newLine();
}
/*!
Outputs a series of annotated lists from the nodes in \a nmm,
divided into sections based by the key names in the multimap.
*/
-void DocBookGenerator::generateAnnotatedLists(QXmlStreamWriter &writer, const Node *relative,
- const NodeMultiMap &nmm, const QString &selector)
+void DocBookGenerator::generateAnnotatedLists(const Node *relative, const NodeMultiMap &nmm,
+ const QString &selector)
{
// From HtmlGenerator::generateAnnotatedLists.
for (const QString &name : nmm.uniqueKeys()) {
if (!name.isEmpty())
- startSection(writer, registerRef(name.toLower()), name);
- generateAnnotatedList(writer, relative, nmm.values(name), selector);
+ startSection(registerRef(name.toLower()), name);
+ generateAnnotatedList(relative, nmm.values(name), selector);
if (!name.isEmpty())
- endSection(writer);
+ endSection();
}
}
@@ -1064,9 +1066,9 @@ void DocBookGenerator::generateAnnotatedLists(QXmlStreamWriter &writer, const No
the name of the first and last classes in the class map
\a nmm.
*/
-void DocBookGenerator::generateCompactList(QXmlStreamWriter &writer, ListType listType,
- const Node *relative, const NodeMultiMap &nmm,
- const QString &commonPrefix, const QString &selector)
+void DocBookGenerator::generateCompactList(ListType listType, const Node *relative,
+ const NodeMultiMap &nmm, const QString &commonPrefix,
+ const QString &selector)
{
// From HtmlGenerator::generateCompactList. No more "includeAlphabet", this should be handled by
// the DocBook toolchain afterwards.
@@ -1144,31 +1146,31 @@ void DocBookGenerator::generateCompactList(QXmlStreamWriter &writer, ListType li
*/
if (curParOffset == 0) {
if (i > 0) {
- writer.writeEndElement(); // variablelist
- newLine(writer);
+ writer->writeEndElement(); // variablelist
+ newLine();
}
- writer.writeStartElement(dbNamespace, "variablelist");
- writer.writeAttribute("role", selector);
- newLine(writer);
- writer.writeStartElement(dbNamespace, "varlistentry");
- newLine(writer);
-
- writer.writeStartElement(dbNamespace, "term");
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
- writer.writeCharacters(paragraphName[curParNr]);
- writer.writeEndElement(); // emphasis
- writer.writeEndElement(); // term
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "variablelist");
+ writer->writeAttribute("role", selector);
+ newLine();
+ writer->writeStartElement(dbNamespace, "varlistentry");
+ newLine();
+
+ writer->writeStartElement(dbNamespace, "term");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
+ writer->writeCharacters(paragraphName[curParNr]);
+ writer->writeEndElement(); // emphasis
+ writer->writeEndElement(); // term
+ newLine();
}
/*
Output a listitem for the current offset in the current paragraph.
*/
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
if ((curParNr < NumParagraphs) && !paragraphName[curParNr].isEmpty()) {
NodeMultiMap::Iterator it;
NodeMultiMap::Iterator next;
@@ -1177,10 +1179,10 @@ void DocBookGenerator::generateCompactList(QXmlStreamWriter &writer, ListType li
++it;
if (listType == Generic) {
- generateFullName(writer, it.value(), relative);
- writer.writeStartElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "href", fullDocumentLocation(*it));
- writer.writeAttribute("type", targetType(it.value()));
+ generateFullName(it.value(), relative);
+ writer->writeStartElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "href", fullDocumentLocation(*it));
+ writer->writeAttribute("type", targetType(it.value()));
} else if (listType == Obsolete) {
QString fn = fileName(it.value(), fileExtension());
QString link;
@@ -1188,9 +1190,9 @@ void DocBookGenerator::generateCompactList(QXmlStreamWriter &writer, ListType li
link = QString("../" + it.value()->outputSubdirectory() + QLatin1Char('/'));
link += fn;
- writer.writeStartElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "href", link);
- writer.writeAttribute("type", targetType(it.value()));
+ writer->writeStartElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "href", link);
+ writer->writeAttribute("type", targetType(it.value()));
}
QStringList pieces;
@@ -1210,109 +1212,109 @@ void DocBookGenerator::generateCompactList(QXmlStreamWriter &writer, ListType li
} else
pieces = it.value()->fullName(relative).split("::");
- writer.writeCharacters(pieces.last());
- writer.writeEndElement(); // link
+ writer->writeCharacters(pieces.last());
+ writer->writeEndElement(); // link
if (pieces.size() > 1) {
- writer.writeCharacters(" (");
- generateFullName(writer, it.value()->parent(), relative);
- writer.writeCharacters(")");
+ writer->writeCharacters(" (");
+ generateFullName(it.value()->parent(), relative);
+ writer->writeCharacters(")");
}
}
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // listitem
- newLine(writer);
- writer.writeEndElement(); // varlistentry
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // listitem
+ newLine();
+ writer->writeEndElement(); // varlistentry
+ newLine();
curParOffset++;
}
if (nmm.count() > 0) {
- writer.writeEndElement(); // variablelist
+ writer->writeEndElement(); // variablelist
}
}
-void DocBookGenerator::generateFunctionIndex(QXmlStreamWriter &writer, const Node *relative)
+void DocBookGenerator::generateFunctionIndex(const Node *relative)
{
// From HtmlGenerator::generateFunctionIndex.
- writer.writeStartElement(dbNamespace, "simplelist");
- writer.writeAttribute("role", "functionIndex");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "simplelist");
+ writer->writeAttribute("role", "functionIndex");
+ newLine();
for (int i = 0; i < 26; i++) {
QChar ch('a' + i);
- writer.writeStartElement(dbNamespace, "member");
- writer.writeAttribute(xlinkNamespace, "href", QString("#") + ch);
- writer.writeCharacters(ch.toUpper());
- writer.writeEndElement(); // member
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "member");
+ writer->writeAttribute(xlinkNamespace, "href", QString("#") + ch);
+ writer->writeCharacters(ch.toUpper());
+ writer->writeEndElement(); // member
+ newLine();
}
- writer.writeEndElement(); // simplelist
- newLine(writer);
+ writer->writeEndElement(); // simplelist
+ newLine();
char nextLetter = 'a';
char currentLetter;
- writer.writeStartElement(dbNamespace, "itemizedlist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
NodeMapMap &funcIndex = qdb_->getFunctionIndex();
QMap<QString, NodeMap>::ConstIterator f = funcIndex.constBegin();
while (f != funcIndex.constEnd()) {
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters(f.key() + ": ");
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters(f.key() + ": ");
currentLetter = f.key()[0].unicode();
while (islower(currentLetter) && currentLetter >= nextLetter) {
- writeAnchor(writer, QString(nextLetter));
+ writeAnchor(QString(nextLetter));
nextLetter++;
}
NodeMap::ConstIterator s = (*f).constBegin();
while (s != (*f).constEnd()) {
- writer.writeCharacters(" ");
- generateFullName(writer, (*s)->parent(), relative);
+ writer->writeCharacters(" ");
+ generateFullName((*s)->parent(), relative);
++s;
}
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // listitem
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // listitem
+ newLine();
++f;
}
- writer.writeEndElement(); // itemizedlist
- newLine(writer);
+ writer->writeEndElement(); // itemizedlist
+ newLine();
}
-void DocBookGenerator::generateLegaleseList(QXmlStreamWriter &writer, const Node *relative)
+void DocBookGenerator::generateLegaleseList(const Node *relative)
{
// From HtmlGenerator::generateLegaleseList.
TextToNodeMap &legaleseTexts = qdb_->getLegaleseTexts();
QMap<Text, const Node *>::ConstIterator it = legaleseTexts.constBegin();
while (it != legaleseTexts.constEnd()) {
Text text = it.key();
- generateText(writer, text, relative);
- writer.writeStartElement(dbNamespace, "itemizedlist");
- newLine(writer);
+ generateText(text, relative);
+ writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
do {
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- generateFullName(writer, it.value(), relative);
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // listitem
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ generateFullName(it.value(), relative);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // listitem
+ newLine();
++it;
} while (it != legaleseTexts.constEnd() && it.key() == text);
- writer.writeEndElement(); // itemizedlist
- newLine(writer);
+ writer->writeEndElement(); // itemizedlist
+ newLine();
}
}
-void DocBookGenerator::generateBrief(QXmlStreamWriter &writer, const Node *node)
+void DocBookGenerator::generateBrief(const Node *node)
{
// From HtmlGenerator::generateBrief. Also see generateHeader, which is specifically dealing
// with the DocBook header (and thus wraps the brief in an abstract).
@@ -1322,24 +1324,24 @@ void DocBookGenerator::generateBrief(QXmlStreamWriter &writer, const Node *node)
if (!brief.lastAtom()->string().endsWith('.'))
brief << Atom(Atom::String, ".");
- writer.writeStartElement(dbNamespace, "para");
- generateText(writer, brief, node);
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "para");
+ generateText(brief, node);
+ writer->writeEndElement(); // para
+ newLine();
}
}
-bool DocBookGenerator::generateSince(QXmlStreamWriter &writer, const Node *node)
+bool DocBookGenerator::generateSince(const Node *node)
{
// From Generator::generateSince.
if (!node->since().isEmpty()) {
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters("This " + typeString(node) + " was introduced");
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters("This " + typeString(node) + " was introduced");
if (node->nodeType() == Node::Enum)
- writer.writeCharacters(" or modified");
- writer.writeCharacters(" in " + formatSince(node) + ".");
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeCharacters(" or modified");
+ writer->writeCharacters(" in " + formatSince(node) + ".");
+ writer->writeEndElement(); // para
+ newLine();
return true;
}
@@ -1347,36 +1349,36 @@ bool DocBookGenerator::generateSince(QXmlStreamWriter &writer, const Node *node)
return false;
}
-void DocBookGenerator::generateHeader(QXmlStreamWriter &writer, const QString &title,
- const QString &subTitle, const Node *node)
+void DocBookGenerator::generateHeader(const QString &title, const QString &subTitle,
+ const Node *node)
{
// From HtmlGenerator::generateHeader.
refMap.clear();
// Output the DocBook header.
- writer.writeStartElement(dbNamespace, "info");
- newLine(writer);
- writer.writeTextElement(dbNamespace, "title", title);
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "info");
+ newLine();
+ writer->writeTextElement(dbNamespace, "title", title);
+ newLine();
if (!subTitle.isEmpty()) {
- writer.writeTextElement(dbNamespace, "subtitle", subTitle);
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "subtitle", subTitle);
+ newLine();
}
if (!project.isEmpty()) {
- writer.writeTextElement(dbNamespace, "productname", project);
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "productname", project);
+ newLine();
}
if (!buildversion.isEmpty()) {
- writer.writeTextElement(dbNamespace, "edition", buildversion);
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "edition", buildversion);
+ newLine();
}
if (!projectDescription.isEmpty()) {
- writer.writeTextElement(dbNamespace, "titleabbrev", projectDescription);
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "titleabbrev", projectDescription);
+ newLine();
}
// Deal with links.
@@ -1396,15 +1398,15 @@ void DocBookGenerator::generateHeader(QXmlStreamWriter &writer, const QString &t
else
anchorPair = anchorForNode(linkNode);
- writer.writeStartElement(dbNamespace, "extendedlink");
- writer.writeEmptyElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "to", anchorPair.first);
- writer.writeAttribute(xlinkNamespace, "title", "prev");
+ writer->writeStartElement(dbNamespace, "extendedlink");
+ writer->writeEmptyElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "to", anchorPair.first);
+ writer->writeAttribute(xlinkNamespace, "title", "prev");
if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- writer.writeAttribute(xlinkNamespace, "label", anchorPair.second);
+ writer->writeAttribute(xlinkNamespace, "label", anchorPair.second);
else
- writer.writeAttribute(xlinkNamespace, "label", linkPair.second);
- writer.writeEndElement(); // extendedlink
+ writer->writeAttribute(xlinkNamespace, "label", linkPair.second);
+ writer->writeEndElement(); // extendedlink
}
if (node->links().contains(Node::NextLink)) {
linkPair = node->links()[Node::NextLink];
@@ -1414,15 +1416,15 @@ void DocBookGenerator::generateHeader(QXmlStreamWriter &writer, const QString &t
else
anchorPair = anchorForNode(linkNode);
- writer.writeStartElement(dbNamespace, "extendedlink");
- writer.writeEmptyElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "to", anchorPair.first);
- writer.writeAttribute(xlinkNamespace, "title", "prev");
+ writer->writeStartElement(dbNamespace, "extendedlink");
+ writer->writeEmptyElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "to", anchorPair.first);
+ writer->writeAttribute(xlinkNamespace, "title", "prev");
if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- writer.writeAttribute(xlinkNamespace, "label", anchorPair.second);
+ writer->writeAttribute(xlinkNamespace, "label", anchorPair.second);
else
- writer.writeAttribute(xlinkNamespace, "label", linkPair.second);
- writer.writeEndElement(); // extendedlink
+ writer->writeAttribute(xlinkNamespace, "label", linkPair.second);
+ writer->writeEndElement(); // extendedlink
}
if (node->links().contains(Node::StartLink)) {
linkPair = node->links()[Node::StartLink];
@@ -1432,15 +1434,15 @@ void DocBookGenerator::generateHeader(QXmlStreamWriter &writer, const QString &t
else
anchorPair = anchorForNode(linkNode);
- writer.writeStartElement(dbNamespace, "extendedlink");
- writer.writeEmptyElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "to", anchorPair.first);
- writer.writeAttribute(xlinkNamespace, "title", "start");
+ writer->writeStartElement(dbNamespace, "extendedlink");
+ writer->writeEmptyElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "to", anchorPair.first);
+ writer->writeAttribute(xlinkNamespace, "title", "start");
if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- writer.writeAttribute(xlinkNamespace, "label", anchorPair.second);
+ writer->writeAttribute(xlinkNamespace, "label", anchorPair.second);
else
- writer.writeAttribute(xlinkNamespace, "label", linkPair.second);
- writer.writeEndElement(); // extendedlink
+ writer->writeAttribute(xlinkNamespace, "label", linkPair.second);
+ writer->writeEndElement(); // extendedlink
}
}
@@ -1451,8 +1453,8 @@ void DocBookGenerator::generateHeader(QXmlStreamWriter &writer, const QString &t
// abstracts only happen in the header (info tag), slightly different tags must be used at
// other places. Also includes code from HtmlGenerator::generateCppReferencePage to handle
// the name spaces.
- writer.writeStartElement(dbNamespace, "abstract");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "abstract");
+ newLine();
bool generatedSomething = false;
@@ -1478,55 +1480,55 @@ void DocBookGenerator::generateHeader(QXmlStreamWriter &writer, const QString &t
if (!brief.lastAtom()->string().endsWith('.'))
brief << Atom(Atom::String, ".");
- writer.writeStartElement(dbNamespace, "para");
- generateText(writer, brief, node);
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "para");
+ generateText(brief, node);
+ writer->writeEndElement(); // para
+ newLine();
generatedSomething = true;
}
// Generate other paragraphs that should go into the abstract.
- generatedSomething |= generateStatus(writer, node);
- generatedSomething |= generateSince(writer, node);
- generatedSomething |= generateThreadSafeness(writer, node);
+ generatedSomething |= generateStatus(node);
+ generatedSomething |= generateSince(node);
+ generatedSomething |= generateThreadSafeness(node);
// An abstract cannot be empty, hence use the project description.
if (!generatedSomething)
- writer.writeTextElement(dbNamespace, "para", projectDescription + ".");
+ writer->writeTextElement(dbNamespace, "para", projectDescription + ".");
- writer.writeEndElement(); // abstract
- newLine(writer);
+ writer->writeEndElement(); // abstract
+ newLine();
}
// End of the DocBook header.
- writer.writeEndElement(); // info
- newLine(writer);
+ writer->writeEndElement(); // info
+ newLine();
}
-void DocBookGenerator::closeTextSections(QXmlStreamWriter &writer)
+void DocBookGenerator::closeTextSections()
{
while (!sectionLevels.isEmpty()) {
sectionLevels.pop();
- endSection(writer);
+ endSection();
}
}
-void DocBookGenerator::generateFooter(QXmlStreamWriter &writer)
+void DocBookGenerator::generateFooter()
{
- closeTextSections(writer);
- writer.writeEndElement(); // article
+ closeTextSections();
+ writer->writeEndElement(); // article
}
-static void generateSimpleLink(QXmlStreamWriter &writer, const QString &href, const QString &text)
+void DocBookGenerator::generateSimpleLink(const QString &href, const QString &text)
{
- writer.writeStartElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "href", href);
- writer.writeCharacters(text);
- writer.writeEndElement(); // link
+ writer->writeStartElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "href", href);
+ writer->writeCharacters(text);
+ writer->writeEndElement(); // link
}
-void DocBookGenerator::generateObsoleteMembers(QXmlStreamWriter &writer, const Sections &sections)
+void DocBookGenerator::generateObsoleteMembers(const Sections &sections)
{
// From HtmlGenerator::generateObsoleteMembersFile.
SectionPtrVector summary_spv; // Summaries are ignored in DocBook (table of contents).
@@ -1541,37 +1543,37 @@ void DocBookGenerator::generateObsoleteMembers(QXmlStreamWriter &writer, const S
link += fileName(aggregate, fileExtension());
aggregate->setObsoleteLink(link);
- startSection(writer, "obsolete", "Obsolete Members for " + aggregate->name());
+ startSection("obsolete", "Obsolete Members for " + aggregate->name());
- writer.writeStartElement(dbNamespace, "para");
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
- writer.writeCharacters("The following members of class ");
- generateSimpleLink(writer, linkForNode(aggregate, nullptr), aggregate->name());
- writer.writeCharacters(" are obsolete.");
- writer.writeEndElement(); // emphasis bold
- writer.writeCharacters(" They are provided to keep old source code working. "
- "We strongly advise against using them in new code.");
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
+ writer->writeCharacters("The following members of class ");
+ generateSimpleLink(linkForNode(aggregate, nullptr), aggregate->name());
+ writer->writeCharacters(" are obsolete.");
+ writer->writeEndElement(); // emphasis bold
+ writer->writeCharacters(" They are provided to keep old source code working. "
+ "We strongly advise against using them in new code.");
+ writer->writeEndElement(); // para
+ newLine();
for (int i = 0; i < details_spv.size(); ++i) {
QString title = details_spv.at(i)->title();
QString ref = registerRef(title.toLower());
- startSection(writer, ref, title);
+ startSection(ref, title);
const NodeVector &members = details_spv.at(i)->obsoleteMembers();
NodeVector::ConstIterator m = members.constBegin();
while (m != members.constEnd()) {
if ((*m)->access() != Node::Private)
- generateDetailedMember(writer, *m, aggregate);
+ generateDetailedMember(*m, aggregate);
++m;
}
- endSection(writer);
+ endSection();
}
- endSection(writer);
+ endSection();
}
/*!
@@ -1582,8 +1584,7 @@ void DocBookGenerator::generateObsoleteMembers(QXmlStreamWriter &writer, const S
Note that this function currently only handles correctly the
case where \a status is \c {Section::Obsolete}.
*/
-void DocBookGenerator::generateObsoleteQmlMembers(QXmlStreamWriter &writer,
- const Sections &sections)
+void DocBookGenerator::generateObsoleteQmlMembers(const Sections &sections)
{
// From HtmlGenerator::generateObsoleteQmlMembersFile.
SectionPtrVector summary_spv; // Summaries are not useful in DocBook.
@@ -1600,34 +1601,34 @@ void DocBookGenerator::generateObsoleteQmlMembers(QXmlStreamWriter &writer,
link += fn;
aggregate->setObsoleteLink(link);
- startSection(writer, "obsolete", "Obsolete Members for " + aggregate->name());
+ startSection("obsolete", "Obsolete Members for " + aggregate->name());
- writer.writeStartElement(dbNamespace, "para");
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
- writer.writeCharacters("The following members of QML type ");
- generateSimpleLink(writer, linkForNode(aggregate, nullptr), aggregate->name());
- writer.writeCharacters(" are obsolete.");
- writer.writeEndElement(); // emphasis bold
- writer.writeCharacters("They are provided to keep old source code working. "
- "We strongly advise against using them in new code.");
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
+ writer->writeCharacters("The following members of QML type ");
+ generateSimpleLink(linkForNode(aggregate, nullptr), aggregate->name());
+ writer->writeCharacters(" are obsolete.");
+ writer->writeEndElement(); // emphasis bold
+ writer->writeCharacters("They are provided to keep old source code working. "
+ "We strongly advise against using them in new code.");
+ writer->writeEndElement(); // para
+ newLine();
for (auto i : details_spv) {
QString ref = registerRef(i->title().toLower());
- startSection(writer, ref, i->title());
+ startSection(ref, i->title());
NodeVector::ConstIterator m = i->members().constBegin();
while (m != i->members().constEnd()) {
- generateDetailedQmlMember(writer, *m, aggregate);
+ generateDetailedQmlMember(*m, aggregate);
++m;
}
- endSection(writer);
+ endSection();
}
- endSection(writer);
+ endSection();
}
static QString nodeToSynopsisTag(const Node *node)
@@ -1661,36 +1662,35 @@ static QString nodeToSynopsisTag(const Node *node)
return QStringLiteral("synopsis");
}
-void generateStartRequisite(QXmlStreamWriter &writer, const QString &description)
+void DocBookGenerator::generateStartRequisite(const QString &description)
{
- writer.writeStartElement(dbNamespace, "varlistentry");
- newLine(writer);
- writer.writeTextElement(dbNamespace, "term", description);
- newLine(writer);
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "varlistentry");
+ newLine();
+ writer->writeTextElement(dbNamespace, "term", description);
+ newLine();
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
}
-void generateEndRequisite(QXmlStreamWriter &writer)
+void DocBookGenerator::generateEndRequisite()
{
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // listitem
- newLine(writer);
- writer.writeEndElement(); // varlistentry
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // listitem
+ newLine();
+ writer->writeEndElement(); // varlistentry
+ newLine();
}
-void generateRequisite(QXmlStreamWriter &writer, const QString &description, const QString &value)
+void DocBookGenerator::generateRequisite(const QString &description, const QString &value)
{
- generateStartRequisite(writer, description);
- writer.writeCharacters(value);
- generateEndRequisite(writer);
+ generateStartRequisite(description);
+ writer->writeCharacters(value);
+ generateEndRequisite();
}
-void DocBookGenerator::generateSortedNames(QXmlStreamWriter &writer, const ClassNode *cn,
- const QVector<RelatedClass> &rc)
+void DocBookGenerator::generateSortedNames(const ClassNode *cn, const QVector<RelatedClass> &rc)
{
// From Generator::appendSortedNames.
QMap<QString, ClassNode *> classMap;
@@ -1709,13 +1709,12 @@ void DocBookGenerator::generateSortedNames(QXmlStreamWriter &writer, const Class
int index = 0;
for (const QString &className : classNames) {
- generateFullName(writer, classMap.value(className), cn);
- writer.writeCharacters(comma(index++, classNames.count()));
+ generateFullName(classMap.value(className), cn);
+ writer->writeCharacters(comma(index++, classNames.count()));
}
}
-void DocBookGenerator::generateSortedQmlNames(QXmlStreamWriter &writer, const Node *base,
- const NodeList &subs)
+void DocBookGenerator::generateSortedQmlNames(const Node *base, const NodeList &subs)
{
// From Generator::appendSortedQmlNames.
QMap<QString, Node *> classMap;
@@ -1730,30 +1729,30 @@ void DocBookGenerator::generateSortedQmlNames(QXmlStreamWriter &writer, const No
names.sort();
for (const QString &name : names) {
- generateFullName(writer, classMap.value(name), base);
- writer.writeCharacters(comma(index++, names.count()));
+ generateFullName(classMap.value(name), base);
+ writer->writeCharacters(comma(index++, names.count()));
}
}
/*!
Lists the required imports and includes.
*/
-void DocBookGenerator::generateRequisites(QXmlStreamWriter &writer, const Aggregate *aggregate)
+void DocBookGenerator::generateRequisites(const Aggregate *aggregate)
{
// Adapted from HtmlGenerator::generateRequisites, but simplified: no need to store all the
// elements, they can be produced one by one.
- writer.writeStartElement(dbNamespace, "variablelist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "variablelist");
+ newLine();
// Includes.
if (!aggregate->includeFiles().isEmpty()) {
for (const QString &include : aggregate->includeFiles())
- generateRequisite(writer, "Header", include);
+ generateRequisite("Header", include);
}
// Since and project.
if (!aggregate->since().isEmpty())
- generateRequisite(writer, "Since", formatSince(aggregate));
+ generateRequisite("Since", formatSince(aggregate));
if (aggregate->isClassNode() || aggregate->isNamespace()) {
// QT variable.
@@ -1761,7 +1760,7 @@ void DocBookGenerator::generateRequisites(QXmlStreamWriter &writer, const Aggreg
const CollectionNode *cn =
qdb_->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
if (cn && !cn->qtVariable().isEmpty()) {
- generateRequisite(writer, "qmake", "QT += " + cn->qtVariable());
+ generateRequisite("qmake", "QT += " + cn->qtVariable());
}
}
}
@@ -1770,60 +1769,59 @@ void DocBookGenerator::generateRequisites(QXmlStreamWriter &writer, const Aggreg
// Instantiated by.
auto *classe = const_cast<ClassNode *>(static_cast<const ClassNode *>(aggregate));
if (classe->qmlElement() != nullptr && classe->status() != Node::Internal) {
- generateStartRequisite(writer, "Inherited By");
- generateSortedNames(writer, classe, classe->derivedClasses());
- generateEndRequisite(writer);
- generateRequisite(writer, "Instantiated By",
- fullDocumentLocation(classe->qmlElement()));
+ generateStartRequisite("Inherited By");
+ generateSortedNames(classe, classe->derivedClasses());
+ generateEndRequisite();
+ generateRequisite("Instantiated By", fullDocumentLocation(classe->qmlElement()));
}
// Inherits.
QVector<RelatedClass>::ConstIterator r;
if (!classe->baseClasses().isEmpty()) {
- generateStartRequisite(writer, "Inherits");
+ generateStartRequisite("Inherits");
r = classe->baseClasses().constBegin();
int index = 0;
while (r != classe->baseClasses().constEnd()) {
if ((*r).node_) {
- generateFullName(writer, (*r).node_, classe);
+ generateFullName((*r).node_, classe);
if ((*r).access_ == Node::Protected)
- writer.writeCharacters(" (protected)");
+ writer->writeCharacters(" (protected)");
else if ((*r).access_ == Node::Private)
- writer.writeCharacters(" (private)");
- writer.writeCharacters(comma(index++, classe->baseClasses().count()));
+ writer->writeCharacters(" (private)");
+ writer->writeCharacters(comma(index++, classe->baseClasses().count()));
}
++r;
}
- generateEndRequisite(writer);
+ generateEndRequisite();
}
// Inherited by.
if (!classe->derivedClasses().isEmpty()) {
- generateStartRequisite(writer, "Inherited By");
- generateSortedNames(writer, classe, classe->derivedClasses());
- generateEndRequisite(writer);
+ generateStartRequisite("Inherited By");
+ generateSortedNames(classe, classe->derivedClasses());
+ generateEndRequisite();
}
}
- writer.writeEndElement(); // variablelist
- newLine(writer);
+ writer->writeEndElement(); // variablelist
+ newLine();
}
/*!
Lists the required imports and includes.
*/
-void DocBookGenerator::generateQmlRequisites(QXmlStreamWriter &writer, const QmlTypeNode *qcn)
+void DocBookGenerator::generateQmlRequisites(const QmlTypeNode *qcn)
{
// From HtmlGenerator::generateQmlRequisites, but simplified: no need to store all the elements,
// they can be produced one by one.
if (!qcn)
return;
- writer.writeStartElement(dbNamespace, "variablelist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "variablelist");
+ newLine();
// Module name and version (i.e. import).
QString logicalModuleVersion;
@@ -1832,24 +1830,24 @@ void DocBookGenerator::generateQmlRequisites(QXmlStreamWriter &writer, const Qml
// skip import statement for \internal collections
if (!collection || !collection->isInternal() || showInternal_) {
logicalModuleVersion =
- collection ? collection->logicalModuleVersion() : qcn->logicalModuleVersion();
+ collection ? collection->logicalModuleVersion() : qcn->logicalModuleVersion();
- generateRequisite(writer, "Import Statement",
+ generateRequisite("Import Statement",
"import " + qcn->logicalModuleName() + QLatin1Char(' ')
+ logicalModuleVersion);
}
// Since and project.
if (!qcn->since().isEmpty())
- generateRequisite(writer, "Since:", formatSince(qcn));
+ generateRequisite("Since:", formatSince(qcn));
// Inherited by.
NodeList subs;
QmlTypeNode::subclasses(qcn, subs);
if (!subs.isEmpty()) {
- generateStartRequisite(writer, "Inherited By:");
- generateSortedQmlNames(writer, qcn, subs);
- generateEndRequisite(writer);
+ generateStartRequisite("Inherited By:");
+ generateSortedQmlNames(qcn, subs);
+ generateEndRequisite();
}
// Inherits.
@@ -1862,9 +1860,9 @@ void DocBookGenerator::generateQmlRequisites(QXmlStreamWriter &writer, const Qml
Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(base));
QString link = getAutoLink(&a, qcn, &otherNode);
- generateStartRequisite(writer, "Inherits:");
- generateSimpleLink(writer, link, base->name());
- generateEndRequisite(writer);
+ generateStartRequisite("Inherits:");
+ generateSimpleLink(link, base->name());
+ generateEndRequisite();
}
// Instantiates.
@@ -1874,16 +1872,16 @@ void DocBookGenerator::generateQmlRequisites(QXmlStreamWriter &writer, const Qml
Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn));
QString link = getAutoLink(&a, cn, &otherNode);
- generateStartRequisite(writer, "Instantiates:");
- generateSimpleLink(writer, fullDocumentLocation(cn), cn->name());
- generateEndRequisite(writer);
+ generateStartRequisite("Instantiates:");
+ generateSimpleLink(fullDocumentLocation(cn), cn->name());
+ generateEndRequisite();
}
- writer.writeEndElement(); // variablelist
- newLine(writer);
+ writer->writeEndElement(); // variablelist
+ newLine();
}
-bool DocBookGenerator::generateStatus(QXmlStreamWriter &writer, const Node *node)
+bool DocBookGenerator::generateStatus(const Node *node)
{
// From Generator::generateStatus.
switch (node->status()) {
@@ -1891,40 +1889,40 @@ bool DocBookGenerator::generateStatus(QXmlStreamWriter &writer, const Node *node
// Do nothing.
return false;
case Node::Preliminary:
- writer.writeStartElement(dbNamespace, "para");
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
- writer.writeCharacters("This " + typeString(node)
- + " is under development and is subject to change.");
- writer.writeEndElement(); // emphasis
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
+ writer->writeCharacters("This " + typeString(node)
+ + " is under development and is subject to change.");
+ writer->writeEndElement(); // emphasis
+ writer->writeEndElement(); // para
+ newLine();
return true;
case Node::Deprecated:
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "para");
if (node->isAggregate()) {
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
}
- writer.writeCharacters("This " + typeString(node) + " is deprecated.");
+ writer->writeCharacters("This " + typeString(node) + " is deprecated.");
if (node->isAggregate())
- writer.writeEndElement(); // emphasis
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeEndElement(); // emphasis
+ writer->writeEndElement(); // para
+ newLine();
return true;
case Node::Obsolete:
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "para");
if (node->isAggregate()) {
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
}
- writer.writeCharacters("This " + typeString(node) + " is obsolete.");
+ writer->writeCharacters("This " + typeString(node) + " is obsolete.");
if (node->isAggregate())
- writer.writeEndElement(); // emphasis
- writer.writeCharacters(" It is provided to keep old source code working. "
- "We strongly advise against using it in new code.");
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeEndElement(); // emphasis
+ writer->writeCharacters(" It is provided to keep old source code working. "
+ "We strongly advise against using it in new code.");
+ writer->writeEndElement(); // para
+ newLine();
return true;
case Node::Internal:
default:
@@ -1936,36 +1934,37 @@ bool DocBookGenerator::generateStatus(QXmlStreamWriter &writer, const Node *node
Generate a list of function signatures. The function nodes
are in \a nodes.
*/
-void DocBookGenerator::generateSignatureList(QXmlStreamWriter &writer, const NodeList &nodes)
+void DocBookGenerator::generateSignatureList(const NodeList &nodes)
{
// From Generator::signatureList and Generator::appendSignature.
- writer.writeStartElement(dbNamespace, "itemizedlist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
NodeList::ConstIterator n = nodes.constBegin();
while (n != nodes.constEnd()) {
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
- generateSimpleLink(writer, currentGenerator()->fullDocumentLocation(*n), (*n)->signature(false, true));
+ generateSimpleLink(currentGenerator()->fullDocumentLocation(*n),
+ (*n)->signature(false, true));
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // itemizedlist
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // itemizedlist
+ newLine();
++n;
}
- writer.writeEndElement(); // itemizedlist
- newLine(writer);
+ writer->writeEndElement(); // itemizedlist
+ newLine();
}
/*!
Generates text that explains how threadsafe and/or reentrant
\a node is.
*/
-bool DocBookGenerator::generateThreadSafeness(QXmlStreamWriter &writer, const Node *node)
+bool DocBookGenerator::generateThreadSafeness(const Node *node)
{
// From Generator::generateThreadSafeness
Node::ThreadSafeness ts = node->threadSafeness();
@@ -1978,91 +1977,91 @@ bool DocBookGenerator::generateThreadSafeness(QXmlStreamWriter &writer, const No
QString linkThreadSafe = getAutoLink(&threadSafeAtom, node, &threadSafeNode);
if (ts == Node::NonReentrant) {
- writer.writeStartElement(dbNamespace, "warning");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters("This " + typeString(node) + " is not ");
- generateSimpleLink(writer, linkReentrant, "reentrant");
- writer.writeCharacters(".");
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // warning
+ writer->writeStartElement(dbNamespace, "warning");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters("This " + typeString(node) + " is not ");
+ generateSimpleLink(linkReentrant, "reentrant");
+ writer->writeCharacters(".");
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // warning
return true;
}
if (ts == Node::Reentrant || ts == Node::ThreadSafe) {
- writer.writeStartElement(dbNamespace, "note");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "note");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
if (node->isAggregate()) {
- writer.writeCharacters("All functions in this " + typeString(node) + " are ");
+ writer->writeCharacters("All functions in this " + typeString(node) + " are ");
if (ts == Node::ThreadSafe)
- generateSimpleLink(writer, linkThreadSafe, "thread-safe");
+ generateSimpleLink(linkThreadSafe, "thread-safe");
else
- generateSimpleLink(writer, linkReentrant, "reentrant");
+ generateSimpleLink(linkReentrant, "reentrant");
NodeList reentrant;
NodeList threadsafe;
NodeList nonreentrant;
bool exceptions = hasExceptions(node, reentrant, threadsafe, nonreentrant);
if (!exceptions || (ts == Node::Reentrant && !threadsafe.isEmpty())) {
- writer.writeCharacters(".");
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeCharacters(".");
+ writer->writeEndElement(); // para
+ newLine();
} else {
- writer.writeCharacters(" with the following exceptions:");
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeCharacters(" with the following exceptions:");
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
if (ts == Node::Reentrant) {
if (!nonreentrant.isEmpty()) {
- writer.writeCharacters("These functions are not ");
- generateSimpleLink(writer, linkReentrant, "reentrant");
- writer.writeCharacters(":");
- writer.writeEndElement(); // para
- newLine(writer);
- generateSignatureList(writer, nonreentrant);
+ writer->writeCharacters("These functions are not ");
+ generateSimpleLink(linkReentrant, "reentrant");
+ writer->writeCharacters(":");
+ writer->writeEndElement(); // para
+ newLine();
+ generateSignatureList(nonreentrant);
}
if (!threadsafe.isEmpty()) {
- writer.writeCharacters("These functions are also ");
- generateSimpleLink(writer, linkThreadSafe, "thread-safe");
- writer.writeCharacters(":");
- writer.writeEndElement(); // para
- newLine(writer);
- generateSignatureList(writer, threadsafe);
+ writer->writeCharacters("These functions are also ");
+ generateSimpleLink(linkThreadSafe, "thread-safe");
+ writer->writeCharacters(":");
+ writer->writeEndElement(); // para
+ newLine();
+ generateSignatureList(threadsafe);
}
} else { // thread-safe
if (!reentrant.isEmpty()) {
- writer.writeCharacters("These functions are only ");
- generateSimpleLink(writer, linkReentrant, "reentrant");
- writer.writeCharacters(":");
- writer.writeEndElement(); // para
- newLine(writer);
- generateSignatureList(writer, reentrant);
+ writer->writeCharacters("These functions are only ");
+ generateSimpleLink(linkReentrant, "reentrant");
+ writer->writeCharacters(":");
+ writer->writeEndElement(); // para
+ newLine();
+ generateSignatureList(reentrant);
}
if (!nonreentrant.isEmpty()) {
- writer.writeCharacters("These functions are not ");
- generateSimpleLink(writer, linkReentrant, "reentrant");
- writer.writeCharacters(":");
- writer.writeEndElement(); // para
- newLine(writer);
- generateSignatureList(writer, nonreentrant);
+ writer->writeCharacters("These functions are not ");
+ generateSimpleLink(linkReentrant, "reentrant");
+ writer->writeCharacters(":");
+ writer->writeEndElement(); // para
+ newLine();
+ generateSignatureList(nonreentrant);
}
}
}
} else {
- writer.writeCharacters("This " + typeString(node) + " is ");
+ writer->writeCharacters("This " + typeString(node) + " is ");
if (ts == Node::ThreadSafe)
- generateSimpleLink(writer, linkThreadSafe, "thread-safe");
+ generateSimpleLink(linkThreadSafe, "thread-safe");
else
- generateSimpleLink(writer, linkReentrant, "reentrant");
- writer.writeCharacters(".");
- writer.writeEndElement(); // para
- newLine(writer);
+ generateSimpleLink(linkReentrant, "reentrant");
+ writer->writeCharacters(".");
+ writer->writeEndElement(); // para
+ newLine();
}
- writer.writeEndElement(); // note
+ writer->writeEndElement(); // note
return true;
}
@@ -2074,7 +2073,7 @@ bool DocBookGenerator::generateThreadSafeness(QXmlStreamWriter &writer, const No
Generate the body of the documentation from the qdoc comment
found with the entity represented by the \a node.
*/
-void DocBookGenerator::generateBody(QXmlStreamWriter &writer, const Node *node)
+void DocBookGenerator::generateBody(const Node *node)
{
// From Generator::generateBody, without warnings.
if (!node->hasDoc() && !node->hasSharedDoc()) {
@@ -2102,16 +2101,16 @@ void DocBookGenerator::generateBody(QXmlStreamWriter &writer, const Node *node)
}
if (!t.isEmpty())
- writer.writeTextElement(dbNamespace, "para", t);
+ writer->writeTextElement(dbNamespace, "para", t);
}
} else if (!node->isSharingComment()) {
if (node->nodeType() == Node::Function) {
const auto func = static_cast<const FunctionNode *>(node);
if (!func->overridesThis().isEmpty())
- generateReimplementsClause(writer, func);
+ generateReimplementsClause(func);
}
- if (!generateText(writer, node->doc().body(), node)) {
+ if (!generateText(node->doc().body(), node)) {
if (node->isMarkedReimp())
return;
}
@@ -2119,7 +2118,7 @@ void DocBookGenerator::generateBody(QXmlStreamWriter &writer, const Node *node)
// Warning generation skipped with respect to Generator::generateBody.
}
- generateRequiredLinks(writer, node);
+ generateRequiredLinks(node);
}
/*!
@@ -2128,7 +2127,7 @@ void DocBookGenerator::generateBody(QXmlStreamWriter &writer, const Node *node)
Does nothing for non-example nodes.
*/
-void DocBookGenerator::generateRequiredLinks(QXmlStreamWriter &writer, const Node *node)
+void DocBookGenerator::generateRequiredLinks(const Node *node)
{
// From Generator::generateRequiredLinks.
if (!node->isExample())
@@ -2139,11 +2138,11 @@ void DocBookGenerator::generateRequiredLinks(QXmlStreamWriter &writer, const Nod
if (exampleUrl.isEmpty()) {
if (!en->noAutoList()) {
- generateFileList(writer, en, false); // files
- generateFileList(writer, en, true); // images
+ generateFileList(en, false); // files
+ generateFileList(en, true); // images
}
} else {
- generateLinkToExample(writer, en, exampleUrl);
+ generateLinkToExample(en, exampleUrl);
}
}
@@ -2153,8 +2152,7 @@ void DocBookGenerator::generateRequiredLinks(QXmlStreamWriter &writer, const Nod
the path is appended to \a baseUrl, after a '/' character if \a baseUrl did
not already end in one.
*/
-void DocBookGenerator::generateLinkToExample(QXmlStreamWriter &writer, const ExampleNode *en,
- const QString &baseUrl)
+void DocBookGenerator::generateLinkToExample(const ExampleNode *en, const QString &baseUrl)
{
// From Generator::generateLinkToExample.
QString exampleUrl(baseUrl);
@@ -2179,14 +2177,14 @@ void DocBookGenerator::generateLinkToExample(QXmlStreamWriter &writer, const Exa
<< Config::instance().getString(CONFIG_EXAMPLESINSTALLPATH) << en->name();
path.removeAll({});
- writer.writeStartElement(dbNamespace, "para");
- writer.writeStartElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "href",
- exampleUrl.replace(placeholder, path.join(separator)));
- writer.writeCharacters(link);
- writer.writeEndElement(); // link
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "href",
+ exampleUrl.replace(placeholder, path.join(separator)));
+ writer->writeCharacters(link);
+ writer->writeEndElement(); // link
+ writer->writeEndElement(); // para
+ newLine();
}
/*!
@@ -2196,8 +2194,7 @@ void DocBookGenerator::generateLinkToExample(QXmlStreamWriter &writer, const Exa
example. The images are copied into a subtree of
\c{...doc/html/images/used-in-examples/...}
*/
-void DocBookGenerator::generateFileList(QXmlStreamWriter &writer, const ExampleNode *en,
- bool images)
+void DocBookGenerator::generateFileList(const ExampleNode *en, bool images)
{
// From Generator::generateFileList
QString tag;
@@ -2214,12 +2211,12 @@ void DocBookGenerator::generateFileList(QXmlStreamWriter &writer, const ExampleN
if (paths.isEmpty())
return;
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters(tag);
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters(tag);
+ writer->writeEndElement(); // para
+ newLine();
- writer.writeStartElement(dbNamespace, "itemizedlist");
+ writer->writeStartElement(dbNamespace, "itemizedlist");
for (const auto &file : qAsConst(paths)) {
if (images) {
@@ -2229,31 +2226,34 @@ void DocBookGenerator::generateFileList(QXmlStreamWriter &writer, const ExampleN
generateExampleFilePage(en, file);
}
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- generateSimpleLink(writer, file, file);
- writer.writeEndElement(); // para
- writer.writeEndElement(); // listitem
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ generateSimpleLink(file, file);
+ writer->writeEndElement(); // para
+ writer->writeEndElement(); // listitem
+ newLine();
}
- writer.writeEndElement(); // itemizedlist
- newLine(writer);
+ writer->writeEndElement(); // itemizedlist
+ newLine();
}
/*!
Generate a file with the contents of a C++ or QML source file.
*/
-void DocBookGenerator::generateExampleFilePage(const Node *node, const QString &file)
+void DocBookGenerator::generateExampleFilePage(const Node *node, const QString &file,
+ CodeMarker *marker)
{
+ Q_UNUSED(marker);
+ Q_ASSERT(writer == nullptr);
// From HtmlGenerator::generateExampleFilePage.
if (!node->isExample())
return;
const auto en = static_cast<const ExampleNode *>(node);
- QXmlStreamWriter *writer = startDocument(en, file);
- generateHeader(*writer, en->fullTitle(), en->subtitle(), en);
+ writer = startDocument(en, file);
+ generateHeader(en->fullTitle(), en->subtitle(), en);
Text text;
Quoter quoter;
@@ -2262,12 +2262,12 @@ void DocBookGenerator::generateExampleFilePage(const Node *node, const QString &
CodeMarker *codeMarker = CodeMarker::markerForFileName(file);
text << Atom(codeMarker->atomType(), code);
Atom a(codeMarker->atomType(), code);
- generateText(*writer, text, en);
+ generateText(text, en);
- endDocument(writer);
+ endDocument();
}
-void DocBookGenerator::generateReimplementsClause(QXmlStreamWriter &writer, const FunctionNode *fn)
+void DocBookGenerator::generateReimplementsClause(const FunctionNode *fn)
{
// From Generator::generateReimplementsClause, without warning generation.
if (!fn->overridesThis().isEmpty()) {
@@ -2276,85 +2276,87 @@ void DocBookGenerator::generateReimplementsClause(QXmlStreamWriter &writer, cons
const FunctionNode *overrides = cn->findOverriddenFunction(fn);
if (overrides && !overrides->isPrivate() && !overrides->parent()->isPrivate()) {
if (overrides->hasDoc()) {
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters("Reimplements: ");
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters("Reimplements: ");
QString fullName =
overrides->parent()->name() + "::" + overrides->signature(false, true);
- generateFullName(writer, overrides->parent(), fullName, overrides);
- writer.writeCharacters(".");
+ generateFullName(overrides->parent(), fullName, overrides);
+ writer->writeCharacters(".");
return;
}
}
const PropertyNode *sameName = cn->findOverriddenProperty(fn);
if (sameName && sameName->hasDoc()) {
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters("Reimplements an access function for property: ");
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters("Reimplements an access function for property: ");
QString fullName = sameName->parent()->name() + "::" + sameName->name();
- generateFullName(writer, sameName->parent(), fullName, overrides);
- writer.writeCharacters(".");
+ generateFullName(sameName->parent(), fullName, overrides);
+ writer->writeCharacters(".");
return;
}
}
}
}
-void DocBookGenerator::generateAlsoList(QXmlStreamWriter &writer, const Node *node)
+void DocBookGenerator::generateAlsoList(const Node *node, CodeMarker *marker)
{
+ Q_UNUSED(marker);
// From Generator::generateAlsoList.
QVector<Text> alsoList = node->doc().alsoList();
supplementAlsoList(node, alsoList);
if (!alsoList.isEmpty()) {
- writer.writeStartElement(dbNamespace, "para");
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeCharacters("See also ");
- writer.writeEndElement(); // emphasis
- newLine(writer);
-
- writer.writeStartElement(dbNamespace, "simplelist");
- writer.writeAttribute("type", "vert");
- writer.writeAttribute("role", "see-also");
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeCharacters("See also ");
+ writer->writeEndElement(); // emphasis
+ newLine();
+
+ writer->writeStartElement(dbNamespace, "simplelist");
+ writer->writeAttribute("type", "vert");
+ writer->writeAttribute("role", "see-also");
for (const Text &text : alsoList) {
- writer.writeStartElement(dbNamespace, "member");
- generateText(writer, text, node);
- writer.writeEndElement(); // member
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "member");
+ generateText(text, node);
+ writer->writeEndElement(); // member
+ newLine();
}
- writer.writeEndElement(); // simplelist
- newLine(writer);
+ writer->writeEndElement(); // simplelist
+ newLine();
- writer.writeEndElement(); // para
+ writer->writeEndElement(); // para
}
}
/*!
Generate a list of maintainers in the output
*/
-void DocBookGenerator::generateMaintainerList(QXmlStreamWriter &writer, const Aggregate *node)
+void DocBookGenerator::generateMaintainerList(const Aggregate *node, CodeMarker *marker)
{
+ Q_UNUSED(marker);
// From Generator::generateMaintainerList.
QStringList sl = getMetadataElements(node, "maintainer");
if (!sl.isEmpty()) {
- writer.writeStartElement(dbNamespace, "para");
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeCharacters("Maintained by: ");
- writer.writeEndElement(); // emphasis
- newLine(writer);
-
- writer.writeStartElement(dbNamespace, "simplelist");
- writer.writeAttribute("type", "vert");
- writer.writeAttribute("role", "maintainer");
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeCharacters("Maintained by: ");
+ writer->writeEndElement(); // emphasis
+ newLine();
+
+ writer->writeStartElement(dbNamespace, "simplelist");
+ writer->writeAttribute("type", "vert");
+ writer->writeAttribute("role", "maintainer");
for (int i = 0; i < sl.size(); ++i) {
- writer.writeStartElement(dbNamespace, "member");
- writer.writeCharacters(sl.at(i));
- writer.writeEndElement(); // member
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "member");
+ writer->writeCharacters(sl.at(i));
+ writer->writeEndElement(); // member
+ newLine();
}
- writer.writeEndElement(); // simplelist
- newLine(writer);
+ writer->writeEndElement(); // simplelist
+ newLine();
- writer.writeEndElement(); // para
+ writer->writeEndElement(); // para
}
}
@@ -2365,22 +2367,21 @@ void DocBookGenerator::generateMaintainerList(QXmlStreamWriter &writer, const Ag
QXmlStreamWriter *DocBookGenerator::startGenericDocument(const Node *node, const QString &fileName)
{
QFile *outFile = openSubPageFile(node, fileName);
- auto writer = new QXmlStreamWriter(outFile);
+ writer = new QXmlStreamWriter(outFile);
writer->setAutoFormatting(false); // We need a precise handling of line feeds.
writer->writeStartDocument();
- newLine(*writer);
+ newLine();
writer->writeNamespace(dbNamespace, "db");
writer->writeNamespace(xlinkNamespace, "xlink");
writer->writeStartElement(dbNamespace, "article");
writer->writeAttribute("version", "5.2");
if (!naturalLanguage.isEmpty())
writer->writeAttribute("xml:lang", naturalLanguage);
- newLine(*writer);
+ newLine();
// Empty the section stack for the new document.
sectionLevels.resize(0);
-// sectionLevels.push(1);
return writer;
}
@@ -2397,12 +2398,13 @@ QXmlStreamWriter *DocBookGenerator::startDocument(const ExampleNode *en, const Q
return startGenericDocument(en, fileName);
}
-void DocBookGenerator::endDocument(QXmlStreamWriter *writer)
+void DocBookGenerator::endDocument()
{
writer->writeEndElement(); // article
writer->writeEndDocument();
writer->device()->close();
delete writer;
+ writer = nullptr;
}
/*!
@@ -2438,26 +2440,26 @@ void DocBookGenerator::generateCppReferencePage(Node *node)
subtitleText = fullTitle;
// Start producing the DocBook file.
- QXmlStreamWriter &writer = *startDocument(node);
+ writer = startDocument(node);
// Info container.
- generateHeader(writer, title, subtitleText, aggregate);
+ generateHeader(title, subtitleText, aggregate);
- generateRequisites(writer, aggregate);
- generateStatus(writer, aggregate);
+ generateRequisites(aggregate);
+ generateStatus(aggregate);
// Element synopsis.
- generateDocBookSynopsis(writer, node);
+ generateDocBookSynopsis(node);
// Actual content.
if (!aggregate->doc().isEmpty()) {
- startSection(writer, registerRef("details"), "Detailed Description");
+ startSection(registerRef("details"), "Detailed Description");
- generateBody(writer, aggregate);
- generateAlsoList(writer, aggregate);
- generateMaintainerList(writer, aggregate);
+ generateBody(aggregate);
+ generateAlsoList(aggregate);
+ generateMaintainerList(aggregate);
- endSection(writer);
+ endSection();
}
Sections sections(const_cast<Aggregate *>(aggregate));
@@ -2475,54 +2477,54 @@ void DocBookGenerator::generateCppReferencePage(Node *node)
if (!headerGenerated) {
// Equivalent to h2
- startSection(writer, registerRef(section->title().toLower()), section->title());
+ startSection(registerRef(section->title().toLower()), section->title());
headerGenerated = true;
}
if ((*member)->nodeType() != Node::Class) {
// This function starts its own section.
- generateDetailedMember(writer, *member, aggregate);
+ generateDetailedMember(*member, aggregate);
} else {
- startSectionBegin(writer);
- writer.writeCharacters("class ");
- generateFullName(writer, *member, aggregate);
- startSectionEnd(writer);
- generateBrief(writer, *member);
- endSection(writer);
+ startSectionBegin();
+ writer->writeCharacters("class ");
+ generateFullName(*member, aggregate);
+ startSectionEnd();
+ generateBrief(*member);
+ endSection();
}
++member;
}
if (headerGenerated)
- endSection(writer);
+ endSection();
++section;
}
- generateObsoleteMembers(writer, sections);
+ generateObsoleteMembers(sections);
- endDocument(&writer);
+ endDocument();
}
-void generateSynopsisInfo(QXmlStreamWriter &writer, const QString &key, const QString &value)
+void DocBookGenerator::generateSynopsisInfo(const QString &key, const QString &value)
{
- writer.writeStartElement(dbNamespace, "synopsisinfo");
- writer.writeAttribute(dbNamespace, "role", key);
- writer.writeCharacters(value);
- writer.writeEndElement(); // synopsisinfo
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "synopsisinfo");
+ writer->writeAttribute(dbNamespace, "role", key);
+ writer->writeCharacters(value);
+ writer->writeEndElement(); // synopsisinfo
+ newLine();
}
-void generateModifier(QXmlStreamWriter &writer, const QString &value)
+void DocBookGenerator::generateModifier(const QString &value)
{
- writer.writeTextElement(dbNamespace, "modifier", value);
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "modifier", value);
+ newLine();
}
/*!
Generate the metadata for the given \a node in DocBook.
*/
-void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const Node *node)
+void DocBookGenerator::generateDocBookSynopsis(const Node *node)
{
if (!node)
return;
@@ -2559,132 +2561,132 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
// Start the synopsis tag.
QString synopsisTag = nodeToSynopsisTag(node);
- writer.writeStartElement(dbNamespace, synopsisTag);
- newLine(writer);
+ writer->writeStartElement(dbNamespace, synopsisTag);
+ newLine();
// Name and basic properties of each tag (like types and parameters).
if (node->isClass()) {
- writer.writeStartElement(dbNamespace, "ooclass");
- writer.writeTextElement(dbNamespace, "classname", node->plainName());
- writer.writeEndElement(); // ooclass
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "ooclass");
+ writer->writeTextElement(dbNamespace, "classname", node->plainName());
+ writer->writeEndElement(); // ooclass
+ newLine();
} else if (node->isNamespace()) {
- writer.writeTextElement(dbNamespace, "namespacename", node->plainName());
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "namespacename", node->plainName());
+ newLine();
} else if (node->isQmlType()) {
- writer.writeStartElement(dbNamespace, "ooclass");
- writer.writeTextElement(dbNamespace, "classname", node->plainName());
- writer.writeEndElement(); // ooclass
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "ooclass");
+ writer->writeTextElement(dbNamespace, "classname", node->plainName());
+ writer->writeEndElement(); // ooclass
+ newLine();
if (!qcn->groupNames().isEmpty())
- writer.writeAttribute("groups", qcn->groupNames().join(QLatin1Char(',')));
+ writer->writeAttribute("groups", qcn->groupNames().join(QLatin1Char(',')));
} else if (node->isProperty()) {
- writer.writeTextElement(dbNamespace, "modifier", "(Qt property)");
- newLine(writer);
- writer.writeTextElement(dbNamespace, "type", propertyNode->dataType());
- newLine(writer);
- writer.writeTextElement(dbNamespace, "varname", node->plainName());
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "modifier", "(Qt property)");
+ newLine();
+ writer->writeTextElement(dbNamespace, "type", propertyNode->dataType());
+ newLine();
+ writer->writeTextElement(dbNamespace, "varname", node->plainName());
+ newLine();
} else if (node->isVariable()) {
if (variableNode->isStatic()) {
- writer.writeTextElement(dbNamespace, "modifier", "static");
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "modifier", "static");
+ newLine();
}
- writer.writeTextElement(dbNamespace, "type", variableNode->dataType());
- newLine(writer);
- writer.writeTextElement(dbNamespace, "varname", node->plainName());
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "type", variableNode->dataType());
+ newLine();
+ writer->writeTextElement(dbNamespace, "varname", node->plainName());
+ newLine();
} else if (node->isEnumType()) {
- writer.writeTextElement(dbNamespace, "enumname", node->plainName());
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "enumname", node->plainName());
+ newLine();
} else if (node->isQmlProperty()) {
QString name = node->name();
if (qpn->isAttached())
name.prepend(qpn->element() + QLatin1Char('.'));
- writer.writeTextElement(dbNamespace, "type", qpn->dataType());
- newLine(writer);
- writer.writeTextElement(dbNamespace, "varname", name);
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "type", qpn->dataType());
+ newLine();
+ writer->writeTextElement(dbNamespace, "varname", name);
+ newLine();
if (qpn->isAttached()) {
- writer.writeTextElement(dbNamespace, "modifier", "attached");
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "modifier", "attached");
+ newLine();
}
if ((const_cast<QmlPropertyNode *>(qpn))->isWritable()) {
- writer.writeTextElement(dbNamespace, "modifier", "writable");
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "modifier", "writable");
+ newLine();
}
if (qpn->isReadOnly()) {
- generateModifier(writer, "[read-only]");
- newLine(writer);
+ generateModifier("[read-only]");
+ newLine();
}
if (qpn->isDefault()) {
- generateModifier(writer, "[default]");
- newLine(writer);
+ generateModifier("[default]");
+ newLine();
}
} else if (node->isFunction()) {
if (functionNode->virtualness() != "non")
- generateModifier(writer, "virtual");
+ generateModifier("virtual");
if (functionNode->isConst())
- generateModifier(writer, "const");
+ generateModifier("const");
if (functionNode->isStatic())
- generateModifier(writer, "static");
+ generateModifier("static");
if (!functionNode->isMacro()) {
if (functionNode->returnType() == "void")
- writer.writeEmptyElement(dbNamespace, "void");
+ writer->writeEmptyElement(dbNamespace, "void");
else
- writer.writeTextElement(dbNamespace, "type", functionNode->returnType());
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "type", functionNode->returnType());
+ newLine();
}
// Remove two characters from the plain name to only get the name
// of the method without parentheses.
- writer.writeTextElement(dbNamespace, "methodname", node->plainName().chopped(2));
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "methodname", node->plainName().chopped(2));
+ newLine();
if (functionNode->isOverload())
- generateModifier(writer, "overload");
+ generateModifier("overload");
if (functionNode->isDefault())
- generateModifier(writer, "default");
+ generateModifier("default");
if (functionNode->isFinal())
- generateModifier(writer, "final");
+ generateModifier("final");
if (functionNode->isOverride())
- generateModifier(writer, "override");
+ generateModifier("override");
if (!functionNode->isMacro() && functionNode->parameters().isEmpty()) {
- writer.writeEmptyElement(dbNamespace, "void");
- newLine(writer);
+ writer->writeEmptyElement(dbNamespace, "void");
+ newLine();
}
const Parameters &lp = functionNode->parameters();
for (int i = 0; i < lp.count(); ++i) {
const Parameter &parameter = lp.at(i);
- writer.writeStartElement(dbNamespace, "methodparam");
- newLine(writer);
- writer.writeTextElement(dbNamespace, "type", parameter.type());
- newLine(writer);
- writer.writeTextElement(dbNamespace, "parameter", parameter.name());
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "methodparam");
+ newLine();
+ writer->writeTextElement(dbNamespace, "type", parameter.type());
+ newLine();
+ writer->writeTextElement(dbNamespace, "parameter", parameter.name());
+ newLine();
if (!parameter.defaultValue().isEmpty()) {
- writer.writeTextElement(dbNamespace, "initializer", parameter.defaultValue());
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "initializer", parameter.defaultValue());
+ newLine();
}
- writer.writeEndElement(); // methodparam
- newLine(writer);
+ writer->writeEndElement(); // methodparam
+ newLine();
}
- generateSynopsisInfo(writer, "meta", functionNode->metanessString());
+ generateSynopsisInfo("meta", functionNode->metanessString());
if (functionNode->isOverload())
- generateSynopsisInfo(writer, "overload-number",
+ generateSynopsisInfo("overload-number",
QString::number(functionNode->overloadNumber()));
if (functionNode->isRef())
- generateSynopsisInfo(writer, "refness", QString::number(1));
+ generateSynopsisInfo("refness", QString::number(1));
else if (functionNode->isRefRef())
- generateSynopsisInfo(writer, "refness", QString::number(2));
+ generateSynopsisInfo("refness", QString::number(2));
if (functionNode->hasAssociatedProperties()) {
QStringList associatedProperties;
@@ -2694,7 +2696,7 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
associatedProperties << pn->name();
}
associatedProperties.sort();
- generateSynopsisInfo(writer, "associated-property",
+ generateSynopsisInfo("associated-property",
associatedProperties.join(QLatin1Char(',')));
}
@@ -2708,51 +2710,51 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
signature += " = 0";
else if (functionNode->isDefault())
signature += " = default";
- generateSynopsisInfo(writer, "signature", signature);
+ generateSynopsisInfo("signature", signature);
} else {
node->doc().location().warning(tr("Unexpected node type in generateDocBookSynopsis: %1")
.arg(node->nodeTypeString()));
- newLine(writer);
+ newLine();
}
// Accessibility status.
if (!node->isPageNode() && !node->isCollectionNode()) {
switch (node->access()) {
case Node::Public:
- generateSynopsisInfo(writer, "access", "public");
+ generateSynopsisInfo("access", "public");
break;
case Node::Protected:
- generateSynopsisInfo(writer, "access", "protected");
+ generateSynopsisInfo("access", "protected");
break;
case Node::Private:
- generateSynopsisInfo(writer, "access", "private");
+ generateSynopsisInfo("access", "private");
break;
default:
break;
}
if (node->isAbstract())
- generateSynopsisInfo(writer, "abstract", "true");
+ generateSynopsisInfo("abstract", "true");
}
// Status.
switch (node->status()) {
case Node::Active:
- generateSynopsisInfo(writer, "status", "active");
+ generateSynopsisInfo("status", "active");
break;
case Node::Preliminary:
- generateSynopsisInfo(writer, "status", "preliminary");
+ generateSynopsisInfo("status", "preliminary");
break;
case Node::Deprecated:
- generateSynopsisInfo(writer, "status", "deprecated");
+ generateSynopsisInfo("status", "deprecated");
break;
case Node::Obsolete:
- generateSynopsisInfo(writer, "status", "obsolete");
+ generateSynopsisInfo("status", "obsolete");
break;
case Node::Internal:
- generateSynopsisInfo(writer, "status", "internal");
+ generateSynopsisInfo("status", "internal");
break;
default:
- generateSynopsisInfo(writer, "status", "main");
+ generateSynopsisInfo("status", "main");
break;
}
@@ -2761,12 +2763,12 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
// Includes.
if (!aggregate->includeFiles().isEmpty()) {
for (const QString &include : aggregate->includeFiles())
- generateSynopsisInfo(writer, "headers", include);
+ generateSynopsisInfo("headers", include);
}
// Since and project.
if (!aggregate->since().isEmpty())
- generateSynopsisInfo(writer, "since", formatSince(aggregate));
+ generateSynopsisInfo("since", formatSince(aggregate));
if (aggregate->nodeType() == Node::Class || aggregate->nodeType() == Node::Namespace) {
// QT variable.
@@ -2774,7 +2776,7 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
const CollectionNode *cn =
qdb_->getCollectionNode(aggregate->physicalModuleName(), Node::Module);
if (cn && !cn->qtVariable().isEmpty())
- generateSynopsisInfo(writer, "qmake", "QT += " + cn->qtVariable());
+ generateSynopsisInfo("qmake", "QT += " + cn->qtVariable());
}
}
@@ -2786,46 +2788,46 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(classe->qmlElement()));
QString link = getAutoLink(&a, aggregate, &otherNode);
- writer.writeStartElement(dbNamespace, "synopsisinfo");
- writer.writeAttribute(dbNamespace, "role", "instantiatedBy");
- generateSimpleLink(writer, link, classe->qmlElement()->name());
- writer.writeEndElement(); // synopsisinfo
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "synopsisinfo");
+ writer->writeAttribute(dbNamespace, "role", "instantiatedBy");
+ generateSimpleLink(link, classe->qmlElement()->name());
+ writer->writeEndElement(); // synopsisinfo
+ newLine();
}
// Inherits.
QVector<RelatedClass>::ConstIterator r;
if (!classe->baseClasses().isEmpty()) {
- writer.writeStartElement(dbNamespace, "synopsisinfo");
- writer.writeAttribute(dbNamespace, "role", "inherits");
+ writer->writeStartElement(dbNamespace, "synopsisinfo");
+ writer->writeAttribute(dbNamespace, "role", "inherits");
r = classe->baseClasses().constBegin();
int index = 0;
while (r != classe->baseClasses().constEnd()) {
if ((*r).node_) {
- generateFullName(writer, (*r).node_, classe);
+ generateFullName((*r).node_, classe);
if ((*r).access_ == Node::Protected) {
- writer.writeCharacters(" (protected)");
+ writer->writeCharacters(" (protected)");
} else if ((*r).access_ == Node::Private) {
- writer.writeCharacters(" (private)");
+ writer->writeCharacters(" (private)");
}
- writer.writeCharacters(comma(index++, classe->baseClasses().count()));
+ writer->writeCharacters(comma(index++, classe->baseClasses().count()));
}
++r;
}
- writer.writeEndElement(); // synopsisinfo
- newLine(writer);
+ writer->writeEndElement(); // synopsisinfo
+ newLine();
}
// Inherited by.
if (!classe->derivedClasses().isEmpty()) {
- writer.writeStartElement(dbNamespace, "synopsisinfo");
- writer.writeAttribute(dbNamespace, "role", "inheritedBy");
- generateSortedNames(writer, classe, classe->derivedClasses());
- writer.writeEndElement(); // synopsisinfo
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "synopsisinfo");
+ writer->writeAttribute(dbNamespace, "role", "inheritedBy");
+ generateSortedNames(classe, classe->derivedClasses());
+ writer->writeEndElement(); // synopsisinfo
+ newLine();
}
}
}
@@ -2841,23 +2843,23 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
else
logicalModuleVersion = qcn->logicalModuleVersion();
- generateSynopsisInfo(writer, "import",
+ generateSynopsisInfo("import",
"import " + qcn->logicalModuleName() + QLatin1Char(' ')
+ logicalModuleVersion);
// Since and project.
if (!qcn->since().isEmpty())
- generateSynopsisInfo(writer, "since", formatSince(qcn));
+ generateSynopsisInfo("since", formatSince(qcn));
// Inherited by.
NodeList subs;
QmlTypeNode::subclasses(qcn, subs);
if (!subs.isEmpty()) {
- writer.writeTextElement(dbNamespace, "synopsisinfo");
- writer.writeAttribute(dbNamespace, "role", "inheritedBy");
- generateSortedQmlNames(writer, qcn, subs);
- writer.writeEndElement(); // synopsisinfo
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "synopsisinfo");
+ writer->writeAttribute(dbNamespace, "role", "inheritedBy");
+ generateSortedQmlNames(qcn, subs);
+ writer->writeEndElement(); // synopsisinfo
+ newLine();
}
// Inherits.
@@ -2869,11 +2871,11 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(base));
QString link = getAutoLink(&a, base, &otherNode);
- writer.writeTextElement(dbNamespace, "synopsisinfo");
- writer.writeAttribute(dbNamespace, "role", "inherits");
- generateSimpleLink(writer, link, base->name());
- writer.writeEndElement(); // synopsisinfo
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "synopsisinfo");
+ writer->writeAttribute(dbNamespace, "role", "inherits");
+ generateSimpleLink(link, base->name());
+ writer->writeEndElement(); // synopsisinfo
+ newLine();
}
// Instantiates.
@@ -2883,42 +2885,42 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
Atom a = Atom(Atom::LinkNode, CodeMarker::stringForNode(qcn));
QString link = getAutoLink(&a, cn, &otherNode);
- writer.writeTextElement(dbNamespace, "synopsisinfo");
- writer.writeAttribute(dbNamespace, "role", "instantiates");
- generateSimpleLink(writer, link, cn->name());
- writer.writeEndElement(); // synopsisinfo
- newLine(writer);
+ writer->writeTextElement(dbNamespace, "synopsisinfo");
+ writer->writeAttribute(dbNamespace, "role", "instantiates");
+ generateSimpleLink(link, cn->name());
+ writer->writeEndElement(); // synopsisinfo
+ newLine();
}
}
// Thread safeness.
switch (node->threadSafeness()) {
case Node::UnspecifiedSafeness:
- generateSynopsisInfo(writer, "threadsafeness", "unspecified");
+ generateSynopsisInfo("threadsafeness", "unspecified");
break;
case Node::NonReentrant:
- generateSynopsisInfo(writer, "threadsafeness", "non-reentrant");
+ generateSynopsisInfo("threadsafeness", "non-reentrant");
break;
case Node::Reentrant:
- generateSynopsisInfo(writer, "threadsafeness", "reentrant");
+ generateSynopsisInfo("threadsafeness", "reentrant");
break;
case Node::ThreadSafe:
- generateSynopsisInfo(writer, "threadsafeness", "thread safe");
+ generateSynopsisInfo("threadsafeness", "thread safe");
break;
default:
- generateSynopsisInfo(writer, "threadsafeness", "unspecified");
+ generateSynopsisInfo("threadsafeness", "unspecified");
break;
}
// Module.
if (!node->physicalModuleName().isEmpty())
- generateSynopsisInfo(writer, "module", node->physicalModuleName());
+ generateSynopsisInfo("module", node->physicalModuleName());
// Group.
if (classNode && !classNode->groupNames().isEmpty()) {
- generateSynopsisInfo(writer, "groups", classNode->groupNames().join(QLatin1Char(',')));
+ generateSynopsisInfo("groups", classNode->groupNames().join(QLatin1Char(',')));
} else if (qcn && !qcn->groupNames().isEmpty()) {
- generateSynopsisInfo(writer, "groups", qcn->groupNames().join(QLatin1Char(',')));
+ generateSynopsisInfo("groups", qcn->groupNames().join(QLatin1Char(',')));
}
// Properties.
@@ -2926,25 +2928,25 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
for (const Node *fnNode : propertyNode->getters()) {
if (fnNode) {
const auto funcNode = static_cast<const FunctionNode *>(fnNode);
- generateSynopsisInfo(writer, "getter", funcNode->name());
+ generateSynopsisInfo("getter", funcNode->name());
}
}
for (const Node *fnNode : propertyNode->setters()) {
if (fnNode) {
const auto funcNode = static_cast<const FunctionNode *>(fnNode);
- generateSynopsisInfo(writer, "setter", funcNode->name());
+ generateSynopsisInfo("setter", funcNode->name());
}
}
for (const Node *fnNode : propertyNode->resetters()) {
if (fnNode) {
const auto funcNode = static_cast<const FunctionNode *>(fnNode);
- generateSynopsisInfo(writer, "resetter", funcNode->name());
+ generateSynopsisInfo("resetter", funcNode->name());
}
}
for (const Node *fnNode : propertyNode->notifiers()) {
if (fnNode) {
const auto funcNode = static_cast<const FunctionNode *>(fnNode);
- generateSynopsisInfo(writer, "notifier", funcNode->name());
+ generateSynopsisInfo("notifier", funcNode->name());
}
}
}
@@ -2952,30 +2954,30 @@ void DocBookGenerator::generateDocBookSynopsis(QXmlStreamWriter &writer, const N
// Enums and typedefs.
if (enumNode) {
for (const EnumItem &item : enumNode->items()) {
- writer.writeStartElement(dbNamespace, "enumitem");
- newLine(writer);
- writer.writeAttribute(dbNamespace, "enumidentifier", item.name());
- newLine(writer);
- writer.writeAttribute(dbNamespace, "enumvalue", item.value());
- newLine(writer);
- writer.writeEndElement(); // enumitem
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "enumitem");
+ newLine();
+ writer->writeAttribute(dbNamespace, "enumidentifier", item.name());
+ newLine();
+ writer->writeAttribute(dbNamespace, "enumvalue", item.value());
+ newLine();
+ writer->writeEndElement(); // enumitem
+ newLine();
}
}
- writer.writeEndElement(); // nodeToSynopsisTag (like classsynopsis)
- newLine(writer);
+ writer->writeEndElement(); // nodeToSynopsisTag (like classsynopsis)
+ newLine();
// The typedef associated to this enum.
if (enumNode && enumNode->flagsType()) {
- writer.writeStartElement(dbNamespace, "typedefsynopsis");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "typedefsynopsis");
+ newLine();
- writer.writeTextElement(dbNamespace, "typedefname",
- enumNode->flagsType()->fullDocumentName());
+ writer->writeTextElement(dbNamespace, "typedefname",
+ enumNode->flagsType()->fullDocumentName());
- writer.writeEndElement(); // typedefsynopsis
- newLine(writer);
+ writer->writeEndElement(); // typedefsynopsis
+ newLine();
}
}
@@ -2993,8 +2995,8 @@ QString taggedNode(const Node *node)
Parses a string with method/variable name and (return) type
to include type tags.
*/
-void DocBookGenerator::typified(QXmlStreamWriter &writer, const QString &string,
- const Node *relative, bool trailingSpace, bool generateType)
+void DocBookGenerator::typified(const QString &string, const Node *relative, bool trailingSpace,
+ bool generateType)
{
// Adapted from CodeMarker::typified and HtmlGenerator::highlightedCode.
// Note: CppCodeMarker::markedUpIncludes is not needed for DocBook, as this part is natively
@@ -3017,7 +3019,7 @@ void DocBookGenerator::typified(QXmlStreamWriter &writer, const QString &string,
bool isProbablyType = (pendingWord != QLatin1String("const"));
if (generateType && isProbablyType) {
// Flush the current buffer.
- writer.writeCharacters(result);
+ writer->writeCharacters(result);
result.truncate(0);
// Add the link, logic from HtmlGenerator::highlightedCode.
@@ -3029,12 +3031,12 @@ void DocBookGenerator::typified(QXmlStreamWriter &writer, const QString &string,
href = linkForNode(n, relative);
}
- writer.writeStartElement(dbNamespace, "type");
+ writer->writeStartElement(dbNamespace, "type");
if (href.isEmpty())
- writer.writeCharacters(pendingWord);
+ writer->writeCharacters(pendingWord);
else
- generateSimpleLink(writer, href, pendingWord);
- writer.writeEndElement(); // type
+ generateSimpleLink(href, pendingWord);
+ writer->writeEndElement(); // type
} else {
result += pendingWord;
}
@@ -3072,36 +3074,35 @@ void DocBookGenerator::typified(QXmlStreamWriter &writer, const QString &string,
result += QLatin1Char(' ');
}
- writer.writeCharacters(result);
+ writer->writeCharacters(result);
}
-void DocBookGenerator::generateSynopsisName(QXmlStreamWriter &writer, const Node *node,
- const Node *relative, bool generateNameLink)
+void DocBookGenerator::generateSynopsisName(const Node *node, const Node *relative,
+ bool generateNameLink)
{
// Implements the rewriting of <@link> from HtmlGenerator::highlightedCode, only due to calls to
// CodeMarker::linkTag in CppCodeMarker::markedUpSynopsis.
QString name = taggedNode(node);
if (!generateNameLink) {
- writer.writeCharacters(name);
+ writer->writeCharacters(name);
return;
}
- writer.writeStartElement(dbNamespace, "emphasis");
- writer.writeAttribute("role", "bold");
- generateSimpleLink(writer, linkForNode(node, relative), name);
- writer.writeEndElement(); // emphasis
+ writer->writeStartElement(dbNamespace, "emphasis");
+ writer->writeAttribute("role", "bold");
+ generateSimpleLink(linkForNode(node, relative), name);
+ writer->writeEndElement(); // emphasis
}
-void DocBookGenerator::generateParameter(QXmlStreamWriter &writer, const Parameter &parameter,
- const Node *relative, bool generateExtra,
- bool generateType)
+void DocBookGenerator::generateParameter(const Parameter &parameter, const Node *relative,
+ bool generateExtra, bool generateType)
{
const QString &pname = parameter.name();
const QString &ptype = parameter.type();
QString paramName;
if (!pname.isEmpty()) {
- typified(writer, ptype, relative, true, generateType);
+ typified(ptype, relative, true, generateType);
paramName = pname;
} else {
paramName = ptype;
@@ -3111,25 +3112,25 @@ void DocBookGenerator::generateParameter(QXmlStreamWriter &writer, const Paramet
// this is intended to be rendered as a subscript.
QRegExp sub("([a-z]+)_([0-9]+|n)");
- writer.writeStartElement(dbNamespace, "emphasis");
+ writer->writeStartElement(dbNamespace, "emphasis");
if (sub.indexIn(paramName) != -1) {
- writer.writeCharacters(sub.cap(0));
- writer.writeStartElement(dbNamespace, "sub");
- writer.writeCharacters(sub.cap(1));
- writer.writeEndElement(); // sub
+ writer->writeCharacters(sub.cap(0));
+ writer->writeStartElement(dbNamespace, "sub");
+ writer->writeCharacters(sub.cap(1));
+ writer->writeEndElement(); // sub
} else {
- writer.writeCharacters(paramName);
+ writer->writeCharacters(paramName);
}
- writer.writeEndElement(); // emphasis
+ writer->writeEndElement(); // emphasis
}
const QString &pvalue = parameter.defaultValue();
if (generateExtra && !pvalue.isEmpty())
- writer.writeCharacters(" = " + pvalue);
+ writer->writeCharacters(" = " + pvalue);
}
-void DocBookGenerator::generateSynopsis(QXmlStreamWriter &writer, const Node *node,
- const Node *relative, Section::Style style)
+void DocBookGenerator::generateSynopsis(const Node *node, const Node *relative,
+ Section::Style style)
{
// From HtmlGenerator::generateSynopsis (conditions written as booleans).
const bool generateExtra = style != Section::AllMembers;
@@ -3168,8 +3169,8 @@ void DocBookGenerator::generateSynopsis(QXmlStreamWriter &writer, const Node *no
bracketed += "slot";
if (!bracketed.isEmpty())
- writer.writeCharacters(QLatin1Char('[') + bracketed.join(' ')
- + QStringLiteral("] "));
+ writer->writeCharacters(QLatin1Char('[') + bracketed.join(' ')
+ + QStringLiteral("] "));
}
}
@@ -3183,7 +3184,7 @@ void DocBookGenerator::generateSynopsis(QXmlStreamWriter &writer, const Node *no
extra = "(obsolete) ";
if (!extra.isEmpty())
- writer.writeCharacters(extra);
+ writer->writeCharacters(extra);
}
}
@@ -3192,18 +3193,18 @@ void DocBookGenerator::generateSynopsis(QXmlStreamWriter &writer, const Node *no
if (!node->isRelatedNonmember() && !node->isProxyNode() && !node->parent()->name().isEmpty()
&& !node->parent()->isHeader() && !node->isProperty() && !node->isQmlNode()
&& !node->isJsNode()) {
- writer.writeCharacters(taggedNode(node->parent()) + "::");
+ writer->writeCharacters(taggedNode(node->parent()) + "::");
}
}
switch (node->nodeType()) {
case Node::Namespace:
- writer.writeCharacters("namespace ");
- generateSynopsisName(writer, node, relative, generateNameLink);
+ writer->writeCharacters("namespace ");
+ generateSynopsisName(node, relative, generateNameLink);
break;
case Node::Class:
- writer.writeCharacters("class ");
- generateSynopsisName(writer, node, relative, generateNameLink);
+ writer->writeCharacters("class ");
+ generateSynopsisName(node, relative, generateNameLink);
break;
case Node::Function: {
const auto func = (const FunctionNode *)node;
@@ -3211,29 +3212,28 @@ void DocBookGenerator::generateSynopsis(QXmlStreamWriter &writer, const Node *no
// First, the part coming before the name.
if (style == Section::Summary || style == Section::Accessors) {
if (!func->isNonvirtual())
- writer.writeCharacters(QStringLiteral("virtual "));
+ writer->writeCharacters(QStringLiteral("virtual "));
}
// Name and parameters.
if (style != Section::AllMembers && !func->returnType().isEmpty())
- typified(writer, func->returnType(), relative, true, generateType);
- generateSynopsisName(writer, node, relative, generateNameLink);
+ typified(func->returnType(), relative, true, generateType);
+ generateSynopsisName(node, relative, generateNameLink);
if (!func->isMacroWithoutParams()) {
- writer.writeCharacters(QStringLiteral("("));
+ writer->writeCharacters(QStringLiteral("("));
if (!func->parameters().isEmpty()) {
const Parameters &parameters = func->parameters();
for (int i = 0; i < parameters.count(); i++) {
if (i > 0)
- writer.writeCharacters(QStringLiteral(", "));
- generateParameter(writer, parameters.at(i), relative, generateExtra,
- generateType);
+ writer->writeCharacters(QStringLiteral(", "));
+ generateParameter(parameters.at(i), relative, generateExtra, generateType);
}
}
- writer.writeCharacters(QStringLiteral(")"));
+ writer->writeCharacters(QStringLiteral(")"));
}
if (func->isConst())
- writer.writeCharacters(QStringLiteral(" const"));
+ writer->writeCharacters(QStringLiteral(" const"));
if (style == Section::Summary || style == Section::Accessors) {
// virtual is prepended, if needed.
@@ -3248,11 +3248,11 @@ void DocBookGenerator::generateSynopsis(QXmlStreamWriter &writer, const Node *no
synopsis += QStringLiteral(" &");
else if (func->isRefRef())
synopsis += QStringLiteral(" &&");
- writer.writeCharacters(synopsis);
+ writer->writeCharacters(synopsis);
} else if (style == Section::AllMembers) {
if (!func->returnType().isEmpty() && func->returnType() != "void") {
- writer.writeCharacters(QStringLiteral(" : "));
- typified(writer, func->returnType(), relative, false, generateType);
+ writer->writeCharacters(QStringLiteral(" : "));
+ typified(func->returnType(), relative, false, generateType);
}
} else {
QString synopsis;
@@ -3260,13 +3260,13 @@ void DocBookGenerator::generateSynopsis(QXmlStreamWriter &writer, const Node *no
synopsis += QStringLiteral(" &");
else if (func->isRefRef())
synopsis += QStringLiteral(" &&");
- writer.writeCharacters(synopsis);
+ writer->writeCharacters(synopsis);
}
} break;
case Node::Enum: {
const auto enume = static_cast<const EnumNode *>(node);
- writer.writeCharacters(QStringLiteral("enum "));
- generateSynopsisName(writer, node, relative, generateNameLink);
+ writer->writeCharacters(QStringLiteral("enum "));
+ generateSynopsisName(node, relative, generateNameLink);
QString synopsis;
if (style == Section::Summary) {
@@ -3295,48 +3295,47 @@ void DocBookGenerator::generateSynopsis(QXmlStreamWriter &writer, const Node *no
synopsis += QLatin1Char(' ');
synopsis += QLatin1Char('}');
}
- writer.writeCharacters(synopsis);
+ writer->writeCharacters(synopsis);
} break;
case Node::Typedef: {
const auto typedeff = static_cast<const TypedefNode *>(node);
if (typedeff->associatedEnum())
- writer.writeCharacters("flags ");
+ writer->writeCharacters("flags ");
else
- writer.writeCharacters("typedef ");
- generateSynopsisName(writer, node, relative, generateNameLink);
+ writer->writeCharacters("typedef ");
+ generateSynopsisName(node, relative, generateNameLink);
} break;
case Node::Property: {
const auto property = static_cast<const PropertyNode *>(node);
- generateSynopsisName(writer, node, relative, generateNameLink);
- writer.writeCharacters(" : ");
- typified(writer, property->qualifiedDataType(), relative, false, generateType);
+ generateSynopsisName(node, relative, generateNameLink);
+ writer->writeCharacters(" : ");
+ typified(property->qualifiedDataType(), relative, false, generateType);
} break;
case Node::Variable: {
const auto variable = static_cast<const VariableNode *>(node);
if (style == Section::AllMembers) {
- generateSynopsisName(writer, node, relative, generateNameLink);
- writer.writeCharacters(" : ");
- typified(writer, variable->dataType(), relative, false, generateType);
+ generateSynopsisName(node, relative, generateNameLink);
+ writer->writeCharacters(" : ");
+ typified(variable->dataType(), relative, false, generateType);
} else {
- typified(writer, variable->leftType(), relative, false, generateType);
- writer.writeCharacters(" ");
- generateSynopsisName(writer, node, relative, generateNameLink);
- writer.writeCharacters(variable->rightType());
+ typified(variable->leftType(), relative, false, generateType);
+ writer->writeCharacters(" ");
+ generateSynopsisName(node, relative, generateNameLink);
+ writer->writeCharacters(variable->rightType());
}
} break;
default:
- generateSynopsisName(writer, node, relative, generateNameLink);
+ generateSynopsisName(node, relative, generateNameLink);
}
}
-void DocBookGenerator::generateEnumValue(QXmlStreamWriter &writer, const QString &enumValue,
- const Node *relative)
+void DocBookGenerator::generateEnumValue(const QString &enumValue, const Node *relative)
{
// From CppCodeMarker::markedUpEnumValue, simplifications from Generator::plainCode (removing
// <@op>). With respect to CppCodeMarker::markedUpEnumValue, the order of generation of parents
// must be reversed so that they are processed in the order
if (!relative->isEnumType()) {
- writer.writeCharacters(enumValue);
+ writer->writeCharacters(enumValue);
return;
}
@@ -3349,13 +3348,13 @@ void DocBookGenerator::generateEnumValue(QXmlStreamWriter &writer, const QString
node = node->parent();
}
- writer.writeStartElement(dbNamespace, "code");
+ writer->writeStartElement(dbNamespace, "code");
for (auto parent : parents) {
- generateSynopsisName(writer, parent, relative, true);
- writer.writeCharacters("::");
+ generateSynopsisName(parent, relative, true);
+ writer->writeCharacters("::");
}
- writer.writeCharacters(enumValue);
- writer.writeEndElement(); // code
+ writer->writeCharacters(enumValue);
+ writer->writeEndElement(); // code
}
/*!
@@ -3366,77 +3365,76 @@ void DocBookGenerator::generateEnumValue(QXmlStreamWriter &writer, const QString
function is supposed to do, so I have not tried to complete the comment
yet.
*/
-void DocBookGenerator::generateOverloadedSignal(QXmlStreamWriter &writer, const Node *node)
+void DocBookGenerator::generateOverloadedSignal(const Node *node)
{
// From Generator::generateOverloadedSignal.
QString code = getOverloadedSignalCode(node);
if (code.isEmpty())
return;
- writer.writeStartElement(dbNamespace, "note");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters("Signal ");
- writer.writeTextElement(dbNamespace, "emphasis", node->name());
- writer.writeCharacters(" is overloaded in this class. To connect to this "
- "signal by using the function pointer syntax, Qt "
- "provides a convenient helper for obtaining the "
- "function pointer as shown in this example:");
- writer.writeTextElement(dbNamespace, "code", code);
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // note
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "note");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters("Signal ");
+ writer->writeTextElement(dbNamespace, "emphasis", node->name());
+ writer->writeCharacters(" is overloaded in this class. To connect to this "
+ "signal by using the function pointer syntax, Qt "
+ "provides a convenient helper for obtaining the "
+ "function pointer as shown in this example:");
+ writer->writeTextElement(dbNamespace, "code", code);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // note
+ newLine();
}
/*!
Generates a bold line that explains that this is a private signal,
only made public to let users pass it to connect().
*/
-void DocBookGenerator::generatePrivateSignalNote(QXmlStreamWriter &writer)
+void DocBookGenerator::generatePrivateSignalNote()
{
// From Generator::generatePrivateSignalNote.
- writer.writeStartElement(dbNamespace, "note");
- newLine(writer);
- writer.writeTextElement(dbNamespace, "para",
- "This is a private signal. It can be used in signal connections but "
- "cannot be emitted by the user.");
- writer.writeEndElement(); // note
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "note");
+ newLine();
+ writer->writeTextElement(dbNamespace, "para",
+ "This is a private signal. It can be used in signal connections but "
+ "cannot be emitted by the user.");
+ writer->writeEndElement(); // note
+ newLine();
}
/*!
Generates a bold line that says:
"This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE."
*/
-void DocBookGenerator::generateInvokableNote(QXmlStreamWriter &writer, const Node *node)
+void DocBookGenerator::generateInvokableNote(const Node *node)
{
// From Generator::generateInvokableNote.
- writer.writeStartElement(dbNamespace, "note");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters(
+ writer->writeStartElement(dbNamespace, "note");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters(
"This function can be invoked via the meta-object system and from QML. See ");
- generateSimpleLink(writer, node->url(), "Q_INVOKABLE");
- writer.writeCharacters(".");
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // note
- newLine(writer);
+ generateSimpleLink(node->url(), "Q_INVOKABLE");
+ writer->writeCharacters(".");
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // note
+ newLine();
}
/*!
Generates bold Note lines that explain how function \a fn
is associated with each of its associated properties.
*/
-void DocBookGenerator::generateAssociatedPropertyNotes(QXmlStreamWriter &writer,
- const FunctionNode *fn)
+void DocBookGenerator::generateAssociatedPropertyNotes(const FunctionNode *fn)
{
// From HtmlGenerator::generateAssociatedPropertyNotes.
if (fn->hasAssociatedProperties()) {
- writer.writeStartElement(dbNamespace, "note");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "note");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
NodeList nodes = fn->associatedProperties();
std::sort(nodes.begin(), nodes.end(), Node::nodeNameLessThan);
@@ -3459,22 +3457,21 @@ void DocBookGenerator::generateAssociatedPropertyNotes(QXmlStreamWriter &writer,
default:
break;
}
- writer.writeCharacters(msg + "for property ");
- generateSimpleLink(writer, linkForNode(pn, nullptr), pn->name());
- writer.writeCharacters(". ");
+ writer->writeCharacters(msg + "for property ");
+ generateSimpleLink(linkForNode(pn, nullptr), pn->name());
+ writer->writeCharacters(". ");
}
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // note
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // note
+ newLine();
}
}
-void DocBookGenerator::generateDetailedMember(QXmlStreamWriter &writer, const Node *node,
- const PageNode *relative)
+void DocBookGenerator::generateDetailedMember(const Node *node, const PageNode *relative)
{
// From HtmlGenerator::generateDetailedMember.
- writer.writeStartElement(dbNamespace, "section");
+ writer->writeStartElement(dbNamespace, "section");
if (node->isSharedCommentNode()) {
const auto scn = reinterpret_cast<const SharedCommentNode *>(node);
const QVector<Node *> &collective = scn->collective();
@@ -3485,21 +3482,21 @@ void DocBookGenerator::generateDetailedMember(QXmlStreamWriter &writer, const No
QString nodeRef = refForNode(n);
if (firstFunction) {
- writer.writeAttribute("xml:id", refForNode(collective.at(0)));
- newLine(writer);
- writer.writeStartElement(dbNamespace, "title");
- generateSynopsis(writer, n, relative, Section::Details);
- writer.writeEndElement(); // title
- newLine(writer);
+ writer->writeAttribute("xml:id", refForNode(collective.at(0)));
+ newLine();
+ writer->writeStartElement(dbNamespace, "title");
+ generateSynopsis(n, relative, Section::Details);
+ writer->writeEndElement(); // title
+ newLine();
firstFunction = false;
} else {
- writer.writeStartElement(dbNamespace, "bridgehead");
- writer.writeAttribute("renderas", "sect2");
- writer.writeAttribute("xml:id", nodeRef);
- generateSynopsis(writer, n, relative, Section::Details);
- writer.writeEndElement(); // bridgehead
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "bridgehead");
+ writer->writeAttribute("renderas", "sect2");
+ writer->writeAttribute("xml:id", nodeRef);
+ generateSynopsis(n, relative, Section::Details);
+ writer->writeEndElement(); // bridgehead
+ newLine();
}
}
}
@@ -3507,33 +3504,33 @@ void DocBookGenerator::generateDetailedMember(QXmlStreamWriter &writer, const No
const EnumNode *etn;
QString nodeRef = refForNode(node);
if (node->isEnumType() && (etn = static_cast<const EnumNode *>(node))->flagsType()) {
- writer.writeAttribute("xml:id", nodeRef);
- newLine(writer);
- writer.writeStartElement(dbNamespace, "title");
- generateSynopsis(writer, etn, relative, Section::Details);
- writer.writeEndElement(); // title
- newLine(writer);
- writer.writeStartElement(dbNamespace, "bridgehead");
- generateSynopsis(writer, etn->flagsType(), relative, Section::Details);
- writer.writeEndElement(); // bridgehead
- newLine(writer);
+ writer->writeAttribute("xml:id", nodeRef);
+ newLine();
+ writer->writeStartElement(dbNamespace, "title");
+ generateSynopsis(etn, relative, Section::Details);
+ writer->writeEndElement(); // title
+ newLine();
+ writer->writeStartElement(dbNamespace, "bridgehead");
+ generateSynopsis(etn->flagsType(), relative, Section::Details);
+ writer->writeEndElement(); // bridgehead
+ newLine();
} else {
- writer.writeAttribute("xml:id", nodeRef);
- newLine(writer);
- writer.writeStartElement(dbNamespace, "title");
- generateSynopsis(writer, node, relative, Section::Details);
- writer.writeEndElement(); // title
- newLine(writer);
+ writer->writeAttribute("xml:id", nodeRef);
+ newLine();
+ writer->writeStartElement(dbNamespace, "title");
+ generateSynopsis(node, relative, Section::Details);
+ writer->writeEndElement(); // title
+ newLine();
}
}
- generateDocBookSynopsis(writer, node);
+ generateDocBookSynopsis(node);
- generateStatus(writer, node);
- generateBody(writer, node);
- generateOverloadedSignal(writer, node);
- generateThreadSafeness(writer, node);
- generateSince(writer, node);
+ generateStatus(node);
+ generateBody(node);
+ generateOverloadedSignal(node);
+ generateThreadSafeness(node);
+ generateSince(node);
if (node->isProperty()) {
const auto property = static_cast<const PropertyNode *>(node);
@@ -3544,36 +3541,36 @@ void DocBookGenerator::generateDetailedMember(QXmlStreamWriter &writer, const No
section.appendMembers(property->resetters().toVector());
if (!section.members().isEmpty()) {
- writer.writeStartElement(dbNamespace, "para");
- newLine(writer);
- writer.writeTextElement(dbNamespace, "emphasis", "Access functions:");
- writer.writeAttribute("role", "bold");
- newLine(writer);
- writer.writeEndElement(); // para
- newLine(writer);
- generateSectionList(writer, section, node);
+ writer->writeStartElement(dbNamespace, "para");
+ newLine();
+ writer->writeTextElement(dbNamespace, "emphasis", "Access functions:");
+ writer->writeAttribute("role", "bold");
+ newLine();
+ writer->writeEndElement(); // para
+ newLine();
+ generateSectionList(section, node);
}
Section notifiers(Section::Accessors, Section::Active);
notifiers.appendMembers(property->notifiers().toVector());
if (!notifiers.members().isEmpty()) {
- writer.writeStartElement(dbNamespace, "para");
- newLine(writer);
- writer.writeTextElement(dbNamespace, "emphasis", "Notifier signal:");
- writer.writeAttribute("role", "bold");
- newLine(writer);
- writer.writeEndElement(); // para
- newLine(writer);
- generateSectionList(writer, notifiers, node);
+ writer->writeStartElement(dbNamespace, "para");
+ newLine();
+ writer->writeTextElement(dbNamespace, "emphasis", "Notifier signal:");
+ writer->writeAttribute("role", "bold");
+ newLine();
+ writer->writeEndElement(); // para
+ newLine();
+ generateSectionList(notifiers, node);
}
} else if (node->isFunction()) {
const auto fn = static_cast<const FunctionNode *>(node);
if (fn->isPrivateSignal())
- generatePrivateSignalNote(writer);
+ generatePrivateSignalNote();
if (fn->isInvokable())
- generateInvokableNote(writer, node);
- generateAssociatedPropertyNotes(writer, fn);
+ generateInvokableNote(node);
+ generateAssociatedPropertyNotes(fn);
} else if (node->isEnumType()) {
const auto en = static_cast<const EnumNode *>(node);
@@ -3584,21 +3581,21 @@ void DocBookGenerator::generateDetailedMember(QXmlStreamWriter &writer, const No
}
if (en->flagsType()) {
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters("The " + en->flagsType()->name() + " type is a typedef for ");
- generateSimpleLink(writer, qflagsHref_, "QFlags");
- writer.writeCharacters("&lt;" + en->name() + "&gt;. ");
- writer.writeCharacters("It stores an OR combination of " + en->name() + "values.");
- writer.writeEndElement(); // para
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters("The " + en->flagsType()->name() + " type is a typedef for ");
+ generateSimpleLink(qflagsHref_, "QFlags");
+ writer->writeCharacters("&lt;" + en->name() + "&gt;. ");
+ writer->writeCharacters("It stores an OR combination of " + en->name() + "values.");
+ writer->writeEndElement(); // para
+ newLine();
}
}
- generateAlsoList(writer, node);
- endSection(writer); // section
+ generateAlsoList(node);
+ endSection(); // section
}
-void DocBookGenerator::generateSectionList(QXmlStreamWriter &writer, const Section &section,
- const Node *relative, Section::Status status)
+void DocBookGenerator::generateSectionList(const Section &section, const Node *relative,
+ Section::Status status)
{
// From HtmlGenerator::generateSectionList, just generating a list (not tables).
const NodeVector &members =
@@ -3607,8 +3604,8 @@ void DocBookGenerator::generateSectionList(QXmlStreamWriter &writer, const Secti
bool hasPrivateSignals = false;
bool isInvokable = false;
- writer.writeStartElement(dbNamespace, "itemizedlist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
int i = 0;
NodeVector::ConstIterator m = members.constBegin();
@@ -3618,12 +3615,12 @@ void DocBookGenerator::generateSectionList(QXmlStreamWriter &writer, const Secti
continue;
}
- writer.writeStartElement(dbNamespace, "listitem");
- newLine(writer);
- writer.writeStartElement(dbNamespace, "para");
+ writer->writeStartElement(dbNamespace, "listitem");
+ newLine();
+ writer->writeStartElement(dbNamespace, "para");
// prefix no more needed.
- generateSynopsis(writer, *m, relative, section.style());
+ generateSynopsis(*m, relative, section.style());
if ((*m)->isFunction()) {
const auto fn = static_cast<const FunctionNode *>(*m);
if (fn->isPrivateSignal())
@@ -3632,52 +3629,51 @@ void DocBookGenerator::generateSectionList(QXmlStreamWriter &writer, const Secti
isInvokable = true;
}
- writer.writeEndElement(); // para
- newLine(writer);
- writer.writeEndElement(); // listitem
- newLine(writer);
+ writer->writeEndElement(); // para
+ newLine();
+ writer->writeEndElement(); // listitem
+ newLine();
i++;
++m;
}
- writer.writeEndElement(); // itemizedlist
- newLine(writer);
+ writer->writeEndElement(); // itemizedlist
+ newLine();
if (hasPrivateSignals)
- generatePrivateSignalNote(writer);
+ generatePrivateSignalNote();
if (isInvokable)
- generateInvokableNote(writer, relative);
+ generateInvokableNote(relative);
}
if (status != Section::Obsolete && section.style() == Section::Summary
&& !section.inheritedMembers().isEmpty()) {
- writer.writeStartElement(dbNamespace, "itemizedlist");
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "itemizedlist");
+ newLine();
- generateSectionInheritedList(writer, section, relative);
+ generateSectionInheritedList(section, relative);
- writer.writeEndElement(); // itemizedlist
- newLine(writer);
+ writer->writeEndElement(); // itemizedlist
+ newLine();
}
}
-void DocBookGenerator::generateSectionInheritedList(QXmlStreamWriter &writer,
- const Section &section, const Node *relative)
+void DocBookGenerator::generateSectionInheritedList(const Section &section, const Node *relative)
{
// From HtmlGenerator::generateSectionInheritedList.
QVector<QPair<Aggregate *, int>>::ConstIterator p = section.inheritedMembers().constBegin();
while (p != section.inheritedMembers().constEnd()) {
- writer.writeStartElement(dbNamespace, "listitem");
- writer.writeCharacters(QString((*p).second) + " ");
+ writer->writeStartElement(dbNamespace, "listitem");
+ writer->writeCharacters(QString((*p).second) + " ");
if ((*p).second == 1)
- writer.writeCharacters(section.singular());
+ writer->writeCharacters(section.singular());
else
- writer.writeCharacters(section.plural());
- writer.writeCharacters(" inherited from ");
- generateSimpleLink(
- writer, fileName((*p).first) + '#' + Generator::cleanRef(section.title().toLower()),
- (*p).first->plainFullName(relative));
+ writer->writeCharacters(section.plural());
+ writer->writeCharacters(" inherited from ");
+ generateSimpleLink(fileName((*p).first) + '#'
+ + Generator::cleanRef(section.title().toLower()),
+ (*p).first->plainFullName(relative));
++p;
}
}
@@ -3688,23 +3684,26 @@ void DocBookGenerator::generateSectionInheritedList(QXmlStreamWriter &writer,
*/
void DocBookGenerator::generatePageNode(PageNode *pn)
{
+ Q_ASSERT(writer == nullptr);
// From HtmlGenerator::generatePageNode, remove anything related to TOCs.
- QXmlStreamWriter &writer = *startDocument(pn);
+ writer = startDocument(pn);
- generateHeader(writer, pn->fullTitle(), pn->subtitle(), pn);
- generateBody(writer, pn);
- generateAlsoList(writer, pn);
- generateFooter(writer);
+ generateHeader(pn->fullTitle(), pn->subtitle(), pn);
+ generateBody(pn);
+ generateAlsoList(pn);
+ generateFooter();
- endDocument(&writer);
+ endDocument();
}
/*!
Extract sections of markup text and output them.
*/
-bool DocBookGenerator::generateQmlText(QXmlStreamWriter &writer, const Text &text,
- const Node *relative)
+bool DocBookGenerator::generateQmlText(const Text &text, const Node *relative, CodeMarker *marker,
+ const QString &qmlName)
{
+ Q_UNUSED(marker);
+ Q_UNUSED(qmlName);
// From Generator::generateQmlText.
const Atom *atom = text.firstAtom();
bool result = false;
@@ -3717,7 +3716,7 @@ bool DocBookGenerator::generateQmlText(QXmlStreamWriter &writer, const Text &tex
else {
atom = atom->next();
while (atom && (atom->type() != Atom::EndQmlText)) {
- int n = 1 + generateAtom(writer, atom, relative);
+ int n = 1 + generateAtom(atom, relative);
while (n-- > 0)
atom = atom->next();
}
@@ -3735,7 +3734,8 @@ void DocBookGenerator::generateQmlTypePage(QmlTypeNode *qcn)
{
// From HtmlGenerator::generateQmlTypePage.
// Start producing the DocBook file.
- QXmlStreamWriter &writer = *startDocument(qcn);
+ Q_ASSERT(writer == nullptr);
+ writer = startDocument(qcn);
Generator::setQmlTypeContext(qcn);
QString title = qcn->fullTitle();
@@ -3744,37 +3744,37 @@ void DocBookGenerator::generateQmlTypePage(QmlTypeNode *qcn)
else
title += " QML Type";
- generateHeader(writer, title, qcn->subtitle(), qcn);
- generateQmlRequisites(writer, qcn);
+ generateHeader(title, qcn->subtitle(), qcn);
+ generateQmlRequisites(qcn);
- startSection(writer, registerRef("details"), "Detailed Description");
- generateBody(writer, qcn);
+ startSection(registerRef("details"), "Detailed Description");
+ generateBody(qcn);
ClassNode *cn = qcn->classNode();
if (cn)
- generateQmlText(writer, cn->doc().body(), cn);
- generateAlsoList(writer, qcn);
+ generateQmlText(cn->doc().body(), cn);
+ generateAlsoList(qcn);
- endSection(writer);
+ endSection();
Sections sections(qcn);
for (const auto &section : sections.stdQmlTypeDetailsSections()) {
if (!section.isEmpty()) {
- startSection(writer, registerRef(section.title().toLower()), section.title());
+ startSection(registerRef(section.title().toLower()), section.title());
for (const auto &member : section.members())
- generateDetailedQmlMember(writer, member, qcn);
+ generateDetailedQmlMember(member, qcn);
- endSection(writer);
+ endSection();
}
}
- generateObsoleteQmlMembers(writer, sections);
+ generateObsoleteQmlMembers(sections);
- generateFooter(writer);
+ generateFooter();
Generator::setQmlTypeContext(nullptr);
- endDocument(&writer);
+ endDocument();
}
/*!
@@ -3785,7 +3785,8 @@ void DocBookGenerator::generateQmlBasicTypePage(QmlBasicTypeNode *qbtn)
{
// From HtmlGenerator::generateQmlBasicTypePage.
// Start producing the DocBook file.
- QXmlStreamWriter &writer = *startDocument(qbtn);
+ Q_ASSERT(writer == nullptr);
+ writer = startDocument(qbtn);
QString htmlTitle = qbtn->fullTitle();
if (qbtn->isJsType())
@@ -3794,41 +3795,40 @@ void DocBookGenerator::generateQmlBasicTypePage(QmlBasicTypeNode *qbtn)
htmlTitle += " QML Basic Type";
Sections sections(qbtn);
- generateHeader(writer, htmlTitle, qbtn->subtitle(), qbtn);
+ generateHeader(htmlTitle, qbtn->subtitle(), qbtn);
- startSection(writer, registerRef("details"), "Detailed Description");
+ startSection(registerRef("details"), "Detailed Description");
- generateBody(writer, qbtn);
- generateAlsoList(writer, qbtn);
+ generateBody(qbtn);
+ generateAlsoList(qbtn);
- endSection(writer);
+ endSection();
SectionVector::ConstIterator s = sections.stdQmlTypeDetailsSections().constBegin();
while (s != sections.stdQmlTypeDetailsSections().constEnd()) {
if (!s->isEmpty()) {
- startSection(writer, registerRef(s->title().toLower()), s->title());
+ startSection(registerRef(s->title().toLower()), s->title());
NodeVector::ConstIterator m = s->members().constBegin();
while (m != s->members().constEnd()) {
- generateDetailedQmlMember(writer, *m, qbtn);
+ generateDetailedQmlMember(*m, qbtn);
++m;
}
- endSection(writer);
+ endSection();
}
++s;
}
- generateFooter(writer);
+ generateFooter();
- endDocument(&writer);
+ endDocument();
}
/*!
Outputs the DocBook detailed documentation for a section
on a QML element reference page.
*/
-void DocBookGenerator::generateDetailedQmlMember(QXmlStreamWriter &writer, Node *node,
- const Aggregate *relative)
+void DocBookGenerator::generateDetailedQmlMember(Node *node, const Aggregate *relative)
{
// From HtmlGenerator::generateDetailedQmlMember, with elements from
// CppCodeMarker::markedUpQmlItem and HtmlGenerator::generateQmlItem.
@@ -3850,10 +3850,9 @@ void DocBookGenerator::generateDetailedQmlMember(QXmlStreamWriter &writer, Node
return title;
};
- std::function<void(QXmlStreamWriter &, Node *)> generateQmlMethodTitle =
- [&](QXmlStreamWriter &w, Node *n) {
- generateSynopsis(w, n, relative, Section::Details);
- };
+ std::function<void(Node *)> generateQmlMethodTitle = [&](Node *node) {
+ generateSynopsis(node, relative, Section::Details);
+ };
bool generateEndSection = true;
@@ -3865,7 +3864,7 @@ void DocBookGenerator::generateDetailedQmlMember(QXmlStreamWriter &writer, Node
heading = scn->name() + " group";
else
heading = node->name();
- startSection(writer, refForNode(scn), heading);
+ startSection(refForNode(scn), heading);
// This last call creates a title for this section. In other words,
// titles are forbidden for the rest of the section.
@@ -3874,20 +3873,20 @@ void DocBookGenerator::generateDetailedQmlMember(QXmlStreamWriter &writer, Node
if (node->isQmlProperty() || node->isJsProperty()) {
auto *qpn = static_cast<QmlPropertyNode *>(node);
- writer.writeStartElement(dbNamespace, "bridgehead");
- writer.writeAttribute("renderas", "sect2");
- writer.writeAttribute("xml:id", refForNode(qpn));
- writer.writeCharacters(getQmlPropertyTitle(qpn));
- writer.writeEndElement(); // bridgehead
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "bridgehead");
+ writer->writeAttribute("renderas", "sect2");
+ writer->writeAttribute("xml:id", refForNode(qpn));
+ writer->writeCharacters(getQmlPropertyTitle(qpn));
+ writer->writeEndElement(); // bridgehead
+ newLine();
- generateDocBookSynopsis(writer, qpn);
+ generateDocBookSynopsis(qpn);
}
}
} else if (node->isQmlProperty() || node->isJsProperty()) {
auto qpn = static_cast<QmlPropertyNode *>(node);
- startSection(writer, refForNode(qpn), getQmlPropertyTitle(qpn));
- generateDocBookSynopsis(writer, qpn);
+ startSection(refForNode(qpn), getQmlPropertyTitle(qpn));
+ generateDocBookSynopsis(qpn);
} else if (node->isSharedCommentNode()) {
const auto scn = reinterpret_cast<const SharedCommentNode *>(node);
const QVector<Node *> &sharedNodes = scn->collective();
@@ -3904,44 +3903,44 @@ void DocBookGenerator::generateDetailedQmlMember(QXmlStreamWriter &writer, Node
// Complete the section tag.
if (i == 0) {
- writer.writeStartElement(dbNamespace, "section");
- writer.writeAttribute("xml:id", refForNode(m));
- newLine(writer);
+ writer->writeStartElement(dbNamespace, "section");
+ writer->writeAttribute("xml:id", refForNode(m));
+ newLine();
}
// Write the tag containing the title.
- writer.writeStartElement(dbNamespace, (i == 0) ? "title" : "bridgehead");
+ writer->writeStartElement(dbNamespace, (i == 0) ? "title" : "bridgehead");
if (i > 0)
- writer.writeAttribute("renderas", "sect2");
+ writer->writeAttribute("renderas", "sect2");
// Write the title.
QString title;
if (node->isFunction(Node::QML) || node->isFunction(Node::JS))
- generateQmlMethodTitle(writer, node);
+ generateQmlMethodTitle(node);
else if (node->isQmlProperty() || node->isJsProperty())
- writer.writeCharacters(getQmlPropertyTitle(static_cast<QmlPropertyNode *>(node)));
+ writer->writeCharacters(getQmlPropertyTitle(static_cast<QmlPropertyNode *>(node)));
// Complete the title and the synopsis.
- generateDocBookSynopsis(writer, m);
+ generateDocBookSynopsis(m);
++i;
}
if (i == 0)
generateEndSection = false;
} else { // assume the node is a method/signal handler
- startSectionBegin(writer, refForNode(node));
- generateQmlMethodTitle(writer, node);
- startSectionEnd(writer);
+ startSectionBegin(refForNode(node));
+ generateQmlMethodTitle(node);
+ startSectionEnd();
}
- generateStatus(writer, node);
- generateBody(writer, node);
- generateThreadSafeness(writer, node);
- generateSince(writer, node);
- generateAlsoList(writer, node);
+ generateStatus(node);
+ generateBody(node);
+ generateThreadSafeness(node);
+ generateSince(node);
+ generateAlsoList(node);
if (generateEndSection)
- endSection(writer);
+ endSection();
}
/*!
@@ -4027,22 +4026,23 @@ void DocBookGenerator::generateProxyPage(Aggregate *aggregate)
Q_ASSERT(aggregate->isProxyNode());
// Start producing the DocBook file.
- QXmlStreamWriter &writer = *startDocument(aggregate);
+ Q_ASSERT(writer == nullptr);
+ writer = startDocument(aggregate);
// Info container.
- generateHeader(writer, aggregate->plainFullName(), "", aggregate);
+ generateHeader(aggregate->plainFullName(), "", aggregate);
// No element synopsis.
// Actual content.
if (!aggregate->doc().isEmpty()) {
- startSection(writer, registerRef("details"), "Detailed Description");
+ startSection(registerRef("details"), "Detailed Description");
- generateBody(writer, aggregate);
- generateAlsoList(writer, aggregate);
- generateMaintainerList(writer, aggregate);
+ generateBody(aggregate);
+ generateAlsoList(aggregate);
+ generateMaintainerList(aggregate);
- endSection(writer);
+ endSection();
}
Sections sections(aggregate);
@@ -4052,29 +4052,29 @@ void DocBookGenerator::generateProxyPage(Aggregate *aggregate)
if (section.isEmpty())
continue;
- startSection(writer, section.title().toLower(), section.title());
+ startSection(section.title().toLower(), section.title());
const QVector<Node *> &members = section.members();
for (const auto &member : members) {
if (!member->isPrivate()) { // ### check necessary?
if (!member->isClassNode()) {
- generateDetailedMember(writer, member, aggregate);
+ generateDetailedMember(member, aggregate);
} else {
- startSectionBegin(writer);
- generateFullName(writer, member, aggregate);
- startSectionEnd(writer);
- generateBrief(writer, member);
- endSection(writer);
+ startSectionBegin();
+ generateFullName(member, aggregate);
+ startSectionEnd();
+ generateBrief(member);
+ endSection();
}
}
}
- endSection(writer);
+ endSection();
}
- generateFooter(writer);
+ generateFooter();
- endDocument(&writer);
+ endDocument();
}
/*!
@@ -4084,34 +4084,35 @@ void DocBookGenerator::generateCollectionNode(CollectionNode *cn)
{
// Adapted from HtmlGenerator::generateCollectionNode.
// Start producing the DocBook file.
- QXmlStreamWriter &writer = *startDocument(cn);
+ Q_ASSERT(writer == nullptr);
+ writer = startDocument(cn);
// Info container.
- generateHeader(writer, cn->fullTitle(), cn->subtitle(), cn);
+ generateHeader(cn->fullTitle(), cn->subtitle(), cn);
// Element synopsis.
- generateDocBookSynopsis(writer, cn);
+ generateDocBookSynopsis(cn);
// Actual content.
if (cn->isModule()) {
// Generate brief text and status for modules.
- generateBrief(writer, cn);
- generateStatus(writer, cn);
- generateSince(writer, cn);
+ generateBrief(cn);
+ generateStatus(cn);
+ generateSince(cn);
NodeMultiMap nmm;
cn->getMemberNamespaces(nmm);
if (!nmm.isEmpty()) {
- startSection(writer, registerRef("namespaces"), "Namespaces");
- generateAnnotatedList(writer, cn, nmm, "namespaces");
- endSection(writer);
+ startSection(registerRef("namespaces"), "Namespaces");
+ generateAnnotatedList(cn, nmm, "namespaces");
+ endSection();
}
nmm.clear();
cn->getMemberClasses(nmm);
if (!nmm.isEmpty()) {
- startSection(writer, registerRef("classes"), "Classes");
- generateAnnotatedList(writer, cn, nmm, "classes");
- endSection(writer);
+ startSection(registerRef("classes"), "Classes");
+ generateAnnotatedList(cn, nmm, "classes");
+ endSection();
}
nmm.clear();
}
@@ -4119,24 +4120,24 @@ void DocBookGenerator::generateCollectionNode(CollectionNode *cn)
Text brief = cn->doc().briefText();
bool generatedTitle = false;
if (cn->isModule() && !brief.isEmpty()) {
- startSection(writer, registerRef("details"), "Detailed Description");
+ startSection(registerRef("details"), "Detailed Description");
generatedTitle = true;
} else {
- writeAnchor(writer, registerRef("details"));
+ writeAnchor(registerRef("details"));
}
- generateBody(writer, cn);
- generateAlsoList(writer, cn);
+ generateBody(cn);
+ generateAlsoList(cn);
if (!cn->noAutoList() && (cn->isGroup() || cn->isQmlModule() || cn->isJsModule()))
- generateAnnotatedList(writer, cn, cn->members(), "members");
+ generateAnnotatedList(cn, cn->members(), "members");
if (generatedTitle)
- endSection(writer);
+ endSection();
- generateFooter(writer);
+ generateFooter();
- endDocument(&writer);
+ endDocument();
}
/*!
@@ -4150,58 +4151,57 @@ void DocBookGenerator::generateGenericCollectionPage(CollectionNode *cn)
// TODO: factor out this code to generate a file name.
QString name = cn->name().toLower();
name.replace(QChar(' '), QString("-"));
- QString filename =
- cn->tree()->physicalModuleName() + "-" + name + "." + fileExtension();
+ QString filename = cn->tree()->physicalModuleName() + "-" + name + "." + fileExtension();
// Start producing the DocBook file.
- QXmlStreamWriter &writer = *startGenericDocument(cn, filename);
+ Q_ASSERT(writer == nullptr);
+ writer = startGenericDocument(cn, filename);
// Info container.
- generateHeader(writer, cn->fullTitle(), cn->subtitle(), cn);
+ generateHeader(cn->fullTitle(), cn->subtitle(), cn);
// Element synopsis.
- generateDocBookSynopsis(writer, cn);
+ generateDocBookSynopsis(cn);
// Actual content.
- writer.writeStartElement(dbNamespace, "para");
- writer.writeCharacters("Each function or type documented here is related to a class or "
+ writer->writeStartElement(dbNamespace, "para");
+ writer->writeCharacters("Each function or type documented here is related to a class or "
"namespace that is documented in a different module. The reference "
"page for that class or namespace will link to the function or type "
"on this page.");
- writer.writeEndElement(); // para
+ writer->writeEndElement(); // para
const CollectionNode *cnc = cn;
const QList<Node *> members = cn->members();
for (const auto &member : members)
- generateDetailedMember(writer, member, cnc);
+ generateDetailedMember(member, cnc);
- generateFooter(writer);
+ generateFooter();
- endDocument(&writer);
+ endDocument();
}
-void DocBookGenerator::generateFullName(QXmlStreamWriter &writer, const Node *node,
- const Node *relative)
+void DocBookGenerator::generateFullName(const Node *node, const Node *relative)
{
// From Generator::appendFullName.
- writer.writeStartElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "href", fullDocumentLocation(node));
- writer.writeAttribute(xlinkNamespace, "role", targetType(node));
- writer.writeCharacters(node->fullName(relative));
- writer.writeEndElement(); // link
+ writer->writeStartElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "href", fullDocumentLocation(node));
+ writer->writeAttribute(xlinkNamespace, "role", targetType(node));
+ writer->writeCharacters(node->fullName(relative));
+ writer->writeEndElement(); // link
}
-void DocBookGenerator::generateFullName(QXmlStreamWriter &writer, const Node *apparentNode,
- const QString &fullName, const Node *actualNode)
+void DocBookGenerator::generateFullName(const Node *apparentNode, const QString &fullName,
+ const Node *actualNode)
{
// From Generator::appendFullName.
if (actualNode == nullptr)
actualNode = apparentNode;
- writer.writeStartElement(dbNamespace, "link");
- writer.writeAttribute(xlinkNamespace, "href", fullDocumentLocation(actualNode));
- writer.writeAttribute("type", targetType(actualNode));
- writer.writeCharacters(fullName);
- writer.writeEndElement(); // link
+ writer->writeStartElement(dbNamespace, "link");
+ writer->writeAttribute(xlinkNamespace, "href", fullDocumentLocation(actualNode));
+ writer->writeAttribute("type", targetType(actualNode));
+ writer->writeCharacters(fullName);
+ writer->writeEndElement(); // link
}
QT_END_NAMESPACE
diff --git a/src/qdoc/docbookgenerator.h b/src/qdoc/docbookgenerator.h
index 0c74a1708..285156638 100644
--- a/src/qdoc/docbookgenerator.h
+++ b/src/qdoc/docbookgenerator.h
@@ -71,96 +71,96 @@ protected:
using Generator::generateProxyPage;
void generateProxyPage(Aggregate *aggregate);
- void generateList(QXmlStreamWriter &writer, const Node *relative, const QString &selector);
- void generateHeader(QXmlStreamWriter &writer, const QString &title, const QString &subtitle,
- const Node *node);
- void closeTextSections(QXmlStreamWriter &writer);
- void generateFooter(QXmlStreamWriter &writer);
- void generateDocBookSynopsis(QXmlStreamWriter &writer, const Node *node);
- void generateRequisites(QXmlStreamWriter &writer, const Aggregate *inner);
- void generateQmlRequisites(QXmlStreamWriter &writer, const QmlTypeNode *qcn);
- void generateSortedNames(QXmlStreamWriter &writer, const ClassNode *cn,
- const QVector<RelatedClass> &rc);
- void generateSortedQmlNames(QXmlStreamWriter &writer, const Node *base, const NodeList &subs);
- bool generateStatus(QXmlStreamWriter &writer, const Node *node);
- bool generateThreadSafeness(QXmlStreamWriter &writer, const Node *node);
- bool generateSince(QXmlStreamWriter &writer, const Node *node);
+ void generateList(const Node *relative, const QString &selector);
+ void generateHeader(const QString &title, const QString &subtitle, const Node *node);
+ void closeTextSections();
+ void generateFooter();
+ void generateDocBookSynopsis(const Node *node);
+ void generateRequisites(const Aggregate *inner);
+ void generateQmlRequisites(const QmlTypeNode *qcn);
+ void generateSortedNames(const ClassNode *cn, const QVector<RelatedClass> &rc);
+ void generateSortedQmlNames(const Node *base, const NodeList &subs);
+ bool generateStatus(const Node *node);
+ bool generateThreadSafeness(const Node *node);
+ bool generateSince(const Node *node);
using Generator::generateBody;
- void generateBody(QXmlStreamWriter &writer, const Node *node);
+ void generateBody(const Node *node);
- using Generator::generateText;
- bool generateText(QXmlStreamWriter &writer, const Text &text, const Node *relative);
- const Atom *generateAtomList(QXmlStreamWriter &writer, const Atom *atom, const Node *relative,
- bool generate, int &numAtoms);
- using Generator::generateAtom;
- int generateAtom(QXmlStreamWriter &writer, const Atom *atom, const Node *relative);
+ bool generateText(const Text &text, const Node *relative,
+ CodeMarker *marker = nullptr) override;
+ const Atom *generateAtomList(const Atom *atom, const Node *relative, bool generate,
+ int &numAtoms);
+ int generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker = nullptr) override;
private:
QXmlStreamWriter *startDocument(const Node *node);
QXmlStreamWriter *startDocument(const ExampleNode *en, const QString &file);
QXmlStreamWriter *startGenericDocument(const Node *node, const QString &fileName);
- static void endDocument(QXmlStreamWriter *writer);
-
- void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
- const NodeList &nodeList, const QString &selector);
- void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
- const NodeMultiMap &nmm, const QString &selector);
- void generateAnnotatedLists(QXmlStreamWriter &writer, const Node *relative,
- const NodeMultiMap &nmm, const QString &selector);
- void generateCompactList(QXmlStreamWriter &writer, ListType listType, const Node *relative,
- const NodeMultiMap &nmm, const QString &commonPrefix,
- const QString &selector);
+ void endDocument();
+
+ void generateAnnotatedList(const Node *relative, const NodeList &nodeList,
+ const QString &selector);
+ void generateAnnotatedList(const Node *relative, const NodeMultiMap &nmm,
+ const QString &selector);
+ void generateAnnotatedLists(const Node *relative, const NodeMultiMap &nmm,
+ const QString &selector);
+ void generateCompactList(ListType listType, const Node *relative, const NodeMultiMap &nmm,
+ const QString &commonPrefix, const QString &selector);
using Generator::generateFileList;
- void generateFileList(QXmlStreamWriter &writer, const ExampleNode *en, bool images);
- void generateObsoleteMembers(QXmlStreamWriter &writer, const Sections &sections);
- void generateObsoleteQmlMembers(QXmlStreamWriter &writer, const Sections &sections);
- void generateSectionList(QXmlStreamWriter &writer, const Section &section, const Node *relative,
+ void generateFileList(const ExampleNode *en, bool images);
+ void generateObsoleteMembers(const Sections &sections);
+ void generateObsoleteQmlMembers(const Sections &sections);
+ void generateSectionList(const Section &section, const Node *relative,
Section::Status status = Section::Active);
- void generateSectionInheritedList(QXmlStreamWriter &writer, const Section &section,
- const Node *relative);
- void generateSynopsisName(QXmlStreamWriter &writer, const Node *node, const Node *relative,
- bool generateNameLink);
- void generateParameter(QXmlStreamWriter &writer, const Parameter &parameter,
- const Node *relative, bool generateExtra, bool generateType);
- void generateSynopsis(QXmlStreamWriter &writer, const Node *node, const Node *relative,
- Section::Style style);
- void generateEnumValue(QXmlStreamWriter &writer, const QString &enumValue,
- const Node *relative);
- void generateDetailedMember(QXmlStreamWriter &writer, const Node *node,
- const PageNode *relative);
- void generateDetailedQmlMember(QXmlStreamWriter &writer, Node *node, const Aggregate *relative);
-
- void generateFullName(QXmlStreamWriter &writer, const Node *node, const Node *relative);
- void generateFullName(QXmlStreamWriter &writer, const Node *apparentNode,
- const QString &fullName, const Node *actualNode);
- void generateBrief(QXmlStreamWriter &writer, const Node *node);
- using Generator::generateAlsoList;
- void generateAlsoList(QXmlStreamWriter &writer, const Node *node);
- static void generateSignatureList(QXmlStreamWriter &writer, const NodeList &nodes);
- using Generator::generateMaintainerList;
- void generateMaintainerList(QXmlStreamWriter &writer, const Aggregate *node);
- void generateReimplementsClause(QXmlStreamWriter &writer, const FunctionNode *fn);
- void generateClassHierarchy(QXmlStreamWriter &writer, const Node *relative, NodeMap &classMap);
- void generateFunctionIndex(QXmlStreamWriter &writer, const Node *relative);
- void generateLegaleseList(QXmlStreamWriter &writer, const Node *relative);
- using Generator::generateExampleFilePage;
- void generateExampleFilePage(const Node *en, const QString &file);
- static void generateOverloadedSignal(QXmlStreamWriter &writer, const Node *node);
- static void generatePrivateSignalNote(QXmlStreamWriter &writer);
- static void generateInvokableNote(QXmlStreamWriter &writer, const Node *node);
- void generateAssociatedPropertyNotes(QXmlStreamWriter &writer, const FunctionNode *fn);
- using Generator::generateQmlText;
- bool generateQmlText(QXmlStreamWriter &writer, const Text &text, const Node *relative);
- void generateRequiredLinks(QXmlStreamWriter &writer, const Node *node);
- void generateLinkToExample(QXmlStreamWriter &writer, const ExampleNode *en,
- const QString &baseUrl);
-
- void typified(QXmlStreamWriter &writer, const QString &string, const Node *relative,
- bool trailingSpace = false, bool generateType = true);
- void generateLink(QXmlStreamWriter &writer, const Atom *atom);
- void beginLink(QXmlStreamWriter &writer, const QString &link, const Node *node,
- const Node *relative);
- void endLink(QXmlStreamWriter &writer);
+ void generateSectionInheritedList(const Section &section, const Node *relative);
+ void generateSynopsisName(const Node *node, const Node *relative, bool generateNameLink);
+ void generateParameter(const Parameter &parameter, const Node *relative, bool generateExtra,
+ bool generateType);
+ void generateSynopsis(const Node *node, const Node *relative, Section::Style style);
+ void generateEnumValue(const QString &enumValue, const Node *relative);
+ void generateDetailedMember(const Node *node, const PageNode *relative);
+ void generateDetailedQmlMember(Node *node, const Aggregate *relative);
+
+ void generateFullName(const Node *node, const Node *relative);
+ void generateFullName(const Node *apparentNode, const QString &fullName,
+ const Node *actualNode);
+ void generateBrief(const Node *node);
+ void generateAlsoList(const Node *node, CodeMarker *marker = nullptr) override;
+ void generateSignatureList(const NodeList &nodes);
+ void generateMaintainerList(const Aggregate *node, CodeMarker *marker = nullptr) override;
+ void generateReimplementsClause(const FunctionNode *fn);
+ void generateClassHierarchy(const Node *relative, NodeMap &classMap);
+ void generateFunctionIndex(const Node *relative);
+ void generateLegaleseList(const Node *relative);
+ void generateExampleFilePage(const Node *en, const QString &file,
+ CodeMarker *marker = nullptr) override;
+ void generateOverloadedSignal(const Node *node);
+ void generatePrivateSignalNote();
+ void generateInvokableNote(const Node *node);
+ void generateAssociatedPropertyNotes(const FunctionNode *fn);
+ bool generateQmlText(const Text &text, const Node *relative, CodeMarker *marker = nullptr,
+ const QString &qmlName = QString()) override;
+ void generateRequiredLinks(const Node *node);
+ void generateLinkToExample(const ExampleNode *en, const QString &baseUrl);
+
+ void typified(const QString &string, const Node *relative, bool trailingSpace = false,
+ bool generateType = true);
+ void generateLink(const Atom *atom);
+ void beginLink(const QString &link, const Node *node, const Node *relative);
+ void endLink();
+ inline void newLine();
+ void startSectionBegin();
+ void startSectionBegin(const QString &id);
+ void startSectionEnd();
+ void startSection(const QString &id, const QString &title);
+ void endSection();
+ void writeAnchor(const QString &id);
+ void generateSimpleLink(const QString &href, const QString &text);
+ void generateStartRequisite(const QString &description);
+ void generateEndRequisite();
+ void generateRequisite(const QString &description, const QString &value);
+ void generateSynopsisInfo(const QString &key, const QString &value);
+ void generateModifier(const QString &value);
bool inListItemLineOpen {};
bool inLink {};
@@ -172,6 +172,7 @@ private:
QString projectDescription;
QString naturalLanguage;
QString buildversion;
+ QXmlStreamWriter *writer = nullptr;
};
QT_END_NAMESPACE