1 /******************************************************************************
5 * Copyright (C) 1997-2015 by Dimitri van Heesch.
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.
18 #include "outputgen.h"
20 class DocbookCodeGenerator : public CodeOutputInterface
23 DocbookCodeGenerator(FTextStream &t);
24 DocbookCodeGenerator();
25 virtual ~DocbookCodeGenerator();
26 void setTextStream(FTextStream &t)
28 m_streamSet = t.device()!=0;
29 m_t.setDevice(t.device());
31 void setRelativePath(const QCString &path) { m_relPath = path; }
32 void setSourceFileName(const QCString &sourceFileName) { m_sourceFileName = sourceFileName; }
33 QCString sourceFileName() { return m_sourceFileName; }
35 void codify(const char *text);
36 void writeCodeLink(const char *ref,const char *file,
37 const char *anchor,const char *name,
39 void writeCodeLinkLine(const char *ref,const char *file,
40 const char *anchor,const char *name,
42 void writeTooltip(const char *, const DocLinkInfo &, const char *,
43 const char *, const SourceLinkInfo &, const SourceLinkInfo &
45 void startCodeLine(bool);
47 void startFontClass(const char *colorClass);
49 void writeCodeAnchor(const char *);
50 void writeLineNumber(const char *extRef,const char *compId,
51 const char *anchorId,int l);
52 void setCurrentDoc(Definition *,const char *,bool);
53 void addWord(const char *,bool);
55 void startCodeFragment();
56 void endCodeFragment();
65 bool m_insideCodeLine;
66 bool m_insideSpecialHL;
68 QCString m_sourceFileName;
74 // define for cases that have been implemented with an empty body
75 #define DB_GEN_EMPTY t << "<!-- DBG_GEN_head_check " << __LINE__ << " -->\n";
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
92 #define DB_GEN_H2a(x,y)
96 class DocbookGenerator : public OutputGenerator
103 ///////////////////////////////////////////////////////////////
104 // generic generator methods
105 ///////////////////////////////////////////////////////////////
107 { if (genStack->top()) active=*genStack->top(); else active=TRUE; }
108 void disable() { 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 && active); }
113 OutputGenerator *get(OutputType o) { return (o==Docbook) ? this : 0; }
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,
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
127 { m_codeGen.writeTooltip(id,docInfo,decl,desc,defInfo,declInfo); }
128 void startCodeLine(bool hasLineNumbers)
129 { m_codeGen.startCodeLine(hasLineNumbers); }
131 { m_codeGen.endCodeLine(); }
132 void startFontClass(const char *s)
133 { m_codeGen.startFontClass(s); }
135 { m_codeGen.endFontClass(); }
136 void writeCodeAnchor(const char *anchor)
137 { m_codeGen.writeCodeAnchor(anchor); }
138 // ---------------------------
140 void writeDoc(DocNode *,Definition *ctx,MemberDef *md);
142 ///////////////////////////////////////////////////////////////
143 // structural output interface
144 ///////////////////////////////////////////////////////////////
145 void startFile(const char *name,const char *manName,
147 void writeSearchInfo(){DB_GEN_EMPTY};
148 void writeFooter(const char *navPath){DB_GEN_NEW};
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 part){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};
169 void startIndexItem(const char *ref,const char *file){DB_GEN_NEW};
170 void endIndexItem(const char *ref,const char *file){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);
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 *,SectionInfo::SectionType);
208 void endSection(const char *,SectionInfo::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);
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,
266 void endDoxyAnchor(const char *fileName,const char *anchor);
267 void writeLatexSpacing(){DB_GEN_EMPTY}
268 void writeStartAnnoItem(const char *type,const char *file,
269 const char *path,const char *name){DB_GEN_NEW};
270 void writeEndAnnoItem(const char *name){DB_GEN_NEW};
271 void startMemberDescription(const char *anchor,const char *inheritId, bool typ){DB_GEN_EMPTY};
272 void endMemberDescription(){DB_GEN_EMPTY};
273 void startMemberDeclaration(){DB_GEN_EMPTY};
274 void endMemberDeclaration(const char *anchor,const char *inheritId){DB_GEN_EMPTY};
275 void writeInheritedSectionTitle(const char *id,const char *ref,
276 const char *file,const char *anchor,
277 const char *title,const char *name){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(const DotClassGraph &g);
285 void startInclDepGraph();
286 void endInclDepGraph(const DotInclDepGraph &g);
287 void startGroupCollaboration();
288 void endGroupCollaboration(const DotGroupCollaboration &g);
289 void startCallGraph();
290 void endCallGraph(const DotCallGraph &g);
291 void startDirDepGraph();
292 void endDirDepGraph(const DotDirDeps &g);
293 void writeGraphicalHierarchy(const DotGfxHierarchyTable &g){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 compact,HighlightedItem hli,const char *file){DB_GEN_EMPTY};
300 void writeSummaryLink(const char *file,const char *anchor,const char *title,bool first){DB_GEN_EMPTY};
301 void startContents(){DB_GEN_EMPTY};
302 void endContents(){DB_GEN_EMPTY};
303 void startPageDoc(const char *pageTitle){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 *key){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);
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();
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};
339 void writeLabel(const char *,bool);
342 void setCurrentDoc(Definition *,const char *,bool) {DB_GEN_EMPTY}
343 void addWord(const char *,bool) {DB_GEN_EMPTY}
346 DocbookGenerator(const DocbookGenerator &o);
347 DocbookGenerator &operator=(const DocbookGenerator &o);
350 DocbookCodeGenerator m_codeGen;
356 bool m_inListItem[20];
357 bool m_inSimpleSect[20];