1 /******************************************************************************
3 * $Id: outputgen.h,v 1.48 2001/03/19 19:27:41 root Exp $
5 * Copyright (C) 1997-2012 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.
13 * Documents produced by Doxygen are derivative works derived from the
14 * input used in their production; they are not affected by this license.
22 #include "ftextstream.h"
31 class DotInclDepGraph;
34 class DotGfxHierarchyTable;
35 class DotGroupCollaboration;
41 /** Output interface for code parser.
43 class CodeOutputInterface
46 virtual ~CodeOutputInterface() {}
47 /*! Writes an ASCII string to the output. This function should keep
48 * spaces visible, should break lines at a newline and should convert
49 * tabs to the right number of spaces.
51 virtual void codify(const char *s) = 0;
53 /*! Writes a link to an object in a code fragment.
54 * \param ref If this is non-zero, the object is to be found in
55 * an external documentation file.
56 * \param file The file in which the object is located.
57 * \param anchor The anchor uniquely identifying the object within
59 * \param name The text to display as a placeholder for the link.
60 * \param tooltip The tooltip to display when the mouse is on the link.
62 virtual void writeCodeLink(const char *ref,const char *file,
63 const char *anchor,const char *name,
64 const char *tooltip) = 0;
66 virtual void writeLineNumber(const char *ref,const char *file,
67 const char *anchor,int lineNumber) = 0;
68 virtual void startCodeLine(bool hasLineNumbers) = 0;
69 virtual void endCodeLine() = 0;
70 virtual void startCodeAnchor(const char *label) = 0;
71 virtual void endCodeAnchor() = 0;
72 virtual void startFontClass(const char *) = 0;
73 virtual void endFontClass() = 0;
74 virtual void writeCodeAnchor(const char *name) = 0;
75 virtual void linkableSymbol(int line,const char *symName,
76 Definition *symDef,Definition *context) = 0;
79 /** Base Interface used for generating output outside of the
82 * This abstract class is used by output generation functions
83 * to generate the output for a specific format,
84 * or a list of formats (see OutputList). This interface
85 * contains functions that generate fragments of the output.
87 class BaseOutputDocInterface : public CodeOutputInterface
90 virtual ~BaseOutputDocInterface() {}
91 enum ParamListTypes { Param, RetVal, Exception };
92 enum SectionTypes { /*See, Return, Author, Version,
93 Since, Date, Bug, Note,
94 Warning, Par, Deprecated, Pre,
95 Post, Invar, Remark, Attention,
96 Todo, Test, RCS, */ EnumValues,
100 virtual void parseText(const QCString &) {}
102 /*! Start of a bullet list: e.g. \c \<ul\> in html. startItemListItem() is
103 * Used for the bullet items.
105 virtual void startItemList() = 0;
107 /*! Writes a list item for a bullet or enumerated
108 * list: e.g. \c \<li\> in html
110 virtual void startItemListItem() = 0;
112 /*! Writes a list item for a bullet or enumerated
113 * list: e.g. \c \</li\> in html
115 virtual void endItemListItem() = 0;
117 /*! Ends a bullet list: e.g. \c \</ul\> in html */
118 virtual void endItemList() = 0;
120 /*! Writes an ASCII string to the output. Converts characters that have
121 * A special meaning, like \c & in html.
123 virtual void docify(const char *s) = 0;
125 /*! Writes a single ASCII character to the output. Converts characters
126 * that have a special meaning.
128 virtual void writeChar(char c) = 0;
130 /*! Writes an ASCII string to the output, \e without converting
131 * special characters.
133 virtual void writeString(const char *text) = 0;
135 /*! Starts a new paragraph */
136 //virtual void newParagraph() = 0;
138 /*! Starts a new paragraph */
139 virtual void startParagraph() = 0;
140 /*! Ends a paragraph */
141 virtual void endParagraph() = 0;
143 /*! Writes a link to an object in the documentation.
144 * \param ref If this is non-zero, the object is to be found in
145 * an external documentation file.
146 * \param file The file in which the object is located.
147 * \param anchor The anchor uniquely identifying the object within
149 * \param name The text to display as a placeholder for the link.
151 virtual void writeObjectLink(const char *ref,const char *file,
152 const char *anchor, const char *name) = 0;
155 /*! Starts a (link to an) URL found in the documentation.
156 * \param url The URL to link to.
158 virtual void startHtmlLink(const char *url) = 0;
160 /*! Ends a link started by startHtmlLink().
162 virtual void endHtmlLink() = 0;
165 /*! Changes the text font to bold face. The bold section ends with
168 virtual void startBold() = 0;
170 /*! End a section of text displayed in bold face. */
171 virtual void endBold() = 0;
173 /*! Changes the text font to fixed size. The section ends with
176 virtual void startTypewriter() = 0;
178 /*! End a section of text displayed in typewriter style. */
179 virtual void endTypewriter() = 0;
181 /*! Changes the text font to italic. The italic section ends with
184 virtual void startEmphasis() = 0;
186 /*! Ends a section of text displayed in italic. */
187 virtual void endEmphasis() = 0;
189 /*! Starts a source code fragment. The fragment will be
190 * fed to the code parser (see code.h) for syntax highlighting
191 * and cross-referencing. The fragment ends by a call to
194 virtual void startCodeFragment() = 0;
196 /*! Ends a source code fragment
198 virtual void endCodeFragment() = 0;
203 /*! Writes a horizontal ruler to the output */
204 virtual void writeRuler() = 0;
206 /*! Starts a description list: e.g. \c \<dl\> in HTML
207 * Items are surrounded by startDescItem() and endDescItem()
209 virtual void startDescription() = 0;
211 /*! Ends a description list: e.g. \c \</dl\> in HTML */
212 virtual void endDescription() = 0;
214 /*! Starts an item of a description list: e.g. \c \<dt\> in HTML. */
215 virtual void startDescItem() = 0;
217 virtual void startDescForItem() = 0;
218 virtual void endDescForItem() = 0;
220 /*! Ends an item of a description list and starts the
221 * description itself: e.g. \c \</dt\> in HTML.
223 virtual void endDescItem() = 0;
225 virtual void startCenter() = 0;
226 virtual void endCenter() = 0;
227 virtual void startSmall() = 0;
228 virtual void endSmall() = 0;
230 virtual void startSimpleSect(SectionTypes t,const char *file,
231 const char *anchor,const char *title) = 0;
232 virtual void endSimpleSect() = 0;
233 virtual void startParamList(ParamListTypes t,const char *title) = 0;
234 virtual void endParamList() = 0;
236 //virtual void writeDescItem() = 0;
237 virtual void startTitle() = 0;
238 virtual void endTitle() = 0;
240 virtual void writeAnchor(const char *fileName,const char *name) = 0;
241 virtual void startSection(const char *,const char *,SectionInfo::SectionType) = 0;
242 virtual void endSection(const char *,SectionInfo::SectionType) = 0;
244 virtual void lineBreak(const char *style) = 0;
245 virtual void addIndexItem(const char *s1,const char *s2) = 0;
247 virtual void writeNonBreakableSpace(int) = 0;
248 virtual void startDescTable() = 0;
249 virtual void endDescTable() = 0;
250 virtual void startDescTableTitle() = 0;
251 virtual void endDescTableTitle() = 0;
252 virtual void startDescTableData() = 0;
253 virtual void endDescTableData() = 0;
254 virtual void startTextLink(const char *file,const char *anchor) = 0;
255 virtual void endTextLink() = 0;
256 virtual void startPageRef() = 0;
257 virtual void endPageRef(const char *,const char *) = 0;
258 virtual void startSubsection() = 0;
259 virtual void endSubsection() = 0;
260 virtual void startSubsubsection() = 0;
261 virtual void endSubsubsection() = 0;
264 /** Abstract output generator.
266 * Subclass this class to add support for a new output format
268 class OutputGenerator : public BaseOutputDocInterface
271 enum OutputType { Html, Latex, Man, RTF, XML, DEF, Perl };
274 virtual ~OutputGenerator();
276 ///////////////////////////////////////////////////////////////
277 // generic generator methods
278 ///////////////////////////////////////////////////////////////
279 virtual void enable() = 0;
280 virtual void disable() = 0;
281 virtual void enableIf(OutputType o) = 0;
282 virtual void disableIf(OutputType o) = 0;
283 virtual void disableIfNot(OutputType o) = 0;
284 virtual bool isEnabled(OutputType o) = 0;
285 virtual OutputGenerator *get(OutputType o) = 0;
286 void startPlainFile(const char *name);
288 //QCString getContents() const;
289 bool isEnabled() const { return active; }
290 void pushGeneratorState();
291 void popGeneratorState();
292 //void setEncoding(const QCString &enc) { encoding = enc; }
293 //virtual void postProcess(QByteArray &) { }
295 virtual void writeDoc(DocNode *,Definition *ctx,MemberDef *md) = 0;
297 ///////////////////////////////////////////////////////////////
298 // structural output interface
299 ///////////////////////////////////////////////////////////////
300 virtual void startFile(const char *name,const char *manName,
301 const char *title) = 0;
302 virtual void writeSearchInfo() = 0;
303 virtual void writeFooter(const char *navPath) = 0;
304 virtual void endFile() = 0;
305 virtual void startIndexSection(IndexSections) = 0;
306 virtual void endIndexSection(IndexSections) = 0;
307 virtual void writePageLink(const char *,bool) = 0;
308 virtual void startProjectNumber() = 0;
309 virtual void endProjectNumber() = 0;
310 virtual void writeStyleInfo(int part) = 0;
311 virtual void startTitleHead(const char *) = 0;
312 virtual void endTitleHead(const char *fileName,const char *name) = 0;
313 virtual void startIndexListItem() = 0;
314 virtual void endIndexListItem() = 0;
315 virtual void startIndexList() = 0;
316 virtual void endIndexList() = 0;
317 virtual void startIndexKey() = 0;
318 virtual void endIndexKey() = 0;
319 virtual void startIndexValue(bool) = 0;
320 virtual void endIndexValue(const char *,bool) = 0;
321 virtual void startIndexItem(const char *ref,const char *file) = 0;
322 virtual void endIndexItem(const char *ref,const char *file) = 0;
323 virtual void startGroupHeader(int) = 0;
324 virtual void endGroupHeader(int) = 0;
325 virtual void startMemberSections() = 0;
326 virtual void endMemberSections() = 0;
327 virtual void startHeaderSection() = 0;
328 virtual void endHeaderSection() = 0;
329 virtual void startMemberHeader(const char *anchor) = 0;
330 virtual void endMemberHeader() = 0;
331 virtual void startMemberSubtitle() = 0;
332 virtual void endMemberSubtitle() = 0;
333 virtual void startMemberDocList() = 0;
334 virtual void endMemberDocList() = 0;
335 virtual void startMemberList() = 0;
336 virtual void endMemberList() = 0;
337 virtual void startInlineHeader() = 0;
338 virtual void endInlineHeader() = 0;
339 virtual void startAnonTypeScope(int) = 0;
340 virtual void endAnonTypeScope(int) = 0;
341 virtual void startMemberItem(const char *,int,const char *) = 0;
342 virtual void endMemberItem() = 0;
343 virtual void startMemberTemplateParams() = 0;
344 virtual void endMemberTemplateParams(const char *,const char *) = 0;
345 virtual void startMemberGroupHeader(bool) = 0;
346 virtual void endMemberGroupHeader() = 0;
347 virtual void startMemberGroupDocs() = 0;
348 virtual void endMemberGroupDocs() = 0;
349 virtual void startMemberGroup() = 0;
350 virtual void endMemberGroup(bool) = 0;
351 virtual void insertMemberAlign(bool) = 0;
352 virtual void startMemberDoc(const char *,const char *,
353 const char *,const char *,bool) = 0;
354 virtual void endMemberDoc(bool) = 0;
355 virtual void startDoxyAnchor(const char *fName,const char *manName,
356 const char *anchor,const char *name,
357 const char *args) = 0;
358 virtual void endDoxyAnchor(const char *fileName,const char *anchor) = 0;
359 virtual void writeLatexSpacing() = 0;
360 virtual void writeStartAnnoItem(const char *type,const char *file,
361 const char *path,const char *name) = 0;
362 virtual void writeEndAnnoItem(const char *name) = 0;
363 virtual void startMemberDescription(const char *anchor,const char *inheritId) = 0;
364 virtual void endMemberDescription() = 0;
365 virtual void startMemberDeclaration() = 0;
366 virtual void endMemberDeclaration(const char *anchor,const char *inheritId) = 0;
367 virtual void writeInheritedSectionTitle(const char *id,const char *ref,
368 const char *file,const char *anchor,
369 const char *title,const char *name) = 0;
370 virtual void startIndent() = 0;
371 virtual void endIndent() = 0;
372 virtual void writeSynopsis() = 0;
373 virtual void startClassDiagram() = 0;
374 virtual void endClassDiagram(const ClassDiagram &,const char *,const char *) = 0;
375 virtual void startDotGraph() = 0;
376 virtual void endDotGraph(const DotClassGraph &g) = 0;
377 virtual void startInclDepGraph() = 0;
378 virtual void endInclDepGraph(const DotInclDepGraph &g) = 0;
379 virtual void startGroupCollaboration() = 0;
380 virtual void endGroupCollaboration(const DotGroupCollaboration &g) = 0;
381 virtual void startCallGraph() = 0;
382 virtual void endCallGraph(const DotCallGraph &g) = 0;
383 virtual void startDirDepGraph() = 0;
384 virtual void endDirDepGraph(const DotDirDeps &g) = 0;
385 virtual void writeGraphicalHierarchy(const DotGfxHierarchyTable &g) = 0;
386 virtual void startQuickIndices() = 0;
387 virtual void endQuickIndices() = 0;
388 virtual void writeSplitBar(const char *) = 0;
389 virtual void writeNavigationPath(const char *) = 0;
390 virtual void writeLogo() = 0;
391 virtual void writeQuickLinks(bool compact,HighlightedItem hli,const char *file) = 0;
392 virtual void writeSummaryLink(const char *file,const char *anchor,const char *title,bool first) = 0;
393 virtual void startContents() = 0;
394 virtual void endContents() = 0;
395 virtual void startTextBlock(bool) = 0;
396 virtual void endTextBlock(bool) = 0;
397 virtual void lastIndexPage() = 0;
398 virtual void startMemberDocPrefixItem() = 0;
399 virtual void endMemberDocPrefixItem() = 0;
400 virtual void startMemberDocName(bool) = 0;
401 virtual void endMemberDocName() = 0;
402 virtual void startParameterType(bool,const char *key) = 0;
403 virtual void endParameterType() = 0;
404 virtual void startParameterName(bool) = 0;
405 virtual void endParameterName(bool,bool,bool) = 0;
406 virtual void startParameterList(bool) = 0;
407 virtual void endParameterList() = 0;
409 virtual void startConstraintList(const char *) = 0;
410 virtual void startConstraintParam() = 0;
411 virtual void endConstraintParam() = 0;
412 virtual void startConstraintType() = 0;
413 virtual void endConstraintType() = 0;
414 virtual void startConstraintDocs() = 0;
415 virtual void endConstraintDocs() = 0;
416 virtual void endConstraintList() = 0;
418 virtual void startMemberDocSimple() = 0;
419 virtual void endMemberDocSimple() = 0;
420 virtual void startInlineMemberType() = 0;
421 virtual void endInlineMemberType() = 0;
422 virtual void startInlineMemberName() = 0;
423 virtual void endInlineMemberName() = 0;
424 virtual void startInlineMemberDoc() = 0;
425 virtual void endInlineMemberDoc() = 0;
428 virtual void startLabels() = 0;
429 virtual void writeLabel(const char *,bool) = 0;
430 virtual void endLabels() = 0;
438 QStack<bool> *genStack;
441 OutputGenerator(const OutputGenerator &o);
442 OutputGenerator &operator=(const OutputGenerator &o);
445 /** Interface used for generating documentation.
447 * This abstract class is used by several functions
448 * to generate the output for a specific format.
449 * This interface contains some state saving and changing
450 * functions for dealing with format specific output.
452 class OutputDocInterface : public BaseOutputDocInterface
455 virtual ~OutputDocInterface() {}
457 /*! Create a new output generator. This can later by appended
458 * to the current one using append().
460 //virtual OutputDocInterface *clone() = 0;
462 /*! Disables all output formats except format \a o
463 * (useful for OutputList only)
465 virtual void disableAllBut(OutputGenerator::OutputType o) = 0;
467 /*! Enables all output formats as far as they have been enabled in
468 * the config file. (useful for OutputList only)
470 virtual void enableAll() = 0;
472 /*! Disables all output formats (useful for OutputList only) */
473 virtual void disableAll()= 0;
475 /*! Disables a specific output format (useful for OutputList only) */
476 virtual void disable(OutputGenerator::OutputType o) = 0;
478 /*! Enables a specific output format (useful for OutputList only) */
479 virtual void enable(OutputGenerator::OutputType o) = 0;
481 /*! Check whether a specific output format is currently enabled
482 * (useful for OutputList only)
484 virtual bool isEnabled(OutputGenerator::OutputType o) = 0;
486 /*! Appends the output generated by generator \a g to this
489 //virtual void append(const OutputDocInterface *g) = 0;
491 /*! Pushes the state of the current generator (or list of
492 * generators) on a stack.
494 virtual void pushGeneratorState() = 0;
496 /*! Pops the state of the current generator (or list of
497 * generators) on a stack. Should be preceded by a call
498 * the pushGeneratorState().
500 virtual void popGeneratorState() = 0;