Imported Upstream version 1.8.18
[platform/upstream/doxygen.git] / src / docbookgen.h
1 /******************************************************************************
2 *
3
4 *
5 * Copyright (C) 1997-2015 by Dimitri van Heesch.
6 *
7 * Permission to use, copy, modify, and distribute this software and its
8 * documentation under the terms of the GNU General Public License is hereby
9 * granted. No representations are made about the suitability of this software
10 * for any purpose. It is provided "as is" without express or implied warranty.
11 * See the GNU General Public License for more details.
12 *
13 */
14
15 #ifndef DOCBOOKGEN_H
16 #define DOCBOOKGEN_H
17
18 #include "outputgen.h"
19
20 class DocbookCodeGenerator : public CodeOutputInterface
21 {
22   public:
23     DocbookCodeGenerator(FTextStream &t);
24     DocbookCodeGenerator();
25     virtual ~DocbookCodeGenerator();
26     void setTextStream(FTextStream &t)
27     {
28       m_streamSet = t.device()!=0;
29       m_t.setDevice(t.device());
30     }
31     void setRelativePath(const QCString &path) { m_relPath = path; }
32     void setSourceFileName(const QCString &sourceFileName) { m_sourceFileName = sourceFileName; }
33     QCString sourceFileName() { return m_sourceFileName; }
34
35     void codify(const char *text);
36     void writeCodeLink(const char *ref,const char *file,
37         const char *anchor,const char *name,
38         const char *tooltip);
39     void writeCodeLinkLine(const char *ref,const char *file,
40         const char *anchor,const char *name,
41         const char *tooltip);
42     void writeTooltip(const char *, const DocLinkInfo &, const char *,
43                       const char *, const SourceLinkInfo &, const SourceLinkInfo &
44                      );
45     void startCodeLine(bool);
46     void endCodeLine();
47     void startFontClass(const char *colorClass);
48     void endFontClass();
49     void writeCodeAnchor(const char *);
50     void writeLineNumber(const char *extRef,const char *compId,
51         const char *anchorId,int l);
52     void setCurrentDoc(const Definition *,const char *,bool);
53     void addWord(const char *,bool);
54     void finish();
55     void startCodeFragment();
56     void endCodeFragment();
57
58   private:
59     FTextStream m_t;
60     bool m_streamSet = FALSE;
61     QCString m_refId;
62     QCString m_external;
63     int m_lineNumber = -1;
64     int m_col = 0;
65     bool m_insideCodeLine = FALSE;
66     bool m_insideSpecialHL = FALSE;
67     QCString m_relPath;
68     QCString m_sourceFileName;
69     bool m_prettyCode = FALSE;
70 };
71
72
73 #if 0
74 // define for cases that have been implemented with an empty body
75 #define DB_GEN_EMPTY  t << "<!-- DBG_GEN_head_check " << __LINE__ << " -->\n";
76 #else
77 #define DB_GEN_EMPTY
78 #endif
79
80 #if 0
81 // Generic debug statements
82 #define DB_GEN_H DB_GEN_H1(t)
83 #define DB_GEN_H1(x) x << "<!-- DBG_GEN_head " << __LINE__ << " -->\n";
84 #define DB_GEN_H2(y) DB_GEN_H2a(t,y)
85 #define DB_GEN_H2a(x,y) x << "<!-- DBG_GEN_head " << __LINE__ << " " << y << " -->\n";
86 // define for cases that have NOT yet been implemented / considered
87 #define DB_GEN_NEW fprintf(stderr,"DBG_GEN_head %d\n",__LINE__); DB_GEN_H
88 #else
89 #define DB_GEN_H
90 #define DB_GEN_H1(x)
91 #define DB_GEN_H2(y)
92 #define DB_GEN_H2a(x,y)
93 #define DB_GEN_NEW
94 #endif
95
96 class DocbookGenerator : public OutputGenerator
97 {
98   public:
99     DocbookGenerator();
100     ~DocbookGenerator();
101     static void init();
102
103     ///////////////////////////////////////////////////////////////
104     // generic generator methods
105     ///////////////////////////////////////////////////////////////
106     void enable() 
107     { if (m_genStack->top()) m_active=*m_genStack->top(); else m_active=TRUE; }
108     void disable() { m_active=FALSE; }
109     void enableIf(OutputType o)  { if (o==Docbook) enable();  }
110     void disableIf(OutputType o) { if (o==Docbook) disable(); }
111     void disableIfNot(OutputType o) { if (o!=Docbook) disable(); }
112     bool isEnabled(OutputType o) { return (o==Docbook && m_active); } 
113     OutputGenerator *get(OutputType o) { return (o==Docbook) ? this : 0; }
114
115     // --- CodeOutputInterface
116     void codify(const char *text)
117     { m_codeGen.codify(text); }
118     void writeCodeLink(const char *ref, const char *file,
119                        const char *anchor,const char *name,
120                        const char *tooltip)
121     { m_codeGen.writeCodeLink(ref,file,anchor,name,tooltip); }
122     void writeLineNumber(const char *ref,const char *file,const char *anchor,int lineNumber)
123     { m_codeGen.writeLineNumber(ref,file,anchor,lineNumber); }
124     void writeTooltip(const char *id, const DocLinkInfo &docInfo, const char *decl,
125                       const char *desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo
126                      )
127     { m_codeGen.writeTooltip(id,docInfo,decl,desc,defInfo,declInfo); }
128     void startCodeLine(bool hasLineNumbers)
129     { m_codeGen.startCodeLine(hasLineNumbers); }
130     void endCodeLine()
131     { m_codeGen.endCodeLine(); }
132     void startFontClass(const char *s)
133     { m_codeGen.startFontClass(s); }
134     void endFontClass()
135     { m_codeGen.endFontClass(); }
136     void writeCodeAnchor(const char *anchor)
137     { m_codeGen.writeCodeAnchor(anchor); }
138     // ---------------------------
139
140     void writeDoc(DocNode *,const Definition *ctx,const MemberDef *md);
141
142     ///////////////////////////////////////////////////////////////
143     // structural output interface
144     ///////////////////////////////////////////////////////////////
145     void startFile(const char *name,const char *manName,
146                            const char *title);
147     void writeSearchInfo(){DB_GEN_EMPTY};
148     void writeFooter(const char *){DB_GEN_NEW};
149     void endFile();
150     void startIndexSection(IndexSections);
151     void endIndexSection(IndexSections);
152     void writePageLink(const char *,bool);
153     void startProjectNumber(){DB_GEN_NEW};
154     void endProjectNumber(){DB_GEN_NEW};
155     void writeStyleInfo(int){DB_GEN_EMPTY};
156     void startTitleHead(const char *);
157     void endTitleHead(const char *fileName,const char *name);
158     void startIndexListItem(){DB_GEN_NEW};
159     void endIndexListItem(){DB_GEN_NEW};
160     void startIndexList(){DB_GEN_NEW};
161     void endIndexList(){DB_GEN_NEW};
162     void startIndexKey(){DB_GEN_NEW};
163     void endIndexKey(){DB_GEN_NEW};
164     void startIndexValue(bool){DB_GEN_NEW};
165     void endIndexValue(const char *,bool){DB_GEN_NEW};
166     void startItemList()  {DB_GEN_EMPTY};
167     void endItemList()    {DB_GEN_EMPTY};
168
169     void startIndexItem(const char *,const char *){DB_GEN_NEW};
170     void endIndexItem(const char *,const char *){DB_GEN_NEW};
171     void startItemListItem() {DB_GEN_EMPTY};
172     void endItemListItem() {DB_GEN_EMPTY};
173     void docify(const char *text);
174     void writeChar(char);
175     void writeString(const char *);
176     void startParagraph(const char *);
177     void endParagraph(void);
178     void writeObjectLink(const char *,const char *,const char *,const char *);
179     void startHtmlLink(const char *){DB_GEN_NEW};
180     void endHtmlLink(void){DB_GEN_NEW};
181     void startBold(void);
182     void endBold(void);
183     void startTypewriter(void);
184     void endTypewriter(void);
185     void startEmphasis(void){DB_GEN_NEW};
186     void endEmphasis(void){DB_GEN_NEW};
187     void startCodeFragment(void);
188     void endCodeFragment(void);
189     void writeRuler(void);
190     void startDescription(void){DB_GEN_NEW};
191     void endDescription(void){DB_GEN_NEW};
192     void startDescItem(void){DB_GEN_NEW};
193     void startDescForItem(void){DB_GEN_EMPTY};
194     void endDescForItem(void){DB_GEN_EMPTY};
195     void endDescItem(void){DB_GEN_NEW};
196     void startCenter(void){DB_GEN_NEW};
197     void endCenter(void){DB_GEN_NEW};
198     void startSmall(void){DB_GEN_NEW};
199     void endSmall(void){DB_GEN_NEW};
200     void startExamples(void);
201     void endExamples(void);
202     void startParamList(BaseOutputDocInterface::ParamListTypes,const char *){DB_GEN_NEW};
203     void endParamList(void){DB_GEN_NEW};
204     void startTitle(void){DB_GEN_NEW};
205     void endTitle(void){DB_GEN_NEW};
206     void writeAnchor(const char *,const char *){DB_GEN_EMPTY};
207     void startSection(const char *,const char *,SectionType);
208     void endSection(const char *,SectionType);
209     void lineBreak(const char *);
210     void addIndexItem(const char *,const char *);
211     void writeNonBreakableSpace(int);
212     void startDescTable(const char *);
213     void endDescTable(void);
214     void startDescTableRow(void);
215     void endDescTableRow(void);
216     void startDescTableTitle(void);
217     void endDescTableTitle(void);
218     void startDescTableData(void);
219     void endDescTableData(void);
220     void startTextLink(const char *,const char *){DB_GEN_NEW};
221     void endTextLink(void){DB_GEN_NEW};
222     void startPageRef(void){DB_GEN_NEW};
223     void endPageRef(const char *,const char *){DB_GEN_NEW};
224     void startSubsection(void){DB_GEN_NEW};
225     void endSubsection(void){DB_GEN_NEW};
226     void startSubsubsection(void);
227     void endSubsubsection(void);
228
229
230     void startGroupHeader(int);
231     void endGroupHeader(int);
232     void startMemberSections(){DB_GEN_EMPTY};
233     void endMemberSections(){DB_GEN_EMPTY};
234     void startHeaderSection(){DB_GEN_EMPTY};
235     void endHeaderSection(){DB_GEN_EMPTY};
236     void startMemberHeader(const char *anchor, int typ);
237     void endMemberHeader();
238     void startMemberSubtitle(){DB_GEN_EMPTY};
239     void endMemberSubtitle(){DB_GEN_EMPTY};
240     void startMemberDocList();
241     void endMemberDocList();
242     void startMemberList();
243     void endMemberList();
244     void startInlineHeader(){DB_GEN_NEW};
245     void endInlineHeader(){DB_GEN_NEW};
246     void startAnonTypeScope(int){DB_GEN_EMPTY};
247     void endAnonTypeScope(int){DB_GEN_EMPTY};
248     void startMemberItem(const char *,int,const char *);
249     void endMemberItem();
250     void startMemberTemplateParams();
251     void endMemberTemplateParams(const char *,const char *);
252     void startMemberGroupHeader(bool);
253     void endMemberGroupHeader();
254     void startMemberGroupDocs(){DB_GEN_EMPTY};
255     void endMemberGroupDocs(){DB_GEN_EMPTY};
256     void startMemberGroup();
257     void endMemberGroup(bool);
258     void insertMemberAlign(bool){DB_GEN_EMPTY};
259     void insertMemberAlignLeft(int,bool){DB_GEN_EMPTY};
260     void startMemberDoc(const char *,const char *,
261                         const char *,const char *,int,int,bool);
262     void endMemberDoc(bool);
263     void startDoxyAnchor(const char *fName,const char *manName,
264                          const char *anchor,const char *name,
265                          const char *args);
266     void endDoxyAnchor(const char *fileName,const char *anchor);
267     void writeLatexSpacing(){DB_GEN_EMPTY}
268     void writeStartAnnoItem(const char *,const char *,
269                             const char *,const char *){DB_GEN_NEW};
270     void writeEndAnnoItem(const char *){DB_GEN_NEW};
271     void startMemberDescription(const char *,const char *,bool){DB_GEN_EMPTY};
272     void endMemberDescription(){DB_GEN_EMPTY};
273     void startMemberDeclaration(){DB_GEN_EMPTY};
274     void endMemberDeclaration(const char *,const char *){DB_GEN_EMPTY};
275     void writeInheritedSectionTitle(const char *,const char *,
276                                     const char *,const char *,
277                                     const char *,const char *){DB_GEN_NEW};
278     void startIndent(){DB_GEN_EMPTY};
279     void endIndent(){DB_GEN_EMPTY};
280     void writeSynopsis(){DB_GEN_EMPTY};
281     void startClassDiagram();
282     void endClassDiagram(const ClassDiagram &,const char *,const char *);
283     void startDotGraph();
284     void endDotGraph(DotClassGraph &g);
285     void startInclDepGraph();
286     void endInclDepGraph(DotInclDepGraph &g);
287     void startGroupCollaboration();
288     void endGroupCollaboration(DotGroupCollaboration &g);
289     void startCallGraph();
290     void endCallGraph(DotCallGraph &g);
291     void startDirDepGraph();
292     void endDirDepGraph(DotDirDeps &g);
293     void writeGraphicalHierarchy(DotGfxHierarchyTable &){DB_GEN_NEW};
294     void startQuickIndices(){DB_GEN_EMPTY};
295     void endQuickIndices(){DB_GEN_EMPTY};
296     void writeSplitBar(const char *){DB_GEN_EMPTY};
297     void writeNavigationPath(const char *){DB_GEN_NEW};
298     void writeLogo(){DB_GEN_NEW};
299     void writeQuickLinks(bool,HighlightedItem,const char *){DB_GEN_EMPTY};
300     void writeSummaryLink(const char *,const char *,const char *,bool){DB_GEN_EMPTY};
301     void startContents(){DB_GEN_EMPTY};
302     void endContents(){DB_GEN_EMPTY};
303     void startPageDoc(const char *){DB_GEN_EMPTY}
304     void endPageDoc() {DB_GEN_EMPTY}
305     void startTextBlock(bool);
306     void endTextBlock(bool);
307     void lastIndexPage(){DB_GEN_EMPTY};
308     void startMemberDocPrefixItem();
309     void endMemberDocPrefixItem();
310     void startMemberDocName(bool);
311     void endMemberDocName();
312     void startParameterType(bool,const char *){DB_GEN_EMPTY};
313     void endParameterType(){DB_GEN_EMPTY};
314     void startParameterName(bool);
315     void endParameterName(bool,bool,bool);
316     void startParameterList(bool);
317     void endParameterList();
318     void exceptionEntry(const char*,bool);
319
320     void startConstraintList(const char *);
321     void startConstraintParam();
322     void endConstraintParam();
323     void startConstraintType();
324     void endConstraintType();
325     void startConstraintDocs();
326     void endConstraintDocs();
327     void endConstraintList();
328
329     void startMemberDocSimple(bool){DB_GEN_NEW};
330     void endMemberDocSimple(bool){DB_GEN_NEW};
331     void startInlineMemberType(){DB_GEN_NEW};
332     void endInlineMemberType(){DB_GEN_NEW};
333     void startInlineMemberName(){DB_GEN_NEW};
334     void endInlineMemberName(){DB_GEN_NEW};
335     void startInlineMemberDoc(){DB_GEN_NEW};
336     void endInlineMemberDoc(){DB_GEN_NEW};
337
338     void startLabels();
339     void writeLabel(const char *,bool);
340     void endLabels();
341
342     void setCurrentDoc(const Definition *,const char *,bool) {DB_GEN_EMPTY}
343     void addWord(const char *,bool) {DB_GEN_EMPTY}
344
345 private:
346     DocbookGenerator(const DocbookGenerator &o);
347     DocbookGenerator &operator=(const DocbookGenerator &o);
348  
349     QCString relPath;
350     DocbookCodeGenerator m_codeGen;
351     bool m_prettyCode;
352     bool m_denseText;
353     bool m_inGroup;
354     bool m_inDetail;
355     int  m_levelListItem;
356     bool m_inListItem[20];
357     bool m_inSimpleSect[20];
358     bool m_descTable;
359     int m_inLevel;
360     bool m_firstMember;
361 };
362
363 #endif