Imported Upstream version 1.9.8
[platform/upstream/doxygen.git] / src / xmldocvisitor.h
1 /******************************************************************************
2  *
3  *
4  *
5  *
6  * Copyright (C) 1997-2015 by Dimitri van Heesch.
7  *
8  * Permission to use, copy, modify, and distribute this software and its
9  * documentation under the terms of the GNU General Public License is hereby
10  * granted. No representations are made about the suitability of this software
11  * for any purpose. It is provided "as is" without express or implied warranty.
12  * See the GNU General Public License for more details.
13  *
14  * Documents produced by Doxygen are derivative works derived from the
15  * input used in their production; they are not affected by this license.
16  *
17  */
18
19 #ifndef XMLDOCVISITOR_H
20 #define XMLDOCVISITOR_H
21
22 #include <iostream>
23
24 #include "qcstring.h"
25 #include "docvisitor.h"
26 #include "docnode.h"
27 #include "textstream.h"
28
29 class OutputCodeList;
30 class QCString;
31
32 /*! @brief Concrete visitor implementation for XML output. */
33 class XmlDocVisitor : public DocVisitor
34 {
35   public:
36     XmlDocVisitor(TextStream &t,OutputCodeList &ci,const QCString &langExt);
37
38     //--------------------------------------
39     // visitor functions for leaf nodes
40     //--------------------------------------
41
42     void operator()(const DocWord &);
43     void operator()(const DocLinkedWord &);
44     void operator()(const DocWhiteSpace &);
45     void operator()(const DocSymbol &);
46     void operator()(const DocEmoji &);
47     void operator()(const DocURL &);
48     void operator()(const DocLineBreak &);
49     void operator()(const DocHorRuler &);
50     void operator()(const DocStyleChange &);
51     void operator()(const DocVerbatim &);
52     void operator()(const DocAnchor &);
53     void operator()(const DocInclude &);
54     void operator()(const DocIncOperator &);
55     void operator()(const DocFormula &);
56     void operator()(const DocIndexEntry &);
57     void operator()(const DocSimpleSectSep &);
58     void operator()(const DocCite &);
59     void operator()(const DocSeparator &);
60
61     //--------------------------------------
62     // visitor functions for compound nodes
63     //--------------------------------------
64
65     void operator()(const DocAutoList &);
66     void operator()(const DocAutoListItem &);
67     void operator()(const DocPara &) ;
68     void operator()(const DocRoot &);
69     void operator()(const DocSimpleSect &);
70     void operator()(const DocTitle &);
71     void operator()(const DocSimpleList &);
72     void operator()(const DocSimpleListItem &);
73     void operator()(const DocSection &);
74     void operator()(const DocHtmlList &);
75     void operator()(const DocHtmlListItem &);
76     void operator()(const DocHtmlDescList &);
77     void operator()(const DocHtmlDescTitle &);
78     void operator()(const DocHtmlDescData &);
79     void operator()(const DocHtmlTable &);
80     void operator()(const DocHtmlRow &);
81     void operator()(const DocHtmlCell &);
82     void operator()(const DocHtmlCaption &);
83     void operator()(const DocInternal &);
84     void operator()(const DocHRef &);
85     void operator()(const DocHtmlSummary &);
86     void operator()(const DocHtmlDetails &);
87     void operator()(const DocHtmlHeader &);
88     void operator()(const DocImage &);
89     void operator()(const DocDotFile &);
90     void operator()(const DocMscFile &);
91     void operator()(const DocDiaFile &);
92     void operator()(const DocLink &);
93     void operator()(const DocRef &);
94     void operator()(const DocSecRefItem &);
95     void operator()(const DocSecRefList &);
96     void operator()(const DocParamSect &);
97     void operator()(const DocParamList &);
98     void operator()(const DocXRefItem &);
99     void operator()(const DocInternalRef &);
100     void operator()(const DocText &);
101     void operator()(const DocHtmlBlockQuote &);
102     void operator()(const DocVhdlFlow &);
103     void operator()(const DocParBlock &);
104
105   private:
106     template<class T>
107     void visitChildren(const T &t)
108     {
109       for (const auto &child : t.children())
110       {
111         std::visit(*this, child);
112       }
113     }
114
115     //--------------------------------------
116     // helper functions
117     //--------------------------------------
118
119     void filter(const QCString &str);
120     void startLink(const QCString &ref,const QCString &file,
121                    const QCString &anchor);
122     void endLink();
123
124     //--------------------------------------
125     // state variables
126     //--------------------------------------
127
128     TextStream &m_t;
129     OutputCodeList &m_ci;
130     bool m_insidePre;
131     bool m_hide;
132     QCString m_langExt;
133 };
134
135 #endif