mangen.h 9.97 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
 *
Dimitri van Heesch's avatar
Dimitri van Heesch committed
5
 * Copyright (C) 1997-2014 by 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
 *
 */

#ifndef MANGEN_H
#define MANGEN_H

#include "outputgen.h"

class QFile;

Dimitri van Heesch's avatar
Dimitri van Heesch committed
25
/** Generator for Man page output. */
Dimitri van Heesch's avatar
Dimitri van Heesch committed
26 27 28 29 30 31
class ManGenerator : public OutputGenerator
{
  public:
    ManGenerator();
   ~ManGenerator();
    
32
    //OutputGenerator *copy()  { return new ManGenerator; } 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
33
    //OutputGenerator *clone() { return new ManGenerator(*this); }
34
    //void append(const OutputGenerator *o);
35 36
    void enable() 
    { if (genStack->top()) active=*genStack->top(); else active=TRUE; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
37
    void disable() { active=FALSE; }
38 39 40
    void enableIf(OutputType o)  { if (o==Man) enable(); }
    void disableIf(OutputType o) { if (o==Man) disable(); }
    void disableIfNot(OutputType o) { if (o!=Man) disable(); }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
41 42 43
    bool isEnabled(OutputType o) { return (o==Man && active); } 
    OutputGenerator *get(OutputType o) { return (o==Man) ? this : 0; }

Dimitri van Heesch's avatar
Dimitri van Heesch committed
44
    void writeDoc(DocNode *,Definition *,MemberDef *);
45

Dimitri van Heesch's avatar
Dimitri van Heesch committed
46
    static void init();
47
    void startFile(const char *name,const char *manName,const char *title);
48
    void writeSearchInfo() {}
49
    void writeFooter(const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
50 51 52 53 54
    void endFile();
    void clearBuffer();

    void startIndexSection(IndexSections) {}
    void endIndexSection(IndexSections) {}
55
    void writePageLink(const char *,bool) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
56 57 58
    void startProjectNumber() {}
    void endProjectNumber() {}
    void writeStyleInfo(int) {}
59 60
    void startTitleHead(const char *) {}
    void endTitleHead(const char *,const char *);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
61
    void startTitle();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
62
    void endTitle();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
63 64
    
    void newParagraph();
65 66
    void startParagraph();
    void endParagraph();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
67
    void writeString(const char *text);
68 69
    void startIndexListItem() {}
    void endIndexListItem() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
70
    void startIndexList() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
71
    void endIndexList()   { newParagraph(); } 
72 73
    void startIndexKey() {}
    void endIndexKey()   {} 
74 75
    void startIndexValue(bool) {}
    void endIndexValue(const char *,bool)   {} 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
76
    void startItemList()  {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
77
    void endItemList()    { newParagraph(); }
78 79
    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
80 81 82 83
    void docify(const char *text);
    void codify(const char *text);
    void writeObjectLink(const char *ref,const char *file,
                         const char *anchor,const char *name);
84
    void writeCodeLink(const char *ref,const char *file,
85 86
                       const char *anchor,const char *name,
                       const char *tooltip);
87 88 89
    void writeTooltip(const char *, const DocLinkInfo &, const char *,
                      const char *, const SourceLinkInfo &, const SourceLinkInfo &
                     ) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
90 91
    void startTextLink(const char *,const char *) {}
    void endTextLink() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
92 93
    void startHtmlLink(const char *url);
    void endHtmlLink();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
94
    void startTypewriter() { t << "\\fC"; firstCol=FALSE; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
95
    void endTypewriter()   { t << "\\fP"; firstCol=FALSE; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
96 97
    void startGroupHeader(int);
    void endGroupHeader(int);
98 99
    void startMemberSections() {}
    void endMemberSections() {}
100
    void startHeaderSection() {}
101
    void endHeaderSection();
102
    void startMemberHeader(const char *);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
103
    void endMemberHeader();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
104
    void insertMemberAlign(bool) {}
105 106
    void startMemberSubtitle() {}
    void endMemberSubtitle() {}
107 108 109
    //void writeListItem();
    void startItemListItem();
    void endItemListItem();
110 111
    void startMemberDocList() {}
    void endMemberDocList() {}
112 113
    void startMemberList();
    void endMemberList();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
114 115
    void startInlineHeader();
    void endInlineHeader();
116 117
    void startAnonTypeScope(int);
    void endAnonTypeScope(int);
118
    void startMemberItem(const char *,int,const char *);
119
    void endMemberItem();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
120
    void startMemberTemplateParams() {}
121
    void endMemberTemplateParams(const char *,const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
122

Dimitri van Heesch's avatar
Dimitri van Heesch committed
123
    void startMemberGroupHeader(bool);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
124 125 126 127 128 129
    void endMemberGroupHeader();
    void startMemberGroupDocs();
    void endMemberGroupDocs();
    void startMemberGroup();
    void endMemberGroup(bool);

Dimitri van Heesch's avatar
Dimitri van Heesch committed
130
    void writeRuler()    {}
131
    void writeAnchor(const char *,const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
132 133
    void startCodeFragment();
    void endCodeFragment();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
134
    void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
135
    void startCodeLine(bool) {}
136
    void endCodeLine() { codify("\n"); col=0; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
137
    void startEmphasis() { t << "\\fI"; firstCol=FALSE; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
138
    void endEmphasis()   { t << "\\fP"; firstCol=FALSE; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
139
    void startBold()     { t << "\\fB"; firstCol=FALSE; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
140
    void endBold()       { t << "\\fP"; firstCol=FALSE; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
141 142 143 144
    void startDescription() {}
    void endDescription()   {}
    void startDescItem();
    void endDescItem();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
145
    void lineBreak(const char *) { t << "\n.br" << endl; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
146
    void writeChar(char c);
Dimitri van Heesch's avatar
Dimitri van Heesch committed
147
    void startMemberDoc(const char *,const char *,const char *,const char *,bool);
148
    void endMemberDoc(bool);
149
    void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
150
    void endDoxyAnchor(const char *,const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
151 152 153 154 155
    void writeLatexSpacing() {}
    void writeStartAnnoItem(const char *type,const char *file,
                            const char *path,const char *name);
    void writeEndAnnoItem(const char *) { t << endl; firstCol=TRUE; }
    void startSubsection();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
156
    void endSubsection();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
157
    void startSubsubsection();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
158
    void endSubsubsection();
Dimitri van Heesch's avatar
Dimitri van Heesch committed
159 160 161 162
    void startCenter()        {}
    void endCenter()          {}
    void startSmall()         {}
    void endSmall()           {}
163
    void startMemberDescription(const char *,const char *) { t << "\n.RI \"\\fI"; firstCol=FALSE; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
164
    void endMemberDescription()   { t << "\\fP\""; firstCol=FALSE; }
165 166
    void startMemberDeclaration() {} 
    void endMemberDeclaration(const char *,const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
167
    void writeInheritedSectionTitle(const char *,const char *,const char *,
168
                      const char *,const char *,const char *) {}
169
    void startDescList(SectionTypes);
170
    void endDescList()        {}
171 172 173 174
    void startSimpleSect(SectionTypes,const char *,const char *,const char *);
    void endSimpleSect();
    void startParamList(ParamListTypes,const char *title);
    void endParamList();
175 176 177
    //void writeDescItem();
    void startDescForItem();
    void endDescForItem();
178 179
    void startSection(const char *,const char *,SectionInfo::SectionType);
    void endSection(const char *,SectionInfo::SectionType);
180
    void addIndexItem(const char *,const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
181 182 183 184
    void startIndent()        {}
    void endIndent()          {}
    void writeSynopsis();
    void startClassDiagram() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
185
    void endClassDiagram(const ClassDiagram &,const char *,const char *) {}
186 187
    void startPageRef() {}
    void endPageRef(const char *,const char *) {}
188 189
    void startQuickIndices() {}
    void endQuickIndices() {}
190
    void writeSplitBar(const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
191
    void writeNavigationPath(const char *) {}
192
    void writeLogo() {}
193
    void writeQuickLinks(bool,HighlightedItem,const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
194
    void writeSummaryLink(const char *,const char *,const char *,bool) {}
195 196
    void startContents() {}
    void endContents() {}
197
    void writeNonBreakableSpace(int n) { int i; for (i=0;i<n;i++) t << " "; }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
198
    
199 200 201
    void startDescTable(const char *t) 
    { startSimpleSect(EnumValues,0,0,t); startDescForItem(); }
    void endDescTable() { endDescForItem(); endSimpleSect(); }
202
    void startDescTableTitle() { startItemListItem(); startBold(); startEmphasis(); endItemListItem(); }
Dimitri van Heesch's avatar
Dimitri van Heesch committed
203
    void endDescTableTitle() { endEmphasis(); endBold(); }
204
    void startDescTableData() { t << endl; firstCol=TRUE; }
205 206
    void endDescTableData() {}

Dimitri van Heesch's avatar
Dimitri van Heesch committed
207
    void startDotGraph() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
208
    void endDotGraph(const DotClassGraph &) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
209
    void startInclDepGraph() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
210
    void endInclDepGraph(const DotInclDepGraph &) {}
211
    void startGroupCollaboration() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
212
    void endGroupCollaboration(const DotGroupCollaboration &) {}
213
    void startCallGraph() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
214
    void endCallGraph(const DotCallGraph &) {}
215
    void startDirDepGraph() {} 
Dimitri van Heesch's avatar
Dimitri van Heesch committed
216 217
    void endDirDepGraph(const DotDirDeps &) {}
    void writeGraphicalHierarchy(const DotGfxHierarchyTable &) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
218 219

    void startTextBlock(bool) {}
220
    void endTextBlock(bool) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
221
    void lastIndexPage() {}
222 223 224

    void startMemberDocPrefixItem() {}
    void endMemberDocPrefixItem() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
225
    void startMemberDocName(bool) {}
226
    void endMemberDocName() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
227
    void startParameterType(bool,const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
228
    void endParameterType() {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
229
    void startParameterName(bool) {}
230
    void endParameterName(bool,bool,bool) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
231
    void startParameterList(bool) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
232
    void endParameterList() {}
233
    void exceptionEntry(const char*,bool) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
234

235 236 237
    void startFontClass(const char *) {}
    void endFontClass() {}

238 239 240 241 242 243 244 245 246
    void startConstraintList(const char *);
    void startConstraintParam();
    void endConstraintParam();
    void startConstraintType();
    void endConstraintType();
    void startConstraintDocs();
    void endConstraintDocs();
    void endConstraintList();

247 248 249 250 251 252 253 254 255
    void startMemberDocSimple();
    void endMemberDocSimple();
    void startInlineMemberType();
    void endInlineMemberType();
    void startInlineMemberName();
    void endInlineMemberName();
    void startInlineMemberDoc();
    void endInlineMemberDoc();

256 257 258
    void startLabels();
    void writeLabel(const char *l,bool isLast);
    void endLabels();
259

260
    void writeCodeAnchor(const char *) {}
Dimitri van Heesch's avatar
Dimitri van Heesch committed
261 262
    void setCurrentDoc(Definition *,const char *,bool) {}
    void addWord(const char *,bool) {}
263

Dimitri van Heesch's avatar
Dimitri van Heesch committed
264 265 266 267 268
  private:
    bool firstCol;
    bool paragraph;
    int col;
    bool upperCase;
269
    bool insideTabbing;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
270
    bool inHeader;
Dimitri van Heesch's avatar
Dimitri van Heesch committed
271 272 273 274 275 276

    ManGenerator(const ManGenerator &g);
    ManGenerator &operator=(const ManGenerator &g);
};

#endif