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) \
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 VHDL flow chart */
749{
750 public:
752 void parse();
753 bool hasCaption() const { return !children().empty(); }
754 private:
755};
756
757/** Node representing a link to some item */
759{
760 public:
762 QCString parse(bool,bool isXmlLink=FALSE);
763 QCString file() const { return m_file; }
764 QCString relPath() const { return m_relPath; }
765 QCString ref() const { return m_ref; }
766 QCString anchor() const { return m_anchor; }
767
768 private:
774};
775
776/** Node representing a reference to some item */
778{
779 public:
780 DocRef(DocParser *parser,DocNodeVariant *parent,const QCString &target,const QCString &context);
781 void parse(char cmdChar,const QCString &cmdName);
782 QCString file() const { return m_file; }
783 QCString relPath() const { return m_relPath; }
784 QCString ref() const { return m_ref; }
785 QCString anchor() const { return m_anchor; }
786 QCString targetTitle() const { return m_text; }
788 bool hasLinkText() const { return !children().empty(); }
789 bool refToAnchor() const { return m_refType==Anchor; }
790 bool refToSection() const { return m_refType==Section; }
791 bool refToTable() const { return m_refType==Table; }
792 bool isSubPage() const { return m_isSubPage; }
793
794 private:
797 bool m_isSubPage = false;
803};
804
805/** Node representing an internal reference to some item */
807{
808 public:
810 void parse();
811 QCString file() const { return m_file; }
812 QCString relPath() const { return m_relPath; }
813 QCString anchor() const { return m_anchor; }
814
815 private:
819};
820
821/** Node representing a Hypertext reference */
841
842/** Node Html summary */
854
855/** Node Html details */
857{
858 public:
861 const HtmlAttribList &attribs() const { return m_attribs; }
862 Token parse();
864 const DocNodeVariant *summary() const { return m_summary.get(); }
865
866 private:
868 std::unique_ptr<DocNodeVariant> m_summary;
869};
870
871/** Node Html heading */
873{
874 public:
877 int level() const { return m_level; }
878 const HtmlAttribList &attribs() const { return m_attribs; }
879 Token parse();
880
881 private:
882 int m_level = 0;
884};
885
886/** Node representing a Html description item */
898
899/** Node representing a Html description list */
911
912/** Node representing a normal section */
914{
915 public:
918 int level() const { return m_level; }
919 const DocNodeVariant *title() const { return m_title.get(); }
920 QCString anchor() const { return m_anchor; }
921 QCString id() const { return m_id; }
922 QCString file() const { return m_file; }
923 Token parse();
924
925 private:
926 int m_level = 0;
928 std::unique_ptr<DocNodeVariant> m_title;
931};
932
933/** Node representing a reference to a section */
935{
936 public:
938 QCString target() const { return m_target; }
939 QCString file() const { return m_file; }
940 QCString anchor() const { return m_anchor; }
941 QCString relPath() const { return m_relPath; }
942 QCString ref() const { return m_ref; }
943 bool refToTable() const { return m_refType==Table; }
944 bool isSubPage() const { return m_isSubPage; }
945 void parse();
946
947 private:
950 bool m_isSubPage = false;
955};
956
957/** Node representing a list of section references */
959{
960 public:
962 void parse();
963
964 private:
965};
966
967/** Node representing an internal section of documentation */
969{
970 public:
972 Token parse(int);
973
974 private:
975};
976
977/** Node representing an block of paragraphs */
979{
980 public:
982 Token parse();
983
984 private:
985};
986
987
988/** Node representing a simple list */
990{
991 public:
993 Token parse();
994
995 private:
996};
997
998/** Node representing a Html list */
1014
1015/** Node representing a simple section */
1017{
1018 public:
1026 Type type() const { return m_type; }
1027 QCString typeString() const;
1028 Token parse(bool userTitle,bool needsSeparator);
1029 Token parseRcs();
1030 Token parseXml();
1031 void appendLinkWord(const QCString &word);
1032 bool hasTitle() const;
1033 const DocNodeVariant *title() const { return m_title.get(); }
1034
1035 private:
1037 std::unique_ptr<DocNodeVariant> m_title;
1038};
1039
1040/** Node representing a separator between two simple sections of the
1041 * same type.
1042 */
1044{
1045 public:
1047
1048 private:
1049};
1050
1051/** Node representing a parameter section */
1053{
1054 friend class DocParamList;
1055 public:
1061 {
1063 };
1067 Token parse(const QCString &cmdName,bool xmlContext,Direction d);
1068 Type type() const { return m_type; }
1070 bool hasTypeSpecifier() const { return m_hasTypeSpecifier; }
1071
1072 private:
1076};
1077
1078/** Node representing a paragraph in the documentation tree */
1080{
1081 public:
1083 Token parse();
1084 bool isEmpty() const { return children().empty(); }
1085 void markFirst(bool v=TRUE) { m_isFirst=v; }
1086 void markLast(bool v=TRUE) { m_isLast=v; }
1087 bool isFirst() const { return m_isFirst; }
1088 bool isLast() const { return m_isLast; }
1089
1090 Token handleCommand(char cmdChar,const QCString &cmdName);
1091 Token handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &tagHtmlAttribs);
1092 Token handleHtmlEndTag(const QCString &tagName);
1095 Token handleParamSection(const QCString &cmdName,DocParamSect::Type t, bool xmlContext, int direction);
1097 template<class T> void handleFile(const QCString &cmdName);
1098 void handleInclude(const QCString &cmdName,DocInclude::Type t);
1099 void handleLink(const QCString &cmdName,bool isJavaLink);
1100 void handleCite(char cmdChar,const QCString &cmdName);
1101 void handleDoxyConfig(char cmdChar,const QCString &cmdName);
1102 void handleEmoji(char cmdChar,const QCString &cmdName);
1103 void handleRef(char cmdChar,const QCString &cmdName);
1104 void handleSection(char cmdChar,const QCString &cmdName);
1105 void handleInheritDoc();
1106 void handleVhdlFlow();
1107 void handleShowDate(char cmdChar,const QCString &cmdName);
1109 Token handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level);
1110
1111 bool injectToken(Token tok,const QCString &tokText);
1112 const HtmlAttribList &attribs() const { return m_attribs; }
1114
1115 private:
1116 bool m_isFirst = false;
1117 bool m_isLast = false;
1119};
1120
1121/** Node representing a parameter list. */
1148
1149/** Node representing a simple list item */
1151{
1152 public:
1154 Token parse();
1155 const DocNodeVariant *paragraph() const { return m_paragraph.get(); }
1156
1157 private:
1158 std::unique_ptr<DocNodeVariant> m_paragraph;
1159};
1160
1161/** Node representing a HTML list item */
1163{
1164 public:
1167 int itemNumber() const { return m_itemNum; }
1168 const HtmlAttribList &attribs() const { return m_attribs; }
1169 Token parse();
1170 Token parseXml();
1171
1172 private:
1174 int m_itemNum = 0;
1175};
1176
1177/** Node representing a HTML description data */
1188
1189/** Node representing a HTML table cell */
1191{
1192 friend class DocHtmlTable;
1193 public:
1198 bool isHeading() const { return m_isHeading; }
1199 bool isFirst() const { return m_isFirst; }
1200 bool isLast() const { return m_isLast; }
1201 void markFirst(bool v=TRUE) { m_isFirst=v; }
1202 void markLast(bool v=TRUE) { m_isLast=v; }
1203 const HtmlAttribList &attribs() const { return m_attribs; }
1204 Token parse();
1205 Token parseXml();
1206 uint32_t rowIndex() const { return m_rowIdx; }
1207 uint32_t columnIndex() const { return m_colIdx; }
1208 uint32_t rowSpan() const;
1209 uint32_t colSpan() const;
1210 Alignment alignment() const;
1211 Valignment valignment() const;
1212
1213 private:
1214 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1215 void setColumnIndex(uint32_t idx) { m_colIdx = idx; }
1216 bool m_isHeading = false;
1217 bool m_isFirst = false;
1218 bool m_isLast = false;
1220 uint32_t m_rowIdx = static_cast<uint32_t>(-1);
1221 uint32_t m_colIdx = static_cast<uint32_t>(-1);
1222};
1223
1224/** Node representing a HTML table caption */
1226{
1227 public:
1229 const HtmlAttribList &attribs() const { return m_attribs; }
1230 Token parse();
1231 bool hasCaptionId() const { return m_hasCaptionId; }
1232 QCString file() const { return m_file; }
1233 QCString anchor() const { return m_anchor; }
1234
1235 private:
1237 bool m_hasCaptionId = false;
1240};
1241
1242/** Node representing a HTML table row */
1244{
1245 friend class DocHtmlTable;
1246 public:
1249 size_t numCells() const { return children().size(); }
1250 const HtmlAttribList &attribs() const { return m_attribs; }
1251 Token parse();
1252 Token parseXml(bool header);
1253 bool isHeading() const;
1254 void setVisibleCells(uint32_t n) { m_visibleCells = n; }
1255 uint32_t visibleCells() const { return m_visibleCells; }
1256 uint32_t rowIndex() const { return m_rowIdx; }
1257
1258 private:
1259 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1261 uint32_t m_visibleCells = 0;
1262 uint32_t m_rowIdx = static_cast<uint32_t>(-1);
1263};
1264
1265/** Node representing a HTML table */
1267{
1268 public:
1271 size_t numRows() const { return children().size(); }
1272 bool hasCaption() const;
1273 const HtmlAttribList &attribs() const { return m_attribs; }
1274 Token parse();
1275 Token parseXml();
1276 size_t numColumns() const { return m_numCols; }
1277 const DocNodeVariant *caption() const;
1278 size_t numberHeaderRows() const;
1279
1280 private:
1281 void computeTableGrid();
1282 std::unique_ptr<DocNodeVariant> m_caption;
1284 size_t m_numCols = 0;
1285};
1286
1287/** Node representing an HTML blockquote */
1299
1300/** Root node of a text fragment */
1302{
1303 public:
1305 void parse();
1306 bool isEmpty() const { return children().empty(); }
1307};
1308
1309/** Root node of documentation tree */
1311{
1312 public:
1315 void parse();
1316 bool indent() const { return m_indent; }
1317 bool singleLine() const { return m_singleLine; }
1318 bool isEmpty() const { return children().empty(); }
1319
1320 private:
1321 bool m_indent = false;
1322 bool m_singleLine = false;
1323};
1324
1325//--------------------------------------------------------------------------------------
1326
1327/// returns the parent node of a given node \a n or nullptr if the node has no parent.
1329{
1330 return n ? std::visit([](auto &&x)->decltype(auto) { return x.parent(); }, *n) : nullptr;
1331}
1332
1333/// returns the parent node of a given node \a n or nullptr if the node has no parent.
1334constexpr const DocNodeVariant *parent(const DocNodeVariant *n)
1335{
1336 return n ? std::visit([](auto &&x)->decltype(auto) { return x.parent(); }, *n) : nullptr;
1337}
1338
1339namespace details
1340{
1341
1342template<class T,class... Ts>
1343struct Impl
1344{
1345 static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
1346 {
1347 return std::holds_alternative<T>(v) || Impl<Ts...>::holds_one_of_alternatives(v);
1348 }
1349};
1350
1351template<class T>
1352struct Impl<T>
1353{
1354 static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
1355 {
1356 return std::holds_alternative<T>(v);
1357 }
1358};
1359
1360} // namespace details
1361
1362/// returns true iff \a v holds one of types passed as template parameters
1363template<class... Ts>
1368
1369namespace details
1370{
1371
1372// Helper type trait to check if a type has member function children(). Default case is false.
1373template <typename T, typename = void>
1374struct has_method_children : std::false_type {};
1375
1376// Use SFINAE to have a partial template specialization derived from std::true_type in case T has method children()
1377template <typename T>
1378struct has_method_children<T, std::void_t<decltype(std::declval<T>().children())>> : std::true_type {};
1379
1380} // namespace details
1381
1382// Call children() on variant v if the contained type has this method, otherwise return nullptr
1384{
1385 return std::visit([](auto&& value) -> DocNodeList* {
1386 if constexpr (details::has_method_children<decltype(value)>::value) {
1387 return &value.children();
1388 } else {
1389 return nullptr;
1390 }
1391 }, *v);
1392}
1393
1394//----------------- DocNodeList ---------------------------------------
1395
1396template<class T,class...Args>
1397inline void DocNodeList::append(Args&&... args)
1398{
1399 // add a DocNodeVariant to the list containing an node T as its active member.
1400 emplace_back(T(std::forward<Args>(args)...));
1401 // store a pointer to the variant holding node T inside the node itself.
1402 // Since DocNodeList is a GrowVector this reference will remain valid even if new
1403 // elements are added (which would not be the case if a std::vector was used)
1404 std::get_if<T>(&back())->setThisVariant(&back());
1405}
1406
1407template<class T>
1409{
1410 return std::get_if<T>(&back());
1411}
1412
1413// ---------------- Debug helpers -------------------------------
1414
1415#define DN(x) #x
1416#define DN_SEP ,
1417inline const char *docNodeName(const DocNodeVariant &v)
1418{
1419 static const char *table[] = { DOC_NODES };
1420 return table[v.index()];
1421}
1422#undef DN
1423#undef DN_SEP
1424
1425inline void dumpDocNodeSizes()
1426{
1427#define DN(x) #x
1428#define DN_SEP ,
1429 static const char *tableWithNames[] = { DOC_NODES };
1430#undef DN
1431#undef DN_SEP
1432
1433#define DN(x) sizeof(x)
1434#define DN_SEP ,
1435 static size_t tableWithSizes[] = { DOC_NODES };
1436#undef DN
1437#undef DN_SEP
1438
1439 size_t maxSize=0;
1440 printf("DocNodeVariant(\n");
1441 for (size_t i=0;i<sizeof(tableWithNames)/sizeof(tableWithNames[0]);i++)
1442 {
1443 printf(" /* %2zu */ sizeof(%s)=%zu\n",i,tableWithNames[i],tableWithSizes[i]);
1444 if (tableWithSizes[i]>maxSize) maxSize = tableWithSizes[i];
1445 }
1446 printf(")=%zu\n",maxSize);
1447}
1448
1449inline void dumpDocNodeList(const DocNodeList &children)
1450{
1451 printf("children=[\n");
1452 for (const auto &child : children)
1453 {
1454 const DocWord *w = std::get_if<DocWord>(&child);
1455 printf(" %s (%p) %s\n",docNodeName(child),(void*)&child,qPrint(w?w->word():""));
1456 }
1457 printf("]\n");
1458}
1459
1460//----------------------------------------------------------------------------------
1461
1462/** Class representing the abstract syntax tree of a documentation block */
1464{
1465 public:
1466 // Note that r can only be a rvalue, not a general forwarding reference.
1467 // The compiler will error on lvalues because DotNodeVariant doesn't have a copy constructor
1468 template<class DocNode>
1469 DocNodeAST(DocNode &&r) : root(std::move(r))
1470 {
1471 std::get_if<DocNode>(&root)->setThisVariant(&root);
1472 }
1473 bool isEmpty() const override
1474 {
1475 if (std::holds_alternative<DocRoot>(root))
1476 {
1477 return std::get<DocRoot>(root).isEmpty();
1478 }
1479 else if (std::holds_alternative<DocText>(root))
1480 {
1481 return std::get<DocText>(root).isEmpty();
1482 }
1483 else if (std::holds_alternative<DocTitle>(root))
1484 {
1485 return std::get<DocTitle>(root).isEmpty();
1486 }
1487 return false;
1488 }
1490};
1491
1492template<class T,class... Args>
1493std::unique_ptr<DocNodeVariant> createDocNode(Args&&...args)
1494{
1495 auto node = std::make_unique<DocNodeVariant>(T(std::forward<Args>(args)...));
1496 std::get_if<T>(node.get())->setThisVariant(node.get());
1497 return node;
1498}
1499
1500#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:209
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:3014
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:3007
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:2967
QCString m_anchor
Definition docnode.h:260
QCString getText() const
Definition docnode.cpp:972
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:936
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:1208
DocDiaFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1201
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:1130
DocDotFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1123
int index() const
Definition docnode.h:345
DocEmoji(DocParser *parser, DocNodeVariant *parent, const QCString &symName)
Definition docnode.cpp:160
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:515
QCString relPath() const
Definition docnode.h:534
Token parse()
Definition docnode.cpp:1521
HtmlAttribList m_attribs
Definition docnode.h:836
QCString url() const
Definition docnode.h:830
QCString m_file
Definition docnode.h:839
DocHRef(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, const QCString &url, const QCString &relPath, const QCString &file)
Definition docnode.h:825
QCString relPath() const
Definition docnode.h:832
QCString file() const
Definition docnode.h:831
const HtmlAttribList & attribs() const
Definition docnode.h:833
QCString m_url
Definition docnode.h:837
QCString m_relPath
Definition docnode.h:838
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:1291
const HtmlAttribList & attribs() const
Definition docnode.h:1294
HtmlAttribList m_attribs
Definition docnode.h:1297
bool hasCaptionId() const
Definition docnode.h:1231
HtmlAttribList m_attribs
Definition docnode.h:1236
bool m_hasCaptionId
Definition docnode.h:1237
DocHtmlCaption(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.cpp:1728
QCString m_file
Definition docnode.h:1238
const HtmlAttribList & attribs() const
Definition docnode.h:1229
QCString anchor() const
Definition docnode.h:1233
QCString file() const
Definition docnode.h:1232
QCString m_anchor
Definition docnode.h:1239
Valignment valignment() const
Definition docnode.cpp:1932
friend class DocHtmlTable
Definition docnode.h:1192
void setColumnIndex(uint32_t idx)
Definition docnode.h:1215
bool isFirst() const
Definition docnode.h:1199
Token parseXml()
Definition docnode.cpp:1836
uint32_t columnIndex() const
Definition docnode.h:1207
void setRowIndex(uint32_t idx)
Definition docnode.h:1214
void markLast(bool v=TRUE)
Definition docnode.h:1202
uint32_t rowSpan() const
Definition docnode.cpp:1870
uint32_t rowIndex() const
Definition docnode.h:1206
DocHtmlCell(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, bool isHeading)
Definition docnode.h:1196
uint32_t m_colIdx
Definition docnode.h:1221
bool m_isFirst
Definition docnode.h:1217
void markFirst(bool v=TRUE)
Definition docnode.h:1201
Alignment alignment() const
Definition docnode.cpp:1894
bool isLast() const
Definition docnode.h:1200
bool isHeading() const
Definition docnode.h:1198
bool m_isLast
Definition docnode.h:1218
const HtmlAttribList & attribs() const
Definition docnode.h:1203
HtmlAttribList m_attribs
Definition docnode.h:1219
bool m_isHeading
Definition docnode.h:1216
Token parse()
Definition docnode.cpp:1802
uint32_t m_rowIdx
Definition docnode.h:1220
uint32_t colSpan() const
Definition docnode.cpp:1882
DocHtmlDescData(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:1181
const HtmlAttribList & attribs() const
Definition docnode.h:1182
HtmlAttribList m_attribs
Definition docnode.h:1186
DocHtmlDescList(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:903
const HtmlAttribList & attribs() const
Definition docnode.h:905
HtmlAttribList m_attribs
Definition docnode.h:909
HtmlAttribList m_attribs
Definition docnode.h:896
DocHtmlDescTitle(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:890
const HtmlAttribList & attribs() const
Definition docnode.h:892
const HtmlAttribList & attribs() const
Definition docnode.h:861
DocHtmlDetails(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:859
void parseSummary(DocNodeVariant *, HtmlAttribList &attribs)
Definition docnode.cpp:1511
const DocNodeVariant * summary() const
Definition docnode.h:864
HtmlAttribList m_attribs
Definition docnode.h:867
std::unique_ptr< DocNodeVariant > m_summary
Definition docnode.h:868
Token parse()
Definition docnode.cpp:1337
HtmlAttribList m_attribs
Definition docnode.h:883
const HtmlAttribList & attribs() const
Definition docnode.h:878
DocHtmlHeader(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, int level)
Definition docnode.h:875
int level() const
Definition docnode.h:877
Type m_type
Definition docnode.h:1011
Token parseXml()
Definition docnode.cpp:2814
const HtmlAttribList & attribs() const
Definition docnode.h:1006
HtmlAttribList m_attribs
Definition docnode.h:1012
Token parse()
Definition docnode.cpp:2739
Type type() const
Definition docnode.h:1005
DocHtmlList(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, Type t)
Definition docnode.h:1003
const HtmlAttribList & attribs() const
Definition docnode.h:1168
HtmlAttribList m_attribs
Definition docnode.h:1173
int itemNumber() const
Definition docnode.h:1167
DocHtmlListItem(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, int num)
Definition docnode.h:1165
Token parseXml(bool header)
Definition docnode.cpp:2136
uint32_t m_rowIdx
Definition docnode.h:1262
void setVisibleCells(uint32_t n)
Definition docnode.h:1254
friend class DocHtmlTable
Definition docnode.h:1245
DocHtmlRow(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1247
HtmlAttribList m_attribs
Definition docnode.h:1260
bool isHeading() const
Definition docnode.cpp:1954
size_t numCells() const
Definition docnode.h:1249
uint32_t m_visibleCells
Definition docnode.h:1261
uint32_t rowIndex() const
Definition docnode.h:1256
const HtmlAttribList & attribs() const
Definition docnode.h:1250
void setRowIndex(uint32_t idx)
Definition docnode.h:1259
uint32_t visibleCells() const
Definition docnode.h:1255
Token parse()
Definition docnode.cpp:2029
const HtmlAttribList & attribs() const
Definition docnode.h:848
HtmlAttribList m_attribs
Definition docnode.h:852
DocHtmlSummary(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:846
size_t numRows() const
Definition docnode.h:1271
Token parseXml()
Definition docnode.cpp:2315
size_t numberHeaderRows() const
Definition docnode.cpp:2207
std::unique_ptr< DocNodeVariant > m_caption
Definition docnode.h:1282
Token parse()
Definition docnode.cpp:2222
void computeTableGrid()
determines the location of all cells in a grid, resolving row and column spans.
Definition docnode.cpp:2372
size_t numColumns() const
Definition docnode.h:1276
size_t m_numCols
Definition docnode.h:1284
const DocNodeVariant * caption() const
Definition docnode.cpp:2202
const HtmlAttribList & attribs() const
Definition docnode.h:1273
bool hasCaption() const
Definition docnode.cpp:2197
HtmlAttribList m_attribs
Definition docnode.h:1283
DocHtmlTable(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1269
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:1314
@ DocBook
Definition docnode.h:644
std::unique_ptr< Private > p
Definition docnode.h:675
void parse()
Definition docnode.cpp:1329
bool isInlineImage() const
Definition docnode.h:654
bool isSVG() const
Definition docnode.cpp:1320
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:268
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:1631
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:971
Token parse(int)
Definition docnode.cpp:1571
QCString m_file
Definition docnode.h:816
QCString file() const
Definition docnode.h:811
QCString m_anchor
Definition docnode.h:818
DocInternalRef(DocParser *parser, DocNodeVariant *parent, const QCString &target)
Definition docnode.cpp:673
QCString relPath() const
Definition docnode.h:812
QCString anchor() const
Definition docnode.h:813
QCString m_relPath
Definition docnode.h:817
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:192
QCString m_tooltip
Definition docnode.h:183
QCString tooltip() const
Definition docnode.h:175
DocMscFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1161
bool parse()
Definition docnode.cpp:1168
bool isEmpty() const override
Definition docnode.h:1473
DocNodeVariant root
Definition docnode.h:1489
DocNodeAST(DocNode &&r)
Definition docnode.h:1469
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:981
Token parse()
Definition docnode.cpp:2908
bool isEmpty() const
Definition docnode.h:1084
Token handleSimpleSection(DocSimpleSect::Type t, bool xmlContext=FALSE)
Definition docnode.cpp:3438
void handleLink(const QCString &cmdName, bool isJavaLink)
Definition docnode.cpp:3916
void handleInheritDoc()
Definition docnode.cpp:4183
void handleCite(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3491
DocPara(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:3432
void handleInclude(const QCString &cmdName, DocInclude::Type t)
Definition docnode.cpp:3993
Token handleCommand(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:4220
void handleDoxyConfig(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3627
void handleSection(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:4098
void handleFile(const QCString &cmdName)
Definition docnode.cpp:3877
bool isLast() const
Definition docnode.h:1088
Token handleParamSection(const QCString &cmdName, DocParamSect::Type t, bool xmlContext, int direction)
Definition docnode.cpp:3468
const HtmlAttribList & attribs() const
Definition docnode.h:1112
void markLast(bool v=TRUE)
Definition docnode.h:1086
Token handleHtmlStartTag(const QCString &tagName, const HtmlAttribList &tagHtmlAttribs)
Definition docnode.cpp:4971
void handleEmoji(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3596
void handleIncludeOperator(const QCString &cmdName, DocIncOperator::Type t)
Definition docnode.cpp:3817
bool isFirst() const
Definition docnode.h:1087
void markFirst(bool v=TRUE)
Definition docnode.h:1085
void handleRef(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3957
void setAttribs(const HtmlAttribList &attribs)
Definition docnode.h:1113
HtmlAttribList m_attribs
Definition docnode.h:1118
bool m_isFirst
Definition docnode.h:1116
Token parse()
Definition docnode.cpp:5714
void handleVhdlFlow()
Definition docnode.cpp:3909
Token handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs, int level)
Definition docnode.cpp:4129
void handleShowDate(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3747
bool m_isLast
Definition docnode.h:1117
Token handleXRefItem()
Definition docnode.cpp:3725
Token handleHtmlEndTag(const QCString &tagName)
Definition docnode.cpp:5441
Token handleStartCode()
Definition docnode.cpp:4147
bool injectToken(Token tok, const QCString &tokText)
Definition docnode.cpp:4140
DocNodeList m_paramTypes
Definition docnode.h:1142
DocNodeList m_paragraphs
Definition docnode.h:1140
bool m_isFirst
Definition docnode.h:1145
DocParamSect::Direction m_dir
Definition docnode.h:1144
const DocNodeList & parameters() const
Definition docnode.h:1127
bool isFirst() const
Definition docnode.h:1134
const DocNodeList & paramTypes() const
Definition docnode.h:1128
void markFirst(bool b=TRUE)
Definition docnode.h:1132
DocParamSect::Type type() const
Definition docnode.h:1130
Token parseXml(const QCString &paramName)
Definition docnode.cpp:3321
void markLast(bool b=TRUE)
Definition docnode.h:1133
bool isLast() const
Definition docnode.h:1135
Token parse(const QCString &cmdName)
Definition docnode.cpp:3241
bool m_isLast
Definition docnode.h:1146
DocParamList(DocParser *parser, DocNodeVariant *parent, DocParamSect::Type t, DocParamSect::Direction d)
Definition docnode.h:1125
DocParamSect::Type m_type
Definition docnode.h:1143
DocParamSect::Direction direction() const
Definition docnode.h:1131
DocNodeList m_params
Definition docnode.h:1141
const DocNodeList & paragraphs() const
Definition docnode.h:1129
bool hasInOutSpecifier() const
Definition docnode.h:1069
DocParamSect(DocParser *parser, DocNodeVariant *parent, Type t)
Definition docnode.h:1064
friend class DocParamList
Definition docnode.h:1054
bool m_hasTypeSpecifier
Definition docnode.h:1075
Token parse(const QCString &cmdName, bool xmlContext, Direction d)
Definition docnode.cpp:3389
bool m_hasInOutSpecifier
Definition docnode.h:1074
bool hasTypeSpecifier() const
Definition docnode.h:1070
Type type() const
Definition docnode.h:1068
DocPlantUmlFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1240
QCString anchor() const
Definition docnode.h:785
QCString m_file
Definition docnode.h:798
SectionType m_sectionType
Definition docnode.h:796
SectionType sectionType() const
Definition docnode.h:787
QCString m_text
Definition docnode.h:802
QCString relPath() const
Definition docnode.h:783
QCString targetTitle() const
Definition docnode.h:786
bool isSubPage() const
Definition docnode.h:792
bool refToTable() const
Definition docnode.h:791
QCString file() const
Definition docnode.h:782
QCString m_ref
Definition docnode.h:800
bool refToAnchor() const
Definition docnode.h:789
QCString ref() const
Definition docnode.h:784
QCString m_relPath
Definition docnode.h:799
DocRef(DocParser *parser, DocNodeVariant *parent, const QCString &target, const QCString &context)
Definition docnode.cpp:708
void parse(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:889
RefType m_refType
Definition docnode.h:795
QCString m_anchor
Definition docnode.h:801
bool refToSection() const
Definition docnode.h:790
bool m_isSubPage
Definition docnode.h:797
bool hasLinkText() const
Definition docnode.h:788
bool singleLine() const
Definition docnode.h:1317
bool indent() const
Definition docnode.h:1316
bool m_singleLine
Definition docnode.h:1322
void parse()
Definition docnode.cpp:6303
DocRoot(DocParser *parser, bool indent, bool sl)
Definition docnode.h:1313
bool m_indent
Definition docnode.h:1321
bool isEmpty() const
Definition docnode.h:1318
QCString m_file
Definition docnode.h:951
bool refToTable() const
Definition docnode.h:943
QCString m_target
Definition docnode.h:948
QCString relPath() const
Definition docnode.h:941
bool m_isSubPage
Definition docnode.h:950
QCString m_anchor
Definition docnode.h:954
QCString target() const
Definition docnode.h:938
QCString file() const
Definition docnode.h:939
QCString m_ref
Definition docnode.h:953
DocSecRefItem(DocParser *parser, DocNodeVariant *parent, const QCString &target)
Definition docnode.cpp:534
QCString m_relPath
Definition docnode.h:952
QCString anchor() const
Definition docnode.h:940
RefType m_refType
Definition docnode.h:949
QCString ref() const
Definition docnode.h:942
bool isSubPage() const
Definition docnode.h:944
DocSecRefList(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:961
std::unique_ptr< DocNodeVariant > m_title
Definition docnode.h:928
QCString m_id
Definition docnode.h:927
QCString file() const
Definition docnode.h:922
QCString m_file
Definition docnode.h:930
int level() const
Definition docnode.h:918
Token parse()
Definition docnode.cpp:6019
DocSection(DocParser *parser, DocNodeVariant *parent, int level, const QCString &id)
Definition docnode.h:916
QCString id() const
Definition docnode.h:921
QCString anchor() const
Definition docnode.h:920
const DocNodeVariant * title() const
Definition docnode.h:919
QCString m_anchor
Definition docnode.h:929
int m_level
Definition docnode.h:926
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:992
Token parse()
Definition docnode.cpp:2952
std::unique_ptr< DocNodeVariant > m_paragraph
Definition docnode.h:1158
const DocNodeVariant * paragraph() const
Definition docnode.h:1155
DocSimpleListItem(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:2933
QCString typeString() const
Definition docnode.cpp:3212
Type type() const
Definition docnode.h:1026
Token parse(bool userTitle, bool needsSeparator)
Definition docnode.cpp:3102
Token parseRcs()
Definition docnode.cpp:3139
DocSimpleSect(DocParser *parser, DocNodeVariant *parent, Type t)
Definition docnode.cpp:3092
const DocNodeVariant * title() const
Definition docnode.h:1033
Token parseXml()
Definition docnode.cpp:3156
void appendLinkWord(const QCString &word)
Definition docnode.cpp:3192
bool hasTitle() const
Definition docnode.cpp:3097
std::unique_ptr< DocNodeVariant > m_title
Definition docnode.h:1037
DocSimpleSectSep(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:1046
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:125
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:153
DocText(DocParser *parser)
Definition docnode.h:1304
void parse()
Definition docnode.cpp:6189
bool isEmpty() const
Definition docnode.h:1306
void parse()
Definition docnode.cpp:3061
bool isEmpty() const
Definition docnode.h:614
void parseFromString(DocNodeVariant *, const QCString &title)
Definition docnode.cpp:3079
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:258
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:753
DocVhdlFlow(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:1284
void parse()
Definition docnode.cpp:1288
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:180
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:473
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:478
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:1425
constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
returns true iff v holds one of types passed as template parameters
Definition docnode.h:1364
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:67
DocNodeList * call_method_children(DocNodeVariant *v)
Definition docnode.h:1383
#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:1328
std::unique_ptr< DocNodeVariant > createDocNode(Args &&...args)
Definition docnode.h:1493
void dumpDocNodeList(const DocNodeList &children)
Definition docnode.h:1449
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:848
void append(Args &&... args)
Append a new DocNodeVariant to the list by constructing it with type T and parameters Args.
Definition docnode.h:1397
T * get_last()
Returns a pointer to the last element in the list if that element exists and holds a T,...
Definition docnode.h:1408
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:1354
static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
Definition docnode.h:1345