rtfgen.h 9.24 KB
Newer Older
dimitri's avatar
dimitri committed
1 2
/******************************************************************************
 *
dimitri's avatar
dimitri committed
3
 * 
dimitri's avatar
dimitri committed
4
 *
dimitri's avatar
dimitri committed
5
 * Copyright (C) 1997-2010 by Parker Waechter & Dimitri van Heesch.
dimitri's avatar
dimitri committed
6 7 8 9 10 11 12
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation under the terms of the GNU General Public License is hereby 
 * granted. No representations are made about the suitability of this software 
 * for any purpose. It is provided "as is" without express or implied warranty.
 * See the GNU General Public License for more details.
 *
dimitri's avatar
dimitri committed
13 14
 * Documents produced by Doxygen are derivative works derived from the
 * input used in their production; they are not affected by this license.
dimitri's avatar
dimitri committed
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
 *
 */

#ifndef RTFGEN_H
#define RTFGEN_H

#include "outputgen.h"

class QFile;

class RTFGenerator : public OutputGenerator
{
  public:
    RTFGenerator();
   ~RTFGenerator();
dimitri's avatar
dimitri committed
30 31
    static void init();
    static void writeStyleSheetFile(QFile &f);
dimitri's avatar
dimitri committed
32
    static void writeExtensionsFile(QFile &file);
dimitri's avatar
dimitri committed
33

dimitri's avatar
dimitri committed
34 35
    void enable() 
    { if (genStack->top()) active=*genStack->top(); else active=TRUE; }
dimitri's avatar
dimitri committed
36 37 38 39 40 41 42
    void disable() { active=FALSE; }
    void enableIf(OutputType o)  { if (o==RTF) active=TRUE;  }
    void disableIf(OutputType o) { if (o==RTF) active=FALSE; }
    void disableIfNot(OutputType o) { if (o!=RTF) active=FALSE; }
    bool isEnabled(OutputType o) { return (o==RTF && active); } 
    OutputGenerator *get(OutputType o) { return (o==RTF) ? this : 0; }

dimitri's avatar
dimitri committed
43
    void printDoc(DocNode *,const char *);
dimitri's avatar
dimitri committed
44

dimitri's avatar
dimitri committed
45 46
    void startFile(const char *name,const char *manName,const char *title);
    void writeFooter() {}
dimitri's avatar
dimitri committed
47 48
    void endFile();
    void clearBuffer();
dimitri's avatar
dimitri committed
49
    //void postProcess(QByteArray &);
dimitri's avatar
dimitri committed
50 51 52
    
    void startIndexSection(IndexSections);
    void endIndexSection(IndexSections);
dimitri's avatar
dimitri committed
53
    void writePageLink(const char *,bool);
dimitri's avatar
dimitri committed
54 55 56 57 58 59
    void startProjectNumber();
    void endProjectNumber();
    void writeStyleInfo(int part);
    void startTitleHead(const char *);
    void startTitle();
    void endTitleHead(const char *,const char *name);
dimitri's avatar
dimitri committed
60
    void endTitle() {} 
dimitri's avatar
dimitri committed
61 62

    void newParagraph();
dimitri's avatar
dimitri committed
63 64
    void startParagraph();
    void endParagraph();
dimitri's avatar
dimitri committed
65
    void writeString(const char *text);
dimitri's avatar
dimitri committed
66 67
    void startIndexListItem();
    void endIndexListItem();
dimitri's avatar
dimitri committed
68 69
    void startIndexList();
    void endIndexList();
dimitri's avatar
dimitri committed
70 71
    void startIndexKey();
    void endIndexKey();
dimitri's avatar
dimitri committed
72 73
    void startIndexValue(bool);
    void endIndexValue(const char *,bool);
dimitri's avatar
dimitri committed
74 75
    void startItemList();
    void endItemList();
dimitri's avatar
dimitri committed
76 77
    void startIndexItem(const char *ref,const char *file);
    void endIndexItem(const char *ref,const char *file);
dimitri's avatar
dimitri committed
78 79 80
    void docify(const char *text);
    void codify(const char *text);
    void writeObjectLink(const char *ref,const char *file,
dimitri's avatar
dimitri committed
81
                         const char *anchor,const char *name);
dimitri's avatar
dimitri committed
82
    void writeCodeLink(const char *ref, const char *file,
dimitri's avatar
dimitri committed
83 84
                       const char *anchor,const char *name,
                       const char *tooltip);
dimitri's avatar
dimitri committed
85 86
    void startTextLink(const char *f,const char *anchor);
    void endTextLink();
dimitri's avatar
dimitri committed
87
    void startHtmlLink(const char *url);
dimitri's avatar
dimitri committed
88
    void endHtmlLink();
dimitri's avatar
dimitri committed
89 90 91 92
    void startTypewriter() { t << "{\\f2 "; }
    void endTypewriter()   { t << "}";      }
    void startGroupHeader();
    void endGroupHeader();
dimitri's avatar
dimitri committed
93 94 95
    //void writeListItem();
    void startItemListItem();
    void endItemListItem();
dimitri's avatar
dimitri committed
96 97 98

