doxygen
textdocvisitor.h
1 /******************************************************************************
2  *
3  *
4  *
5  *
6  * Copyright (C) 1997-2015 by Dimitri van Heesch.
7  *
8  * Permission to use, copy, modify, and distribute this software and its
9  * documentation under the terms of the GNU General Public License is hereby
10  * granted. No representations are made about the suitability of this software
11  * for any purpose. It is provided "as is" without express or implied warranty.
12  * See the GNU General Public License for more details.
13  *
14  * Documents produced by Doxygen are derivative works derived from the
15  * input used in their production; they are not affected by this license.
16  *
17  */
18 
19 #ifndef TEXTDOCVISITOR_H
20 #define TEXTDOCVISITOR_H
21 
22 #include "qcstring.h"
23 #include "docvisitor.h"
24 #include "docnode.h"
25 #include "textstream.h"
26 
28 class TextDocVisitor : public DocVisitor
29 {
30  public:
31  TextDocVisitor(TextStream &t) : m_t(t) {}
32 
33  //--------------------------------------
34  // visitor functions for leaf nodes
35  //--------------------------------------
36 
37  void operator()(const DocWord &w) { filter(w.word()); }
38  void operator()(const DocLinkedWord &w) { filter(w.word()); }
39  void operator()(const DocWhiteSpace &) { m_t << " "; }
40  void operator()(const DocSymbol &);
41  void operator()(const DocEmoji &);
42  void operator()(const DocURL &u) { filter(u.url()); }
43  void operator()(const DocLineBreak &) { m_t << " "; }
44  void operator()(const DocHorRuler &) {}
45  void operator()(const DocStyleChange &) {}
46  void operator()(const DocVerbatim &s) { filter(s.text()); }
47  void operator()(const DocAnchor &) {}
48  void operator()(const DocInclude &) {}
49  void operator()(const DocIncOperator &) {}
50  void operator()(const DocFormula &) {}
51  void operator()(const DocIndexEntry &) {}
52  void operator()(const DocSimpleSectSep &){}
53  void operator()(const DocCite &);
54  void operator()(const DocSeparator &) { m_t << " "; }
55 
56  //--------------------------------------
57  // visitor functions for compound nodes
58  //--------------------------------------
59 
60  template<class T>
61  void visitChildren(const T &t)
62  {
63  for (const auto &child : t.children())
64  {
65  std::visit(*this, child);
66  }
67  }
68  void operator()(const DocAutoList &l) { visitChildren(l); }
69  void operator()(const DocAutoListItem &li) { visitChildren(li); }
70  void operator()(const DocPara &p) { visitChildren(p); }
71  void operator()(const DocRoot &r) { visitChildren(r); }
72  void operator()(const DocSimpleSect &s) { visitChildren(s); }
73  void operator()(const DocTitle &t) { visitChildren(t); }
74  void operator()(const DocSimpleList &l) { visitChildren(l); }
75  void operator()(const DocSimpleListItem &) { }
76  void operator()(const DocSection &s) { visitChildren(s); }
77  void operator()(const DocHtmlList &l) { visitChildren(l); }
78  void operator()(const DocHtmlListItem &li) { visitChildren(li); }
79  void operator()(const DocHtmlDescList &dl) { visitChildren(dl); }
80  void operator()(const DocHtmlDescTitle &dt) { visitChildren(dt); }
81  void operator()(const DocHtmlDescData &dd) { visitChildren(dd); }
82  void operator()(const DocHtmlTable &t) { visitChildren(t); }
83  void operator()(const DocHtmlRow &r) { visitChildren(r); }
84  void operator()(const DocHtmlCell &c) { visitChildren(c); }
85  void operator()(const DocHtmlCaption &c) { visitChildren(c); }
86  void operator()(const DocInternal &i) { visitChildren(i); }
87  void operator()(const DocHRef &h) { visitChildren(h); }
88  void operator()(const DocHtmlSummary &s) { visitChildren(s); }
89  void operator()(const DocHtmlDetails &d) { visitChildren(d); }
90  void operator()(const DocHtmlHeader &h) { visitChildren(h); }
91  void operator()(const DocImage &i) { visitChildren(i); }
92  void operator()(const DocDotFile &df) { visitChildren(df); }
93  void operator()(const DocMscFile &df) { visitChildren(df); }
94  void operator()(const DocDiaFile &df) { visitChildren(df); }
95  void operator()(const DocLink &l) { visitChildren(l); }
96  void operator()(const DocRef &r) { visitChildren(r); }
97  void operator()(const DocSecRefItem &s) { visitChildren(s); }
98  void operator()(const DocSecRefList &l) { visitChildren(l); }
99  void operator()(const DocParamSect &s) { visitChildren(s); }
100  void operator()(const DocParamList &) { }
101  void operator()(const DocXRefItem &x) { visitChildren(x); }
102  void operator()(const DocInternalRef &r) { visitChildren(r); }
103  void operator()(const DocText &t) { visitChildren(t); }
104  void operator()(const DocHtmlBlockQuote &q) { visitChildren(q); }
105  void operator()(const DocVhdlFlow &) { }
106  void operator()(const DocParBlock &pb) { visitChildren(pb); }
107 
108  private:
109 
110  void filter(const QCString &str);
111 
112  TextStream &m_t;
113 };
114 
115 #endif
Node representing a separator.
Definition: docnode.h:347
Node representing an HTML blockquote.
Definition: docnode.h:1248
Node representing a URL (or email address)
Definition: docnode.h:189
Node representing a word.
Definition: docnode.h:154
Node representing some amount of white space.
Definition: docnode.h:336
Concrete visitor implementation for TEXT output.
Definition: textdocvisitor.h:28
Node representing a Hypertext reference.
Definition: docnode.h:780
Root node of a text fragment.
Definition: docnode.h:1261
Node representing a horizontal ruler.
Definition: docnode.h:217
Node representing a simple section title.
Definition: docnode.h:575
Node representing a reference to some item.
Definition: docnode.h:735
Node representing a style change.
Definition: docnode.h:266
Node representing an auto List.
Definition: docnode.h:546
Node representing an emoji.
Definition: docnode.h:323
Node representing a citation of some bibliographic reference.
Definition: docnode.h:246
Text streaming class that buffers data.
Definition: textstream.h:34
Node representing a HTML table caption.
Definition: docnode.h:1185
Root node of documentation tree.
Definition: docnode.h:1270
Node representing a HTML table cell.
Definition: docnode.h:1150
Node representing an entry in the index.
Definition: docnode.h:527
Node representing a simple section.
Definition: docnode.h:974
Node representing a paragraph in the documentation tree.
Definition: docnode.h:1037
Node representing a special symbol.
Definition: docnode.h:310
Helper base class for functionality shared by all visitors.
Definition: docvisitor.h:27
Node Html details.
Definition: docnode.h:814
Node representing a VHDL flow chart.
Definition: docnode.h:706
Node representing a Html description list.
Definition: docnode.h:858
Node representing a HTML list item.
Definition: docnode.h:1122
Node representing a msc file.
Definition: docnode.h:688
Node representing a verbatim, unparsed text fragment.
Definition: docnode.h:358
Node representing a Html description item.
Definition: docnode.h:845
Node Html heading.
Definition: docnode.h:830
Node representing a HTML table.
Definition: docnode.h:1226
Node representing a dia file.
Definition: docnode.h:697
Node representing a HTML table row.
Definition: docnode.h:1203
Node representing a line break.
Definition: docnode.h:203
Node representing a list of section references.
Definition: docnode.h:916
Node representing a reference to a section.
Definition: docnode.h:892
Node representing an item of a cross-referenced list.
Definition: docnode.h:504
Node representing a parameter section.
Definition: docnode.h:1010
Node representing an image.
Definition: docnode.h:608
Node representing a parameter list.
Definition: docnode.h:1082
Node representing a normal section.
Definition: docnode.h:871
Node representing a Html list.
Definition: docnode.h:957
Node representing an internal reference to some item.
Definition: docnode.h:764
Node representing an included text block from file.
Definition: docnode.h:417
Node representing an block of paragraphs.
Definition: docnode.h:936
Node representing an anchor.
Definition: docnode.h:230
Node representing a separator between two simple sections of the same type.
Definition: docnode.h:1001
Node representing a simple list item.
Definition: docnode.h:1110
Node representing a HTML description data.
Definition: docnode.h:1138
This is an alternative implementation of QCString.
Definition: qcstring.h:93
Node representing a word that can be linked to something.
Definition: docnode.h:166
Node representing a simple list.
Definition: docnode.h:947
Node representing a dot file.
Definition: docnode.h:679
Node representing an item of a auto list.
Definition: docnode.h:562
Node representing an internal section of documentation.
Definition: docnode.h:926
Node representing an item of a cross-referenced list.
Definition: docnode.h:587
Node representing a include/dontinclude operator block.
Definition: docnode.h:454
Node Html summary.
Definition: docnode.h:801