| 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 | |
| 15 | QT_BEGIN_NAMESPACE |
| 16 | |
| 17 | class Aggregate; |
| 18 | class Config; |
| 19 | class ExampleNode; |
| 20 | class HelpProjectWriter; |
| 21 | class ManifestWriter; |
| 22 | |
| 23 | class HtmlGenerator : public XmlGenerator |
| 24 | { |
| 25 | public: |
| 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 | |
| 37 | protected: |
| 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 | |
| 48 | private: |
| 49 | enum SubTitleSize { SmallSubTitle, LargeSubTitle }; |
| 50 | enum { 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 (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 (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 (); |
| 66 | QString generateAllMembersFile(const Section §ion, CodeMarker *marker); |
| 67 | QString generateAllQmlMembersFile(const Sections §ions, CodeMarker *marker); |
| 68 | QString generateObsoleteMembersFile(const Sections §ions, CodeMarker *marker); |
| 69 | QString generateObsoleteQmlMembersFile(const Sections §ions, 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 §ion, 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 §ion, 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 (const Node *node, ExtractionMarkType markType); |
| 108 | void addIncludeFileToMap(const Aggregate *aggregate, QMap<QString, Text> &requisites, Text& text, |
| 109 | const QString &); |
| 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 {}; |
| 141 | QString {}; |
| 142 | QString {}; |
| 143 | QString {}; |
| 144 | QString {}; |
| 145 | QString m_prologue {}; |
| 146 | QString {}; |
| 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 "footer" |
| 174 | #define "postheader" |
| 175 | #define "postpostheader" |
| 176 | #define HTMLGENERATOR_PROLOGUE "prologue" |
| 177 | #define HTMLGENERATOR_NONAVIGATIONBAR "nonavigationbar" |
| 178 | #define HTMLGENERATOR_NAVIGATIONSEPARATOR "navigationseparator" |
| 179 | #define HTMLGENERATOR_TOCDEPTH "tocdepth" |
| 180 | |
| 181 | QT_END_NAMESPACE |
| 182 | |
| 183 | #endif |
| 184 | |