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