    void startMemberSections() {}
    void endMemberSections() {} 
dimitri's avatar
dimitri committed
99 100 101
    void startHeaderSection() {}
    void endHeaderSection() {}
    void startMemberHeader(const char *) { startGroupHeader(); }
dimitri's avatar
dimitri committed
102 103 104
    void endMemberHeader() { endGroupHeader(); }
    void startMemberSubtitle(); 
    void endMemberSubtitle(); 
dimitri's avatar
dimitri committed
105 106
    void startMemberDocList() {}
    void endMemberDocList() {}
dimitri's avatar
dimitri committed
107 108
    void startMemberList();
    void endMemberList();
dimitri's avatar
dimitri committed
109 110
    void startAnonTypeScope(int) {}
    void endAnonTypeScope(int) {}
dimitri's avatar
dimitri committed
111
    void startMemberItem(int);
dimitri's avatar
dimitri committed
112
    void endMemberItem();
dimitri's avatar
dimitri committed
113 114 115
    void startMemberTemplateParams() {}
    void endMemberTemplateParams() {}
    void insertMemberAlign(bool) {}
dimitri's avatar
dimitri committed
116

dimitri's avatar
dimitri committed
117
    void writeRuler() { rtfwriteRuler_thin(); }
dimitri's avatar
dimitri committed
118
	
dimitri's avatar
dimitri committed
119
    void writeAnchor(const char *fileName,const char *name);
dimitri's avatar
dimitri committed
120 121
    void startCodeFragment();
    void endCodeFragment();
dimitri's avatar
dimitri committed
122
    void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
dimitri's avatar
dimitri committed
123 124 125 126 127 128 129 130 131 132
    void startCodeLine() { col=0; }
    void endCodeLine() { lineBreak(); }
    void startEmphasis() { t << "{\\i ";  }
    void endEmphasis()   { t << "}"; }
    void startBold()     { t << "{\\b "; }
    void endBold()       { t << "}"; }
    void startDescription();
    void endDescription();
    void startDescItem();
    void endDescItem();
dimitri's avatar
dimitri committed
133
    void lineBreak(const char *style=0);
dimitri's avatar
dimitri committed
134
    void startMemberDoc(const char *,const char *,const char *,const char *);
dimitri's avatar
dimitri committed
135
    void endMemberDoc(bool);
dimitri's avatar
dimitri committed
136
    void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
dimitri's avatar
dimitri committed
137
    void endDoxyAnchor(const char *,const char *);
dimitri's avatar
dimitri committed
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
    void startCodeAnchor(const char *) {};
    void endCodeAnchor() {};
    void writeChar(char c);
    void writeLatexSpacing() {};//{ t << "\\hspace{0.3cm}"; }
    void writeStartAnnoItem(const char *type,const char *file, 
                            const char *path,const char *name);
    void writeEndAnnoItem(const char *name);
    void startSubsection();
    void endSubsection();
    void startSubsubsection();
    void endSubsubsection();
    void startCenter()      { t << "{\\qc" << endl; }
    void endCenter()        { t << "}"; }
    void startSmall()       { t << "{\\sub "; }
    void endSmall()         { t << "}"; }

    void startMemberDescription();
    void endMemberDescription();
dimitri's avatar
dimitri committed
156
    void startDescList(SectionTypes);
dimitri's avatar
dimitri committed
157 158 159
    void startSimpleSect(SectionTypes,const char *,const char *,const char *);
    void endSimpleSect();
    void startParamList(ParamListTypes,const char *);
dimitri's avatar
dimitri committed
160
    void endParamList();
dimitri's avatar
dimitri committed
161 162 163
    //void writeDescItem();
    void startDescForItem();
    void endDescForItem();
dimitri's avatar
dimitri committed
164 165
    void startSection(const char *,const char *,SectionInfo::SectionType);
    void endSection(const char *,SectionInfo::SectionType);
dimitri's avatar
dimitri committed
166
    void addIndexItem(const char *,const char *);
dimitri's avatar
dimitri committed
167 168 169 170
    void startIndent();
    void endIndent();
    void writeSynopsis()     {}
    void startClassDiagram();
dimitri's avatar
dimitri committed
171
    void endClassDiagram(const ClassDiagram &,const char *filename,const char *name);
dimitri's avatar
dimitri committed
172 173
    void startPageRef();
    void endPageRef(const char *,const char *);
dimitri's avatar
dimitri committed
174 175
    void startQuickIndices() {}
    void endQuickIndices() {}
dimitri's avatar
dimitri committed
176 177
    void writeSplitBar(const char *) {}
    void writeLogo() {}
dimitri's avatar
dimitri committed
178
    void writeQuickLinks(bool,HighlightedItem) {}
dimitri's avatar
dimitri committed
179 180
    void startContents() {}
    void endContents() {}
dimitri's avatar
dimitri committed
181
    void writeNonBreakableSpace(int);
dimitri's avatar
dimitri committed
182 183 184 185 186 187 188 189
	
