1 /****************************************************************************
2 **
3 ** Copyright (C) 2019 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the tools applications of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21 ** included in the packaging of this file. Please review the following
22 ** information to ensure the GNU General Public License requirements will
23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24 **
25 ** $QT_END_LICENSE$
26 **
27 ****************************************************************************/
28 
29 #ifndef WEBXMLGENERATOR_H
30 #define WEBXMLGENERATOR_H
31 
32 #include "codemarker.h"
33 #include "htmlgenerator.h"
34 #include "qdocindexfiles.h"
35 
36 #include <QtCore/qscopedpointer.h>
37 #include <QtCore/qxmlstream.h>
38 
39 QT_BEGIN_NAMESPACE
40 
41 class WebXMLGenerator : public HtmlGenerator, public IndexSectionWriter
42 {
43 public:
WebXMLGenerator()44     explicit WebXMLGenerator() {}
45 
46     void initializeGenerator() override;
47     void terminateGenerator() override;
48     QString format() override;
49     // from IndexSectionWriter
50     void append(QXmlStreamWriter &writer, Node *node) override;
51 
52 protected:
53     int generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker) override;
54     void generateCppReferencePage(Aggregate *aggregate, CodeMarker *marker) override;
55     void generatePageNode(PageNode *pn, CodeMarker *marker) override;
56     void generateDocumentation(Node *node) override;
57     void generateExampleFilePage(const Node *en, const QString &file, CodeMarker *marker) override;
58     QString fileExtension() const override;
59 
60     virtual const Atom *addAtomElements(QXmlStreamWriter &writer, const Atom *atom,
61                                         const Node *relative, CodeMarker *marker);
62     virtual void generateIndexSections(QXmlStreamWriter &writer, Node *node);
63 
64 private:
65     void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
66                                const NodeMap &nodeMap);
67     void generateAnnotatedList(QXmlStreamWriter &writer, const Node *relative,
68                                const NodeList &nodeList);
69     void generateRelations(QXmlStreamWriter &writer, const Node *node);
70     void startLink(QXmlStreamWriter &writer, const Atom *atom, const Node *node,
71                    const QString &link);
72     void endLink(QXmlStreamWriter &writer);
73 
74     bool inLink;
75     bool inContents;
76     bool inSectionHeading;
77     bool hasQuotingInformation;
78     int numTableRows;
79     QString quoteCommand;
80     QScopedPointer<QXmlStreamWriter> currentWriter;
81     bool supplement = false;
82 };
83 
84 QT_END_NAMESPACE
85 
86 #endif
87