diff options
author | Paul Wicking <paul.wicking@qt.io> | 2020-02-11 14:19:34 +0100 |
---|---|---|
committer | Paul Wicking <paul.wicking@qt.io> | 2020-02-12 09:09:35 +0000 |
commit | 6651813b9b0b372319f51723f63692907d70e787 (patch) | |
tree | c7b2f16c45ad4349b090682dfbcdb06396b2ac43 | |
parent | fff8104c31214dbe3319a4aa0408cc170089305e (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.cpp | 2596 | ||||
-rw-r--r-- | src/qdoc/docbookgenerator.h | 163 |
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("<Missing DocBook>"); - writer.writeEndElement(); // emphasis + writer->writeStartElement(dbNamespace, "emphasis"); + writer->writeAttribute("role", "bold"); + writer->writeCharacters("<Missing DocBook>"); + writer->writeEndElement(); // emphasis break; case Atom::UnknownCommand: - writer.writeStartElement(dbNamespace, "emphasis"); - writer.writeAttribute("role", "bold"); - writer.writeCharacters("<Unknown command>"); - writer.writeStartElement(dbNamespace, "code"); - writer.writeCharacters(atom->string()); - writer.writeEndElement(); // code - writer.writeEndElement(); // emphasis + writer->writeStartElement(dbNamespace, "emphasis"); + writer->writeAttribute("role", "bold"); + writer->writeCharacters("<Unknown command>"); + 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 §ions) +void DocBookGenerator::generateObsoleteMembers(const Sections §ions) { // 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 §ions) +void DocBookGenerator::generateObsoleteQmlMembers(const Sections §ions) { // 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 ¶meter = 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 ¶meter, - const Node *relative, bool generateExtra, - bool generateType) +void DocBookGenerator::generateParameter(const Parameter ¶meter, 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 ¶meters = 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("<" + en->name() + ">. "); - 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("<" + en->name() + ">. "); + 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 §ion, - const Node *relative, Section::Status status) +void DocBookGenerator::generateSectionList(const Section §ion, 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 §ion, const Node *relative) +void DocBookGenerator::generateSectionInheritedList(const Section §ion, 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 §ion : 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 §ions); - void generateObsoleteQmlMembers(QXmlStreamWriter &writer, const Sections §ions); - void generateSectionList(QXmlStreamWriter &writer, const Section §ion, const Node *relative, + void generateFileList(const ExampleNode *en, bool images); + void generateObsoleteMembers(const Sections §ions); + void generateObsoleteQmlMembers(const Sections §ions); + void generateSectionList(const Section §ion, const Node *relative, Section::Status status = Section::Active); - void generateSectionInheritedList(QXmlStreamWriter &writer, const Section §ion, - const Node *relative); - void generateSynopsisName(QXmlStreamWriter &writer, const Node *node, const Node *relative, - bool generateNameLink); - void generateParameter(QXmlStreamWriter &writer, const Parameter ¶meter, - 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 §ion, const Node *relative); + void generateSynopsisName(const Node *node, const Node *relative, bool generateNameLink); + void generateParameter(const Parameter ¶meter, 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 |