Doxygen
Loading...
Searching...
No Matches
docnode.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2022 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 DOCNODE_H
17#define DOCNODE_H
18
19#include <cstdio>
20#include <cstdint>
21#include <vector>
22#include <memory>
23#include <variant>
24#include <type_traits>
25
26#include "qcstring.h"
27#include "docvisitor.h"
28#include "docparser.h"
29#include "htmlattrib.h"
30#include "htmlentity.h"
31#include "growvector.h"
32#include "section.h"
33#include "construct.h"
34#include "doctokenizer.h"
35#include "cite.h"
36
37class MemberDef;
38class Definition;
39class DocParser;
40
41//---------------------------------------------------------------------------
42
43#define DOC_NODES \
44/* 0 */ DN(DocWord) DN_SEP DN(DocLinkedWord) DN_SEP DN(DocURL) DN_SEP DN(DocLineBreak) DN_SEP DN(DocHorRuler) DN_SEP \
45/* 5 */ DN(DocAnchor) DN_SEP DN(DocCite) DN_SEP DN(DocStyleChange) DN_SEP DN(DocSymbol) DN_SEP DN(DocEmoji) DN_SEP \
46/* 10 */ DN(DocWhiteSpace) DN_SEP DN(DocSeparator) DN_SEP DN(DocVerbatim) DN_SEP DN(DocInclude) DN_SEP DN(DocIncOperator) DN_SEP \
47/* 15 */ DN(DocFormula) DN_SEP DN(DocIndexEntry) DN_SEP DN(DocAutoList) DN_SEP DN(DocAutoListItem) DN_SEP DN(DocTitle) DN_SEP \
48/* 20 */ DN(DocXRefItem) DN_SEP DN(DocImage) DN_SEP DN(DocDotFile) DN_SEP DN(DocMscFile) DN_SEP DN(DocDiaFile) DN_SEP \
49/* 25 */ DN(DocVhdlFlow) DN_SEP DN(DocLink) DN_SEP DN(DocRef) DN_SEP DN(DocInternalRef) DN_SEP DN(DocHRef) DN_SEP \
50/* 30 */ DN(DocHtmlHeader) DN_SEP DN(DocHtmlDescTitle) DN_SEP DN(DocHtmlDescList) DN_SEP DN(DocSection) DN_SEP DN(DocSecRefItem) DN_SEP \
51/* 35 */ DN(DocSecRefList) DN_SEP DN(DocInternal) DN_SEP DN(DocParBlock) DN_SEP DN(DocSimpleList) DN_SEP DN(DocHtmlList) DN_SEP \
52/* 40 */ DN(DocSimpleSect) DN_SEP DN(DocSimpleSectSep) DN_SEP DN(DocParamSect) DN_SEP DN(DocPara) DN_SEP DN(DocParamList) DN_SEP \
53/* 45 */ DN(DocSimpleListItem) DN_SEP DN(DocHtmlListItem) DN_SEP DN(DocHtmlDescData) DN_SEP DN(DocHtmlCell) DN_SEP DN(DocHtmlCaption) DN_SEP \
54/* 50 */ DN(DocHtmlRow) DN_SEP DN(DocHtmlTable) DN_SEP DN(DocHtmlBlockQuote) DN_SEP DN(DocText) DN_SEP DN(DocRoot) DN_SEP \
55/* 55 */ DN(DocHtmlDetails) DN_SEP DN(DocHtmlSummary) DN_SEP DN(DocPlantUmlFile) DN_SEP DN(DocMermaidFile) \
56
57// forward declarations
58#define DN(x) class x;
59#define DN_SEP
61#undef DN
62#undef DN_SEP
63
64// define a variant type
65#define DN(x) x
66#define DN_SEP ,
67using DocNodeVariant = std::variant<
69>;
70#undef DN
71#undef DN_SEP
72
73// getter functions to return the name of a doc node type
74#define DN(x) constexpr const char *docNodeName(const x &/* n */) { return #x; }
75#define DN_SEP
77#undef DN
78#undef DN_SEP
79
80/** Abstract node interface with type information. */
82{
83 public:
84 /*! Creates a new node */
86 ~DocNode() = default;
88
89 /*! Returns the parent of this node or nullptr for the root node. */
91 const DocNodeVariant *parent() const { return m_parent; }
92
94 const DocNodeVariant *thisVariant() const { return m_thisVariant; }
95
97
98 DocParser *parser() { return m_parser; }
99 const DocParser *parser() const { return m_parser; }
100
101 /*! Sets a new parent for this node. */
103
104 /*! Returns TRUE iff this node is inside a preformatted section */
105 bool isPreformatted() const { return m_insidePre; }
106
107 protected:
108 /*! Sets whether or not this item is inside a preformatted section */
109 void setInsidePreformatted(bool p) { m_insidePre = p; }
111 private:
112 bool m_insidePre = false;
116};
117
118struct DocNodeList : public GrowVector<DocNodeVariant>
119{
120 /** Append a new DocNodeVariant to the list by constructing it with type T and
121 * parameters Args.
122 */
123 template<class T,class...Args>
124 void append(Args&&... args);
125
126 /** moves the element of list \a l at the end of this list.
127 * List \a l will become empty. */
128 void move_append(DocNodeList &l);
129
130 /** Returns a pointer to the last element in the list if that element exists and
131 * holds a T, otherwise nullptr is returned.
132 */
133 template<class T>
134 T *get_last();
135};
136
137/** Base class for nodes with children */
139{
140 public:
144 const DocNodeList &children() const { return m_children; }
145
146 private:
148};
149
150/** Node representing a word
151 */
152class DocWord : public DocNode
153{
154 public:
156 QCString word() const { return m_word; }
157
158 private:
160};
161
162/** Node representing a word that can be linked to something
163 */
164class DocLinkedWord : public DocNode
165{
166 public:
168 const QCString &ref,const QCString &file,
169 const QCString &anchor,const QCString &tooltip);
170 QCString word() const { return m_word; }
171 QCString file() const { return m_file; }
172 QCString relPath() const { return m_relPath; }
173 QCString ref() const { return m_ref; }
174 QCString anchor() const { return m_anchor; }
175 QCString tooltip() const { return m_tooltip; }
176
177 private:
184};
185
186/** Node representing a URL (or email address) */
187class DocURL : public DocNode
188{
189 public:
192 QCString url() const { return m_url; }
193 bool isEmail() const { return m_isEmail; }
194
195 private:
197 bool m_isEmail = false;
198};
199
200/** Node representing a line break */
213
214/** Node representing a horizontal ruler */
215class DocHorRuler : public DocNode
216{
217 public:
220
221 const HtmlAttribList &attribs() const { return m_attribs; }
222
223 private:
225};
226
227/** Node representing an anchor */
228class DocAnchor : public DocNode
229{
230 public:
231 DocAnchor(DocParser *parser,DocNodeVariant *parent,const QCString &id,bool newAnchor);
232 QCString anchor() const { return m_anchor; }
233 QCString file() const { return m_file; }
234
235 const HtmlAttribList &attribs() const { return m_attribs; }
236
237 private:
241};
242
243/** Node representing a citation of some bibliographic reference */
244class DocCite : public DocNode
245{
246 public:
248 QCString file() const { return m_file; }
249 QCString relPath() const { return m_relPath; }
250 QCString ref() const { return m_ref; }
251 QCString anchor() const { return m_anchor; }
252 QCString target() const { return m_target; }
253 CiteInfoOption option() const { return m_option; }
254 QCString getText() const;
255
256 private:
263};
264
265
266/** Node representing a style change */
268{
269 public:
270 enum Style { Bold = (1<<0),
271 Italic = (1<<1),
272 Code = (1<<2),
273 Center = (1<<3),
274 Small = (1<<4),
275 Subscript = (1<<5),
276 Superscript = (1<<6),
277 Preformatted = (1<<7),
278 Span = (1<<8),
279 Div = (1<<9),
280 Strike = (1<<10),
281 Underline = (1<<11),
282 Del = (1<<12),
283 Ins = (1<<13),
284 S = (1<<14),
285 Cite = (1<<15),
286 Kbd = (1<<16),
287 Typewriter = (1<<17)
288 };
289
307 Style style() const { return m_style; }
308 const char *styleString() const;
309 bool enable() const { return m_enable; }
310 size_t position() const { return m_position; }
311 const HtmlAttribList &attribs() const { return m_attribs; }
312 QCString tagName() const { return m_tagName; }
313 QCString fileName() const { return m_fileName; }
314 int lineNr() const { return m_lineNr; }
315
316 private:
317 size_t m_position = 0;
319 bool m_enable = false;
323 int m_lineNr = -1;
324};
325
326/** Node representing a special symbol */
338
339/** Node representing an emoji */
340class DocEmoji : public DocNode
341{
342 public:
344 QCString name() const { return m_symName; }
345 int index() const { return m_index; }
346
347 private:
349 int m_index = 0;
350};
351
352/** Node representing some amount of white space */
353class DocWhiteSpace : public DocNode
354{
355 public:
358 QCString chars() const { return m_chars; }
359 private:
361};
362
363/** Node representing a separator */
364class DocSeparator : public DocNode
365{
366 public:
369 QCString chars() const { return m_chars; }
370 private:
372};
373
374/** Node representing a verbatim, unparsed text fragment */
375class DocVerbatim : public DocNode
376{
377 public:
380 const QCString &text, Type t,bool isExample,
381 const QCString &exampleFile,bool isBlock=FALSE,const QCString &lang=QCString());
382 Type type() const { return p->type; }
383 QCString text() const { return p->text; }
384 QCString context() const { return p->context; }
385 bool isExample() const { return p->isExample; }
386 QCString exampleFile() const { return p->exampleFile; }
387 QCString relPath() const { return p->relPath; }
388 QCString language() const { return p->lang; }
389 bool isBlock() const { return p->isBlock; }
390 bool hasCaption() const { return !p->children.empty(); }
391 QCString width() const { return p->width; }
392 QCString height() const { return p->height; }
393 QCString engine() const { return p->engine; }
394 bool useBitmap() const { return p->useBitmap; }
395 const DocNodeList &children() const { return p->children; }
396 DocNodeList &children() { return p->children; }
397 QCString srcFile() const { return p->srcFile; }
398 int srcLine() const { return p->srcLine; }
399 void setText(const QCString &t) { p->text=t; }
400 void setWidth(const QCString &w) { p->width=w; }
401 void setHeight(const QCString &h) { p->height=h; }
402 void setEngine(const QCString &e) { p->engine=e; }
403 void setUseBitmap(const bool &u) { p->useBitmap=u; }
404 void setLocation(const QCString &file,int line) { p->srcFile=file; p->srcLine=line; }
405
406 private:
407 struct Private
408 {
409 Private(const QCString &context_,const QCString &text_, Type type_, bool isExample_,
410 const QCString &exampleFile_, const QCString &relPath_,const QCString &lang_, bool isBlock_)
411 : context(context_), text(text_), type(type_), isExample(isExample_),
412 exampleFile(exampleFile_), relPath(relPath_), lang(lang_), isBlock(isBlock_) {}
424 bool useBitmap=false; // some PlantUML engines cannot output data in EPS format so bitmap format is required
427 int srcLine = -1;
428 };
429 std::unique_ptr<Private> p;
430};
431
432
433/** Node representing an included text block from file */
434class DocInclude : public DocNode
435{
436 public:
440 };
449 QCString file() const { return m_file; }
450 QCString extension() const { int i=m_file.findRev('.'); return i!=-1 ? m_file.mid(i) : QCString(); }
451 Type type() const { return m_type; }
452 QCString text() const { return m_text; }
453 QCString context() const { return m_context; }
454 QCString blockId() const { return m_blockId; }
455 bool stripCodeComments() const { return m_stripCodeComments; }
456 bool isExample() const { return m_isExample; }
458 bool isBlock() const { return m_isBlock; }
459 bool trimLeft() const { return m_trimLeft; }
460 void parse();
461
462 private:
473};
474
475/** Node representing a include/dontinclude operator block */
477{
478 public:
485 Type type() const { return m_type; }
486 const char *typeAsString() const
487 {
488 switch(m_type)
489 {
490 case Line: return "line";
491 case SkipLine: return "skipline";
492 case Skip: return "skip";
493 case Until: return "until";
494 }
495 return "";
496 }
497 int line() const { return m_line; }
498 bool showLineNo() const { return m_showLineNo; }
499 QCString text() const { return m_text; }
500 QCString pattern() const { return m_pattern; }
501 QCString context() const { return m_context; }
502 bool isFirst() const { return m_isFirst; }
503 bool isLast() const { return m_isLast; }
504 void markFirst(bool v=TRUE) { m_isFirst = v; }
505 void markLast(bool v=TRUE) { m_isLast = v; }
506 bool stripCodeComments() const { return m_stripCodeComments; }
507 bool isExample() const { return m_isExample; }
510 void parse();
511
512 private:
514 int m_line = 0;
515 bool m_showLineNo = false;
519 bool m_isFirst = false;
520 bool m_isLast = false;
522 bool m_isExample = false;
525};
526
527/** Node representing an item of a cross-referenced list */
528class DocFormula : public DocNode
529{
530 public:
532 QCString name() const { return m_name; }
533 QCString text() const { return m_text; }
534 QCString relPath() const { return m_relPath; }
535 int id() const { return m_id; }
536 bool isInline() const
537 {
538 if (m_text.length()>1 && m_text.at(0)=='\\' && m_text.at(1)=='[') return false;
539 if (m_text.startsWith("\\begin{")) return false;
540 return true;
541 }
542
543 private:
547 int m_id = 0;
548};
549
550/** Node representing an entry in the index. */
551class DocIndexEntry : public DocNode
552{
553 public:
556 Token parse();
557 const Definition *scope() const { return m_scope; }
558 const MemberDef *member() const { return m_member; }
559 QCString entry() const { return m_entry; }
560
561 private:
563 const Definition *m_scope = nullptr;
564 const MemberDef *m_member = nullptr;
565};
566
567//-----------------------------------------------------------------------
568
569/** Node representing an auto List */
571{
572 public:
574 {
575 Unnumbered=1, Unchecked=-2, Checked_x=-3, Checked_X=-4 // positive numbers give the label
576 };
578 int depth, bool isCheckedList);
579
580 bool isEnumList() const { return m_isEnumList; }
581 int indent() const { return m_indent; }
582 bool isCheckedList() const { return m_isCheckedList; }
583 int depth() const { return m_depth; }
584 Token parse();
585
586 private:
587 int m_indent = 0;
588 bool m_isEnumList = false;
589 bool m_isCheckedList = false;
590 int m_depth = 0;
591};
592
593/** Node representing an item of a auto list */
595{
596 public:
598 int itemNumber() const { return m_itemNum; }
599 Token parse();
600
601 private:
602 int m_indent = 0;
603 int m_itemNum = 0;
604};
605
606/** Node representing a simple section title */
608{
609 public:
611 void parse();
612 void parseFromString(DocNodeVariant *,const QCString &title);
613 bool hasTitle() const { return !children().empty(); }
614 bool isEmpty() const { return !hasTitle(); }
615
616 private:
617};
618
619/** Node representing an item of a cross-referenced list */
621{
622 public:
624 QCString file() const { return m_file; }
625 QCString anchor() const { return m_anchor; }
626 QCString title() const { return m_title; }
627 QCString relPath() const { return m_relPath; }
628 QCString key() const { return m_key; }
629 bool parse();
630
631 private:
632 int m_id = 0;
638};
639
640/** Node representing an image */
642{
643 public:
644 enum Type { Html, Latex, Rtf, DocBook, Xml };
646 const QCString &name,Type t,const QCString &url=QCString(), bool inlineImage = TRUE);
647 Type type() const { return p->type; }
648 QCString name() const { return p->name; }
649 bool hasCaption() const { return !children().empty(); }
650 QCString width() const { return p->width; }
651 QCString height() const { return p->height; }
652 QCString relPath() const { return p->relPath; }
653 QCString url() const { return p->url; }
654 bool isInlineImage() const { return p->inlineImage; }
655 bool isSVG() const;
656 const HtmlAttribList &attribs() const { return p->attribs; }
657 void parse();
658
659 private:
660 struct Private
661 {
662 Private(const HtmlAttribList &attribs_,const QCString &name_,Type type_,
663 const QCString &relPath_, const QCString &url_,bool inlineImage_)
664 : attribs(attribs_), name(name_), type(type_),
665 relPath(relPath_), url(url_), inlineImage(inlineImage_) {}
674 };
675 std::unique_ptr<Private> p;
676};
677
679{
680 public:
684 QCString name() const { return p->name; }
685 QCString file() const { return p->file; }
686 QCString relPath() const { return p->relPath; }
687 bool hasCaption() const { return !children().empty(); }
688 QCString width() const { return p->width; }
689 QCString height() const { return p->height; }
690 QCString context() const { return p->context; }
691 QCString srcFile() const { return p->srcFile; }
692 int srcLine() const { return p->srcLine; }
693
694 protected:
695 struct Private
696 {
697 Private(const QCString &name_,const QCString &context_,const QCString &srcFile_,int srcLine_)
698 : name(name_), context(context_), srcFile(srcFile_), srcLine(srcLine_) {}
707 };
708 std::unique_ptr<Private> p;
709};
710
711/** Node representing a dot file */
713{
714 public:
716 const QCString &srcFile,int srcLine);
717 bool parse();
718};
719
720/** Node representing a msc file */
722{
723 public:
725 const QCString &srcFile,int srcLine);
726 bool parse();
727};
728
729/** Node representing a dia file */
731{
732 public:
734 const QCString &srcFile,int srcLine);
735 bool parse();
736};
737
738/** Node representing a uml file */
740{
741 public:
743 const QCString &srcFile,int srcLine);
744 bool parse();
745};
746
747/** Node representing a mermaid file */
749{
750 public:
752 const QCString &srcFile,int srcLine);
753 bool parse();
754};
755
756/** Node representing a VHDL flow chart */
758{
759 public:
761 void parse();
762 bool hasCaption() const { return !children().empty(); }
763 private:
764};
765
766/** Node representing a link to some item */
768{
769 public:
771 QCString parse(bool,bool isXmlLink=FALSE);
772 QCString file() const { return m_file; }
773 QCString relPath() const { return m_relPath; }
774 QCString ref() const { return m_ref; }
775 QCString anchor() const { return m_anchor; }
776
777 private:
783};
784
785/** Node representing a reference to some item */
787{
788 public:
789 DocRef(DocParser *parser,DocNodeVariant *parent,const QCString &target,const QCString &context);
790 void parse(char cmdChar,const QCString &cmdName);
791 QCString file() const { return m_file; }
792 QCString relPath() const { return m_relPath; }
793 QCString ref() const { return m_ref; }
794 QCString anchor() const { return m_anchor; }
795 QCString targetTitle() const { return m_text; }
797 bool hasLinkText() const { return !children().empty(); }
798 bool refToAnchor() const { return m_refType==Anchor; }
799 bool refToSection() const { return m_refType==Section; }
800 bool refToTable() const { return m_refType==Table; }
801 bool isSubPage() const { return m_isSubPage; }
802
803 private:
806 bool m_isSubPage = false;
812};
813
814/** Node representing an internal reference to some item */
816{
817 public:
819 void parse();
820 QCString file() const { return m_file; }
821 QCString relPath() const { return m_relPath; }
822 QCString anchor() const { return m_anchor; }
823
824 private:
828};
829
830/** Node representing a Hypertext reference */
850
851/** Node Html summary */
863
864/** Node Html details */
866{
867 public:
870 const HtmlAttribList &attribs() const { return m_attribs; }
871 Token parse();
873 const DocNodeVariant *summary() const { return m_summary.get(); }
874
875 private:
877 std::unique_ptr<DocNodeVariant> m_summary;
878};
879
880/** Node Html heading */
882{
883 public:
886 int level() const { return m_level; }
887 const HtmlAttribList &attribs() const { return m_attribs; }
888 Token parse();
889
890 private:
891 int m_level = 0;
893};
894
895/** Node representing a Html description item */
907
908/** Node representing a Html description list */
920
921/** Node representing a normal section */
923{
924 public:
927 int level() const { return m_level; }
928 const DocNodeVariant *title() const { return m_title.get(); }
929 QCString anchor() const { return m_anchor; }
930 QCString id() const { return m_id; }
931 QCString file() const { return m_file; }
932 Token parse();
933
934 private:
935 int m_level = 0;
937 std::unique_ptr<DocNodeVariant> m_title;
940};
941
942/** Node representing a reference to a section */
944{
945 public:
947 QCString target() const { return m_target; }
948 QCString file() const { return m_file; }
949 QCString anchor() const { return m_anchor; }
950 QCString relPath() const { return m_relPath; }
951 QCString ref() const { return m_ref; }
952 bool refToTable() const { return m_refType==Table; }
953 bool isSubPage() const { return m_isSubPage; }
954 void parse();
955
956 private:
959 bool m_isSubPage = false;
964};
965
966/** Node representing a list of section references */
968{
969 public:
971 void parse();
972
973 private:
974};
975
976/** Node representing an internal section of documentation */
978{
979 public:
981 Token parse(int);
982
983 private:
984};
985
986/** Node representing an block of paragraphs */
988{
989 public:
991 Token parse();
992
993 private:
994};
995
996
997/** Node representing a simple list */
999{
1000 public:
1002 Token parse();
1003
1004 private:
1005};
1006
1007/** Node representing a Html list */
1023
1024/** Node representing a simple section */
1026{
1027 public:
1035 Type type() const { return m_type; }
1036 QCString typeString() const;
1037 Token parse(bool userTitle,bool needsSeparator);
1038 Token parseRcs();
1039 Token parseXml();
1040 void appendLinkWord(const QCString &word);
1041 bool hasTitle() const;
1042 const DocNodeVariant *title() const { return m_title.get(); }
1043
1044 private:
1046 std::unique_ptr<DocNodeVariant> m_title;
1047};
1048
1049/** Node representing a separator between two simple sections of the
1050 * same type.
1051 */
1053{
1054 public:
1056
1057 private:
1058};
1059
1060/** Node representing a parameter section */
1062{
1063 friend class DocParamList;
1064 public:
1070 {
1072 };
1076 Token parse(const QCString &cmdName,bool xmlContext,Direction d);
1077 Type type() const { return m_type; }
1079 bool hasTypeSpecifier() const { return m_hasTypeSpecifier; }
1080
1081 private:
1085};
1086
1087/** Node representing a paragraph in the documentation tree */
1089{
1090 public:
1092 Token parse();
1093 bool isEmpty() const { return children().empty(); }
1094 void markFirst(bool v=TRUE) { m_isFirst=v; }
1095 void markLast(bool v=TRUE) { m_isLast=v; }
1096 bool isFirst() const { return m_isFirst; }
1097 bool isLast() const { return m_isLast; }
1098
1099 Token handleCommand(char cmdChar,const QCString &cmdName);
1100 Token handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &tagHtmlAttribs);
1101 Token handleHtmlEndTag(const QCString &tagName);
1104 Token handleParamSection(const QCString &cmdName,DocParamSect::Type t, bool xmlContext, int direction);
1106 template<class T> void handleFile(const QCString &cmdName);
1107 void handleInclude(const QCString &cmdName,DocInclude::Type t);
1108 void handleLink(const QCString &cmdName,bool isJavaLink);
1109 void handleCite(char cmdChar,const QCString &cmdName);
1110 void handleDoxyConfig(char cmdChar,const QCString &cmdName);
1111 void handleEmoji(char cmdChar,const QCString &cmdName);
1112 void handleSection(char cmdChar,const QCString &cmdName);
1113 void handleInheritDoc();
1114 void handleVhdlFlow();
1115 void handleShowDate(char cmdChar,const QCString &cmdName);
1117 Token handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level);
1118
1119 bool injectToken(Token tok,const QCString &tokText);
1120 const HtmlAttribList &attribs() const { return m_attribs; }
1122
1123 private:
1124 bool m_isFirst = false;
1125 bool m_isLast = false;
1127};
1128
1129/** Node representing a parameter list. */
1156
1157/** Node representing a simple list item */
1159{
1160 public:
1162 Token parse();
1163 const DocNodeVariant *paragraph() const { return m_paragraph.get(); }
1164
1165 private:
1166 std::unique_ptr<DocNodeVariant> m_paragraph;
1167};
1168
1169/** Node representing a HTML list item */
1171{
1172 public:
1175 int itemNumber() const { return m_itemNum; }
1176 const HtmlAttribList &attribs() const { return m_attribs; }
1177 Token parse();
1178 Token parseXml();
1179
1180 private:
1182 int m_itemNum = 0;
1183};
1184
1185/** Node representing a HTML description data */
1196
1197/** Node representing a HTML table cell */
1199{
1200 friend class DocHtmlTable;
1201 public:
1206 bool isHeading() const { return m_isHeading; }
1207 bool isFirst() const { return m_isFirst; }
1208 bool isLast() const { return m_isLast; }
1209 void markFirst(bool v=TRUE) { m_isFirst=v; }
1210 void markLast(bool v=TRUE) { m_isLast=v; }
1211 const HtmlAttribList &attribs() const { return m_attribs; }
1212 Token parse();
1213 Token parseXml();
1214 uint32_t rowIndex() const { return m_rowIdx; }
1215 uint32_t columnIndex() const { return m_colIdx; }
1216 uint32_t rowSpan() const;
1217 uint32_t colSpan() const;
1218 Alignment alignment() const;
1219 Valignment valignment() const;
1220
1221 private:
1222 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1223 void setColumnIndex(uint32_t idx) { m_colIdx = idx; }
1224 bool m_isHeading = false;
1225 bool m_isFirst = false;
1226 bool m_isLast = false;
1228 uint32_t m_rowIdx = static_cast<uint32_t>(-1);
1229 uint32_t m_colIdx = static_cast<uint32_t>(-1);
1230};
1231
1232/** Node representing a HTML table caption */
1234{
1235 public:
1237 const HtmlAttribList &attribs() const { return m_attribs; }
1238 Token parse();
1239 bool hasCaptionId() const { return m_hasCaptionId; }
1240 QCString file() const { return m_file; }
1241 QCString anchor() const { return m_anchor; }
1242
1243 private:
1245 bool m_hasCaptionId = false;
1248};
1249
1250/** Node representing a HTML table row */
1252{
1253 friend class DocHtmlTable;
1254 public:
1257 size_t numCells() const { return children().size(); }
1258 const HtmlAttribList &attribs() const { return m_attribs; }
1259 Token parse();
1260 Token parseXml(bool header);
1261 bool isHeading() const;
1262 void setVisibleCells(uint32_t n) { m_visibleCells = n; }
1263 uint32_t visibleCells() const { return m_visibleCells; }
1264 uint32_t rowIndex() const { return m_rowIdx; }
1265
1266 private:
1267 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1269 uint32_t m_visibleCells = 0;
1270 uint32_t m_rowIdx = static_cast<uint32_t>(-1);
1271};
1272
1273/** Node representing a HTML table */
1275{
1276 public:
1279 size_t numRows() const { return children().size(); }
1280 bool hasCaption() const;
1281 const HtmlAttribList &attribs() const { return m_attribs; }
1282 Token parse();
1283 Token parseXml();
1284 size_t numColumns() const { return m_numCols; }
1285 const DocNodeVariant *caption() const;
1286 size_t numberHeaderRows() const;
1287
1288 private:
1289 void computeTableGrid();
1290 std::unique_ptr<DocNodeVariant> m_caption;
1292 size_t m_numCols = 0;
1293};
1294
1295/** Node representing an HTML blockquote */
1307
1308/** Root node of a text fragment */
1310{
1311 public:
1313 void parse();
1314 bool isEmpty() const { return children().empty(); }
1315};
1316
1317/** Root node of documentation tree */
1319{
1320 public:
1323 void parse();
1324 bool indent() const { return m_indent; }
1325 bool singleLine() const { return m_singleLine; }
1326 bool isEmpty() const { return children().empty(); }
1327
1328 private:
1329 bool m_indent = false;
1330 bool m_singleLine = false;
1331};
1332
1333//--------------------------------------------------------------------------------------
1334
1335/// returns the parent node of a given node \a n or nullptr if the node has no parent.
1337{
1338 return n ? std::visit([](auto &&x)->decltype(auto) { return x.parent(); }, *n) : nullptr;
1339}
1340
1341/// returns the parent node of a given node \a n or nullptr if the node has no parent.
1342constexpr const DocNodeVariant *parent(const DocNodeVariant *n)
1343{
1344 return n ? std::visit([](auto &&x)->decltype(auto) { return x.parent(); }, *n) : nullptr;
1345}
1346
1347namespace details
1348{
1349
1350template<class T,class... Ts>
1351struct Impl
1352{
1353 static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
1354 {
1355 return std::holds_alternative<T>(v) || Impl<Ts...>::holds_one_of_alternatives(v);
1356 }
1357};
1358
1359template<class T>
1360struct Impl<T>
1361{
1362 static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
1363 {
1364 return std::holds_alternative<T>(v);
1365 }
1366};
1367
1368} // namespace details
1369
1370/// returns true iff \a v holds one of types passed as template parameters
1371template<class... Ts>
1376
1377namespace details
1378{
1379
1380// Helper type trait to check if a type has member function children(). Default case is false.
1381template <typename T, typename = void>
1382struct has_method_children : std::false_type {};
1383
1384// Use SFINAE to have a partial template specialization derived from std::true_type in case T has method children()
1385template <typename T>
1386struct has_method_children<T, std::void_t<decltype(std::declval<T>().children())>> : std::true_type {};
1387
1388} // namespace details
1389
1390// Call children() on variant v if the contained type has this method, otherwise return nullptr
1392{
1393 return std::visit([](auto&& value) -> DocNodeList* {
1394 if constexpr (details::has_method_children<decltype(value)>::value) {
1395 return &value.children();
1396 } else {
1397 return nullptr;
1398 }
1399 }, *v);
1400}
1401
1402//----------------- DocNodeList ---------------------------------------
1403
1404template<class T,class...Args>
1405inline void DocNodeList::append(Args&&... args)
1406{
1407 // add a DocNodeVariant to the list containing an node T as its active member.
1408 emplace_back(T(std::forward<Args>(args)...));
1409 // store a pointer to the variant holding node T inside the node itself.
1410 // Since DocNodeList is a GrowVector this reference will remain valid even if new
1411 // elements are added (which would not be the case if a std::vector was used)
1412 std::get_if<T>(&back())->setThisVariant(&back());
1413}
1414
1415template<class T>
1417{
1418 return std::get_if<T>(&back());
1419}
1420
1421// ---------------- Debug helpers -------------------------------
1422
1423#define DN(x) #x
1424#define DN_SEP ,
1425inline const char *docNodeName(const DocNodeVariant &v)
1426{
1427 static const char *table[] = { DOC_NODES };
1428 return table[v.index()];
1429}
1430#undef DN
1431#undef DN_SEP
1432
1433inline void dumpDocNodeSizes()
1434{
1435#define DN(x) #x
1436#define DN_SEP ,
1437 static const char *tableWithNames[] = { DOC_NODES };
1438#undef DN
1439#undef DN_SEP
1440
1441#define DN(x) sizeof(x)
1442#define DN_SEP ,
1443 static size_t tableWithSizes[] = { DOC_NODES };
1444#undef DN
1445#undef DN_SEP
1446
1447 size_t maxSize=0;
1448 printf("DocNodeVariant(\n");
1449 for (size_t i=0;i<sizeof(tableWithNames)/sizeof(tableWithNames[0]);i++)
1450 {
1451 printf(" /* %2zu */ sizeof(%s)=%zu\n",i,tableWithNames[i],tableWithSizes[i]);
1452 if (tableWithSizes[i]>maxSize) maxSize = tableWithSizes[i];
1453 }
1454 printf(")=%zu\n",maxSize);
1455}
1456
1457inline void dumpDocNodeList(const DocNodeList &children)
1458{
1459 printf("children=[\n");
1460 for (const auto &child : children)
1461 {
1462 const DocWord *w = std::get_if<DocWord>(&child);
1463 printf(" %s (%p) %s\n",docNodeName(child),(void*)&child,qPrint(w?w->word():""));
1464 }
1465 printf("]\n");
1466}
1467
1468//----------------------------------------------------------------------------------
1469
1470/** Class representing the abstract syntax tree of a documentation block */
1472{
1473 public:
1474 // Note that r can only be a rvalue, not a general forwarding reference.
1475 // The compiler will error on lvalues because DotNodeVariant doesn't have a copy constructor
1476 template<class DocNode>
1477 DocNodeAST(DocNode &&r) : root(std::move(r))
1478 {
1479 std::get_if<DocNode>(&root)->setThisVariant(&root);
1480 }
1481 bool isEmpty() const override
1482 {
1483 if (std::holds_alternative<DocRoot>(root))
1484 {
1485 return std::get<DocRoot>(root).isEmpty();
1486 }
1487 else if (std::holds_alternative<DocText>(root))
1488 {
1489 return std::get<DocText>(root).isEmpty();
1490 }
1491 else if (std::holds_alternative<DocTitle>(root))
1492 {
1493 return std::get<DocTitle>(root).isEmpty();
1494 }
1495 return false;
1496 }
1498};
1499
1500template<class T,class... Args>
1501std::unique_ptr<DocNodeVariant> createDocNode(Args&&...args)
1502{
1503 auto node = std::make_unique<DocNodeVariant>(T(std::forward<Args>(args)...));
1504 std::get_if<T>(node.get())->setThisVariant(node.get());
1505 return node;
1506}
1507
1508#endif
The common base class of all entity definitions found in the sources.
Definition definition.h:77
const HtmlAttribList & attribs() const
Definition docnode.h:235
HtmlAttribList m_attribs
Definition docnode.h:240
DocAnchor(DocParser *parser, DocNodeVariant *parent, const QCString &id, bool newAnchor)
Definition docnode.cpp:211
QCString anchor() const
Definition docnode.h:232
QCString m_anchor
Definition docnode.h:238
QCString m_file
Definition docnode.h:239
QCString file() const
Definition docnode.h:233
int m_depth
Definition docnode.h:590
bool isCheckedList() const
Definition docnode.h:582
bool isEnumList() const
Definition docnode.h:580
int depth() const
Definition docnode.h:583
int m_indent
Definition docnode.h:587
Token parse()
Definition docnode.cpp:3062
bool m_isCheckedList
Definition docnode.h:589
int indent() const
Definition docnode.h:581
DocAutoList(DocParser *parser, DocNodeVariant *parent, int indent, bool isEnumList, int depth, bool isCheckedList)
Definition docnode.cpp:3055
bool m_isEnumList
Definition docnode.h:588
int itemNumber() const
Definition docnode.h:598
DocAutoListItem(DocParser *parser, DocNodeVariant *parent, int indent, int num)
Definition docnode.cpp:3015
QCString m_anchor
Definition docnode.h:260
QCString getText() const
Definition docnode.cpp:974
QCString m_target
Definition docnode.h:261
QCString m_relPath
Definition docnode.h:258
QCString relPath() const
Definition docnode.h:249
CiteInfoOption option() const
Definition docnode.h:253
QCString m_ref
Definition docnode.h:259
QCString target() const
Definition docnode.h:252
DocCite(DocParser *parser, DocNodeVariant *parent, const QCString &target, const QCString &context, CiteInfoOption opt)
Definition docnode.cpp:938
QCString anchor() const
Definition docnode.h:251
QCString m_file
Definition docnode.h:257
CiteInfoOption m_option
Definition docnode.h:262
QCString ref() const
Definition docnode.h:250
QCString file() const
Definition docnode.h:248
DocNodeList & children()
Definition docnode.h:143
const DocNodeList & children() const
Definition docnode.h:144
DocCompoundNode(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:141
DocNodeList m_children
Definition docnode.h:147
bool parse()
Definition docnode.cpp:1210
DocDiaFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1203
QCString relPath() const
Definition docnode.h:686
QCString height() const
Definition docnode.h:689
QCString srcFile() const
Definition docnode.h:691
QCString file() const
Definition docnode.h:685
std::unique_ptr< Private > p
Definition docnode.h:708
int srcLine() const
Definition docnode.h:692
DocDiagramFileBase(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.h:681
bool hasCaption() const
Definition docnode.h:687
QCString context() const
Definition docnode.h:690
QCString width() const
Definition docnode.h:688
QCString name() const
Definition docnode.h:684
bool parse()
Definition docnode.cpp:1132
DocDotFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1125
int index() const
Definition docnode.h:345
DocEmoji(DocParser *parser, DocNodeVariant *parent, const QCString &symName)
Definition docnode.cpp:162
int m_index
Definition docnode.h:349
QCString name() const
Definition docnode.h:344
QCString m_symName
Definition docnode.h:348
QCString m_relPath
Definition docnode.h:546
QCString text() const
Definition docnode.h:533
QCString name() const
Definition docnode.h:532
bool isInline() const
Definition docnode.h:536
QCString m_text
Definition docnode.h:545
int id() const
Definition docnode.h:535
QCString m_name
Definition docnode.h:544
DocFormula(DocParser *parser, DocNodeVariant *parent, int id)
Definition docnode.cpp:517
QCString relPath() const
Definition docnode.h:534
Token parse()
Definition docnode.cpp:1569
HtmlAttribList m_attribs
Definition docnode.h:845
QCString url() const
Definition docnode.h:839
QCString m_file
Definition docnode.h:848
DocHRef(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, const QCString &url, const QCString &relPath, const QCString &file)
Definition docnode.h:834
QCString relPath() const
Definition docnode.h:841
QCString file() const
Definition docnode.h:840
const HtmlAttribList & attribs() const
Definition docnode.h:842
QCString m_url
Definition docnode.h:846
QCString m_relPath
Definition docnode.h:847
DocHorRuler(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:218
const HtmlAttribList & attribs() const
Definition docnode.h:221
HtmlAttribList m_attribs
Definition docnode.h:224
DocHtmlBlockQuote(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1299
const HtmlAttribList & attribs() const
Definition docnode.h:1302
HtmlAttribList m_attribs
Definition docnode.h:1305
bool hasCaptionId() const
Definition docnode.h:1239
HtmlAttribList m_attribs
Definition docnode.h:1244
bool m_hasCaptionId
Definition docnode.h:1245
DocHtmlCaption(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.cpp:1776
QCString m_file
Definition docnode.h:1246
const HtmlAttribList & attribs() const
Definition docnode.h:1237
QCString anchor() const
Definition docnode.h:1241
QCString file() const
Definition docnode.h:1240
QCString m_anchor
Definition docnode.h:1247
Valignment valignment() const
Definition docnode.cpp:1980
friend class DocHtmlTable
Definition docnode.h:1200
void setColumnIndex(uint32_t idx)
Definition docnode.h:1223
bool isFirst() const
Definition docnode.h:1207
Token parseXml()
Definition docnode.cpp:1884
uint32_t columnIndex() const
Definition docnode.h:1215
void setRowIndex(uint32_t idx)
Definition docnode.h:1222
void markLast(bool v=TRUE)
Definition docnode.h:1210
uint32_t rowSpan() const
Definition docnode.cpp:1918
uint32_t rowIndex() const
Definition docnode.h:1214
DocHtmlCell(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, bool isHeading)
Definition docnode.h:1204
uint32_t m_colIdx
Definition docnode.h:1229
bool m_isFirst
Definition docnode.h:1225
void markFirst(bool v=TRUE)
Definition docnode.h:1209
Alignment alignment() const
Definition docnode.cpp:1942
bool isLast() const
Definition docnode.h:1208
bool isHeading() const
Definition docnode.h:1206
bool m_isLast
Definition docnode.h:1226
const HtmlAttribList & attribs() const
Definition docnode.h:1211
HtmlAttribList m_attribs
Definition docnode.h:1227
bool m_isHeading
Definition docnode.h:1224
Token parse()
Definition docnode.cpp:1850
uint32_t m_rowIdx
Definition docnode.h:1228
uint32_t colSpan() const
Definition docnode.cpp:1930
DocHtmlDescData(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:1189
const HtmlAttribList & attribs() const
Definition docnode.h:1190
HtmlAttribList m_attribs
Definition docnode.h:1194
DocHtmlDescList(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:912
const HtmlAttribList & attribs() const
Definition docnode.h:914
HtmlAttribList m_attribs
Definition docnode.h:918
HtmlAttribList m_attribs
Definition docnode.h:905
DocHtmlDescTitle(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:899
const HtmlAttribList & attribs() const
Definition docnode.h:901
const HtmlAttribList & attribs() const
Definition docnode.h:870
DocHtmlDetails(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:868
void parseSummary(DocNodeVariant *, HtmlAttribList &attribs)
Definition docnode.cpp:1559
const DocNodeVariant * summary() const
Definition docnode.h:873
HtmlAttribList m_attribs
Definition docnode.h:876
std::unique_ptr< DocNodeVariant > m_summary
Definition docnode.h:877
Token parse()
Definition docnode.cpp:1379
HtmlAttribList m_attribs
Definition docnode.h:892
const HtmlAttribList & attribs() const
Definition docnode.h:887
DocHtmlHeader(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, int level)
Definition docnode.h:884
int level() const
Definition docnode.h:886
Type m_type
Definition docnode.h:1020
Token parseXml()
Definition docnode.cpp:2862
const HtmlAttribList & attribs() const
Definition docnode.h:1015
HtmlAttribList m_attribs
Definition docnode.h:1021
Token parse()
Definition docnode.cpp:2787
Type type() const
Definition docnode.h:1014
DocHtmlList(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, Type t)
Definition docnode.h:1012
const HtmlAttribList & attribs() const
Definition docnode.h:1176
HtmlAttribList m_attribs
Definition docnode.h:1181
int itemNumber() const
Definition docnode.h:1175
DocHtmlListItem(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, int num)
Definition docnode.h:1173
Token parseXml(bool header)
Definition docnode.cpp:2184
uint32_t m_rowIdx
Definition docnode.h:1270
void setVisibleCells(uint32_t n)
Definition docnode.h:1262
friend class DocHtmlTable
Definition docnode.h:1253
DocHtmlRow(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1255
HtmlAttribList m_attribs
Definition docnode.h:1268
bool isHeading() const
Definition docnode.cpp:2002
size_t numCells() const
Definition docnode.h:1257
uint32_t m_visibleCells
Definition docnode.h:1269
uint32_t rowIndex() const
Definition docnode.h:1264
const HtmlAttribList & attribs() const
Definition docnode.h:1258
void setRowIndex(uint32_t idx)
Definition docnode.h:1267
uint32_t visibleCells() const
Definition docnode.h:1263
Token parse()
Definition docnode.cpp:2077
const HtmlAttribList & attribs() const
Definition docnode.h:857
HtmlAttribList m_attribs
Definition docnode.h:861
DocHtmlSummary(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:855
size_t numRows() const
Definition docnode.h:1279
Token parseXml()
Definition docnode.cpp:2363
size_t numberHeaderRows() const
Definition docnode.cpp:2255
std::unique_ptr< DocNodeVariant > m_caption
Definition docnode.h:1290
Token parse()
Definition docnode.cpp:2270
void computeTableGrid()
determines the location of all cells in a grid, resolving row and column spans.
Definition docnode.cpp:2420
size_t numColumns() const
Definition docnode.h:1284
size_t m_numCols
Definition docnode.h:1292
const DocNodeVariant * caption() const
Definition docnode.cpp:2250
const HtmlAttribList & attribs() const
Definition docnode.h:1281
bool hasCaption() const
Definition docnode.cpp:2245
HtmlAttribList m_attribs
Definition docnode.h:1291
DocHtmlTable(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1277
const HtmlAttribList & attribs() const
Definition docnode.h:656
QCString relPath() const
Definition docnode.h:652
QCString name() const
Definition docnode.h:648
QCString url() const
Definition docnode.h:653
QCString height() const
Definition docnode.h:651
Type type() const
Definition docnode.h:647
QCString width() const
Definition docnode.h:650
DocImage(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, const QCString &name, Type t, const QCString &url=QCString(), bool inlineImage=TRUE)
Definition docnode.cpp:1356
@ DocBook
Definition docnode.h:644
std::unique_ptr< Private > p
Definition docnode.h:675
void parse()
Definition docnode.cpp:1371
bool isInlineImage() const
Definition docnode.h:654
bool isSVG() const
Definition docnode.cpp:1362
bool hasCaption() const
Definition docnode.h:649
bool m_stripCodeComments
Definition docnode.h:521
const char * typeAsString() const
Definition docnode.h:486
bool stripCodeComments() const
Definition docnode.h:506
bool isLast() const
Definition docnode.h:503
QCString m_exampleFile
Definition docnode.h:523
void markFirst(bool v=TRUE)
Definition docnode.h:504
QCString includeFileName() const
Definition docnode.h:509
QCString text() const
Definition docnode.h:499
QCString m_includeFileName
Definition docnode.h:524
QCString m_context
Definition docnode.h:518
QCString context() const
Definition docnode.h:501
QCString exampleFile() const
Definition docnode.h:508
bool m_isExample
Definition docnode.h:522
int line() const
Definition docnode.h:497
Type type() const
Definition docnode.h:485
bool isFirst() const
Definition docnode.h:502
QCString pattern() const
Definition docnode.h:500
DocIncOperator(DocParser *parser, DocNodeVariant *parent, Type t, const QCString &pat, const QCString &context, bool stripCodeComments, bool isExample, const QCString &exampleFile)
Definition docnode.h:480
bool showLineNo() const
Definition docnode.h:498
QCString m_pattern
Definition docnode.h:517
void markLast(bool v=TRUE)
Definition docnode.h:505
QCString m_text
Definition docnode.h:516
bool m_showLineNo
Definition docnode.h:515
bool isExample() const
Definition docnode.h:507
QCString blockId() const
Definition docnode.h:454
bool m_trimLeft
Definition docnode.h:470
QCString m_context
Definition docnode.h:464
QCString extension() const
Definition docnode.h:450
bool isBlock() const
Definition docnode.h:458
void parse()
Definition docnode.cpp:270
QCString m_text
Definition docnode.h:465
Type m_type
Definition docnode.h:466
bool m_isExample
Definition docnode.h:468
bool m_isBlock
Definition docnode.h:469
DocInclude(DocParser *parser, DocNodeVariant *parent, const QCString &file, const QCString &context, Type t, bool stripCodeComments, bool isExample, const QCString &exampleFile, const QCString &blockId, bool isBlock, bool trimLeft)
Definition docnode.h:441
bool stripCodeComments() const
Definition docnode.h:455
@ LatexInclude
Definition docnode.h:437
@ SnippetWithLines
Definition docnode.h:438
@ DontIncWithLines
Definition docnode.h:439
@ IncWithLines
Definition docnode.h:438
@ HtmlInclude
Definition docnode.h:437
@ VerbInclude
Definition docnode.h:437
@ DontInclude
Definition docnode.h:437
@ DocbookInclude
Definition docnode.h:439
QCString m_blockId
Definition docnode.h:472
Type type() const
Definition docnode.h:451
QCString exampleFile() const
Definition docnode.h:457
QCString text() const
Definition docnode.h:452
bool m_stripCodeComments
Definition docnode.h:467
QCString file() const
Definition docnode.h:449
QCString m_exampleFile
Definition docnode.h:471
bool trimLeft() const
Definition docnode.h:459
bool isExample() const
Definition docnode.h:456
QCString context() const
Definition docnode.h:453
QCString m_file
Definition docnode.h:463
QCString m_entry
Definition docnode.h:562
Token parse()
Definition docnode.cpp:1679
const MemberDef * m_member
Definition docnode.h:564
DocIndexEntry(DocParser *parser, DocNodeVariant *parent, const Definition *scope, const MemberDef *md)
Definition docnode.h:554
QCString entry() const
Definition docnode.h:559
const Definition * m_scope
Definition docnode.h:563
const Definition * scope() const
Definition docnode.h:557
const MemberDef * member() const
Definition docnode.h:558
DocInternal(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:980
Token parse(int)
Definition docnode.cpp:1619
QCString m_file
Definition docnode.h:825
QCString file() const
Definition docnode.h:820
QCString m_anchor
Definition docnode.h:827
DocInternalRef(DocParser *parser, DocNodeVariant *parent, const QCString &target)
Definition docnode.cpp:675
QCString relPath() const
Definition docnode.h:821
QCString anchor() const
Definition docnode.h:822
QCString m_relPath
Definition docnode.h:826
DocLineBreak(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:204
HtmlAttribList m_attribs
Definition docnode.h:211
DocLineBreak(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:205
const HtmlAttribList & attribs() const
Definition docnode.h:208
QCString m_word
Definition docnode.h:178
QCString m_anchor
Definition docnode.h:182
QCString file() const
Definition docnode.h:171
QCString relPath() const
Definition docnode.h:172
QCString ref() const
Definition docnode.h:173
QCString word() const
Definition docnode.h:170
QCString m_file
Definition docnode.h:180
QCString anchor() const
Definition docnode.h:174
QCString m_ref
Definition docnode.h:179
QCString m_relPath
Definition docnode.h:181
DocLinkedWord(DocParser *parser, DocNodeVariant *parent, const QCString &word, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &tooltip)
Definition docnode.cpp:194
QCString m_tooltip
Definition docnode.h:183
QCString tooltip() const
Definition docnode.h:175
DocMermaidFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1286
DocMscFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1163
bool parse()
Definition docnode.cpp:1170
bool isEmpty() const override
Definition docnode.h:1481
DocNodeVariant root
Definition docnode.h:1497
DocNodeAST(DocNode &&r)
Definition docnode.h:1477
Abstract node interface with type information.
Definition docnode.h:82
void setParent(DocNodeVariant *parent)
Definition docnode.h:102
DocNode(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:85
bool m_insidePre
Definition docnode.h:112
const DocNodeVariant * thisVariant() const
Definition docnode.h:94
void setInsidePreformatted(bool p)
Definition docnode.h:109
DocNodeVariant * thisVariant()
Definition docnode.h:93
DocNodeVariant * m_parent
Definition docnode.h:114
bool isPreformatted() const
Definition docnode.h:105
DocParser * parser()
Definition docnode.h:98
void setThisVariant(DocNodeVariant *thisVariant)
Definition docnode.h:96
DocNodeVariant * parent()
Definition docnode.h:90
DocNodeVariant * m_thisVariant
Definition docnode.h:115
~DocNode()=default
const DocNodeVariant * parent() const
Definition docnode.h:91
const DocParser * parser() const
Definition docnode.h:99
DocParser * m_parser
Definition docnode.h:113
@ Unknown
Definition docnode.h:110
@ Table
Definition docnode.h:110
@ Requirement
Definition docnode.h:110
@ Section
Definition docnode.h:110
@ Anchor
Definition docnode.h:110
DocParBlock(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:990
Token parse()
Definition docnode.cpp:2956
bool isEmpty() const
Definition docnode.h:1093
Token handleSimpleSection(DocSimpleSect::Type t, bool xmlContext=FALSE)
Definition docnode.cpp:3487
void handleLink(const QCString &cmdName, bool isJavaLink)
Definition docnode.cpp:3965
void handleInheritDoc()
Definition docnode.cpp:4196
void handleCite(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3540
DocPara(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:3481
void handleInclude(const QCString &cmdName, DocInclude::Type t)
Definition docnode.cpp:4006
Token handleCommand(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:4233
void handleDoxyConfig(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3676
void handleSection(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:4111
void handleFile(const QCString &cmdName)
Definition docnode.cpp:3926
bool isLast() const
Definition docnode.h:1097
Token handleParamSection(const QCString &cmdName, DocParamSect::Type t, bool xmlContext, int direction)
Definition docnode.cpp:3517
const HtmlAttribList & attribs() const
Definition docnode.h:1120
void markLast(bool v=TRUE)
Definition docnode.h:1095
Token handleHtmlStartTag(const QCString &tagName, const HtmlAttribList &tagHtmlAttribs)
Definition docnode.cpp:5041
void handleEmoji(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3645
void handleIncludeOperator(const QCString &cmdName, DocIncOperator::Type t)
Definition docnode.cpp:3866
bool isFirst() const
Definition docnode.h:1096
void markFirst(bool v=TRUE)
Definition docnode.h:1094
void setAttribs(const HtmlAttribList &attribs)
Definition docnode.h:1121
HtmlAttribList m_attribs
Definition docnode.h:1126
bool m_isFirst
Definition docnode.h:1124
Token parse()
Definition docnode.cpp:5784
void handleVhdlFlow()
Definition docnode.cpp:3958
Token handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs, int level)
Definition docnode.cpp:4142
void handleShowDate(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3796
bool m_isLast
Definition docnode.h:1125
Token handleXRefItem()
Definition docnode.cpp:3774
Token handleHtmlEndTag(const QCString &tagName)
Definition docnode.cpp:5511
Token handleStartCode()
Definition docnode.cpp:4160
bool injectToken(Token tok, const QCString &tokText)
Definition docnode.cpp:4153
DocNodeList m_paramTypes
Definition docnode.h:1150
DocNodeList m_paragraphs
Definition docnode.h:1148
bool m_isFirst
Definition docnode.h:1153
DocParamSect::Direction m_dir
Definition docnode.h:1152
const DocNodeList & parameters() const
Definition docnode.h:1135
bool isFirst() const
Definition docnode.h:1142
const DocNodeList & paramTypes() const
Definition docnode.h:1136
void markFirst(bool b=TRUE)
Definition docnode.h:1140
DocParamSect::Type type() const
Definition docnode.h:1138
Token parseXml(const QCString &paramName)
Definition docnode.cpp:3370
void markLast(bool b=TRUE)
Definition docnode.h:1141
bool isLast() const
Definition docnode.h:1143
Token parse(const QCString &cmdName)
Definition docnode.cpp:3289
bool m_isLast
Definition docnode.h:1154
DocParamList(DocParser *parser, DocNodeVariant *parent, DocParamSect::Type t, DocParamSect::Direction d)
Definition docnode.h:1133
DocParamSect::Type m_type
Definition docnode.h:1151
DocParamSect::Direction direction() const
Definition docnode.h:1139
DocNodeList m_params
Definition docnode.h:1149
const DocNodeList & paragraphs() const
Definition docnode.h:1137
bool hasInOutSpecifier() const
Definition docnode.h:1078
DocParamSect(DocParser *parser, DocNodeVariant *parent, Type t)
Definition docnode.h:1073
friend class DocParamList
Definition docnode.h:1063
bool m_hasTypeSpecifier
Definition docnode.h:1084
Token parse(const QCString &cmdName, bool xmlContext, Direction d)
Definition docnode.cpp:3438
bool m_hasInOutSpecifier
Definition docnode.h:1083
bool hasTypeSpecifier() const
Definition docnode.h:1079
Type type() const
Definition docnode.h:1077
DocPlantUmlFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1242
QCString anchor() const
Definition docnode.h:794
QCString m_file
Definition docnode.h:807
SectionType m_sectionType
Definition docnode.h:805
SectionType sectionType() const
Definition docnode.h:796
QCString m_text
Definition docnode.h:811
QCString relPath() const
Definition docnode.h:792
QCString targetTitle() const
Definition docnode.h:795
bool isSubPage() const
Definition docnode.h:801
bool refToTable() const
Definition docnode.h:800
QCString file() const
Definition docnode.h:791
QCString m_ref
Definition docnode.h:809
bool refToAnchor() const
Definition docnode.h:798
QCString ref() const
Definition docnode.h:793
QCString m_relPath
Definition docnode.h:808
DocRef(DocParser *parser, DocNodeVariant *parent, const QCString &target, const QCString &context)
Definition docnode.cpp:710
void parse(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:891
RefType m_refType
Definition docnode.h:804
QCString m_anchor
Definition docnode.h:810
bool refToSection() const
Definition docnode.h:799
bool m_isSubPage
Definition docnode.h:806
bool hasLinkText() const
Definition docnode.h:797
bool singleLine() const
Definition docnode.h:1325
bool indent() const
Definition docnode.h:1324
bool m_singleLine
Definition docnode.h:1330
void parse()
Definition docnode.cpp:6373
DocRoot(DocParser *parser, bool indent, bool sl)
Definition docnode.h:1321
bool m_indent
Definition docnode.h:1329
bool isEmpty() const
Definition docnode.h:1326
QCString m_file
Definition docnode.h:960
bool refToTable() const
Definition docnode.h:952
QCString m_target
Definition docnode.h:957
QCString relPath() const
Definition docnode.h:950
bool m_isSubPage
Definition docnode.h:959
QCString m_anchor
Definition docnode.h:963
QCString target() const
Definition docnode.h:947
QCString file() const
Definition docnode.h:948
QCString m_ref
Definition docnode.h:962
DocSecRefItem(DocParser *parser, DocNodeVariant *parent, const QCString &target)
Definition docnode.cpp:536
QCString m_relPath
Definition docnode.h:961
QCString anchor() const
Definition docnode.h:949
RefType m_refType
Definition docnode.h:958
QCString ref() const
Definition docnode.h:951
bool isSubPage() const
Definition docnode.h:953
DocSecRefList(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:970
std::unique_ptr< DocNodeVariant > m_title
Definition docnode.h:937
QCString m_id
Definition docnode.h:936
QCString file() const
Definition docnode.h:931
QCString m_file
Definition docnode.h:939
int level() const
Definition docnode.h:927
Token parse()
Definition docnode.cpp:6089
DocSection(DocParser *parser, DocNodeVariant *parent, int level, const QCString &id)
Definition docnode.h:925
QCString id() const
Definition docnode.h:930
QCString anchor() const
Definition docnode.h:929
const DocNodeVariant * title() const
Definition docnode.h:928
QCString m_anchor
Definition docnode.h:938
int m_level
Definition docnode.h:935
DocSeparator(DocParser *parser, DocNodeVariant *parent, const QCString &chars)
Definition docnode.h:367
QCString m_chars
Definition docnode.h:371
QCString chars() const
Definition docnode.h:369
DocSimpleList(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:1001
Token parse()
Definition docnode.cpp:3000
std::unique_ptr< DocNodeVariant > m_paragraph
Definition docnode.h:1166
const DocNodeVariant * paragraph() const
Definition docnode.h:1163
DocSimpleListItem(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:2981
QCString typeString() const
Definition docnode.cpp:3260
Type type() const
Definition docnode.h:1035
Token parse(bool userTitle, bool needsSeparator)
Definition docnode.cpp:3150
Token parseRcs()
Definition docnode.cpp:3187
DocSimpleSect(DocParser *parser, DocNodeVariant *parent, Type t)
Definition docnode.cpp:3140
const DocNodeVariant * title() const
Definition docnode.h:1042
Token parseXml()
Definition docnode.cpp:3204
void appendLinkWord(const QCString &word)
Definition docnode.cpp:3240
bool hasTitle() const
Definition docnode.cpp:3145
std::unique_ptr< DocNodeVariant > m_title
Definition docnode.h:1046
DocSimpleSectSep(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:1055
DocStyleChange(DocParser *parser, DocNodeVariant *parent, size_t position, Style s, const QCString &tagName, bool enable, const HtmlAttribList *attribs=nullptr)
Definition docnode.h:290
DocStyleChange(DocParser *parser, DocNodeVariant *parent, size_t position, Style s, const QCString &tagName, bool enable, const QCString &fileName, int lineNr, const HtmlAttribList *attribs=nullptr)
Definition docnode.h:297
const char * styleString() const
Definition docnode.cpp:127
const HtmlAttribList & attribs() const
Definition docnode.h:311
int lineNr() const
Definition docnode.h:314
QCString tagName() const
Definition docnode.h:312
Style style() const
Definition docnode.h:307
QCString fileName() const
Definition docnode.h:313
Style m_style
Definition docnode.h:318
size_t position() const
Definition docnode.h:310
HtmlAttribList m_attribs
Definition docnode.h:320
QCString m_fileName
Definition docnode.h:322
bool enable() const
Definition docnode.h:309
size_t m_position
Definition docnode.h:317
QCString m_tagName
Definition docnode.h:321
HtmlEntityMapper::SymType m_symbol
Definition docnode.h:336
HtmlEntityMapper::SymType symbol() const
Definition docnode.h:332
DocSymbol(DocParser *parser, DocNodeVariant *parent, HtmlEntityMapper::SymType s)
Definition docnode.h:330
static HtmlEntityMapper::SymType decodeSymbol(const QCString &symName)
Definition docnode.cpp:155
DocText(DocParser *parser)
Definition docnode.h:1312
void parse()
Definition docnode.cpp:6259
bool isEmpty() const
Definition docnode.h:1314
void parse()
Definition docnode.cpp:3109
bool isEmpty() const
Definition docnode.h:614
void parseFromString(DocNodeVariant *, const QCString &title)
Definition docnode.cpp:3127
DocTitle(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:610
bool hasTitle() const
Definition docnode.h:613
QCString url() const
Definition docnode.h:192
QCString m_url
Definition docnode.h:196
bool m_isEmail
Definition docnode.h:197
DocURL(DocParser *parser, DocNodeVariant *parent, const QCString &url, bool isEmail)
Definition docnode.h:190
bool isEmail() const
Definition docnode.h:193
QCString srcFile() const
Definition docnode.h:397
int srcLine() const
Definition docnode.h:398
QCString height() const
Definition docnode.h:392
DocVerbatim(DocParser *parser, DocNodeVariant *parent, const QCString &context, const QCString &text, Type t, bool isExample, const QCString &exampleFile, bool isBlock=FALSE, const QCString &lang=QCString())
Definition docnode.cpp:260
bool hasCaption() const
Definition docnode.h:390
QCString language() const
Definition docnode.h:388
const DocNodeList & children() const
Definition docnode.h:395
DocNodeList & children()
Definition docnode.h:396
void setWidth(const QCString &w)
Definition docnode.h:400
std::unique_ptr< Private > p
Definition docnode.h:429
bool isBlock() const
Definition docnode.h:389
bool isExample() const
Definition docnode.h:385
QCString context() const
Definition docnode.h:384
Type type() const
Definition docnode.h:382
QCString text() const
Definition docnode.h:383
QCString exampleFile() const
Definition docnode.h:386
void setHeight(const QCString &h)
Definition docnode.h:401
QCString engine() const
Definition docnode.h:393
bool useBitmap() const
Definition docnode.h:394
void setLocation(const QCString &file, int line)
Definition docnode.h:404
QCString relPath() const
Definition docnode.h:387
void setUseBitmap(const bool &u)
Definition docnode.h:403
void setEngine(const QCString &e)
Definition docnode.h:402
@ JavaDocLiteral
Definition docnode.h:378
void setText(const QCString &t)
Definition docnode.h:399
QCString width() const
Definition docnode.h:391
bool hasCaption() const
Definition docnode.h:762
DocVhdlFlow(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:1326
void parse()
Definition docnode.cpp:1330
QCString m_chars
Definition docnode.h:360
QCString chars() const
Definition docnode.h:358
DocWhiteSpace(DocParser *parser, DocNodeVariant *parent, const QCString &chars)
Definition docnode.h:356
Node representing a word.
Definition docnode.h:153
DocWord(DocParser *parser, DocNodeVariant *parent, const QCString &word)
Definition docnode.cpp:182
QCString m_word
Definition docnode.h:159
QCString word() const
Definition docnode.h:156
QCString m_anchor
Definition docnode.h:635
DocXRefItem(DocParser *parser, DocNodeVariant *parent, int id, const QCString &key)
Definition docnode.cpp:475
QCString anchor() const
Definition docnode.h:625
QCString key() const
Definition docnode.h:628
QCString relPath() const
Definition docnode.h:627
QCString m_file
Definition docnode.h:634
QCString file() const
Definition docnode.h:624
QCString m_key
Definition docnode.h:633
QCString m_title
Definition docnode.h:636
bool parse()
Definition docnode.cpp:480
QCString m_relPath
Definition docnode.h:637
QCString title() const
Definition docnode.h:626
std::vector like container optimized for pushing elements to the back.
Definition growvector.h:40
size_t size() const
returns the number of elements
Definition growvector.h:93
DocNodeVariant & back()
Definition growvector.h:135
bool empty() const
checks whether the container is empty
Definition growvector.h:140
void emplace_back(Args &&...args)
Definition growvector.h:108
Class representing a list of HTML attributes.
Definition htmlattrib.h:33
opaque representation of the abstract syntax tree (AST)
Definition docparser.h:50
A model of a class/file/namespace member symbol.
Definition memberdef.h:48
This is an alternative implementation of QCString.
Definition qcstring.h:101
static constexpr int Anchor
Definition section.h:40
#define ONLY_DEFAULT_MOVABLE(cls)
Macro to help implementing the rule of 5 for a class that can be moved but not copied.
Definition construct.h:44
void dumpDocNodeSizes()
Definition docnode.h:1433
constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
returns true iff v holds one of types passed as template parameters
Definition docnode.h:1372
std::variant< DocWord, DocLinkedWord, DocURL, DocLineBreak, DocHorRuler, DocAnchor, DocCite, DocStyleChange, DocSymbol, DocEmoji, DocWhiteSpace, DocSeparator, DocVerbatim, DocInclude, DocIncOperator, DocFormula, DocIndexEntry, DocAutoList, DocAutoListItem, DocTitle, DocXRefItem, DocImage, DocDotFile, DocMscFile, DocDiaFile, DocVhdlFlow, DocLink, DocRef, DocInternalRef, DocHRef, DocHtmlHeader, DocHtmlDescTitle, DocHtmlDescList, DocSection, DocSecRefItem, DocSecRefList, DocInternal, DocParBlock, DocSimpleList, DocHtmlList, DocSimpleSect, DocSimpleSectSep, DocParamSect, DocPara, DocParamList, DocSimpleListItem, DocHtmlListItem, DocHtmlDescData, DocHtmlCell, DocHtmlCaption, DocHtmlRow, DocHtmlTable, DocHtmlBlockQuote, DocText, DocRoot, DocHtmlDetails, DocHtmlSummary, DocPlantUmlFile, DocMermaidFile > DocNodeVariant
Definition docnode.h:67
DocNodeList * call_method_children(DocNodeVariant *v)
Definition docnode.h:1391
#define DOC_NODES
Definition docnode.h:43
constexpr DocNodeVariant * parent(DocNodeVariant *n)
returns the parent node of a given node n or nullptr if the node has no parent.
Definition docnode.h:1336
std::unique_ptr< DocNodeVariant > createDocNode(Args &&...args)
Definition docnode.h:1501
void dumpDocNodeList(const DocNodeList &children)
Definition docnode.h:1457
constexpr const char * docNodeName(const DocWord &)
Definition docnode.h:76
Alignment
Definition markdown.cpp:212
const char * qPrint(const char *s)
Definition qcstring.h:687
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
Private(const QCString &name_, const QCString &context_, const QCString &srcFile_, int srcLine_)
Definition docnode.h:697
QCString name
Definition docnode.h:667
QCString relPath
Definition docnode.h:671
HtmlAttribList attribs
Definition docnode.h:666
Private(const HtmlAttribList &attribs_, const QCString &name_, Type type_, const QCString &relPath_, const QCString &url_, bool inlineImage_)
Definition docnode.h:662
QCString height
Definition docnode.h:670
QCString width
Definition docnode.h:669
void move_append(DocNodeList &l)
moves the element of list l at the end of this list.
Definition docnode.cpp:850
void append(Args &&... args)
Append a new DocNodeVariant to the list by constructing it with type T and parameters Args.
Definition docnode.h:1405
T * get_last()
Returns a pointer to the last element in the list if that element exists and holds a T,...
Definition docnode.h:1416
QCString exampleFile
Definition docnode.h:417
DocNodeList children
Definition docnode.h:425
Private(const QCString &context_, const QCString &text_, Type type_, bool isExample_, const QCString &exampleFile_, const QCString &relPath_, const QCString &lang_, bool isBlock_)
Definition docnode.h:409
static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
Definition docnode.h:1362
static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
Definition docnode.h:1353