    void startDescTable();
    void endDescTable();
    void startDescTableTitle();
    void endDescTableTitle();
    void startDescTableData();
    void endDescTableData();
    
dimitri's avatar
dimitri committed
190
    void startDotGraph();
dimitri's avatar
dimitri committed
191
    void endDotGraph(const DotClassGraph &);
dimitri's avatar
dimitri committed
192
    void startInclDepGraph();
dimitri's avatar
dimitri committed
193
    void endInclDepGraph(const DotInclDepGraph &);
dimitri's avatar
dimitri committed
194
    void startGroupCollaboration();
dimitri's avatar
dimitri committed
195
    void endGroupCollaboration(const DotGroupCollaboration &g);
dimitri's avatar
dimitri committed
196
    void startCallGraph();
dimitri's avatar
dimitri committed
197
    void endCallGraph(const DotCallGraph &);
dimitri's avatar
dimitri committed
198
    void startDirDepGraph();
dimitri's avatar
dimitri committed
199 200
    void endDirDepGraph(const DotDirDeps &g);
    void writeGraphicalHierarchy(const DotGfxHierarchyTable &) {}
dimitri's avatar
dimitri committed
201

dimitri's avatar
dimitri committed
202
    void startMemberGroupHeader(bool);
dimitri's avatar
dimitri committed
203 204 205 206 207 208
    void endMemberGroupHeader();
    void startMemberGroupDocs();
    void endMemberGroupDocs();
    void startMemberGroup();
    void endMemberGroup(bool);
    
dimitri's avatar
dimitri committed
209
    void startTextBlock(bool dense);
dimitri's avatar
dimitri committed
210
    void endTextBlock(bool);
dimitri's avatar
dimitri committed
211 212
    void lastIndexPage();

dimitri's avatar
dimitri committed
213 214
    void startMemberDocPrefixItem() {}
    void endMemberDocPrefixItem() {}
dimitri's avatar
dimitri committed
215
    void startMemberDocName(bool) {}
dimitri's avatar
dimitri committed
216
    void endMemberDocName() {}
dimitri's avatar
dimitri committed
217
    void startParameterType(bool,const char *);
dimitri's avatar
dimitri committed
218
    void endParameterType() {}
dimitri's avatar
dimitri committed
219
    void startParameterName(bool) {}
dimitri's avatar
dimitri committed
220
    void endParameterName(bool,bool,bool) {}
dimitri's avatar
dimitri committed
221
    void startParameterList(bool) {}
dimitri's avatar
dimitri committed
222
    void endParameterList() {}
dimitri's avatar
dimitri committed
223

dimitri's avatar
dimitri committed
224 225 226 227 228 229 230 231 232 233
    void startConstraintList(const char  *);
    void startConstraintParam();
    void endConstraintParam();
    void startConstraintType();
    void endConstraintType();
    void startConstraintDocs();
    void endConstraintDocs();
    void endConstraintList();


dimitri's avatar
dimitri committed
234 235 236
    void startFontClass(const char *) {}
    void endFontClass() {}

dimitri's avatar
dimitri committed
237
    void writeCodeAnchor(const char *) {}
dimitri's avatar
dimitri committed
238
    void linkableSymbol(int,const char *,Definition *,Definition *) {}
dimitri's avatar
dimitri committed
239

dimitri's avatar
dimitri committed
240 241 242 243 244 245
    static bool preProcessFileInplace(const char *path,const char *name);
    
  private:
    RTFGenerator(const RTFGenerator &);
    RTFGenerator &operator=(const RTFGenerator &);

dimitri's avatar
dimitri committed
246 247 248 249 250 251
    const char *rtf_BList_DepthStyle();
    const char *rtf_CList_DepthStyle();
    const char *rtf_EList_DepthStyle();
    const char *rtf_LCList_DepthStyle();
    const char *rtf_DList_DepthStyle();
    const char *rtf_Code_DepthStyle();
dimitri's avatar
dimitri committed
252 253 254 255 256 257 258
    void incrementIndentLevel();
    void decrementIndentLevel();
    int  col;

    bool m_bstartedBody;  // has startbody been called yet?
    int  m_listLevel; // // RTF does not really have a addative indent...manually set list level.
    bool m_omitParagraph; // should a the next paragraph command be ignored?
dimitri's avatar
dimitri committed
259
    int  m_numCols; // number of columns in a table
dimitri's avatar
dimitri committed
260
    QCString relPath;
dimitri's avatar
dimitri committed
261 262 263 264

    void beginRTFDocument();
    void beginRTFChapter();
    void beginRTFSection();
dimitri's avatar
dimitri committed
265 266 267 268
    void rtfwriteRuler_doubleline();
    void rtfwriteRuler_emboss();
    void rtfwriteRuler_thick();
    void rtfwriteRuler_thin();
dimitri's avatar
dimitri committed
269
    void writeRTFReference(const char *label);
dimitri's avatar
dimitri committed
270
    //char *getMultiByte(int c);
dimitri's avatar
dimitri committed
271 272 273
};

#endif