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