efc9d213cb5e3c32c18d28d3b32a554d904d9b7c
[platform/upstream/doxygen.git] / src / rtfdocvisitor.h
1 /******************************************************************************
2  *
3  * 
4  *
5  *
6  * Copyright (C) 1997-2014 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 _RTFDOCVISITOR_H
20 #define _RTFDOCVISITOR_H
21
22 #include "docvisitor.h"
23 #include <qstack.h>
24 #include <qcstring.h>
25
26 class FTextStream;
27 class CodeOutputInterface;
28
29 /*! @brief Concrete visitor implementation for RTF output. */
30 class RTFDocVisitor : public DocVisitor
31 {
32   public:
33     RTFDocVisitor(FTextStream &t,CodeOutputInterface &ci,const char *langExt);
34     
35     //--------------------------------------
36     // visitor functions for leaf nodes
37     //--------------------------------------
38     
39     void visit(DocWord *);
40     void visit(DocLinkedWord *);
41     void visit(DocWhiteSpace *);
42     void visit(DocSymbol *);
43     void visit(DocURL *);
44     void visit(DocLineBreak *);
45     void visit(DocHorRuler *);
46     void visit(DocStyleChange *);
47     void visit(DocVerbatim *);
48     void visit(DocAnchor *);
49     void visit(DocInclude *);
50     void visit(DocIncOperator *);
51     void visit(DocFormula *);
52     void visit(DocIndexEntry *);
53     void visit(DocSimpleSectSep *);
54     void visit(DocCite *);
55
56     //--------------------------------------
57     // visitor functions for compound nodes
58     //--------------------------------------
59     
60     void visitPre(DocAutoList *);
61     void visitPost(DocAutoList *);
62     void visitPre(DocAutoListItem *);
63     void visitPost(DocAutoListItem *);
64     void visitPre(DocPara *);
65     void visitPost(DocPara *);
66     void visitPre(DocRoot *);
67     void visitPost(DocRoot *);
68     void visitPre(DocSimpleSect *);
69     void visitPost(DocSimpleSect *);
70     void visitPre(DocTitle *);
71     void visitPost(DocTitle *);
72     void visitPre(DocSimpleList *);
73     void visitPost(DocSimpleList *);
74     void visitPre(DocSimpleListItem *);
75     void visitPost(DocSimpleListItem *);
76     void visitPre(DocSection *s);
77     void visitPost(DocSection *);
78     void visitPre(DocHtmlList *s);
79     void visitPost(DocHtmlList *s);
80     void visitPre(DocHtmlListItem *);
81     void visitPost(DocHtmlListItem *);
82     //void visitPre(DocHtmlPre *);
83     //void visitPost(DocHtmlPre *);
84     void visitPre(DocHtmlDescList *);
85     void visitPost(DocHtmlDescList *);
86     void visitPre(DocHtmlDescTitle *);
87     void visitPost(DocHtmlDescTitle *);
88     void visitPre(DocHtmlDescData *);
89     void visitPost(DocHtmlDescData *);
90     void visitPre(DocHtmlTable *t);
91     void visitPost(DocHtmlTable *t);
92     void visitPre(DocHtmlCaption *);
93     void visitPost(DocHtmlCaption *);
94     void visitPre(DocHtmlRow *);
95     void visitPost(DocHtmlRow *) ;
96     void visitPre(DocHtmlCell *);
97     void visitPost(DocHtmlCell *);
98     void visitPre(DocInternal *);
99     void visitPost(DocInternal *);
100     void visitPre(DocHRef *);
101     void visitPost(DocHRef *);
102     void visitPre(DocHtmlHeader *);
103     void visitPost(DocHtmlHeader *) ;
104     void visitPre(DocImage *);
105     void visitPost(DocImage *);
106     void visitPre(DocDotFile *);
107     void visitPost(DocDotFile *);
108     void visitPre(DocMscFile *);
109     void visitPost(DocMscFile *);
110     void visitPre(DocDiaFile *);
111     void visitPost(DocDiaFile *);
112     void visitPre(DocLink *);
113     void visitPost(DocLink *);
114     void visitPre(DocRef *ref);
115     void visitPost(DocRef *);
116     void visitPre(DocSecRefItem *);
117     void visitPost(DocSecRefItem *);
118     void visitPre(DocSecRefList *);
119     void visitPost(DocSecRefList *);
120     void visitPre(DocParamSect *);
121     void visitPost(DocParamSect *);
122     void visitPre(DocParamList *);
123     void visitPost(DocParamList *);
124     void visitPre(DocXRefItem *);
125     void visitPost(DocXRefItem *);
126     void visitPre(DocInternalRef *);
127     void visitPost(DocInternalRef *);
128     void visitPre(DocCopy *);
129     void visitPost(DocCopy *);
130     void visitPre(DocText *);
131     void visitPost(DocText *);
132     void visitPre(DocHtmlBlockQuote *);
133     void visitPost(DocHtmlBlockQuote *);
134     void visitPre(DocVhdlFlow *);
135     void visitPost(DocVhdlFlow *);
136     void visitPre(DocParBlock *);
137     void visitPost(DocParBlock *);
138
139   private:
140
141     //--------------------------------------
142     // helper functions 
143     //--------------------------------------
144     
145     void filter(const char *str,bool verbatim=FALSE);
146     void startLink(const QCString &ref,const QCString &file,
147                    const QCString &anchor);
148     void endLink(const QCString &ref);
149     QCString getStyle(const char *name);
150     void incIndentLevel();
151     void decIndentLevel();
152
153     void pushEnabled();
154     void popEnabled();
155     void writeDotFile(const QCString &fileName);
156     void writeMscFile(const QCString &fileName);
157     void writeDiaFile(const QCString &fileName);
158
159     //--------------------------------------
160     // state variables
161     //--------------------------------------
162
163     FTextStream &m_t;
164     CodeOutputInterface &m_ci;
165     bool m_insidePre;
166     bool m_hide;
167     int m_indentLevel;
168     QStack<bool> m_enabled;
169     bool m_lastIsPara;
170     QCString m_langExt;
171 };
172
173 #endif