doxygen
outputlist.h
1 /******************************************************************************
2  *
3  * Copyright (C) 1997-2020 by Dimitri van Heesch.
4  *
5  * Permission to use, copy, modify, and distribute this software and its
6  * documentation under the terms of the GNU General Public License is hereby
7  * granted. No representations are made about the suitability of this software
8  * for any purpose. It is provided "as is" without express or implied warranty.
9  * See the GNU General Public License for more details.
10  *
11  * Documents produced by Doxygen are derivative works derived from the
12  * input used in their production; they are not affected by this license.
13  *
14  */
15 
16 #ifndef OUTPUTLIST_H
17 #define OUTPUTLIST_H
18 
19 #include <utility>
20 #include <vector>
21 #include <memory>
22 #include <variant>
23 #include <stack>
24 
25 #include "outputgen.h"
26 #include "doxygen.h"
27 
28 #include "dispatcher.h"
29 
30 #include "htmlgen.h"
31 #include "latexgen.h"
32 #include "rtfgen.h"
33 #include "mangen.h"
34 #include "docbookgen.h"
35 #include "xmlgen.h"
36 #include "devnullgen.h"
37 
38 //-------------------------------------------------------------------------------------------
39 
43 namespace OutputCodeIntf
44 {
45  template <class T> struct codify { static constexpr auto method = &T::codify; };
46  template <class T> struct writeCodeLink { static constexpr auto method = &T::writeCodeLink; };
47  template <class T> struct writeLineNumber { static constexpr auto method = &T::writeLineNumber; };
48  template <class T> struct writeTooltip { static constexpr auto method = &T::writeTooltip; };
49  template <class T> struct startCodeLine { static constexpr auto method = &T::startCodeLine; };
50  template <class T> struct endCodeLine { static constexpr auto method = &T::endCodeLine; };
51  template <class T> struct startFontClass { static constexpr auto method = &T::startFontClass; };
52  template <class T> struct endFontClass { static constexpr auto method = &T::endFontClass; };
53  template <class T> struct writeCodeAnchor { static constexpr auto method = &T::writeCodeAnchor; };
54  template <class T> struct startCodeFragment { static constexpr auto method = &T::startCodeFragment; };
55  template <class T> struct endCodeFragment { static constexpr auto method = &T::endCodeFragment; };
56  template <class T> struct startFold { static constexpr auto method = &T::startFold; };
57  template <class T> struct endFold { static constexpr auto method = &T::endFold; };
58 }
59 
63 template<class OutputCodeGen>
65 {
66  public:
67  OutputCodeDefer(OutputCodeGen *codeGen) : m_codeGen(codeGen) {}
68  OutputType type() const { return m_codeGen->type(); }
69  void codify(const QCString &s) { m_codeGen->codify(s); }
70  void writeCodeLink(CodeSymbolType type,
71  const QCString &ref,const QCString &file,
72  const QCString &anchor,const QCString &name,
73  const QCString &tooltip)
74  { m_codeGen->writeCodeLink(type,ref,file,anchor,name,tooltip); }
75 
76  void writeLineNumber(const QCString &ref,const QCString &file,const QCString &anchor,
77  int lineNumber, bool writeLineAnchor)
78  { m_codeGen->writeLineNumber(ref,file,anchor,lineNumber,writeLineAnchor); }
79 
80  void writeTooltip(const QCString &id, const DocLinkInfo &docInfo, const QCString &decl,
81  const QCString &desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo)
82  { m_codeGen->writeTooltip(id,docInfo,decl,desc,defInfo,declInfo); }
83 
84  void startCodeLine(bool hasLineNumbers)
85  { m_codeGen->startCodeLine(hasLineNumbers); }
86 
87  void endCodeLine()
88  { m_codeGen->endCodeLine(); }
89 
90  void startFontClass(const QCString &c)
91  { m_codeGen->startFontClass(c); }
92 
93  void endFontClass()
94  { m_codeGen->endFontClass(); }
95 
96  void writeCodeAnchor(const QCString &name)
97  { m_codeGen->writeCodeAnchor(name); }
98 
99  void startCodeFragment(const QCString &style)
100  { m_codeGen->startCodeFragment(style); }
101 
102  void endCodeFragment(const QCString &style)
103  { m_codeGen->endCodeFragment(style); }
104 
105  void startFold(int lineNr,const QCString &startMarker,const QCString &endMarker)
106  { m_codeGen->startFold(lineNr,startMarker,endMarker); }
107 
108  void endFold()
109  { m_codeGen->endFold(); }
110 
111  private:
112  OutputCodeGen *m_codeGen;
113 };
114 
119 {
120  public:
121  virtual ~OutputCodeExtension() = default;
122  virtual OutputType type() const = 0;
123  virtual void codify(const QCString &s) = 0;
124  virtual void writeCodeLink(CodeSymbolType type,
125  const QCString &ref,const QCString &file,
126  const QCString &anchor,const QCString &name,
127  const QCString &tooltip) = 0;
128  virtual void writeLineNumber(const QCString &ref,const QCString &file,const QCString &anchor,
129  int lineNumber, bool writeLineAnchor) = 0;
130  virtual void writeTooltip(const QCString &id, const DocLinkInfo &docInfo, const QCString &decl,
131  const QCString &desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo) = 0;
132  virtual void startCodeLine(bool hasLineNumbers) = 0;
133  virtual void endCodeLine() = 0;
134  virtual void startFontClass(const QCString &c) = 0;
135  virtual void endFontClass() = 0;
136  virtual void writeCodeAnchor(const QCString &name) = 0;
137  virtual void startCodeFragment(const QCString &style) = 0;
138  virtual void endCodeFragment(const QCString &style) = 0;
139  virtual void startFold(int lineNr,const QCString &startMarker,const QCString &endMarker) = 0;
140  virtual void endFold() = 0;
141 };
142 
149 
155 {
156  public:
157  using OutputCodeVariant = std::variant<HtmlCodeGenerator,
170  >;
171 
172  int id() const { return m_id; }
173  void setId(int id) { m_id = id; }
174 
176  void add(OutputCodeVariant &&v)
177  {
178  m_outputCodeList.emplace_back(std::move(v));
179  }
180 
182  template<class T,class... As>
183  T* add(As&&... args)
184  {
185  add(OutputCodeVariant{std::in_place_type<T>,std::forward<As>(args)...});
186  return std::get_if<T>(&m_outputCodeList.back().variant);
187  }
188 
190  template<class T>
191  T *get()
192  {
193  for (auto &e : m_outputCodeList)
194  {
195  T *t = std::get_if<T>(&e.variant);
196  if (t) return t;
197  }
198  return nullptr;
199  }
200 
202  void setEnabledFiltered(OutputType o,bool enabled)
203  {
204  for (auto &e : m_outputCodeList)
205  {
206  std::visit([&](auto &&arg) { if (arg.type()==o) e.enabled = enabled; },e.variant);
207  }
208  }
209 
210  void clear()
211  {
212  m_outputCodeList.clear();
213  }
214 
215  // ---- OutputCodeIntf forwarding
216 
217  void codify(const QCString &s)
218  { foreach<OutputCodeIntf::codify>(s); }
219 
220  void writeCodeLink(CodeSymbolType type,
221  const QCString &ref,const QCString &file,
222  const QCString &anchor,const QCString &name,
223  const QCString &tooltip)
224  { foreach<OutputCodeIntf::writeCodeLink>(type,ref,file,anchor,name,tooltip); }
225 
226  void writeLineNumber(const QCString &ref,const QCString &file,const QCString &anchor,
227  int lineNumber, bool writeLineAnchor)
228  { foreach<OutputCodeIntf::writeLineNumber>(ref,file,anchor,lineNumber,writeLineAnchor); }
229 
230  void writeTooltip(const QCString &id, const DocLinkInfo &docInfo, const QCString &decl,
231  const QCString &desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo)
232  { foreach<OutputCodeIntf::writeTooltip>(id,docInfo,decl,desc,defInfo,declInfo); }
233 
234  void startCodeLine(bool hasLineNumbers)
235  { foreach<OutputCodeIntf::startCodeLine>(hasLineNumbers); }
236 
237  void endCodeLine()
238  { foreach<OutputCodeIntf::endCodeLine>(); }
239 
240  void startFontClass(const QCString &c)
241  { foreach<OutputCodeIntf::startFontClass>(c); }
242 
243  void endFontClass()
244  { foreach<OutputCodeIntf::endFontClass>(); }
245 
246  void writeCodeAnchor(const QCString &name)
247  { foreach<OutputCodeIntf::writeCodeAnchor>(name); }
248 
249  void startCodeFragment(const QCString &style)
250  { foreach<OutputCodeIntf::startCodeFragment>(style); }
251 
252  void endCodeFragment(const QCString &style)
253  { foreach<OutputCodeIntf::endCodeFragment>(style); }
254 
255  void startFold(int lineNr, const QCString &startMarker, const QCString &endMarker)
256  { foreach<OutputCodeIntf::startFold>(lineNr,startMarker,endMarker); }
257 
258  void endFold()
259  { foreach<OutputCodeIntf::endFold>(); }
260 
261  private:
262  template<template <class> class GeneratorT, class... As>
263  void foreach(As&&... args)
264  {
265  for (auto &e : m_outputCodeList)
266  {
267  if (e.enabled)
268  {
269  dispatch_call<GeneratorT>(e.variant,std::forward<As>(args)...);
270  }
271  }
272  }
273 
274  struct OutputCodeElem
275  {
276  explicit OutputCodeElem(OutputCodeVariant &&v) : variant(std::move(v)) {}
277  OutputCodeVariant variant;
278  bool enabled = true;
279  };
280 
281  std::vector<OutputCodeElem> m_outputCodeList;
282  int m_id = -1;
283 
284 };
285 
286 //-------------------------------------------------------------------------------------------
287 
288 class ClassDiagram;
289 class DotClassGraph;
290 class DotDirDeps;
291 class DotInclDepGraph;
294 
295 
299 namespace OutputGenIntf
300 {
301  template<class T> struct codify { static constexpr auto method = &T::codify; };
302  template<class T> struct startFile { static constexpr auto method = &T::startFile; };
303  template<class T> struct writeDoc { static constexpr auto method = &T::writeDoc; };
304  template<class T> struct startIndexSection { static constexpr auto method = &T::startIndexSection; };
305  template<class T> struct endIndexSection { static constexpr auto method = &T::endIndexSection; };
306  template<class T> struct writePageLink { static constexpr auto method = &T::writePageLink; };
307  template<class T> struct startProjectNumber { static constexpr auto method = &T::startProjectNumber; };
308  template<class T> struct endProjectNumber { static constexpr auto method = &T::endProjectNumber; };
309  template<class T> struct writeStyleInfo { static constexpr auto method = &T::writeStyleInfo; };
310  template<class T> struct writeSearchInfo { static constexpr auto method = &T::writeSearchInfo; };
311  template<class T> struct writeFooter { static constexpr auto method = &T::writeFooter; };
312  template<class T> struct endFile { static constexpr auto method = &T::endFile; };
313  template<class T> struct startTitleHead { static constexpr auto method = &T::startTitleHead; };
314  template<class T> struct endTitleHead { static constexpr auto method = &T::endTitleHead; };
315  template<class T> struct startParagraph { static constexpr auto method = &T::startParagraph; };
316  template<class T> struct endParagraph { static constexpr auto method = &T::endParagraph; };
317  template<class T> struct writeString { static constexpr auto method = &T::writeString; };
318  template<class T> struct startIndexListItem { static constexpr auto method = &T::startIndexListItem; };
319  template<class T> struct endIndexListItem { static constexpr auto method = &T::endIndexListItem; };
320  template<class T> struct startIndexList { static constexpr auto method = &T::startIndexList; };
321  template<class T> struct endIndexList { static constexpr auto method = &T::endIndexList; };
322  template<class T> struct startIndexKey { static constexpr auto method = &T::startIndexKey; };
323  template<class T> struct endIndexKey { static constexpr auto method = &T::endIndexKey; };
324  template<class T> struct startIndexValue { static constexpr auto method = &T::startIndexValue; };
325  template<class T> struct endIndexValue { static constexpr auto method = &T::endIndexValue; };
326  template<class T> struct startItemList { static constexpr auto method = &T::startItemList; };
327  template<class T> struct endItemList { static constexpr auto method = &T::endItemList; };
328  template<class T> struct startIndexItem { static constexpr auto method = &T::startIndexItem; };
329  template<class T> struct endIndexItem { static constexpr auto method = &T::endIndexItem; };
330  template<class T> struct docify { static constexpr auto method = &T::docify; };
331  template<class T> struct writeObjectLink { static constexpr auto method = &T::writeObjectLink; };
332  template<class T> struct startTextLink { static constexpr auto method = &T::startTextLink; };
333  template<class T> struct endTextLink { static constexpr auto method = &T::endTextLink; };
334  template<class T> struct writeStartAnnoItem { static constexpr auto method = &T::writeStartAnnoItem; };
335  template<class T> struct startTypewriter { static constexpr auto method = &T::startTypewriter; };
336  template<class T> struct endTypewriter { static constexpr auto method = &T::endTypewriter; };
337  template<class T> struct startGroupHeader { static constexpr auto method = &T::startGroupHeader; };
338  template<class T> struct endGroupHeader { static constexpr auto method = &T::endGroupHeader; };
339  template<class T> struct startItemListItem { static constexpr auto method = &T::startItemListItem; };
340  template<class T> struct endItemListItem { static constexpr auto method = &T::endItemListItem; };
341  template<class T> struct startMemberSections { static constexpr auto method = &T::startMemberSections; };
342  template<class T> struct endMemberSections { static constexpr auto method = &T::endMemberSections; };
343  template<class T> struct startHeaderSection { static constexpr auto method = &T::startHeaderSection; };
344  template<class T> struct endHeaderSection { static constexpr auto method = &T::endHeaderSection; };
345  template<class T> struct startMemberHeader { static constexpr auto method = &T::startMemberHeader; };
346  template<class T> struct endMemberHeader { static constexpr auto method = &T::endMemberHeader; };
347  template<class T> struct startMemberSubtitle { static constexpr auto method = &T::startMemberSubtitle; };
348  template<class T> struct endMemberSubtitle { static constexpr auto method = &T::endMemberSubtitle; };
349  template<class T> struct startMemberDocList { static constexpr auto method = &T::startMemberDocList; };
350  template<class T> struct endMemberDocList { static constexpr auto method = &T::endMemberDocList; };
351  template<class T> struct startMemberList { static constexpr auto method = &T::startMemberList; };
352  template<class T> struct endMemberList { static constexpr auto method = &T::endMemberList; };
353  template<class T> struct startInlineHeader { static constexpr auto method = &T::startInlineHeader; };
354  template<class T> struct endInlineHeader { static constexpr auto method = &T::endInlineHeader; };
355  template<class T> struct startAnonTypeScope { static constexpr auto method = &T::startAnonTypeScope; };
356  template<class T> struct endAnonTypeScope { static constexpr auto method = &T::endAnonTypeScope; };
357  template<class T> struct startMemberItem { static constexpr auto method = &T::startMemberItem; };
358  template<class T> struct endMemberItem { static constexpr auto method = &T::endMemberItem; };
359  template<class T> struct startMemberTemplateParams { static constexpr auto method = &T::startMemberTemplateParams; };
360  template<class T> struct endMemberTemplateParams { static constexpr auto method = &T::endMemberTemplateParams; };
361  template<class T> struct startCompoundTemplateParams { static constexpr auto method = &T::startCompoundTemplateParams; };
362  template<class T> struct endCompoundTemplateParams { static constexpr auto method = &T::endCompoundTemplateParams; };
363  template<class T> struct startMemberGroupHeader { static constexpr auto method = &T::startMemberGroupHeader; };
364  template<class T> struct endMemberGroupHeader { static constexpr auto method = &T::endMemberGroupHeader; };
365  template<class T> struct startMemberGroupDocs { static constexpr auto method = &T::startMemberGroupDocs; };
366  template<class T> struct endMemberGroupDocs { static constexpr auto method = &T::endMemberGroupDocs; };
367  template<class T> struct startMemberGroup { static constexpr auto method = &T::startMemberGroup; };
368  template<class T> struct endMemberGroup { static constexpr auto method = &T::endMemberGroup; };
369  template<class T> struct insertMemberAlign { static constexpr auto method = &T::insertMemberAlign; };
370  template<class T> struct insertMemberAlignLeft { static constexpr auto method = &T::insertMemberAlignLeft; };
371  template<class T> struct writeRuler { static constexpr auto method = &T::writeRuler; };
372  template<class T> struct writeAnchor { static constexpr auto method = &T::writeAnchor; };
373  template<class T> struct startEmphasis { static constexpr auto method = &T::startEmphasis; };
374  template<class T> struct endEmphasis { static constexpr auto method = &T::endEmphasis; };
375  template<class T> struct writeChar { static constexpr auto method = &T::writeChar; };
376  template<class T> struct startMemberDoc { static constexpr auto method = &T::startMemberDoc; };
377  template<class T> struct endMemberDoc { static constexpr auto method = &T::endMemberDoc; };
378  template<class T> struct startDoxyAnchor { static constexpr auto method = &T::startDoxyAnchor; };
379  template<class T> struct endDoxyAnchor { static constexpr auto method = &T::endDoxyAnchor; };
380  template<class T> struct writeLatexSpacing { static constexpr auto method = &T::writeLatexSpacing; };
381  template<class T> struct startDescForItem { static constexpr auto method = &T::startDescForItem; };
382  template<class T> struct endDescForItem { static constexpr auto method = &T::endDescForItem; };
383  template<class T> struct startCenter { static constexpr auto method = &T::startCenter; };
384  template<class T> struct endCenter { static constexpr auto method = &T::endCenter; };
385  template<class T> struct startSmall { static constexpr auto method = &T::startSmall; };
386  template<class T> struct endSmall { static constexpr auto method = &T::endSmall; };
387  template<class T> struct lineBreak { static constexpr auto method = &T::lineBreak; };
388  template<class T> struct startBold { static constexpr auto method = &T::startBold; };
389  template<class T> struct endBold { static constexpr auto method = &T::endBold; };
390  template<class T> struct startMemberDescription { static constexpr auto method = &T::startMemberDescription; };
391  template<class T> struct endMemberDescription { static constexpr auto method = &T::endMemberDescription; };
392  template<class T> struct startMemberDeclaration { static constexpr auto method = &T::startMemberDeclaration; };
393  template<class T> struct endMemberDeclaration { static constexpr auto method = &T::endMemberDeclaration; };
394  template<class T> struct writeInheritedSectionTitle { static constexpr auto method = &T::writeInheritedSectionTitle; };
395  template<class T> struct startExamples { static constexpr auto method = &T::startExamples; };
396  template<class T> struct endExamples { static constexpr auto method = &T::endExamples; };
397  template<class T> struct startIndent { static constexpr auto method = &T::startIndent; };
398  template<class T> struct endIndent { static constexpr auto method = &T::endIndent; };
399  template<class T> struct startSection { static constexpr auto method = &T::startSection; };
400  template<class T> struct endSection { static constexpr auto method = &T::endSection; };
401  template<class T> struct addIndexItem { static constexpr auto method = &T::addIndexItem; };
402  template<class T> struct writeSynopsis { static constexpr auto method = &T::writeSynopsis; };
403  template<class T> struct startClassDiagram { static constexpr auto method = &T::startClassDiagram; };
404  template<class T> struct endClassDiagram { static constexpr auto method = &T::endClassDiagram; };
405  template<class T> struct startPageRef { static constexpr auto method = &T::startPageRef; };
406  template<class T> struct endPageRef { static constexpr auto method = &T::endPageRef; };
407  template<class T> struct startQuickIndices { static constexpr auto method = &T::startQuickIndices; };
408  template<class T> struct endQuickIndices { static constexpr auto method = &T::endQuickIndices; };
409  template<class T> struct writeSplitBar { static constexpr auto method = &T::writeSplitBar; };
410  template<class T> struct writeNavigationPath { static constexpr auto method = &T::writeNavigationPath; };
411  template<class T> struct writeLogo { static constexpr auto method = &T::writeLogo; };
412  template<class T> struct writeQuickLinks { static constexpr auto method = &T::writeQuickLinks; };
413  template<class T> struct writeSummaryLink { static constexpr auto method = &T::writeSummaryLink; };
414  template<class T> struct startContents { static constexpr auto method = &T::startContents; };
415  template<class T> struct endContents { static constexpr auto method = &T::endContents; };
416  template<class T> struct startPageDoc { static constexpr auto method = &T::startPageDoc; };
417  template<class T> struct endPageDoc { static constexpr auto method = &T::endPageDoc; };
418  template<class T> struct writeNonBreakableSpace { static constexpr auto method = &T::writeNonBreakableSpace; };
419  template<class T> struct startDescTable { static constexpr auto method = &T::startDescTable; };
420  template<class T> struct endDescTable { static constexpr auto method = &T::endDescTable; };
421  template<class T> struct startDescTableRow { static constexpr auto method = &T::startDescTableRow; };
422  template<class T> struct endDescTableRow { static constexpr auto method = &T::endDescTableRow; };
423  template<class T> struct startDescTableTitle { static constexpr auto method = &T::startDescTableTitle; };
424  template<class T> struct endDescTableTitle { static constexpr auto method = &T::endDescTableTitle; };
425  template<class T> struct startDescTableData { static constexpr auto method = &T::startDescTableData; };
426  template<class T> struct endDescTableData { static constexpr auto method = &T::endDescTableData; };
427  template<class T> struct startDotGraph { static constexpr auto method = &T::startDotGraph; };
428  template<class T> struct endDotGraph { static constexpr auto method = &T::endDotGraph; };
429  template<class T> struct startInclDepGraph { static constexpr auto method = &T::startInclDepGraph; };
430  template<class T> struct endInclDepGraph { static constexpr auto method = &T::endInclDepGraph; };
431  template<class T> struct startCallGraph { static constexpr auto method = &T::startCallGraph; };
432  template<class T> struct endCallGraph { static constexpr auto method = &T::endCallGraph; };
433  template<class T> struct startDirDepGraph { static constexpr auto method = &T::startDirDepGraph; };
434  template<class T> struct endDirDepGraph { static constexpr auto method = &T::endDirDepGraph; };
435  template<class T> struct startGroupCollaboration { static constexpr auto method = &T::startGroupCollaboration; };
436  template<class T> struct endGroupCollaboration { static constexpr auto method = &T::endGroupCollaboration; };
437  template<class T> struct writeGraphicalHierarchy { static constexpr auto method = &T::writeGraphicalHierarchy; };
438  template<class T> struct startTextBlock { static constexpr auto method = &T::startTextBlock; };
439  template<class T> struct endTextBlock { static constexpr auto method = &T::endTextBlock; };
440  template<class T> struct lastIndexPage { static constexpr auto method = &T::lastIndexPage; };
441  template<class T> struct startMemberDocPrefixItem { static constexpr auto method = &T::startMemberDocPrefixItem; };
442  template<class T> struct endMemberDocPrefixItem { static constexpr auto method = &T::endMemberDocPrefixItem; };
443  template<class T> struct startMemberDocName { static constexpr auto method = &T::startMemberDocName; };
444  template<class T> struct endMemberDocName { static constexpr auto method = &T::endMemberDocName; };
445  template<class T> struct startParameterType { static constexpr auto method = &T::startParameterType; };
446  template<class T> struct endParameterType { static constexpr auto method = &T::endParameterType; };
447  template<class T> struct startParameterName { static constexpr auto method = &T::startParameterName; };
448  template<class T> struct endParameterName { static constexpr auto method = &T::endParameterName; };
449  template<class T> struct startParameterList { static constexpr auto method = &T::startParameterList; };
450  template<class T> struct endParameterList { static constexpr auto method = &T::endParameterList; };
451  template<class T> struct exceptionEntry { static constexpr auto method = &T::exceptionEntry; };
452  template<class T> struct startConstraintList { static constexpr auto method = &T::startConstraintList; };
453  template<class T> struct startConstraintParam { static constexpr auto method = &T::startConstraintParam; };
454  template<class T> struct endConstraintParam { static constexpr auto method = &T::endConstraintParam; };
455  template<class T> struct startConstraintType { static constexpr auto method = &T::startConstraintType; };
456  template<class T> struct endConstraintType { static constexpr auto method = &T::endConstraintType; };
457  template<class T> struct startConstraintDocs { static constexpr auto method = &T::startConstraintDocs; };
458  template<class T> struct endConstraintDocs { static constexpr auto method = &T::endConstraintDocs; };
459  template<class T> struct endConstraintList { static constexpr auto method = &T::endConstraintList; };
460  template<class T> struct startMemberDocSimple { static constexpr auto method = &T::startMemberDocSimple; };
461  template<class T> struct endMemberDocSimple { static constexpr auto method = &T::endMemberDocSimple; };
462  template<class T> struct startInlineMemberType { static constexpr auto method = &T::startInlineMemberType; };
463  template<class T> struct endInlineMemberType { static constexpr auto method = &T::endInlineMemberType; };
464  template<class T> struct startInlineMemberName { static constexpr auto method = &T::startInlineMemberName; };
465  template<class T> struct endInlineMemberName { static constexpr auto method = &T::endInlineMemberName; };
466  template<class T> struct startInlineMemberDoc { static constexpr auto method = &T::startInlineMemberDoc; };
467  template<class T> struct endInlineMemberDoc { static constexpr auto method = &T::endInlineMemberDoc; };
468  template<class T> struct startLabels { static constexpr auto method = &T::startLabels; };
469  template<class T> struct writeLabel { static constexpr auto method = &T::writeLabel; };
470  template<class T> struct endLabels { static constexpr auto method = &T::endLabels; };
471  template<class T> struct writeLocalToc { static constexpr auto method = &T::writeLocalToc; };
472  template<class T> struct cleanup { static constexpr auto method = &T::cleanup; };
473  template<class T> struct startPlainFile { static constexpr auto method = &T::startPlainFile; };
474  template<class T> struct endPlainFile { static constexpr auto method = &T::endPlainFile; };
475 }
476 
480 {
481  public:
482  using OutputGenVariant = std::variant<HtmlGenerator,
484  ManGenerator,
485  RTFGenerator,
487 
488  OutputList();
489  OutputList(const OutputList &ol);
490  OutputList &operator=(const OutputList &ol);
491  OutputList(OutputList &&) = delete;
492  OutputList &operator=(OutputList &&) = delete;
493 
494  template<class DocGenerator>
495  void add()
496  {
497  m_outputGenList.emplace_back(OutputGenVariant{DocGenerator()});
498  refreshCodeGenerators();
499  }
500 
501  const OutputCodeList &codeGenerators() const { return m_codeGenList; }
502  OutputCodeList &codeGenerators() { return m_codeGenList; }
503 
504  size_t size() const { return m_outputGenList.size(); }
505 
506  void enableAll();
507  void disableAll();
508  void disable(OutputType o);
509  void enable(OutputType o);
510  bool isEnabled(OutputType o);
511  void disableAllBut(OutputType o);
512  void pushGeneratorState();
513  void popGeneratorState();
514 
515  void generateDoc(const QCString &fileName,int startLine,
516  const Definition *ctx,const MemberDef *md,const QCString &docStr,
517  bool indexWords,bool isExample,const QCString &exampleName /*=0*/,
518  bool singleLine /*=FALSE*/,bool linkFromIndex /*=FALSE*/,
519  bool markdownSupport /*=FALSE*/);
520 
521  void startFile(const QCString &name,const QCString &manName,const QCString &title, int hierarchyLevel=0);
522  void parseText(const QCString &textStr);
523 
525  // OutputDocInterface implementation
527 
528  void writeDoc(const IDocNodeAST *ast,const Definition *ctx,const MemberDef *md)
529  { foreach<OutputGenIntf::writeDoc>(ast,ctx,md,m_id); }
530  void startIndexSection(IndexSection is)
531  { foreach<OutputGenIntf::startIndexSection>(is); }
532  void endIndexSection(IndexSection is)
533  { foreach<OutputGenIntf::endIndexSection>(is); }
534  void writePageLink(const QCString &name,bool first)
535  { foreach<OutputGenIntf::writePageLink>(name,first); }
536  void startProjectNumber()
537  { foreach<OutputGenIntf::startProjectNumber>(); }
538  void endProjectNumber()
539  { foreach<OutputGenIntf::endProjectNumber>(); }
540  void writeStyleInfo(int part)
541  { foreach<OutputGenIntf::writeStyleInfo>(part); }
542  void writeSearchInfo()
543  { foreach<OutputGenIntf::writeSearchInfo>(); }
544  void writeFooter(const QCString &navPath)
545  { foreach<OutputGenIntf::writeFooter>(navPath); }
546  void endFile()
547  { foreach<OutputGenIntf::endFile>(); }
548  void startTitleHead(const QCString &fileName)
549  { foreach<OutputGenIntf::startTitleHead>(fileName); }
550  void endTitleHead(const QCString &fileName,const QCString &name)
551  { foreach<OutputGenIntf::endTitleHead>(fileName,name); }
552  void startParagraph(const QCString &classDef=QCString())
553  { foreach<OutputGenIntf::startParagraph>(classDef); }
554  void endParagraph()
555  { foreach<OutputGenIntf::endParagraph>(); }
556  void writeString(const QCString &text)
557  { foreach<OutputGenIntf::writeString>(text); }
558  void startIndexListItem()
559  { foreach<OutputGenIntf::startIndexListItem>(); }
560  void endIndexListItem()
561  { foreach<OutputGenIntf::endIndexListItem>(); }
562  void startIndexList()
563  { foreach<OutputGenIntf::startIndexList>(); }
564  void endIndexList()
565  { foreach<OutputGenIntf::endIndexList>(); }
566  void startIndexKey()
567  { foreach<OutputGenIntf::startIndexKey>(); }
568  void endIndexKey()
569  { foreach<OutputGenIntf::endIndexKey>(); }
570  void startIndexValue(bool b)
571  { foreach<OutputGenIntf::startIndexValue>(b); }
572  void endIndexValue(const QCString &name,bool b)
573  { foreach<OutputGenIntf::endIndexValue>(name,b); }
574  void startItemList()
575  { foreach<OutputGenIntf::startItemList>(); }
576  void endItemList()
577  { foreach<OutputGenIntf::endItemList>(); }
578  void startIndexItem(const QCString &ref,const QCString &file)
579  { foreach<OutputGenIntf::startIndexItem>(ref,file); }
580  void endIndexItem(const QCString &ref,const QCString &file)
581  { foreach<OutputGenIntf::endIndexItem>(ref,file); }
582  void docify(const QCString &s)
583  { foreach<OutputGenIntf::docify>(s); }
584  void writeObjectLink(const QCString &ref,const QCString &file,
585  const QCString &anchor, const QCString &name)
586  { foreach<OutputGenIntf::writeObjectLink>(ref,file,anchor,name); }
587  void startTextLink(const QCString &file,const QCString &anchor)
588  { foreach<OutputGenIntf::startTextLink>(file,anchor); }
589  void endTextLink()
590  { foreach<OutputGenIntf::endTextLink>(); }
591  void writeStartAnnoItem(const QCString &type,const QCString &file,
592  const QCString &path,const QCString &name)
593  { foreach<OutputGenIntf::writeStartAnnoItem>(type,file,path,name); }
594  void startTypewriter()
595  { foreach<OutputGenIntf::startTypewriter>(); }
596  void endTypewriter()
597  { foreach<OutputGenIntf::endTypewriter>(); }
598  void startGroupHeader(int extraLevels=0)
599  { foreach<OutputGenIntf::startGroupHeader>(extraLevels); }
600  void endGroupHeader(int extraLevels=0)
601  { foreach<OutputGenIntf::endGroupHeader>(extraLevels); }
602  void startItemListItem()
603  { foreach<OutputGenIntf::startItemListItem>(); }
604  void endItemListItem()
605  { foreach<OutputGenIntf::endItemListItem>(); }
606  void startMemberSections()
607  { foreach<OutputGenIntf::startMemberSections>(); }
608  void endMemberSections()
609  { foreach<OutputGenIntf::endMemberSections>(); }
610  void startHeaderSection()
611  { foreach<OutputGenIntf::startHeaderSection>(); }
612  void endHeaderSection()
613  { foreach<OutputGenIntf::endHeaderSection>(); }
614  void startMemberHeader(const QCString &anchor, int typ = 2)
615  { foreach<OutputGenIntf::startMemberHeader>(anchor,typ); }
616  void endMemberHeader()
617  { foreach<OutputGenIntf::endMemberHeader>(); }
618  void startMemberSubtitle()
619  { foreach<OutputGenIntf::startMemberSubtitle>(); }
620  void endMemberSubtitle()
621  { foreach<OutputGenIntf::endMemberSubtitle>(); }
622  void startMemberDocList()
623  { foreach<OutputGenIntf::startMemberDocList>(); }
624  void endMemberDocList()
625  { foreach<OutputGenIntf::endMemberDocList>(); }
626  void startMemberList()
627  { foreach<OutputGenIntf::startMemberList>(); }
628  void endMemberList()
629  { foreach<OutputGenIntf::endMemberList>(); }
630  void startInlineHeader()
631  { foreach<OutputGenIntf::startInlineHeader>(); }
632  void endInlineHeader()
633  { foreach<OutputGenIntf::endInlineHeader>(); }
634  void startAnonTypeScope(int i1)
635  { foreach<OutputGenIntf::startAnonTypeScope>(i1); }
636  void endAnonTypeScope(int i1)
637  { foreach<OutputGenIntf::endAnonTypeScope>(i1); }
638  void startMemberItem(const QCString &anchor,OutputGenerator::MemberItemType type,const QCString &id=QCString())
639  { foreach<OutputGenIntf::startMemberItem>(anchor,type,id); }
640  void endMemberItem(OutputGenerator::MemberItemType type)
641  { foreach<OutputGenIntf::endMemberItem>(type); }
642  void startMemberTemplateParams()
643  { foreach<OutputGenIntf::startMemberTemplateParams>(); }
644  void endMemberTemplateParams(const QCString &anchor,const QCString &inheritId)
645  { foreach<OutputGenIntf::endMemberTemplateParams>(anchor,inheritId); }
646  void startCompoundTemplateParams()
647  { foreach<OutputGenIntf::startCompoundTemplateParams>(); }
648  void endCompoundTemplateParams()
649  { foreach<OutputGenIntf::endCompoundTemplateParams>(); }
650  void startMemberGroupHeader(bool b)
651  { foreach<OutputGenIntf::startMemberGroupHeader>(b); }
652  void endMemberGroupHeader()
653  { foreach<OutputGenIntf::endMemberGroupHeader>(); }
654  void startMemberGroupDocs()
655  { foreach<OutputGenIntf::startMemberGroupDocs>(); }
656  void endMemberGroupDocs()
657  { foreach<OutputGenIntf::endMemberGroupDocs>(); }
658  void startMemberGroup()
659  { foreach<OutputGenIntf::startMemberGroup>(); }
660  void endMemberGroup(bool last)
661  { foreach<OutputGenIntf::endMemberGroup>(last); }
662  void insertMemberAlign(bool templ=FALSE)
663  { foreach<OutputGenIntf::insertMemberAlign>(templ); }
664  void insertMemberAlignLeft(OutputGenerator::MemberItemType typ=OutputGenerator::MemberItemType::Normal, bool templ=FALSE)
665  { foreach<OutputGenIntf::insertMemberAlignLeft>(typ,templ); }
666  void writeRuler()
667  { foreach<OutputGenIntf::writeRuler>(); }
668  void writeAnchor(const QCString &fileName,const QCString &name)
669  { foreach<OutputGenIntf::writeAnchor>(fileName,name); }
670  void startEmphasis()
671  { foreach<OutputGenIntf::startEmphasis>(); }
672  void endEmphasis()
673  { foreach<OutputGenIntf::endEmphasis>(); }
674  void writeChar(char c)
675  { foreach<OutputGenIntf::writeChar>(c); }
676  void startMemberDoc(const QCString &clName,const QCString &memName,
677  const QCString &anchor,const QCString &title,
678  int memCount,int memTotal,bool showInline)
679  { foreach<OutputGenIntf::startMemberDoc>(clName,memName,anchor,title,memCount,memTotal,showInline); }
680  void endMemberDoc(bool hasArgs)
681  { foreach<OutputGenIntf::endMemberDoc>(hasArgs); }
682  void startDoxyAnchor(const QCString &fName,const QCString &manName,
683  const QCString &anchor, const QCString &name,
684  const QCString &args)
685  { foreach<OutputGenIntf::startDoxyAnchor>(fName,manName,anchor,name,args); }
686  void endDoxyAnchor(const QCString &fn,const QCString &anchor)
687  { foreach<OutputGenIntf::endDoxyAnchor>(fn,anchor); }
688  void writeLatexSpacing()
689  { foreach<OutputGenIntf::writeLatexSpacing>(); }
690  void startDescForItem()
691  { foreach<OutputGenIntf::startDescForItem>(); }
692  void endDescForItem()
693  { foreach<OutputGenIntf::endDescForItem>(); }
694  void startCenter()
695  { foreach<OutputGenIntf::startCenter>(); }
696  void endCenter()
697  { foreach<OutputGenIntf::endCenter>(); }
698  void startSmall()
699  { foreach<OutputGenIntf::startSmall>(); }
700  void endSmall()
701  { foreach<OutputGenIntf::endSmall>(); }
702  void lineBreak(const QCString &style=QCString())
703  { foreach<OutputGenIntf::lineBreak>(style); }
704  void startBold()
705  { foreach<OutputGenIntf::startBold>(); }
706  void endBold()
707  { foreach<OutputGenIntf::endBold>(); }
708  void startMemberDescription(const QCString &anchor,const QCString &inheritId=QCString(), bool typ = false)
709  { foreach<OutputGenIntf::startMemberDescription>(anchor,inheritId, typ); }
710  void endMemberDescription()
711  { foreach<OutputGenIntf::endMemberDescription>(); }
712  void startMemberDeclaration()
713  { foreach<OutputGenIntf::startMemberDeclaration>(); }
714  void endMemberDeclaration(const QCString &anchor,const QCString &inheritId)
715  { foreach<OutputGenIntf::endMemberDeclaration>(anchor,inheritId); }
716  void writeInheritedSectionTitle(const QCString &id, const QCString &ref,
717  const QCString &file, const QCString &anchor,
718  const QCString &title,const QCString &name)
719  { foreach<OutputGenIntf::writeInheritedSectionTitle>(id,ref,
720  file,anchor,title,name); }
721  void startExamples()
722  { foreach<OutputGenIntf::startExamples>(); }
723  void endExamples()
724  { foreach<OutputGenIntf::endExamples>(); }
725  void startIndent()
726  { foreach<OutputGenIntf::startIndent>(); }
727  void endIndent()
728  { foreach<OutputGenIntf::endIndent>(); }
729  void startSection(const QCString &lab,const QCString &title,SectionType t)
730  { foreach<OutputGenIntf::startSection>(lab,title,t); }
731  void endSection(const QCString &lab,SectionType t)
732  { foreach<OutputGenIntf::endSection>(lab,t); }
733  void addIndexItem(const QCString &s1,const QCString &s2)
734  { foreach<OutputGenIntf::addIndexItem>(s1,s2); }
735  void writeSynopsis()
736  { foreach<OutputGenIntf::writeSynopsis>(); }
737  void startClassDiagram()
738  { foreach<OutputGenIntf::startClassDiagram>(); }
739  void endClassDiagram(const ClassDiagram &d,const QCString &f,const QCString &n)
740  { foreach<OutputGenIntf::endClassDiagram>(d,f,n); }
741  void startPageRef()
742  { foreach<OutputGenIntf::startPageRef>(); }
743  void endPageRef(const QCString &c,const QCString &a)
744  { foreach<OutputGenIntf::endPageRef>(c,a); }
745  void startQuickIndices()
746  { foreach<OutputGenIntf::startQuickIndices>(); }
747  void endQuickIndices()
748  { foreach<OutputGenIntf::endQuickIndices>(); }
749  void writeSplitBar(const QCString &name)
750  { foreach<OutputGenIntf::writeSplitBar>(name); }
751  void writeNavigationPath(const QCString &s)
752  { foreach<OutputGenIntf::writeNavigationPath>(s); }
753  void writeLogo()
754  { foreach<OutputGenIntf::writeLogo>(); }
755  void writeQuickLinks(bool compact,HighlightedItem hli,const QCString &file,bool needsFolding)
756  { foreach<OutputGenIntf::writeQuickLinks>(compact,hli,file,needsFolding); }
757  void writeSummaryLink(const QCString &file,const QCString &anchor,const QCString &title,bool first)
758  { foreach<OutputGenIntf::writeSummaryLink>(file,anchor,title,first); }
759  void startContents()
760  { foreach<OutputGenIntf::startContents>(); }
761  void endContents()
762  { foreach<OutputGenIntf::endContents>(); }
763  void startPageDoc(const QCString &pageTitle)
764  { foreach<OutputGenIntf::startPageDoc>( pageTitle); }
765  void endPageDoc()
766  { foreach<OutputGenIntf::endPageDoc>(); }
767  void writeNonBreakableSpace(int num)
768  { foreach<OutputGenIntf::writeNonBreakableSpace>(num); }
769  void startDescTable(const QCString &title)
770  { foreach<OutputGenIntf::startDescTable>(title); }
771  void endDescTable()
772  { foreach<OutputGenIntf::endDescTable>(); }
773  void startDescTableRow()
774  { foreach<OutputGenIntf::startDescTableRow>(); }
775  void endDescTableRow()
776  { foreach<OutputGenIntf::endDescTableRow>(); }
777  void startDescTableTitle()
778  { foreach<OutputGenIntf::startDescTableTitle>(); }
779  void endDescTableTitle()
780  { foreach<OutputGenIntf::endDescTableTitle>(); }
781  void startDescTableData()
782  { foreach<OutputGenIntf::startDescTableData>(); }
783  void endDescTableData()
784  { foreach<OutputGenIntf::endDescTableData>(); }
785  void startDotGraph()
786  { foreach<OutputGenIntf::startDotGraph>(); }
787  void endDotGraph(DotClassGraph &g)
788  { foreach<OutputGenIntf::endDotGraph>(g); }
789  void startInclDepGraph()
790  { foreach<OutputGenIntf::startInclDepGraph>(); }
791  void endInclDepGraph(DotInclDepGraph &g)
792  { foreach<OutputGenIntf::endInclDepGraph>(g); }
793  void startCallGraph()
794  { foreach<OutputGenIntf::startCallGraph>(); }
795  void endCallGraph(DotCallGraph &g)
796  { foreach<OutputGenIntf::endCallGraph>(g); }
797  void startDirDepGraph()
798  { foreach<OutputGenIntf::startDirDepGraph>(); }
799  void endDirDepGraph(DotDirDeps &g)
800  { foreach<OutputGenIntf::endDirDepGraph>(g); }
801  void startGroupCollaboration()
802  { foreach<OutputGenIntf::startGroupCollaboration>(); }
803  void endGroupCollaboration(DotGroupCollaboration &g)
804  { foreach<OutputGenIntf::endGroupCollaboration>(g); }
805  void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
806  { foreach<OutputGenIntf::writeGraphicalHierarchy>(g); }
807  void startTextBlock(bool dense=FALSE)
808  { foreach<OutputGenIntf::startTextBlock>(dense); }
809  void endTextBlock(bool paraBreak=FALSE)
810  { foreach<OutputGenIntf::endTextBlock>(paraBreak); }
811  void lastIndexPage()
812  { foreach<OutputGenIntf::lastIndexPage>(); }
813  void startMemberDocPrefixItem()
814  { foreach<OutputGenIntf::startMemberDocPrefixItem>(); }
815  void endMemberDocPrefixItem()
816  { foreach<OutputGenIntf::endMemberDocPrefixItem>(); }
817  void startMemberDocName(bool align)
818  { foreach<OutputGenIntf::startMemberDocName>(align); }
819  void endMemberDocName()
820  { foreach<OutputGenIntf::endMemberDocName>(); }
821  void startParameterType(bool first,const QCString &key)
822  { foreach<OutputGenIntf::startParameterType>(first,key); }
823  void endParameterType()
824  { foreach<OutputGenIntf::endParameterType>(); }
825  void startParameterName(bool one)
826  { foreach<OutputGenIntf::startParameterName>(one); }
827  void endParameterName(bool last,bool one,bool bracket)
828  { foreach<OutputGenIntf::endParameterName>(last,one,bracket); }
829  void startParameterList(bool openBracket)
830  { foreach<OutputGenIntf::startParameterList>(openBracket); }
831  void endParameterList()
832  { foreach<OutputGenIntf::endParameterList>(); }
833  void exceptionEntry(const QCString &prefix,bool closeBracket)
834  { foreach<OutputGenIntf::exceptionEntry>(prefix,closeBracket); }
835 
836  void startConstraintList(const QCString &header)
837  { foreach<OutputGenIntf::startConstraintList>(header); }
838  void startConstraintParam()
839  { foreach<OutputGenIntf::startConstraintParam>(); }
840  void endConstraintParam()
841  { foreach<OutputGenIntf::endConstraintParam>(); }
842  void startConstraintType()
843  { foreach<OutputGenIntf::startConstraintType>(); }
844  void endConstraintType()
845  { foreach<OutputGenIntf::endConstraintType>(); }
846  void startConstraintDocs()
847  { foreach<OutputGenIntf::startConstraintDocs>(); }
848  void endConstraintDocs()
849  { foreach<OutputGenIntf::endConstraintDocs>(); }
850  void endConstraintList()
851  { foreach<OutputGenIntf::endConstraintList>(); }
852 
853  void startMemberDocSimple(bool b)
854  { foreach<OutputGenIntf::startMemberDocSimple>(b); }
855  void endMemberDocSimple(bool b)
856  { foreach<OutputGenIntf::endMemberDocSimple>(b); }
857  void startInlineMemberType()
858  { foreach<OutputGenIntf::startInlineMemberType>(); }
859  void endInlineMemberType()
860  { foreach<OutputGenIntf::endInlineMemberType>(); }
861  void startInlineMemberName()
862  { foreach<OutputGenIntf::startInlineMemberName>(); }
863  void endInlineMemberName()
864  { foreach<OutputGenIntf::endInlineMemberName>(); }
865  void startInlineMemberDoc()
866  { foreach<OutputGenIntf::startInlineMemberDoc>(); }
867  void endInlineMemberDoc()
868  { foreach<OutputGenIntf::endInlineMemberDoc>(); }
869 
870  void startLabels()
871  { foreach<OutputGenIntf::startLabels>(); }
872  void writeLabel(const QCString &l,bool isLast)
873  { foreach<OutputGenIntf::writeLabel>(l,isLast); }
874  void endLabels()
875  { foreach<OutputGenIntf::endLabels>(); }
876 
877  void writeLocalToc(const SectionRefs &refs,const LocalToc &lt)
878  { foreach<OutputGenIntf::writeLocalToc>(refs,lt); }
879 
880  void cleanup()
881  { foreach<OutputGenIntf::cleanup>(); }
882 
883  void startPlainFile(const QCString &name)
884  { foreach<OutputGenIntf::startPlainFile>(name); }
885  void endPlainFile()
886  { foreach<OutputGenIntf::endPlainFile>(); }
887 
888  private:
889  void newId();
890  void syncEnabled();
891  void refreshCodeGenerators();
892 
893  template<template <class> class GeneratorT, class... As>
894  void foreach(As&&... args)
895  {
896  for (auto &e : m_outputGenList)
897  {
898  if (e.enabled)
899  {
900  dispatch_call<GeneratorT>(e.variant,std::forward<As>(args)...);
901  }
902  }
903  }
904 
905  struct OutputGenElem
906  {
907  explicit OutputGenElem(OutputGenVariant &&v) : variant(std::move(v)) {}
908  OutputGenVariant variant;
909  void setEnabled(bool e) { enabled = e && !enabledStack.empty() ? enabledStack.top() : e; }
910  bool enabled = true;
911  std::stack<bool> enabledStack;
912  };
913 
914  std::vector<OutputGenElem> m_outputGenList;
915  OutputCodeList m_codeGenList;
916  int m_id;
917 
918 };
919 
920 #endif
Definition: outputlist.h:425
Definition: outputlist.h:464
Definition: outputlist.h:325
Definition: outputlist.h:432
Definition: outputlist.h:453
Definition: outputlist.h:392
Definition: core.h:2073
Definition: outputlist.h:465
Definition: outputlist.h:458
Definition: outputlist.h:335
Definition: outputlist.h:424
Helper template class which defers all methods of OutputCodeIntf to an existing object of the templat...
Definition: outputlist.h:64
T * add(As &&... args)
Add a code generator to the list, using a syntax similar to std::make_unique<T>() ...
Definition: outputlist.h:183
Definition: outputlist.h:394
Definition: outputlist.h:409
Definition: outputlist.h:420
Definition: outputlist.h:376
Definition: outputlist.h:406
The common base class of all entity definitions found in the sources.
Definition: definition.h:74
Definition: outputlist.h:433
Definition: outputlist.h:454
Definition: outputlist.h:388
Definition: outputlist.h:429
A model of a class/file/namespace member symbol.
Definition: memberdef.h:46
Definition: outputlist.h:383
Definition: outputlist.h:423
Definition: outputlist.h:358
Definition: outputlist.h:447
Definition: outputlist.h:304
Definition: outputlist.h:45
Definition: outputlist.h:471
Definition: outputlist.h:363
Definition: outputlist.h:384
Definition: outputlist.h:430
Definition: outputlist.h:472
Definition: outputlist.h:369
Definition: outputlist.h:444
Definition: outputlist.h:443
Definition: outputlist.h:411
Definition: outputlist.h:467
Definition: outputlist.h:466
Definition: outputlist.h:355
Definition: outputlist.h:372
Definition: outputlist.h:371
Definition: outputlist.h:336
Definition: outputlist.h:301
Definition: outputlist.h:463
Namespace containing typed wrappers to refer to member functions for specific generators called by Ou...
Definition: outputlist.h:299
Definition: outputlist.h:387
Definition: outputlist.h:379
Definition: outputlist.h:451
Definition: outputlist.h:397
Definition: outputlist.h:416
Definition: outputlist.h:339
Definition: outputlist.h:353
Definition: outputlist.h:375
Definition: outputlist.h:356
Definition: outputlist.h:51
Generator for RTF code fragments.
Definition: rtfgen.h:29
Definition: outputlist.h:470
Definition: outputlist.h:452
Definition: outputlist.h:398
Definition: outputlist.h:408
Definition: outputlist.h:421
Definition: outputlist.h:48
Definition: outputlist.h:348
Generator for HTML code fragments.
Definition: htmlgen.h:24
Definition: outputlist.h:438
Definition: outputlist.h:361
class that represents a list of constant references to sections.
Definition: section.h:98
Generator for RTF output.
Definition: rtfgen.h:73
Definition: outputlist.h:427
Definition: outputlist.h:396
Definition: outputlist.h:445
Definition: outputlist.h:321
Definition: outputlist.h:418
Definition: outputlist.h:395
Definition: outputlist.h:407
Represents a graphical class hierarchy.
Definition: dotgfxhierarchytable.h:31
Definition: outputlist.h:342
Definition: outputlist.h:446
Definition: outputlist.h:341
Definition: outputlist.h:360
Definition: outputlist.h:365
Generator for HTML output.
Definition: htmlgen.h:71
Definition: outputlist.h:405
Definition: outputlist.h:461
Definition: types.h:308
Representation of a group collaboration graph.
Definition: dotgroupcollaboration.h:28
Definition: outputlist.h:49
Definition: outputlist.h:449
Definition: outputlist.h:302
Definition: outputlist.h:414
Definition: outputlist.h:322
Definition: outputlist.h:324
Definition: outputlist.h:54
Definition: docbookgen.h:96
Definition: outputlist.h:57
Definition: outputlist.h:316
Definition: outputlist.h:319
Definition: outputlist.h:441
Definition: outputlist.h:435
Definition: outputlist.h:312
Definition: outputlist.h:320
Definition: outputlist.h:307
Definition: outputlist.h:53
Definition: outputlist.h:315
Definition: outputlist.h:357
Definition: outputlist.h:404
Definition: outputlist.h:436
Definition: outputlist.h:440
Definition: outputlist.h:305
Definition: outputlist.h:323
Definition: outputlist.h:462
Definition: outputlist.h:456
Definition: outputlist.h:313
Definition: xmlgen.h:20
opaque representation of the abstract syntax tree (AST)
Definition: docparser.h:46
Namespace containing typed wrappers to refer to member functions for specific code generators called ...
Definition: outputlist.h:43
Definition: outputlist.h:340
void setEnabledFiltered(OutputType o, bool enabled)
Enable or disable a specific generator.
Definition: outputlist.h:202
Definition: outputlist.h:310
Definition: outputlist.h:403
Definition: outputlist.h:303
Definition: outputlist.h:426
Definition: outputlist.h:326
Generator for LaTeX code fragments.
Definition: latexgen.h:29
Base class that allows alternative implementations outside of the fixed set supported by OutputCodeLi...
Definition: outputlist.h:118
Definition: outputlist.h:410
Class representing a list of different code generators.
Definition: outputlist.h:154
Definition: outputlist.h:368
Definition: outputlist.h:389
Definition: outputlist.h:448
Definition: outputlist.h:434
Definition: outputlist.h:437
Definition: outputlist.h:343
Definition: outputlist.h:349
Definition: outputlist.h:459
Definition: outputlist.h:428
Definition: outputlist.h:473
Definition: outputlist.h:364
Definition: outputlist.h:450
Definition: outputlist.h:380
Definition: outputlist.h:455
Definition: outputlist.h:468
Definition: outputlist.h:352
Definition: outputlist.h:50
Definition: outputlist.h:338
Definition: outputlist.h:415
Class implementing OutputCodeIntf by throwing away everything.
Definition: devnullgen.h:20
Definition: outputlist.h:460
Definition: outputlist.h:327
Definition: outputlist.h:377
Definition: outputlist.h:422
Definition: outputlist.h:334
Definition: outputlist.h:47
Class representing a built-in class diagram.
Definition: diagram.h:29
Definition: outputlist.h:346
Definition: outputlist.h:457
Definition: outputlist.h:442
Definition: outputlist.h:431
Definition: outputlist.h:378
Definition: outputlist.h:314
Definition: outputlist.h:419
Definition: outputlist.h:386
Representation of an call graph.
Definition: dotcallgraph.h:26
Definition: outputlist.h:308
void add(OutputCodeVariant &&v)
Add a code generator already wrapped in a variant type.
Definition: outputlist.h:176
Class representing a list of output generators that are written to in parallel.
Definition: outputlist.h:479
Representation of a class inheritance or dependency graph.
Definition: dotclassgraph.h:28
Definition: outputlist.h:382
Generator for LaTeX output.
Definition: latexgen.h:88
Definition: outputlist.h:55
Definition: outputlist.h:330
Generator for Man page code fragments.
Definition: mangen.h:26
Definition: outputlist.h:391
Definition: docbookgen.h:47
Definition: outputlist.h:417
Definition: outputlist.h:401
Definition: outputlist.h:56
Definition: outputlist.h:400
Definition: outputlist.h:347
Definition: outputlist.h:474
Representation of an include dependency graph.
Definition: dotincldepgraph.h:30
Representation of an directory dependency graph.
Definition: dotdirdeps.h:25
Definition: outputlist.h:402
Definition: outputlist.h:385
Definition: outputlist.h:393
This is an alternative implementation of QCString.
Definition: qcstring.h:92
Definition: outputlist.h:52
Definition: outputlist.h:370
Definition: outputlist.h:337
Definition: outputlist.h:317
Definition: outputlist.h:373
Definition: outputlist.h:309
Definition: outputlist.h:366
Definition: outputlist.h:374
Definition: outputlist.h:390
Definition: outputlist.h:362
Definition: outputlist.h:381
Definition: outputlist.h:354
Definition: outputlist.h:399
Definition: outputlist.h:345
Definition: outputlist.h:351
Definition: outputlist.h:439
Definition: outputgen.h:49
Definition: outputlist.h:329
Definition: outputlist.h:469
Definition: outputlist.h:318
Definition: outputlist.h:328
Definition: outputgen.h:41
Generator for Man page output.
Definition: mangen.h:63
Definition: outputlist.h:344
Definition: outputlist.h:311
Definition: outputlist.h:359
Definition: outputlist.h:350
Definition: outputlist.h:367