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
36class MemberDef;
37class Definition;
38class DocParser;
39
40//---------------------------------------------------------------------------
41
42#define DOC_NODES \
43/* 0 */ DN(DocWord) DN_SEP DN(DocLinkedWord) DN_SEP DN(DocURL) DN_SEP DN(DocLineBreak) DN_SEP DN(DocHorRuler) DN_SEP \
44/* 5 */ DN(DocAnchor) DN_SEP DN(DocCite) DN_SEP DN(DocStyleChange) DN_SEP DN(DocSymbol) DN_SEP DN(DocEmoji) DN_SEP \
45/* 10 */ DN(DocWhiteSpace) DN_SEP DN(DocSeparator) DN_SEP DN(DocVerbatim) DN_SEP DN(DocInclude) DN_SEP DN(DocIncOperator) DN_SEP \
46/* 15 */ DN(DocFormula) DN_SEP DN(DocIndexEntry) DN_SEP DN(DocAutoList) DN_SEP DN(DocAutoListItem) DN_SEP DN(DocTitle) DN_SEP \
47/* 20 */ DN(DocXRefItem) DN_SEP DN(DocImage) DN_SEP DN(DocDotFile) DN_SEP DN(DocMscFile) DN_SEP DN(DocDiaFile) DN_SEP \
48/* 25 */ DN(DocVhdlFlow) DN_SEP DN(DocLink) DN_SEP DN(DocRef) DN_SEP DN(DocInternalRef) DN_SEP DN(DocHRef) DN_SEP \
49/* 30 */ DN(DocHtmlHeader) DN_SEP DN(DocHtmlDescTitle) DN_SEP DN(DocHtmlDescList) DN_SEP DN(DocSection) DN_SEP DN(DocSecRefItem) DN_SEP \
50/* 35 */ DN(DocSecRefList) DN_SEP DN(DocInternal) DN_SEP DN(DocParBlock) DN_SEP DN(DocSimpleList) DN_SEP DN(DocHtmlList) DN_SEP \
51/* 40 */ DN(DocSimpleSect) DN_SEP DN(DocSimpleSectSep) DN_SEP DN(DocParamSect) DN_SEP DN(DocPara) DN_SEP DN(DocParamList) DN_SEP \
52/* 45 */ DN(DocSimpleListItem) DN_SEP DN(DocHtmlListItem) DN_SEP DN(DocHtmlDescData) DN_SEP DN(DocHtmlCell) DN_SEP DN(DocHtmlCaption) DN_SEP \
53/* 50 */ DN(DocHtmlRow) DN_SEP DN(DocHtmlTable) DN_SEP DN(DocHtmlBlockQuote) DN_SEP DN(DocText) DN_SEP DN(DocRoot) DN_SEP \
54/* 55 */ DN(DocHtmlDetails) DN_SEP DN(DocHtmlSummary) DN_SEP DN(DocPlantUmlFile) \
55
56// forward declarations
57#define DN(x) class x;
58#define DN_SEP
60#undef DN
61#undef DN_SEP
62
63// define a variant type
64#define DN(x) x
65#define DN_SEP ,
66using DocNodeVariant = std::variant<
68>;
69#undef DN
70#undef DN_SEP
71
72// getter functions to return the name of a doc node type
73#define DN(x) constexpr const char *docNodeName(const x &/* n */) { return #x; }
74#define DN_SEP
76#undef DN
77#undef DN_SEP
78
79/** Abstract node interface with type information. */
81{
82 public:
83 /*! Creates a new node */
85 ~DocNode() = default;
87
88 /*! Returns the parent of this node or nullptr for the root node. */
90 const DocNodeVariant *parent() const { return m_parent; }
91
93 const DocNodeVariant *thisVariant() const { return m_thisVariant; }
94
96
97 DocParser *parser() { return m_parser; }
98 const DocParser *parser() const { return m_parser; }
99
100 /*! Sets a new parent for this node. */
102
103 /*! Returns TRUE iff this node is inside a preformatted section */
104 bool isPreformatted() const { return m_insidePre; }
105
106 protected:
107 /*! Sets whether or not this item is inside a preformatted section */
108 void setInsidePreformatted(bool p) { m_insidePre = p; }
110 private:
111 bool m_insidePre = false;
115};
116
117struct DocNodeList : public GrowVector<DocNodeVariant>
118{
119 /** Append a new DocNodeVariant to the list by constructing it with type T and
120 * parameters Args.
121 */
122 template<class T,class...Args>
123 void append(Args&&... args);
124
125 /** moves the element of list \a l at the end of this list.
126 * List \a l will become empty. */
127 void move_append(DocNodeList &l);
128
129 /** Returns a pointer to the last element in the list if that element exists and
130 * holds a T, otherwise nullptr is returned.
131 */
132 template<class T>
133 T *get_last();
134};
135
136/** Base class for nodes with children */
138{
139 public:
143 const DocNodeList &children() const { return m_children; }
144
145 private:
147};
148
149/** Node representing a word
150 */
151class DocWord : public DocNode
152{
153 public:
155 QCString word() const { return m_word; }
156
157 private:
159};
160
161/** Node representing a word that can be linked to something
162 */
163class DocLinkedWord : public DocNode
164{
165 public:
167 const QCString &ref,const QCString &file,
168 const QCString &anchor,const QCString &tooltip);
169 QCString word() const { return m_word; }
170 QCString file() const { return m_file; }
171 QCString relPath() const { return m_relPath; }
172 QCString ref() const { return m_ref; }
173 QCString anchor() const { return m_anchor; }
174 QCString tooltip() const { return m_tooltip; }
175
176 private:
183};
184
185/** Node representing a URL (or email address) */
186class DocURL : public DocNode
187{
188 public:
191 QCString url() const { return m_url; }
192 bool isEmail() const { return m_isEmail; }
193
194 private:
196 bool m_isEmail = false;
197};
198
199/** Node representing a line break */
212
213/** Node representing a horizontal ruler */
214class DocHorRuler : public DocNode
215{
216 public:
219
220 const HtmlAttribList &attribs() const { return m_attribs; }
221
222 private:
224};
225
226/** Node representing an anchor */
227class DocAnchor : public DocNode
228{
229 public:
230 DocAnchor(DocParser *parser,DocNodeVariant *parent,const QCString &id,bool newAnchor);
231 QCString anchor() const { return m_anchor; }
232 QCString file() const { return m_file; }
233
234 const HtmlAttribList &attribs() const { return m_attribs; }
235
236 private:
240};
241
242/** Node representing a citation of some bibliographic reference */
243class DocCite : public DocNode
244{
245 public:
246 DocCite(DocParser *parser,DocNodeVariant *parent,const QCString &target,const QCString &context);
247 QCString file() const { return m_file; }
248 QCString relPath() const { return m_relPath; }
249 QCString ref() const { return m_ref; }
250 QCString anchor() const { return m_anchor; }
251 QCString text() const { return m_text; }
252
253 private:
259};
260
261
262/** Node representing a style change */
264{
265 public:
266 enum Style { Bold = (1<<0),
267 Italic = (1<<1),
268 Code = (1<<2),
269 Center = (1<<3),
270 Small = (1<<4),
271 Subscript = (1<<5),
272 Superscript = (1<<6),
273 Preformatted = (1<<7),
274 Span = (1<<8),
275 Div = (1<<9),
276 Strike = (1<<10),
277 Underline = (1<<11),
278 Del = (1<<12),
279 Ins = (1<<13),
280 S = (1<<14),
281 Cite = (1<<15),
282 Kbd = (1<<16),
283 Typewriter = (1<<17)
284 };
285
303 Style style() const { return m_style; }
304 const char *styleString() const;
305 bool enable() const { return m_enable; }
306 size_t position() const { return m_position; }
307 const HtmlAttribList &attribs() const { return m_attribs; }
308 QCString tagName() const { return m_tagName; }
309 QCString fileName() const { return m_fileName; }
310 int lineNr() const { return m_lineNr; }
311
312 private:
313 size_t m_position = 0;
315 bool m_enable = false;
319 int m_lineNr = -1;
320};
321
322/** Node representing a special symbol */
334
335/** Node representing an emoji */
336class DocEmoji : public DocNode
337{
338 public:
340 QCString name() const { return m_symName; }
341 int index() const { return m_index; }
342
343 private:
345 int m_index = 0;
346};
347
348/** Node representing some amount of white space */
349class DocWhiteSpace : public DocNode
350{
351 public:
354 QCString chars() const { return m_chars; }
355 private:
357};
358
359/** Node representing a separator */
360class DocSeparator : public DocNode
361{
362 public:
365 QCString chars() const { return m_chars; }
366 private:
368};
369
370/** Node representing a verbatim, unparsed text fragment */
371class DocVerbatim : public DocNode
372{
373 public:
376 const QCString &text, Type t,bool isExample,
377 const QCString &exampleFile,bool isBlock=FALSE,const QCString &lang=QCString());
378 Type type() const { return p->type; }
379 QCString text() const { return p->text; }
380 QCString context() const { return p->context; }
381 bool isExample() const { return p->isExample; }
382 QCString exampleFile() const { return p->exampleFile; }
383 QCString relPath() const { return p->relPath; }
384 QCString language() const { return p->lang; }
385 bool isBlock() const { return p->isBlock; }
386 bool hasCaption() const { return !p->children.empty(); }
387 QCString width() const { return p->width; }
388 QCString height() const { return p->height; }
389 QCString engine() const { return p->engine; }
390 bool useBitmap() const { return p->useBitmap; }
391 const DocNodeList &children() const { return p->children; }
392 DocNodeList &children() { return p->children; }
393 QCString srcFile() const { return p->srcFile; }
394 int srcLine() const { return p->srcLine; }
395 void setText(const QCString &t) { p->text=t; }
396 void setWidth(const QCString &w) { p->width=w; }
397 void setHeight(const QCString &h) { p->height=h; }
398 void setEngine(const QCString &e) { p->engine=e; }
399 void setUseBitmap(const bool &u) { p->useBitmap=u; }
400 void setLocation(const QCString &file,int line) { p->srcFile=file; p->srcLine=line; }
401
402 private:
403 struct Private
404 {
405 Private(const QCString &context_,const QCString &text_, Type type_, bool isExample_,
406 const QCString &exampleFile_, const QCString &relPath_,const QCString &lang_, bool isBlock_)
407 : context(context_), text(text_), type(type_), isExample(isExample_),
408 exampleFile(exampleFile_), relPath(relPath_), lang(lang_), isBlock(isBlock_) {}
420 bool useBitmap=false; // some PlantUML engines cannot output data in EPS format so bitmap format is required
423 int srcLine = -1;
424 };
425 std::unique_ptr<Private> p;
426};
427
428
429/** Node representing an included text block from file */
430class DocInclude : public DocNode
431{
432 public:
436 };
445 QCString file() const { return m_file; }
446 QCString extension() const { int i=m_file.findRev('.'); return i!=-1 ? m_file.mid(i) : QCString(); }
447 Type type() const { return m_type; }
448 QCString text() const { return m_text; }
449 QCString context() const { return m_context; }
450 QCString blockId() const { return m_blockId; }
451 bool stripCodeComments() const { return m_stripCodeComments; }
452 bool isExample() const { return m_isExample; }
454 bool isBlock() const { return m_isBlock; }
455 bool trimLeft() const { return m_trimLeft; }
456 void parse();
457
458 private:
469};
470
471/** Node representing a include/dontinclude operator block */
473{
474 public:
481 Type type() const { return m_type; }
482 const char *typeAsString() const
483 {
484 switch(m_type)
485 {
486 case Line: return "line";
487 case SkipLine: return "skipline";
488 case Skip: return "skip";
489 case Until: return "until";
490 }
491 return "";
492 }
493 int line() const { return m_line; }
494 bool showLineNo() const { return m_showLineNo; }
495 QCString text() const { return m_text; }
496 QCString pattern() const { return m_pattern; }
497 QCString context() const { return m_context; }
498 bool isFirst() const { return m_isFirst; }
499 bool isLast() const { return m_isLast; }
500 void markFirst(bool v=TRUE) { m_isFirst = v; }
501 void markLast(bool v=TRUE) { m_isLast = v; }
502 bool stripCodeComments() const { return m_stripCodeComments; }
503 bool isExample() const { return m_isExample; }
506 void parse();
507
508 private:
510 int m_line = 0;
511 bool m_showLineNo = false;
515 bool m_isFirst = false;
516 bool m_isLast = false;
518 bool m_isExample = false;
521};
522
523/** Node representing an item of a cross-referenced list */
524class DocFormula : public DocNode
525{
526 public:
528 QCString name() const { return m_name; }
529 QCString text() const { return m_text; }
530 QCString relPath() const { return m_relPath; }
531 int id() const { return m_id; }
532 bool isInline() const
533 {
534 if (m_text.length()>1 && m_text.at(0)=='\\' && m_text.at(1)=='[') return false;
535 if (m_text.startsWith("\\begin{")) return false;
536 return true;
537 }
538
539 private:
543 int m_id = 0;
544};
545
546/** Node representing an entry in the index. */
547class DocIndexEntry : public DocNode
548{
549 public:
552 Token parse();
553 const Definition *scope() const { return m_scope; }
554 const MemberDef *member() const { return m_member; }
555 QCString entry() const { return m_entry; }
556
557 private:
559 const Definition *m_scope = nullptr;
560 const MemberDef *m_member = nullptr;
561};
562
563//-----------------------------------------------------------------------
564
565/** Node representing an auto List */
567{
568 public:
570 {
571 Unnumbered=1, Unchecked=-2, Checked_x=-3, Checked_X=-4 // positive numbers give the label
572 };
574 int depth, bool isCheckedList);
575
576 bool isEnumList() const { return m_isEnumList; }
577 int indent() const { return m_indent; }
578 bool isCheckedList() const { return m_isCheckedList; }
579 int depth() const { return m_depth; }
580 Token parse();
581
582 private:
583 int m_indent = 0;
584 bool m_isEnumList = false;
585 bool m_isCheckedList = false;
586 int m_depth = 0;
587};
588
589/** Node representing an item of a auto list */
591{
592 public:
594 int itemNumber() const { return m_itemNum; }
595 Token parse();
596
597 private:
598 int m_indent = 0;
599 int m_itemNum = 0;
600};
601
602/** Node representing a simple section title */
604{
605 public:
607 void parse();
608 void parseFromString(DocNodeVariant *,const QCString &title);
609 bool hasTitle() const { return !children().empty(); }
610
611 private:
612};
613
614/** Node representing an item of a cross-referenced list */
616{
617 public:
619 QCString file() const { return m_file; }
620 QCString anchor() const { return m_anchor; }
621 QCString title() const { return m_title; }
622 QCString relPath() const { return m_relPath; }
623 QCString key() const { return m_key; }
624 bool parse();
625
626 private:
627 int m_id = 0;
633};
634
635/** Node representing an image */
637{
638 public:
639 enum Type { Html, Latex, Rtf, DocBook, Xml };
641 const QCString &name,Type t,const QCString &url=QCString(), bool inlineImage = TRUE);
642 Type type() const { return p->type; }
643 QCString name() const { return p->name; }
644 bool hasCaption() const { return !children().empty(); }
645 QCString width() const { return p->width; }
646 QCString height() const { return p->height; }
647 QCString relPath() const { return p->relPath; }
648 QCString url() const { return p->url; }
649 bool isInlineImage() const { return p->inlineImage; }
650 bool isSVG() const;
651 const HtmlAttribList &attribs() const { return p->attribs; }
652 void parse();
653
654 private:
655 struct Private
656 {
657 Private(const HtmlAttribList &attribs_,const QCString &name_,Type type_,
658 const QCString &relPath_, const QCString &url_,bool inlineImage_)
659 : attribs(attribs_), name(name_), type(type_),
660 relPath(relPath_), url(url_), inlineImage(inlineImage_) {}
669 };
670 std::unique_ptr<Private> p;
671};
672
674{
675 public:
679 QCString name() const { return p->name; }
680 QCString file() const { return p->file; }
681 QCString relPath() const { return p->relPath; }
682 bool hasCaption() const { return !children().empty(); }
683 QCString width() const { return p->width; }
684 QCString height() const { return p->height; }
685 QCString context() const { return p->context; }
686 QCString srcFile() const { return p->srcFile; }
687 int srcLine() const { return p->srcLine; }
688
689 protected:
690 struct Private
691 {
692 Private(const QCString &name_,const QCString &context_,const QCString &srcFile_,int srcLine_)
693 : name(name_), context(context_), srcFile(srcFile_), srcLine(srcLine_) {}
702 };
703 std::unique_ptr<Private> p;
704};
705
706/** Node representing a dot file */
708{
709 public:
711 const QCString &srcFile,int srcLine);
712 bool parse();
713};
714
715/** Node representing a msc file */
717{
718 public:
720 const QCString &srcFile,int srcLine);
721 bool parse();
722};
723
724/** Node representing a dia file */
726{
727 public:
729 const QCString &srcFile,int srcLine);
730 bool parse();
731};
732
733/** Node representing a uml file */
735{
736 public:
738 const QCString &srcFile,int srcLine);
739 bool parse();
740};
741
742/** Node representing a VHDL flow chart */
744{
745 public:
747 void parse();
748 bool hasCaption() const { return !children().empty(); }
749 private:
750};
751
752/** Node representing a link to some item */
754{
755 public:
757 QCString parse(bool,bool isXmlLink=FALSE);
758 QCString file() const { return m_file; }
759 QCString relPath() const { return m_relPath; }
760 QCString ref() const { return m_ref; }
761 QCString anchor() const { return m_anchor; }
762
763 private:
769};
770
771/** Node representing a reference to some item */
773{
774 public:
775 DocRef(DocParser *parser,DocNodeVariant *parent,const QCString &target,const QCString &context);
776 void parse();
777 QCString file() const { return m_file; }
778 QCString relPath() const { return m_relPath; }
779 QCString ref() const { return m_ref; }
780 QCString anchor() const { return m_anchor; }
781 QCString targetTitle() const { return m_text; }
783 bool hasLinkText() const { return !children().empty(); }
784 bool refToAnchor() const { return m_refType==Anchor; }
785 bool refToSection() const { return m_refType==Section; }
786 bool refToTable() const { return m_refType==Table; }
787 bool isSubPage() const { return m_isSubPage; }
788
789 private:
792 bool m_isSubPage = false;
798};
799
800/** Node representing an internal reference to some item */
802{
803 public:
805 void parse();
806 QCString file() const { return m_file; }
807 QCString relPath() const { return m_relPath; }
808 QCString anchor() const { return m_anchor; }
809
810 private:
814};
815
816/** Node representing a Hypertext reference */
836
837/** Node Html summary */
849
850/** Node Html details */
852{
853 public:
856 const HtmlAttribList &attribs() const { return m_attribs; }
857 Token parse();
859 const DocNodeVariant *summary() const { return m_summary.get(); }
860
861 private:
863 std::unique_ptr<DocNodeVariant> m_summary;
864};
865
866/** Node Html heading */
868{
869 public:
872 int level() const { return m_level; }
873 const HtmlAttribList &attribs() const { return m_attribs; }
874 Token parse();
875
876 private:
877 int m_level = 0;
879};
880
881/** Node representing a Html description item */
893
894/** Node representing a Html description list */
906
907/** Node representing a normal section */
909{
910 public:
913 int level() const { return m_level; }
914 const DocNodeVariant *title() const { return m_title.get(); }
915 QCString anchor() const { return m_anchor; }
916 QCString id() const { return m_id; }
917 QCString file() const { return m_file; }
918 Token parse();
919
920 private:
921 int m_level = 0;
923 std::unique_ptr<DocNodeVariant> m_title;
926};
927
928/** Node representing a reference to a section */
930{
931 public:
933 QCString target() const { return m_target; }
934 QCString file() const { return m_file; }
935 QCString anchor() const { return m_anchor; }
936 QCString relPath() const { return m_relPath; }
937 QCString ref() const { return m_ref; }
938 bool refToTable() const { return m_refType==Table; }
939 bool isSubPage() const { return m_isSubPage; }
940 void parse();
941
942 private:
945 bool m_isSubPage = false;
950};
951
952/** Node representing a list of section references */
954{
955 public:
957 void parse();
958
959 private:
960};
961
962/** Node representing an internal section of documentation */
964{
965 public:
967 Token parse(int);
968
969 private:
970};
971
972/** Node representing an block of paragraphs */
974{
975 public:
977 Token parse();
978
979 private:
980};
981
982
983/** Node representing a simple list */
985{
986 public:
988 Token parse();
989
990 private:
991};
992
993/** Node representing a Html list */
1009
1010/** Node representing a simple section */
1012{
1013 public:
1021 Type type() const { return m_type; }
1022 QCString typeString() const;
1023 Token parse(bool userTitle,bool needsSeparator);
1024 Token parseRcs();
1025 Token parseXml();
1026 void appendLinkWord(const QCString &word);
1027 bool hasTitle() const;
1028 const DocNodeVariant *title() const { return m_title.get(); }
1029
1030 private:
1032 std::unique_ptr<DocNodeVariant> m_title;
1033};
1034
1035/** Node representing a separator between two simple sections of the
1036 * same type.
1037 */
1039{
1040 public:
1042
1043 private:
1044};
1045
1046/** Node representing a parameter section */
1048{
1049 friend class DocParamList;
1050 public:
1056 {
1058 };
1062 Token parse(const QCString &cmdName,bool xmlContext,Direction d);
1063 Type type() const { return m_type; }
1065 bool hasTypeSpecifier() const { return m_hasTypeSpecifier; }
1066
1067 private:
1071};
1072
1073/** Node representing a paragraph in the documentation tree */
1075{
1076 public:
1078 Token parse();
1079 bool isEmpty() const { return children().empty(); }
1080 void markFirst(bool v=TRUE) { m_isFirst=v; }
1081 void markLast(bool v=TRUE) { m_isLast=v; }
1082 bool isFirst() const { return m_isFirst; }
1083 bool isLast() const { return m_isLast; }
1084
1085 Token handleCommand(char cmdChar,const QCString &cmdName);
1086 Token handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &tagHtmlAttribs);
1087 Token handleHtmlEndTag(const QCString &tagName);
1090 Token handleParamSection(const QCString &cmdName,DocParamSect::Type t, bool xmlContext, int direction);
1092 template<class T> void handleFile(const QCString &cmdName);
1093 void handleInclude(const QCString &cmdName,DocInclude::Type t);
1094 void handleLink(const QCString &cmdName,bool isJavaLink);
1095 void handleCite(char cmdChar,const QCString &cmdName);
1096 void handleDoxyConfig(char cmdChar,const QCString &cmdName);
1097 void handleEmoji(char cmdChar,const QCString &cmdName);
1098 void handleRef(char cmdChar,const QCString &cmdName);
1099 void handleSection(char cmdChar,const QCString &cmdName);
1100 void handleInheritDoc();
1101 void handleVhdlFlow();
1102 void handleILine(char cmdChar,const QCString &cmdName);
1103 void handleIFile(char cmdChar,const QCString &cmdName);
1104 void handleShowDate(char cmdChar,const QCString &cmdName);
1106 Token handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level);
1107
1108 bool injectToken(Token tok,const QCString &tokText);
1109 const HtmlAttribList &attribs() const { return m_attribs; }
1111
1112 private:
1113 bool m_isFirst = false;
1114 bool m_isLast = false;
1116};
1117
1118/** Node representing a parameter list. */
1145
1146/** Node representing a simple list item */
1148{
1149 public:
1151 Token parse();
1152 const DocNodeVariant *paragraph() const { return m_paragraph.get(); }
1153
1154 private:
1155 std::unique_ptr<DocNodeVariant> m_paragraph;
1156};
1157
1158/** Node representing a HTML list item */
1160{
1161 public:
1164 int itemNumber() const { return m_itemNum; }
1165 const HtmlAttribList &attribs() const { return m_attribs; }
1166 Token parse();
1167 Token parseXml();
1168
1169 private:
1171 int m_itemNum = 0;
1172};
1173
1174/** Node representing a HTML description data */
1185
1186/** Node representing a HTML table cell */
1188{
1189 friend class DocHtmlTable;
1190 public:
1195 bool isHeading() const { return m_isHeading; }
1196 bool isFirst() const { return m_isFirst; }
1197 bool isLast() const { return m_isLast; }
1198 void markFirst(bool v=TRUE) { m_isFirst=v; }
1199 void markLast(bool v=TRUE) { m_isLast=v; }
1200 const HtmlAttribList &attribs() const { return m_attribs; }
1201 Token parse();
1202 Token parseXml();
1203 uint32_t rowIndex() const { return m_rowIdx; }
1204 uint32_t columnIndex() const { return m_colIdx; }
1205 uint32_t rowSpan() const;
1206 uint32_t colSpan() const;
1207 Alignment alignment() const;
1208 Valignment valignment() const;
1209
1210 private:
1211 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1212 void setColumnIndex(uint32_t idx) { m_colIdx = idx; }
1213 bool m_isHeading = false;
1214 bool m_isFirst = false;
1215 bool m_isLast = false;
1217 uint32_t m_rowIdx = static_cast<uint32_t>(-1);
1218 uint32_t m_colIdx = static_cast<uint32_t>(-1);
1219};
1220
1221/** Node representing a HTML table caption */
1223{
1224 public:
1226 const HtmlAttribList &attribs() const { return m_attribs; }
1227 Token parse();
1228 bool hasCaptionId() const { return m_hasCaptionId; }
1229 QCString file() const { return m_file; }
1230 QCString anchor() const { return m_anchor; }
1231
1232 private:
1234 bool m_hasCaptionId = false;
1237};
1238
1239/** Node representing a HTML table row */
1241{
1242 friend class DocHtmlTable;
1243 public:
1246 size_t numCells() const { return children().size(); }
1247 const HtmlAttribList &attribs() const { return m_attribs; }
1248 Token parse();
1249 Token parseXml(bool header);
1250 bool isHeading() const;
1251 void setVisibleCells(uint32_t n) { m_visibleCells = n; }
1252 uint32_t visibleCells() const { return m_visibleCells; }
1253 uint32_t rowIndex() const { return m_rowIdx; }
1254
1255 private:
1256 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1258 uint32_t m_visibleCells = 0;
1259 uint32_t m_rowIdx = static_cast<uint32_t>(-1);
1260};
1261
1262/** Node representing a HTML table */
1264{
1265 public:
1268 size_t numRows() const { return children().size(); }
1269 bool hasCaption() const;
1270 const HtmlAttribList &attribs() const { return m_attribs; }
1271 Token parse();
1272 Token parseXml();
1273 size_t numColumns() const { return m_numCols; }
1274 const DocNodeVariant *caption() const;
1275 const DocNodeVariant *firstRow() const;
1276
1277 private:
1278 void computeTableGrid();
1279 std::unique_ptr<DocNodeVariant> m_caption;
1281 size_t m_numCols = 0;
1282};
1283
1284/** Node representing an HTML blockquote */
1296
1297/** Root node of a text fragment */
1299{
1300 public:
1302 void parse();
1303 bool isEmpty() const { return children().empty(); }
1304};
1305
1306/** Root node of documentation tree */
1308{
1309 public:
1312 void parse();
1313 bool indent() const { return m_indent; }
1314 bool singleLine() const { return m_singleLine; }
1315 bool isEmpty() const { return children().empty(); }
1316
1317 private:
1318 bool m_indent = false;
1319 bool m_singleLine = false;
1320};
1321
1322//--------------------------------------------------------------------------------------
1323
1324/// returns the parent node of a given node \a n or nullptr if the node has no parent.
1326{
1327 return n ? std::visit([](auto &&x)->decltype(auto) { return x.parent(); }, *n) : nullptr;
1328}
1329
1330/// returns the parent node of a given node \a n or nullptr if the node has no parent.
1331constexpr const DocNodeVariant *parent(const DocNodeVariant *n)
1332{
1333 return n ? std::visit([](auto &&x)->decltype(auto) { return x.parent(); }, *n) : nullptr;
1334}
1335
1336namespace details
1337{
1338
1339template<class T,class... Ts>
1340struct Impl
1341{
1342 static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
1343 {
1344 return std::holds_alternative<T>(v) || Impl<Ts...>::holds_one_of_alternatives(v);
1345 }
1346};
1347
1348template<class T>
1349struct Impl<T>
1350{
1351 static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
1352 {
1353 return std::holds_alternative<T>(v);
1354 }
1355};
1356
1357} // namespace details
1358
1359/// returns true iff \a v holds one of types passed as template parameters
1360template<class... Ts>
1365
1366namespace details
1367{
1368
1369// Helper type trait to check if a type has member function children(). Default case is false.
1370template <typename T, typename = void>
1371struct has_method_children : std::false_type {};
1372
1373// Use SFINAE to have a partial template specialization derived from std::true_type in case T has method children()
1374template <typename T>
1375struct has_method_children<T, std::void_t<decltype(std::declval<T>().children())>> : std::true_type {};
1376
1377} // namespace details
1378
1379// Call children() on variant v if the contained type has this method, otherwise return nullptr
1381{
1382 return std::visit([](auto&& value) -> DocNodeList* {
1383 if constexpr (details::has_method_children<decltype(value)>::value) {
1384 return &value.children();
1385 } else {
1386 return nullptr;
1387 }
1388 }, *v);
1389}
1390
1391//----------------- DocNodeList ---------------------------------------
1392
1393template<class T,class...Args>
1394inline void DocNodeList::append(Args&&... args)
1395{
1396 // add a DocNodeVariant to the list containing an node T as its active member.
1397 emplace_back(T(std::forward<Args>(args)...));
1398 // store a pointer to the variant holding node T inside the node itself.
1399 // Since DocNodeList is a GrowVector this reference will remain valid even if new
1400 // elements are added (which would not be the case if a std::vector was used)
1401 std::get_if<T>(&back())->setThisVariant(&back());
1402}
1403
1404template<class T>
1406{
1407 return std::get_if<T>(&back());
1408}
1409
1410// ---------------- Debug helpers -------------------------------
1411
1412#define DN(x) #x
1413#define DN_SEP ,
1414inline const char *docNodeName(const DocNodeVariant &v)
1415{
1416 static const char *table[] = { DOC_NODES };
1417 return table[v.index()];
1418}
1419#undef DN
1420#undef DN_SEP
1421
1422inline void dumpDocNodeSizes()
1423{
1424#define DN(x) #x
1425#define DN_SEP ,
1426 static const char *tableWithNames[] = { DOC_NODES };
1427#undef DN
1428#undef DN_SEP
1429
1430#define DN(x) sizeof(x)
1431#define DN_SEP ,
1432 static size_t tableWithSizes[] = { DOC_NODES };
1433#undef DN
1434#undef DN_SEP
1435
1436 size_t maxSize=0;
1437 printf("DocNodeVariant(\n");
1438 for (size_t i=0;i<sizeof(tableWithNames)/sizeof(tableWithNames[0]);i++)
1439 {
1440 printf(" /* %2zu */ sizeof(%s)=%zu\n",i,tableWithNames[i],tableWithSizes[i]);
1441 if (tableWithSizes[i]>maxSize) maxSize = tableWithSizes[i];
1442 }
1443 printf(")=%zu\n",maxSize);
1444}
1445
1446inline void dumpDocNodeList(const DocNodeList &children)
1447{
1448 printf("children=[\n");
1449 for (const auto &child : children)
1450 {
1451 const DocWord *w = std::get_if<DocWord>(&child);
1452 printf(" %s (%p) %s\n",docNodeName(child),(void*)&child,qPrint(w?w->word():""));
1453 }
1454 printf("]\n");
1455}
1456
1457//----------------------------------------------------------------------------------
1458
1459/** Class representing the abstract syntax tree of a documentation block */
1461{
1462 public:
1463 // Note that r can only be a rvalue, not a general forwarding reference.
1464 // The compiler will error on lvalues because DotNodeVariant doesn't have a copy constructor
1465 template<class DocNode>
1466 DocNodeAST(DocNode &&r) : root(std::move(r))
1467 {
1468 std::get_if<DocNode>(&root)->setThisVariant(&root);
1469 }
1470 bool isEmpty() const override
1471 {
1472 if (std::holds_alternative<DocRoot>(root))
1473 {
1474 return std::get<DocRoot>(root).isEmpty();
1475 }
1476 else if (std::holds_alternative<DocText>(root))
1477 {
1478 return std::get<DocText>(root).isEmpty();
1479 }
1480 return false;
1481 }
1483};
1484
1485template<class T,class... Args>
1486std::unique_ptr<DocNodeVariant> createDocNode(Args&&...args)
1487{
1488 auto node = std::make_unique<DocNodeVariant>(T(std::forward<Args>(args)...));
1489 std::get_if<T>(node.get())->setThisVariant(node.get());
1490 return node;
1491}
1492
1493#endif
The common base class of all entity definitions found in the sources.
Definition definition.h:76
const HtmlAttribList & attribs() const
Definition docnode.h:234
HtmlAttribList m_attribs
Definition docnode.h:239
DocAnchor(DocParser *parser, DocNodeVariant *parent, const QCString &id, bool newAnchor)
Definition docnode.cpp:209
QCString anchor() const
Definition docnode.h:231
QCString m_anchor
Definition docnode.h:237
QCString m_file
Definition docnode.h:238
QCString file() const
Definition docnode.h:232
int m_depth
Definition docnode.h:586
bool isCheckedList() const
Definition docnode.h:578
bool isEnumList() const
Definition docnode.h:576
int depth() const
Definition docnode.h:579
int m_indent
Definition docnode.h:583
Token parse()
Definition docnode.cpp:2826
bool m_isCheckedList
Definition docnode.h:585
int indent() const
Definition docnode.h:577
DocAutoList(DocParser *parser, DocNodeVariant *parent, int indent, bool isEnumList, int depth, bool isCheckedList)
Definition docnode.cpp:2819
bool m_isEnumList
Definition docnode.h:584
int itemNumber() const
Definition docnode.h:594
DocAutoListItem(DocParser *parser, DocNodeVariant *parent, int indent, int num)
Definition docnode.cpp:2779
QCString m_anchor
Definition docnode.h:257
DocCite(DocParser *parser, DocNodeVariant *parent, const QCString &target, const QCString &context)
Definition docnode.cpp:900
QCString text() const
Definition docnode.h:251
QCString m_relPath
Definition docnode.h:255
QCString relPath() const
Definition docnode.h:248
QCString m_ref
Definition docnode.h:256
QCString anchor() const
Definition docnode.h:250
QCString m_file
Definition docnode.h:254
QCString ref() const
Definition docnode.h:249
QCString file() const
Definition docnode.h:247
QCString m_text
Definition docnode.h:258
DocNodeList & children()
Definition docnode.h:142
const DocNodeList & children() const
Definition docnode.h:143
DocCompoundNode(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:140
DocNodeList m_children
Definition docnode.h:146
bool parse()
Definition docnode.cpp:1151
DocDiaFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1144
QCString relPath() const
Definition docnode.h:681
QCString height() const
Definition docnode.h:684
QCString srcFile() const
Definition docnode.h:686
QCString file() const
Definition docnode.h:680
std::unique_ptr< Private > p
Definition docnode.h:703
int srcLine() const
Definition docnode.h:687
DocDiagramFileBase(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.h:676
bool hasCaption() const
Definition docnode.h:682
QCString context() const
Definition docnode.h:685
QCString width() const
Definition docnode.h:683
QCString name() const
Definition docnode.h:679
bool parse()
Definition docnode.cpp:1073
DocDotFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1066
int index() const
Definition docnode.h:341
DocEmoji(DocParser *parser, DocNodeVariant *parent, const QCString &symName)
Definition docnode.cpp:160
int m_index
Definition docnode.h:345
QCString name() const
Definition docnode.h:340
QCString m_symName
Definition docnode.h:344
QCString m_relPath
Definition docnode.h:542
QCString text() const
Definition docnode.h:529
QCString name() const
Definition docnode.h:528
bool isInline() const
Definition docnode.h:532
QCString m_text
Definition docnode.h:541
int id() const
Definition docnode.h:531
QCString m_name
Definition docnode.h:540
DocFormula(DocParser *parser, DocNodeVariant *parent, int id)
Definition docnode.cpp:515
QCString relPath() const
Definition docnode.h:530
Token parse()
Definition docnode.cpp:1465
HtmlAttribList m_attribs
Definition docnode.h:831
QCString url() const
Definition docnode.h:825
QCString m_file
Definition docnode.h:834
DocHRef(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, const QCString &url, const QCString &relPath, const QCString &file)
Definition docnode.h:820
QCString relPath() const
Definition docnode.h:827
QCString file() const
Definition docnode.h:826
const HtmlAttribList & attribs() const
Definition docnode.h:828
QCString m_url
Definition docnode.h:832
QCString m_relPath
Definition docnode.h:833
DocHorRuler(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:217
const HtmlAttribList & attribs() const
Definition docnode.h:220
HtmlAttribList m_attribs
Definition docnode.h:223
DocHtmlBlockQuote(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1288
const HtmlAttribList & attribs() const
Definition docnode.h:1291
HtmlAttribList m_attribs
Definition docnode.h:1294
bool hasCaptionId() const
Definition docnode.h:1228
HtmlAttribList m_attribs
Definition docnode.h:1233
bool m_hasCaptionId
Definition docnode.h:1234
DocHtmlCaption(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.cpp:1672
QCString m_file
Definition docnode.h:1235
const HtmlAttribList & attribs() const
Definition docnode.h:1226
QCString anchor() const
Definition docnode.h:1230
QCString file() const
Definition docnode.h:1229
QCString m_anchor
Definition docnode.h:1236
Valignment valignment() const
Definition docnode.cpp:1876
friend class DocHtmlTable
Definition docnode.h:1189
void setColumnIndex(uint32_t idx)
Definition docnode.h:1212
bool isFirst() const
Definition docnode.h:1196
Token parseXml()
Definition docnode.cpp:1780
uint32_t columnIndex() const
Definition docnode.h:1204
void setRowIndex(uint32_t idx)
Definition docnode.h:1211
void markLast(bool v=TRUE)
Definition docnode.h:1199
uint32_t rowSpan() const
Definition docnode.cpp:1814
uint32_t rowIndex() const
Definition docnode.h:1203
DocHtmlCell(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, bool isHeading)
Definition docnode.h:1193
uint32_t m_colIdx
Definition docnode.h:1218
bool m_isFirst
Definition docnode.h:1214
void markFirst(bool v=TRUE)
Definition docnode.h:1198
Alignment alignment() const
Definition docnode.cpp:1838
bool isLast() const
Definition docnode.h:1197
bool isHeading() const
Definition docnode.h:1195
bool m_isLast
Definition docnode.h:1215
const HtmlAttribList & attribs() const
Definition docnode.h:1200
HtmlAttribList m_attribs
Definition docnode.h:1216
bool m_isHeading
Definition docnode.h:1213
Token parse()
Definition docnode.cpp:1746
uint32_t m_rowIdx
Definition docnode.h:1217
uint32_t colSpan() const
Definition docnode.cpp:1826
DocHtmlDescData(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:1178
const HtmlAttribList & attribs() const
Definition docnode.h:1179
HtmlAttribList m_attribs
Definition docnode.h:1183
DocHtmlDescList(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:898
const HtmlAttribList & attribs() const
Definition docnode.h:900
HtmlAttribList m_attribs
Definition docnode.h:904
HtmlAttribList m_attribs
Definition docnode.h:891
DocHtmlDescTitle(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:885
const HtmlAttribList & attribs() const
Definition docnode.h:887
const HtmlAttribList & attribs() const
Definition docnode.h:856
DocHtmlDetails(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:854
void parseSummary(DocNodeVariant *, HtmlAttribList &attribs)
Definition docnode.cpp:1455
const DocNodeVariant * summary() const
Definition docnode.h:859
HtmlAttribList m_attribs
Definition docnode.h:862
std::unique_ptr< DocNodeVariant > m_summary
Definition docnode.h:863
Token parse()
Definition docnode.cpp:1280
HtmlAttribList m_attribs
Definition docnode.h:878
const HtmlAttribList & attribs() const
Definition docnode.h:873
DocHtmlHeader(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, int level)
Definition docnode.h:870
int level() const
Definition docnode.h:872
Type m_type
Definition docnode.h:1006
Token parseXml()
Definition docnode.cpp:2626
const HtmlAttribList & attribs() const
Definition docnode.h:1001
HtmlAttribList m_attribs
Definition docnode.h:1007
Token parse()
Definition docnode.cpp:2551
Type type() const
Definition docnode.h:1000
DocHtmlList(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, Type t)
Definition docnode.h:998
const HtmlAttribList & attribs() const
Definition docnode.h:1165
HtmlAttribList m_attribs
Definition docnode.h:1170
int itemNumber() const
Definition docnode.h:1164
DocHtmlListItem(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, int num)
Definition docnode.h:1162
Token parseXml(bool header)
Definition docnode.cpp:1978
uint32_t m_rowIdx
Definition docnode.h:1259
void setVisibleCells(uint32_t n)
Definition docnode.h:1251
friend class DocHtmlTable
Definition docnode.h:1242
DocHtmlRow(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1244
HtmlAttribList m_attribs
Definition docnode.h:1257
bool isHeading() const
Definition docnode.cpp:1898
size_t numCells() const
Definition docnode.h:1246
uint32_t m_visibleCells
Definition docnode.h:1258
uint32_t rowIndex() const
Definition docnode.h:1253
const HtmlAttribList & attribs() const
Definition docnode.h:1247
void setRowIndex(uint32_t idx)
Definition docnode.h:1256
uint32_t visibleCells() const
Definition docnode.h:1252
Token parse()
Definition docnode.cpp:1913
const HtmlAttribList & attribs() const
Definition docnode.h:843
HtmlAttribList m_attribs
Definition docnode.h:847
DocHtmlSummary(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:841
size_t numRows() const
Definition docnode.h:1268
Token parseXml()
Definition docnode.cpp:2136
std::unique_ptr< DocNodeVariant > m_caption
Definition docnode.h:1279
Token parse()
Definition docnode.cpp:2058
void computeTableGrid()
determines the location of all cells in a grid, resolving row and column spans.
Definition docnode.cpp:2193
size_t numColumns() const
Definition docnode.h:1273
size_t m_numCols
Definition docnode.h:1281
const DocNodeVariant * caption() const
Definition docnode.cpp:2044
const HtmlAttribList & attribs() const
Definition docnode.h:1270
bool hasCaption() const
Definition docnode.cpp:2039
HtmlAttribList m_attribs
Definition docnode.h:1280
DocHtmlTable(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1266
const DocNodeVariant * firstRow() const
Definition docnode.cpp:2049
const HtmlAttribList & attribs() const
Definition docnode.h:651
QCString relPath() const
Definition docnode.h:647
QCString name() const
Definition docnode.h:643
QCString url() const
Definition docnode.h:648
QCString height() const
Definition docnode.h:646
Type type() const
Definition docnode.h:642
QCString width() const
Definition docnode.h:645
DocImage(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, const QCString &name, Type t, const QCString &url=QCString(), bool inlineImage=TRUE)
Definition docnode.cpp:1257
@ DocBook
Definition docnode.h:639
std::unique_ptr< Private > p
Definition docnode.h:670
void parse()
Definition docnode.cpp:1272
bool isInlineImage() const
Definition docnode.h:649
bool isSVG() const
Definition docnode.cpp:1263
bool hasCaption() const
Definition docnode.h:644
bool m_stripCodeComments
Definition docnode.h:517
const char * typeAsString() const
Definition docnode.h:482
bool stripCodeComments() const
Definition docnode.h:502
bool isLast() const
Definition docnode.h:499
QCString m_exampleFile
Definition docnode.h:519
void markFirst(bool v=TRUE)
Definition docnode.h:500
QCString includeFileName() const
Definition docnode.h:505
QCString text() const
Definition docnode.h:495
QCString m_includeFileName
Definition docnode.h:520
QCString m_context
Definition docnode.h:514
QCString context() const
Definition docnode.h:497
QCString exampleFile() const
Definition docnode.h:504
bool m_isExample
Definition docnode.h:518
int line() const
Definition docnode.h:493
Type type() const
Definition docnode.h:481
bool isFirst() const
Definition docnode.h:498
QCString pattern() const
Definition docnode.h:496
DocIncOperator(DocParser *parser, DocNodeVariant *parent, Type t, const QCString &pat, const QCString &context, bool stripCodeComments, bool isExample, const QCString &exampleFile)
Definition docnode.h:476
bool showLineNo() const
Definition docnode.h:494
QCString m_pattern
Definition docnode.h:513
void markLast(bool v=TRUE)
Definition docnode.h:501
QCString m_text
Definition docnode.h:512
bool m_showLineNo
Definition docnode.h:511
bool isExample() const
Definition docnode.h:503
QCString blockId() const
Definition docnode.h:450
bool m_trimLeft
Definition docnode.h:466
QCString m_context
Definition docnode.h:460
QCString extension() const
Definition docnode.h:446
bool isBlock() const
Definition docnode.h:454
void parse()
Definition docnode.cpp:268
QCString m_text
Definition docnode.h:461
Type m_type
Definition docnode.h:462
bool m_isExample
Definition docnode.h:464
bool m_isBlock
Definition docnode.h:465
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:437
bool stripCodeComments() const
Definition docnode.h:451
@ LatexInclude
Definition docnode.h:433
@ SnippetWithLines
Definition docnode.h:434
@ DontIncWithLines
Definition docnode.h:435
@ IncWithLines
Definition docnode.h:434
@ HtmlInclude
Definition docnode.h:433
@ VerbInclude
Definition docnode.h:433
@ DontInclude
Definition docnode.h:433
@ DocbookInclude
Definition docnode.h:435
QCString m_blockId
Definition docnode.h:468
Type type() const
Definition docnode.h:447
QCString exampleFile() const
Definition docnode.h:453
QCString text() const
Definition docnode.h:448
bool m_stripCodeComments
Definition docnode.h:463
QCString file() const
Definition docnode.h:445
QCString m_exampleFile
Definition docnode.h:467
bool trimLeft() const
Definition docnode.h:455
bool isExample() const
Definition docnode.h:452
QCString context() const
Definition docnode.h:449
QCString m_file
Definition docnode.h:459
QCString m_entry
Definition docnode.h:558
Token parse()
Definition docnode.cpp:1575
const MemberDef * m_member
Definition docnode.h:560
DocIndexEntry(DocParser *parser, DocNodeVariant *parent, const Definition *scope, const MemberDef *md)
Definition docnode.h:550
QCString entry() const
Definition docnode.h:555
const Definition * m_scope
Definition docnode.h:559
const Definition * scope() const
Definition docnode.h:553
const MemberDef * member() const
Definition docnode.h:554
DocInternal(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:966
Token parse(int)
Definition docnode.cpp:1515
QCString m_file
Definition docnode.h:811
QCString file() const
Definition docnode.h:806
QCString m_anchor
Definition docnode.h:813
DocInternalRef(DocParser *parser, DocNodeVariant *parent, const QCString &target)
Definition docnode.cpp:670
QCString relPath() const
Definition docnode.h:807
QCString anchor() const
Definition docnode.h:808
QCString m_relPath
Definition docnode.h:812
DocLineBreak(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:203
HtmlAttribList m_attribs
Definition docnode.h:210
DocLineBreak(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:204
const HtmlAttribList & attribs() const
Definition docnode.h:207
QCString m_word
Definition docnode.h:177
QCString m_anchor
Definition docnode.h:181
QCString file() const
Definition docnode.h:170
QCString relPath() const
Definition docnode.h:171
QCString ref() const
Definition docnode.h:172
QCString word() const
Definition docnode.h:169
QCString m_file
Definition docnode.h:179
QCString anchor() const
Definition docnode.h:173
QCString m_ref
Definition docnode.h:178
QCString m_relPath
Definition docnode.h:180
DocLinkedWord(DocParser *parser, DocNodeVariant *parent, const QCString &word, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &tooltip)
Definition docnode.cpp:192
QCString m_tooltip
Definition docnode.h:182
QCString tooltip() const
Definition docnode.h:174
DocMscFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1104
bool parse()
Definition docnode.cpp:1111
bool isEmpty() const override
Definition docnode.h:1470
DocNodeVariant root
Definition docnode.h:1482
DocNodeAST(DocNode &&r)
Definition docnode.h:1466
Abstract node interface with type information.
Definition docnode.h:81
void setParent(DocNodeVariant *parent)
Definition docnode.h:101
DocNode(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:84
bool m_insidePre
Definition docnode.h:111
const DocNodeVariant * thisVariant() const
Definition docnode.h:93
void setInsidePreformatted(bool p)
Definition docnode.h:108
DocNodeVariant * thisVariant()
Definition docnode.h:92
DocNodeVariant * m_parent
Definition docnode.h:113
bool isPreformatted() const
Definition docnode.h:104
DocParser * parser()
Definition docnode.h:97
void setThisVariant(DocNodeVariant *thisVariant)
Definition docnode.h:95
DocNodeVariant * parent()
Definition docnode.h:89
DocNodeVariant * m_thisVariant
Definition docnode.h:114
~DocNode()=default
const DocNodeVariant * parent() const
Definition docnode.h:90
const DocParser * parser() const
Definition docnode.h:98
DocParser * m_parser
Definition docnode.h:112
@ Unknown
Definition docnode.h:109
@ Table
Definition docnode.h:109
@ Section
Definition docnode.h:109
@ Anchor
Definition docnode.h:109
DocParBlock(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:976
Token parse()
Definition docnode.cpp:2720
bool isEmpty() const
Definition docnode.h:1079
Token handleSimpleSection(DocSimpleSect::Type t, bool xmlContext=FALSE)
Definition docnode.cpp:3248
void handleLink(const QCString &cmdName, bool isJavaLink)
Definition docnode.cpp:3690
void handleInheritDoc()
Definition docnode.cpp:3948
void handleCite(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3301
DocPara(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:3242
void handleInclude(const QCString &cmdName, DocInclude::Type t)
Definition docnode.cpp:3758
Token handleCommand(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3985
void handleDoxyConfig(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3364
void handleSection(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3863
void handleFile(const QCString &cmdName)
Definition docnode.cpp:3651
bool isLast() const
Definition docnode.h:1083
void handleIFile(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3567
Token handleParamSection(const QCString &cmdName, DocParamSect::Type t, bool xmlContext, int direction)
Definition docnode.cpp:3278
const HtmlAttribList & attribs() const
Definition docnode.h:1109
void markLast(bool v=TRUE)
Definition docnode.h:1081
Token handleHtmlStartTag(const QCString &tagName, const HtmlAttribList &tagHtmlAttribs)
Definition docnode.cpp:4735
void handleEmoji(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3333
void handleIncludeOperator(const QCString &cmdName, DocIncOperator::Type t)
Definition docnode.cpp:3591
bool isFirst() const
Definition docnode.h:1082
void markFirst(bool v=TRUE)
Definition docnode.h:1080
void handleRef(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3731
void handleILine(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3553
void setAttribs(const HtmlAttribList &attribs)
Definition docnode.h:1110
HtmlAttribList m_attribs
Definition docnode.h:1115
bool m_isFirst
Definition docnode.h:1113
Token parse()
Definition docnode.cpp:5479
void handleVhdlFlow()
Definition docnode.cpp:3683
Token handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs, int level)
Definition docnode.cpp:3894
void handleShowDate(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3483
bool m_isLast
Definition docnode.h:1114
Token handleXRefItem()
Definition docnode.cpp:3462
Token handleHtmlEndTag(const QCString &tagName)
Definition docnode.cpp:5206
Token handleStartCode()
Definition docnode.cpp:3912
bool injectToken(Token tok, const QCString &tokText)
Definition docnode.cpp:3905
DocNodeList m_paramTypes
Definition docnode.h:1139
DocNodeList m_paragraphs
Definition docnode.h:1137
bool m_isFirst
Definition docnode.h:1142
DocParamSect::Direction m_dir
Definition docnode.h:1141
const DocNodeList & parameters() const
Definition docnode.h:1124
bool isFirst() const
Definition docnode.h:1131
const DocNodeList & paramTypes() const
Definition docnode.h:1125
void markFirst(bool b=TRUE)
Definition docnode.h:1129
DocParamSect::Type type() const
Definition docnode.h:1127
Token parseXml(const QCString &paramName)
Definition docnode.cpp:3131
void markLast(bool b=TRUE)
Definition docnode.h:1130
bool isLast() const
Definition docnode.h:1132
Token parse(const QCString &cmdName)
Definition docnode.cpp:3052
bool m_isLast
Definition docnode.h:1143
DocParamList(DocParser *parser, DocNodeVariant *parent, DocParamSect::Type t, DocParamSect::Direction d)
Definition docnode.h:1122
DocParamSect::Type m_type
Definition docnode.h:1140
DocParamSect::Direction direction() const
Definition docnode.h:1128
DocNodeList m_params
Definition docnode.h:1138
const DocNodeList & paragraphs() const
Definition docnode.h:1126
bool hasInOutSpecifier() const
Definition docnode.h:1064
DocParamSect(DocParser *parser, DocNodeVariant *parent, Type t)
Definition docnode.h:1059
friend class DocParamList
Definition docnode.h:1049
bool m_hasTypeSpecifier
Definition docnode.h:1070
Token parse(const QCString &cmdName, bool xmlContext, Direction d)
Definition docnode.cpp:3199
bool m_hasInOutSpecifier
Definition docnode.h:1069
bool hasTypeSpecifier() const
Definition docnode.h:1065
Type type() const
Definition docnode.h:1063
DocPlantUmlFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1183
QCString anchor() const
Definition docnode.h:780
QCString m_file
Definition docnode.h:793
SectionType m_sectionType
Definition docnode.h:791
SectionType sectionType() const
Definition docnode.h:782
QCString m_text
Definition docnode.h:797
QCString relPath() const
Definition docnode.h:778
QCString targetTitle() const
Definition docnode.h:781
void parse()
Definition docnode.cpp:854
bool isSubPage() const
Definition docnode.h:787
bool refToTable() const
Definition docnode.h:786
QCString file() const
Definition docnode.h:777
QCString m_ref
Definition docnode.h:795
bool refToAnchor() const
Definition docnode.h:784
QCString ref() const
Definition docnode.h:779
QCString m_relPath
Definition docnode.h:794
DocRef(DocParser *parser, DocNodeVariant *parent, const QCString &target, const QCString &context)
Definition docnode.cpp:705
RefType m_refType
Definition docnode.h:790
QCString m_anchor
Definition docnode.h:796
bool refToSection() const
Definition docnode.h:785
bool m_isSubPage
Definition docnode.h:792
bool hasLinkText() const
Definition docnode.h:783
bool singleLine() const
Definition docnode.h:1314
bool indent() const
Definition docnode.h:1313
bool m_singleLine
Definition docnode.h:1319
void parse()
Definition docnode.cpp:6068
DocRoot(DocParser *parser, bool indent, bool sl)
Definition docnode.h:1310
bool m_indent
Definition docnode.h:1318
bool isEmpty() const
Definition docnode.h:1315
QCString m_file
Definition docnode.h:946
bool refToTable() const
Definition docnode.h:938
QCString m_target
Definition docnode.h:943
QCString relPath() const
Definition docnode.h:936
bool m_isSubPage
Definition docnode.h:945
QCString m_anchor
Definition docnode.h:949
QCString target() const
Definition docnode.h:933
QCString file() const
Definition docnode.h:934
QCString m_ref
Definition docnode.h:948
DocSecRefItem(DocParser *parser, DocNodeVariant *parent, const QCString &target)
Definition docnode.cpp:534
QCString m_relPath
Definition docnode.h:947
QCString anchor() const
Definition docnode.h:935
RefType m_refType
Definition docnode.h:944
QCString ref() const
Definition docnode.h:937
bool isSubPage() const
Definition docnode.h:939
DocSecRefList(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:956
std::unique_ptr< DocNodeVariant > m_title
Definition docnode.h:923
QCString m_id
Definition docnode.h:922
QCString file() const
Definition docnode.h:917
QCString m_file
Definition docnode.h:925
int level() const
Definition docnode.h:913
Token parse()
Definition docnode.cpp:5784
DocSection(DocParser *parser, DocNodeVariant *parent, int level, const QCString &id)
Definition docnode.h:911
QCString id() const
Definition docnode.h:916
QCString anchor() const
Definition docnode.h:915
const DocNodeVariant * title() const
Definition docnode.h:914
QCString m_anchor
Definition docnode.h:924
int m_level
Definition docnode.h:921
DocSeparator(DocParser *parser, DocNodeVariant *parent, const QCString &chars)
Definition docnode.h:363
QCString m_chars
Definition docnode.h:367
QCString chars() const
Definition docnode.h:365
DocSimpleList(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:987
Token parse()
Definition docnode.cpp:2764
std::unique_ptr< DocNodeVariant > m_paragraph
Definition docnode.h:1155
const DocNodeVariant * paragraph() const
Definition docnode.h:1152
DocSimpleListItem(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:2745
QCString typeString() const
Definition docnode.cpp:3023
Type type() const
Definition docnode.h:1021
Token parse(bool userTitle, bool needsSeparator)
Definition docnode.cpp:2913
Token parseRcs()
Definition docnode.cpp:2950
DocSimpleSect(DocParser *parser, DocNodeVariant *parent, Type t)
Definition docnode.cpp:2903
const DocNodeVariant * title() const
Definition docnode.h:1028
Token parseXml()
Definition docnode.cpp:2967
void appendLinkWord(const QCString &word)
Definition docnode.cpp:3003
bool hasTitle() const
Definition docnode.cpp:2908
std::unique_ptr< DocNodeVariant > m_title
Definition docnode.h:1032
DocSimpleSectSep(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:1041
DocStyleChange(DocParser *parser, DocNodeVariant *parent, size_t position, Style s, const QCString &tagName, bool enable, const HtmlAttribList *attribs=nullptr)
Definition docnode.h:286
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:293
const char * styleString() const
Definition docnode.cpp:125
const HtmlAttribList & attribs() const
Definition docnode.h:307
int lineNr() const
Definition docnode.h:310
QCString tagName() const
Definition docnode.h:308
Style style() const
Definition docnode.h:303
QCString fileName() const
Definition docnode.h:309
Style m_style
Definition docnode.h:314
size_t position() const
Definition docnode.h:306
HtmlAttribList m_attribs
Definition docnode.h:316
QCString m_fileName
Definition docnode.h:318
bool enable() const
Definition docnode.h:305
size_t m_position
Definition docnode.h:313
QCString m_tagName
Definition docnode.h:317
HtmlEntityMapper::SymType m_symbol
Definition docnode.h:332
HtmlEntityMapper::SymType symbol() const
Definition docnode.h:328
DocSymbol(DocParser *parser, DocNodeVariant *parent, HtmlEntityMapper::SymType s)
Definition docnode.h:326
static HtmlEntityMapper::SymType decodeSymbol(const QCString &symName)
Definition docnode.cpp:153
DocText(DocParser *parser)
Definition docnode.h:1301
void parse()
Definition docnode.cpp:5954
bool isEmpty() const
Definition docnode.h:1303
void parse()
Definition docnode.cpp:2872
void parseFromString(DocNodeVariant *, const QCString &title)
Definition docnode.cpp:2890
DocTitle(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:606
bool hasTitle() const
Definition docnode.h:609
QCString url() const
Definition docnode.h:191
QCString m_url
Definition docnode.h:195
bool m_isEmail
Definition docnode.h:196
DocURL(DocParser *parser, DocNodeVariant *parent, const QCString &url, bool isEmail)
Definition docnode.h:189
bool isEmail() const
Definition docnode.h:192
QCString srcFile() const
Definition docnode.h:393
int srcLine() const
Definition docnode.h:394
QCString height() const
Definition docnode.h:388
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:258
bool hasCaption() const
Definition docnode.h:386
QCString language() const
Definition docnode.h:384
const DocNodeList & children() const
Definition docnode.h:391
DocNodeList & children()
Definition docnode.h:392
void setWidth(const QCString &w)
Definition docnode.h:396
std::unique_ptr< Private > p
Definition docnode.h:425
bool isBlock() const
Definition docnode.h:385
bool isExample() const
Definition docnode.h:381
QCString context() const
Definition docnode.h:380
Type type() const
Definition docnode.h:378
QCString text() const
Definition docnode.h:379
QCString exampleFile() const
Definition docnode.h:382
void setHeight(const QCString &h)
Definition docnode.h:397
QCString engine() const
Definition docnode.h:389
bool useBitmap() const
Definition docnode.h:390
void setLocation(const QCString &file, int line)
Definition docnode.h:400
QCString relPath() const
Definition docnode.h:383
void setUseBitmap(const bool &u)
Definition docnode.h:399
void setEngine(const QCString &e)
Definition docnode.h:398
@ JavaDocLiteral
Definition docnode.h:374
void setText(const QCString &t)
Definition docnode.h:395
QCString width() const
Definition docnode.h:387
bool hasCaption() const
Definition docnode.h:748
DocVhdlFlow(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:1227
void parse()
Definition docnode.cpp:1231
QCString m_chars
Definition docnode.h:356
QCString chars() const
Definition docnode.h:354
DocWhiteSpace(DocParser *parser, DocNodeVariant *parent, const QCString &chars)
Definition docnode.h:352
Node representing a word.
Definition docnode.h:152
DocWord(DocParser *parser, DocNodeVariant *parent, const QCString &word)
Definition docnode.cpp:180
QCString m_word
Definition docnode.h:158
QCString word() const
Definition docnode.h:155
QCString m_anchor
Definition docnode.h:630
DocXRefItem(DocParser *parser, DocNodeVariant *parent, int id, const QCString &key)
Definition docnode.cpp:473
QCString anchor() const
Definition docnode.h:620
QCString key() const
Definition docnode.h:623
QCString relPath() const
Definition docnode.h:622
QCString m_file
Definition docnode.h:629
QCString file() const
Definition docnode.h:619
QCString m_key
Definition docnode.h:628
QCString m_title
Definition docnode.h:631
bool parse()
Definition docnode.cpp:478
QCString m_relPath
Definition docnode.h:632
QCString title() const
Definition docnode.h:621
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:1422
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 > DocNodeVariant
Definition docnode.h:66
constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
returns true iff v holds one of types passed as template parameters
Definition docnode.h:1361
DocNodeList * call_method_children(DocNodeVariant *v)
Definition docnode.h:1380
#define DOC_NODES
Definition docnode.h:42
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:1325
std::unique_ptr< DocNodeVariant > createDocNode(Args &&...args)
Definition docnode.h:1486
void dumpDocNodeList(const DocNodeList &children)
Definition docnode.h:1446
constexpr const char * docNodeName(const DocWord &)
Definition docnode.h:75
Alignment
Definition markdown.cpp:194
const char * qPrint(const char *s)
Definition qcstring.h:672
#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:692
QCString name
Definition docnode.h:662
QCString relPath
Definition docnode.h:666
HtmlAttribList attribs
Definition docnode.h:661
Private(const HtmlAttribList &attribs_, const QCString &name_, Type type_, const QCString &relPath_, const QCString &url_, bool inlineImage_)
Definition docnode.h:657
QCString height
Definition docnode.h:665
QCString width
Definition docnode.h:664
void move_append(DocNodeList &l)
moves the element of list l at the end of this list.
Definition docnode.cpp:813
void append(Args &&... args)
Append a new DocNodeVariant to the list by constructing it with type T and parameters Args.
Definition docnode.h:1394
T * get_last()
Returns a pointer to the last element in the list if that element exists and holds a T,...
Definition docnode.h:1405
QCString exampleFile
Definition docnode.h:413
DocNodeList children
Definition docnode.h:421
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:405
static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
Definition docnode.h:1351
static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
Definition docnode.h:1342
std::string_view word
Definition util.cpp:981