rtfgen.h 9.18 KB
Newer Older
Dimitri van Heesch's avatar
Dimitri van Heesch committed
1 2
/******************************************************************************
 *
3
 * 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
4
 *
5
 * Copyright (C) 1997-2010 by Parker Waechter & Dimitri van Heesch.
Dimitri van Heesch's avatar
Dimitri van Heesch 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 van Heesch's avatar
Dimitri van Heesch 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 van Heesch's avatar
Dimitri van Heesch 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();
30 31
    static void init();
    static void writeStyleSheetFile(QFile &f);
32
    static void writeExtensionsFile(QFile &file);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
33

34 35
    void enable() 
    { if (genStack->top()) active=*genStack->top(); else active=TRUE; }
Dimitri van Heesch's avatar
Dimitri van Heesch 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; }

43
    void printDoc(DocNode *,const char *);
44

45 46
    void startFile(const char *name,const char *manName,const char *title);
    void writeFooter() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
47 48
    void endFile();
    void clearBuffer();
49
    void postProcess(QByteArray &);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
50 51 52
    
    void startIndexSection(IndexSections);
    void endIndexSection(IndexSections);
53
    void writePageLink(const char *,bool);
Dimitri van Heesch's avatar
Dimitri van Heesch 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);
60
    void endTitle() {} 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
61 62

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

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

117
    void writeRuler() { rtfwriteRuler_thin(); }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
118
	
119
    void writeAnchor(const char *fileName,const char *name);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
120 121
    void startCodeFragment();
    void endCodeFragment();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
122
    void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
Dimitri van Heesch's avatar
Dimitri van Heesch 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 van Heesch's avatar
Dimitri van Heesch committed
133
    void lineBreak(const char *style=0);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
134
    void startMemberDoc(const char *,const char *,const char *,const char *);
135
    void endMemberDoc(bool);
136
    void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
137
    void endDoxyAnchor(const char *,const char *);
Dimitri van Heesch's avatar
Dimitri van Heesch 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();
156
    void startDescList(SectionTypes);
157 158 159
    void startSimpleSect(SectionTypes,const char *,const char *,const char *);
    void endSimpleSect();
    void startParamList(ParamListTypes,const char *);
160
    void endParamList();
161 162 163
    //void writeDescItem();
    void startDescForItem();
    void endDescForItem();
164 165
    void startSection(const char *,const char *,SectionInfo::SectionType);
    void endSection(const char *,SectionInfo::SectionType);
166
    void addIndexItem(const char *,const char *);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
167 168 169 170
    void startIndent();
    void endIndent();
    void writeSynopsis()     {}
    void startClassDiagram();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
171
    void endClassDiagram(const ClassDiagram &,const char *filename,const char *name);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
172 173
    void startPageRef();
    void endPageRef(const char *,const char *);
174 175
    void startQuickIndices() {}
    void endQuickIndices() {}
176
    void writeQuickLinks(bool,HighlightedItem) {}
177 178
    void startContents() {}
    void endContents() {}
179
    void writeNonBreakableSpace(int);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
180 181 182 183 184 185 186 187
	
    void startDescTable();
    void endDescTable();
    void startDescTableTitle();
    void endDescTableTitle();
    void startDescTableData();
    void endDescTableData();
    
Dimitri van Heesch's avatar
Dimitri van Heesch committed
188
    void startDotGraph();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
189
    void endDotGraph(const DotClassGraph &);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
190
    void startInclDepGraph();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
191
    void endInclDepGraph(const DotInclDepGraph &);
192
    void startGroupCollaboration();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
193
    void endGroupCollaboration(const DotGroupCollaboration &g);
194
    void startCallGraph();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
195
    void endCallGraph(const DotCallGraph &);
196
    void startDirDepGraph();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
197 198
    void endDirDepGraph(const DotDirDeps &g);
    void writeGraphicalHierarchy(const DotGfxHierarchyTable &) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
199

Dimitri van Heesch's avatar
Dimitri van Heesch committed
200
    void startMemberGroupHeader(bool);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
201 202 203 204 205 206
    void endMemberGroupHeader();
    void startMemberGroupDocs();
    void endMemberGroupDocs();
    void startMemberGroup();
    void endMemberGroup(bool);
    
Dimitri van Heesch's avatar
Dimitri van Heesch committed
207
    void startTextBlock(bool dense);
208
    void endTextBlock(bool);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
209 210
    void lastIndexPage();

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

222 223 224 225 226 227 228 229 230 231
    void startConstraintList(const char  *);
    void startConstraintParam();
    void endConstraintParam();
    void startConstraintType();
    void endConstraintType();
    void startConstraintDocs();
    void endConstraintDocs();
    void endConstraintList();


232 233 234
    void startFontClass(const char *) {}
    void endFontClass() {}

235
    void writeCodeAnchor(const char *) {}
236
    void linkableSymbol(int,const char *,Definition *,Definition *) {}
237

Dimitri van Heesch's avatar
Dimitri van Heesch committed
238 239 240 241 242 243
    static bool preProcessFileInplace(const char *path,const char *name);
    
  private:
    RTFGenerator(const RTFGenerator &);
    RTFGenerator &operator=(const RTFGenerator &);

244 245 246 247 248 249
    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 van Heesch's avatar
Dimitri van Heesch committed
250 251 252 253 254 255 256
    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?
257
    int  m_numCols; // number of columns in a table
258
    QCString relPath;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
259 260 261 262

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

#endif