1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef HTMLGENERATOR_H
5#define HTMLGENERATOR_H
6
7#include "codemarker.h"
8#include "genustypes.h"
9#include "xmlgenerator.h"
10#include "filesystem/fileresolver.h"
11
12#include <QtCore/qhash.h>
13#include <QtCore/qregularexpression.h>
14
15QT_BEGIN_NAMESPACE
16
17class Aggregate;
18class Config;
19class ExampleNode;
20class HelpProjectWriter;
21class ManifestWriter;
22
23class HtmlGenerator : public XmlGenerator
24{
25public:
26 HtmlGenerator(FileResolver& file_resolver);
27 ~HtmlGenerator() override;
28
29 void initializeGenerator() override;
30 void terminateGenerator() override;
31 QString format() override;
32 void generateDocs() override;
33
34 QString protectEnc(const QString &string);
35 static QString protect(const QString &string);
36
37protected:
38 void generateExampleFilePage(const Node *en, ResolvedFile resolved_file, CodeMarker *marker) override;
39 qsizetype generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker) override;
40 void generateCppReferencePage(Aggregate *aggregate, CodeMarker *marker) override;
41 void generateProxyPage(Aggregate *aggregate, CodeMarker *marker) override;
42 void generateQmlTypePage(QmlTypeNode *qcn, CodeMarker *marker) override;
43 void generatePageNode(PageNode *pn, CodeMarker *marker) override;
44 void generateCollectionNode(CollectionNode *cn, CodeMarker *marker) override;
45 void generateGenericCollectionPage(CollectionNode *cn, CodeMarker *marker) override;
46 [[nodiscard]] QString fileExtension() const override;
47
48private:
49 enum SubTitleSize { SmallSubTitle, LargeSubTitle };
50 enum ExtractionMarkType { BriefMark, DetailedDescriptionMark, MemberMark, EndMark };
51
52 void generateNavigationBar(const QString &title, const Node *node, CodeMarker *marker,
53 const QString &buildversion, bool tableItems = false);
54 void generateHeader(const QString &title, const Node *node = nullptr,
55 CodeMarker *marker = nullptr);
56 void generateTitle(const QString &title, const Text &subTitle, SubTitleSize subTitleSize,
57 const Node *relative, CodeMarker *marker);
58 void generateFooter(const Node *node = nullptr);
59 void generateRequisites(Aggregate *inner, CodeMarker *marker);
60 void generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker);
61 void generateBrief(const Node *node, CodeMarker *marker, const Node *relative = nullptr,
62 bool addLink = true);
63 void generateTableOfContents(const Node *node, CodeMarker *marker,
64 QList<Section> *sections = nullptr);
65 void generateSidebar();
66 QString generateAllMembersFile(const Section &section, CodeMarker *marker);
67 QString generateAllQmlMembersFile(const Sections &sections, CodeMarker *marker);
68 QString generateObsoleteMembersFile(const Sections &sections, CodeMarker *marker);
69 QString generateObsoleteQmlMembersFile(const Sections &sections, CodeMarker *marker);
70 void generateClassHierarchy(const Node *relative, NodeMultiMap &classMap);
71 void generateAnnotatedLists(const Node *relative, CodeMarker *marker,
72 const NodeMultiMap &nodeMap);
73 void generateAnnotatedList(const Node *relative, CodeMarker *marker, const NodeList &nodes,
74 Qt::SortOrder sortOrder = Qt::AscendingOrder);
75 void generateCompactList(ListType listType, const Node *relative, const NodeMultiMap &classMap,
76 bool includeAlphabet, const QString &commonPrefix);
77 void generateFunctionIndex(const Node *relative);
78 void generateLegaleseList(const Node *relative, CodeMarker *marker);
79 bool generateGroupList(CollectionNode *cn, Qt::SortOrder sortOrder = Qt::AscendingOrder);
80 void generateList(const Node *relative, CodeMarker *marker, const QString &selector,
81 Qt::SortOrder sortOrder = Qt::AscendingOrder);
82 void generateSectionList(const Section &section, const Node *relative, CodeMarker *marker,
83 bool useObsoloteMembers = false);
84 void generateQmlSummary(const NodeVector &members, const Node *relative, CodeMarker *marker);
85 void generateQmlItem(const Node *node, const Node *relative, CodeMarker *marker, bool summary);
86 void generateDetailedQmlMember(Node *node, const Aggregate *relative, CodeMarker *marker);
87
88 void generateSection(const NodeVector &nv, const Node *relative, CodeMarker *marker);
89 void generateSynopsis(const Node *node, const Node *relative, CodeMarker *marker,
90 Section::Style style, bool alignNames = false);
91 void generateSectionInheritedList(const Section &section, const Node *relative);
92 QString highlightedCode(const QString &markedCode, const Node *relative,
93 bool alignNames = false, Genus genus = Genus::DontCare);
94
95 void generateFullName(const Node *apparentNode, const Node *relative,
96 const Node *actualNode = nullptr);
97 void generateSourceLink(const Node *node);
98 void generateDetailedMember(const Node *node, const PageNode *relative, CodeMarker *marker);
99 void generateLink(const Atom *atom);
100
101 QString fileBase(const Node *node) const override;
102 QString fileName(const Node *node);
103
104 void beginLink(const QString &link);
105 void beginLink(const QString &link, const Node *node, const Node *relative);
106 void endLink();
107 void generateExtractionMark(const Node *node, ExtractionMarkType markType);
108 void addIncludeFileToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text& text,
109 const QString &headerText);
110 void addSinceToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text,
111 const QString &sinceText) const;
112 void addStatusToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text &text,
113 const QString &statusText) const;
114 void addCMakeInfoToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text,
115 const QString &CMakeInfo) const;
116 void addQtVariableToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text *text,
117 const QString &qtVariableText) const;
118 void addQmlNativeTypesToMap(QMap<QString, Text> &requisites, Text *text,
119 const QString &nativeTypeText,
120 ClassNode *classe) const;
121 void addInheritsToMap(QMap<QString, Text> &requisites, Text *text, const QString &inheritsText,
122 ClassNode *classe);
123 void addInheritedByToMap(QMap<QString, Text> &requisites, Text *text,
124 const QString &inheritedBytext, ClassNode *classe);
125 void generateTheTable(const QStringList &requisiteOrder, const QMap<QString, Text> &requisites,
126 const Aggregate *aggregate,
127 CodeMarker *marker);
128 inline void openUnorderedList();
129 inline void closeUnorderedList();
130
131 QString groupReferenceText(PageNode* node);
132
133 static bool s_inUnorderedList;
134
135 int m_codeIndent { 0 };
136 QString m_codePrefix {};
137 QString m_codeSuffix {};
138 HelpProjectWriter *m_helpProjectWriter { nullptr };
139 ManifestWriter *m_manifestWriter { nullptr };
140 QString m_headerScripts {};
141 QString m_headerStyles {};
142 QString m_endHeader {};
143 QString m_postHeader {};
144 QString m_postPostHeader {};
145 QString m_prologue {};
146 QString m_footer {};
147 QString m_address {};
148 bool m_noNavigationBar { false };
149 QString m_project {};
150 QString m_productName {};
151 QString m_projectDescription {};
152 QString m_projectUrl {};
153 QString m_navigationLinks {};
154 QString m_navigationSeparator {};
155 QString m_homepage {};
156 QString m_hometitle {};
157 QString m_landingpage {};
158 QString m_landingtitle {};
159 QString m_cppclassespage {};
160 QString m_cppclassestitle {};
161 QString m_qmltypespage {};
162 QString m_qmltypestitle {};
163 QString m_trademarkspage {};
164 QString m_buildversion {};
165 QString m_qflagsHref {};
166 int tocDepth {};
167
168 Config *config { nullptr };
169
170};
171
172#define HTMLGENERATOR_ADDRESS "address"
173#define HTMLGENERATOR_FOOTER "footer"
174#define HTMLGENERATOR_POSTHEADER "postheader"
175#define HTMLGENERATOR_POSTPOSTHEADER "postpostheader"
176#define HTMLGENERATOR_PROLOGUE "prologue"
177#define HTMLGENERATOR_NONAVIGATIONBAR "nonavigationbar"
178#define HTMLGENERATOR_NAVIGATIONSEPARATOR "navigationseparator"
179#define HTMLGENERATOR_TOCDEPTH "tocdepth"
180
181QT_END_NAMESPACE
182
183#endif
184

source code of qttools/src/qdoc/qdoc/src/qdoc/htmlgenerator.h