Imported Upstream version 1.9.5
[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 CodeOutputInterface;
30 class QCString;
31
32 /*! @brief Concrete visitor implementation for XML output. */
33 class XmlDocVisitor : public DocVisitor
34 {
35   public:
36     XmlDocVisitor(TextStream &t,CodeOutputInterface &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 DocHtmlDetails &);
86     void operator()(const DocHtmlHeader &);
87     void operator()(const DocImage &);
88     void operator()(const DocDotFile &);
89     void operator()(const DocMscFile &);
90     void operator()(const DocDiaFile &);
91     void operator()(const DocLink &);
92     void operator()(const DocRef &);
93     void operator()(const DocSecRefItem &);
94     void operator()(const DocSecRefList &);
95     void operator()(const DocParamSect &);
96     void operator()(const DocParamList &);
97     void operator()(const DocXRefItem &);
98     void operator()(const DocInternalRef &);
99     void operator()(const DocText &);
100     void operator()(const DocHtmlBlockQuote &);
101     void operator()(const DocVhdlFlow &);
102     void operator()(const DocParBlock &);
103
104   private:
105     template<class T>
106     void visitChildren(const T &t)
107     {
108       for (const auto &child : t.children())
109       {
110         std::visit(*this, child);
111       }
112     }
113
114     //--------------------------------------
115     // helper functions
116     //--------------------------------------
117
118     void filter(const QCString &str);
119     void startLink(const QCString &ref,const QCString &file,
120                    const QCString &anchor);
121     void endLink();
122
123     //--------------------------------------
124     // state variables
125     //--------------------------------------
126
127     TextStream &m_t;
128     CodeOutputInterface &m_ci;
129     bool m_insidePre;
130     bool m_hide;
131     QCString m_langExt;
132 };
133
134 #endif