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();
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 handleILine(char cmdChar,const QCString &cmdName);
1108 void handleIFile(char cmdChar,const QCString &cmdName);
1109 void handleShowDate(char cmdChar,const QCString &cmdName);
1111 Token handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level);
1112
1113 bool injectToken(Token tok,const QCString &tokText);
1114 const HtmlAttribList &attribs() const { return m_attribs; }
1116
1117 private:
1118 bool m_isFirst = false;
1119 bool m_isLast = false;
1121};
1122
1123/** Node representing a parameter list. */
1150
1151/** Node representing a simple list item */
1153{
1154 public:
1156 Token parse();
1157 const DocNodeVariant *paragraph() const { return m_paragraph.get(); }
1158
1159 private:
1160 std::unique_ptr<DocNodeVariant> m_paragraph;
1161};
1162
1163/** Node representing a HTML list item */
1165{
1166 public:
1169 int itemNumber() const { return m_itemNum; }
1170 const HtmlAttribList &attribs() const { return m_attribs; }
1171 Token parse();
1172 Token parseXml();
1173
1174 private:
1176 int m_itemNum = 0;
1177};
1178
1179/** Node representing a HTML description data */
1190
1191/** Node representing a HTML table cell */
1193{
1194 friend class DocHtmlTable;
1195 public:
1200 bool isHeading() const { return m_isHeading; }
1201 bool isFirst() const { return m_isFirst; }
1202 bool isLast() const { return m_isLast; }
1203 void markFirst(bool v=TRUE) { m_isFirst=v; }
1204 void markLast(bool v=TRUE) { m_isLast=v; }
1205 const HtmlAttribList &attribs() const { return m_attribs; }
1206 Token parse();
1207 Token parseXml();
1208 uint32_t rowIndex() const { return m_rowIdx; }
1209 uint32_t columnIndex() const { return m_colIdx; }
1210 uint32_t rowSpan() const;
1211 uint32_t colSpan() const;
1212 Alignment alignment() const;
1213 Valignment valignment() const;
1214
1215 private:
1216 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1217 void setColumnIndex(uint32_t idx) { m_colIdx = idx; }
1218 bool m_isHeading = false;
1219 bool m_isFirst = false;
1220 bool m_isLast = false;
1222 uint32_t m_rowIdx = static_cast<uint32_t>(-1);
1223 uint32_t m_colIdx = static_cast<uint32_t>(-1);
1224};
1225
1226/** Node representing a HTML table caption */
1228{
1229 public:
1231 const HtmlAttribList &attribs() const { return m_attribs; }
1232 Token parse();
1233 bool hasCaptionId() const { return m_hasCaptionId; }
1234 QCString file() const { return m_file; }
1235 QCString anchor() const { return m_anchor; }
1236
1237 private:
1239 bool m_hasCaptionId = false;
1242};
1243
1244/** Node representing a HTML table row */
1246{
1247 friend class DocHtmlTable;
1248 public:
1251 size_t numCells() const { return children().size(); }
1252 const HtmlAttribList &attribs() const { return m_attribs; }
1253 Token parse();
1254 Token parseXml(bool header);
1255 bool isHeading() const;
1256 void setVisibleCells(uint32_t n) { m_visibleCells = n; }
1257 uint32_t visibleCells() const { return m_visibleCells; }
1258 uint32_t rowIndex() const { return m_rowIdx; }
1259
1260 private:
1261 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1263 uint32_t m_visibleCells = 0;
1264 uint32_t m_rowIdx = static_cast<uint32_t>(-1);
1265};
1266
1267/** Node representing a HTML table */
1269{
1270 public:
1273 size_t numRows() const { return children().size(); }
1274 bool hasCaption() const;
1275 const HtmlAttribList &attribs() const { return m_attribs; }
1276 Token parse();
1277 Token parseXml();
1278 size_t numColumns() const { return m_numCols; }
1279 const DocNodeVariant *caption() const;
1280 const DocNodeVariant *firstRow() const;
1281
1282 private:
1283 void computeTableGrid();
1284 std::unique_ptr<DocNodeVariant> m_caption;
1286 size_t m_numCols = 0;
1287};
1288
1289/** Node representing an HTML blockquote */
1301
1302/** Root node of a text fragment */
1304{
1305 public:
1307 void parse();
1308 bool isEmpty() const { return children().empty(); }
1309};
1310
1311/** Root node of documentation tree */
1313{
1314 public:
1317 void parse();
1318 bool indent() const { return m_indent; }
1319 bool singleLine() const { return m_singleLine; }
1320 bool isEmpty() const { return children().empty(); }
1321
1322 private:
1323 bool m_indent = false;
1324 bool m_singleLine = false;
1325};
1326
1327//--------------------------------------------------------------------------------------
1328
1329/// returns the parent node of a given node \a n or nullptr if the node has no parent.
1331{
1332 return n ? std::visit([](auto &&x)->decltype(auto) { return x.parent(); }, *n) : nullptr;
1333}
1334
1335/// returns the parent node of a given node \a n or nullptr if the node has no parent.
1336constexpr const DocNodeVariant *parent(const DocNodeVariant *n)
1337{
1338 return n ? std::visit([](auto &&x)->decltype(auto) { return x.parent(); }, *n) : nullptr;
1339}
1340
1341namespace details
1342{
1343
1344template<class T,class... Ts>
1345struct Impl
1346{
1347 static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
1348 {
1349 return std::holds_alternative<T>(v) || Impl<Ts...>::holds_one_of_alternatives(v);
1350 }
1351};
1352
1353template<class T>
1354struct Impl<T>
1355{
1356 static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
1357 {
1358 return std::holds_alternative<T>(v);
1359 }
1360};
1361
1362} // namespace details
1363
1364/// returns true iff \a v holds one of types passed as template parameters
1365template<class... Ts>
1370
1371namespace details
1372{
1373
1374// Helper type trait to check if a type has member function children(). Default case is false.
1375template <typename T, typename = void>
1376struct has_method_children : std::false_type {};
1377
1378// Use SFINAE to have a partial template specialization derived from std::true_type in case T has method children()
1379template <typename T>
1380struct has_method_children<T, std::void_t<decltype(std::declval<T>().children())>> : std::true_type {};
1381
1382} // namespace details
1383
1384// Call children() on variant v if the contained type has this method, otherwise return nullptr
1386{
1387 return std::visit([](auto&& value) -> DocNodeList* {
1388 if constexpr (details::has_method_children<decltype(value)>::value) {
1389 return &value.children();
1390 } else {
1391 return nullptr;
1392 }
1393 }, *v);
1394}
1395
1396//----------------- DocNodeList ---------------------------------------
1397
1398template<class T,class...Args>
1399inline void DocNodeList::append(Args&&... args)
1400{
1401 // add a DocNodeVariant to the list containing an node T as its active member.
1402 emplace_back(T(std::forward<Args>(args)...));
1403 // store a pointer to the variant holding node T inside the node itself.
1404 // Since DocNodeList is a GrowVector this reference will remain valid even if new
1405 // elements are added (which would not be the case if a std::vector was used)
1406 std::get_if<T>(&back())->setThisVariant(&back());
1407}
1408
1409template<class T>
1411{
1412 return std::get_if<T>(&back());
1413}
1414
1415// ---------------- Debug helpers -------------------------------
1416
1417#define DN(x) #x
1418#define DN_SEP ,
1419inline const char *docNodeName(const DocNodeVariant &v)
1420{
1421 static const char *table[] = { DOC_NODES };
1422 return table[v.index()];
1423}
1424#undef DN
1425#undef DN_SEP
1426
1427inline void dumpDocNodeSizes()
1428{
1429#define DN(x) #x
1430#define DN_SEP ,
1431 static const char *tableWithNames[] = { DOC_NODES };
1432#undef DN
1433#undef DN_SEP
1434
1435#define DN(x) sizeof(x)
1436#define DN_SEP ,
1437 static size_t tableWithSizes[] = { DOC_NODES };
1438#undef DN
1439#undef DN_SEP
1440
1441 size_t maxSize=0;
1442 printf("DocNodeVariant(\n");
1443 for (size_t i=0;i<sizeof(tableWithNames)/sizeof(tableWithNames[0]);i++)
1444 {
1445 printf(" /* %2zu */ sizeof(%s)=%zu\n",i,tableWithNames[i],tableWithSizes[i]);
1446 if (tableWithSizes[i]>maxSize) maxSize = tableWithSizes[i];
1447 }
1448 printf(")=%zu\n",maxSize);
1449}
1450
1451inline void dumpDocNodeList(const DocNodeList &children)
1452{
1453 printf("children=[\n");
1454 for (const auto &child : children)
1455 {
1456 const DocWord *w = std::get_if<DocWord>(&child);
1457 printf(" %s (%p) %s\n",docNodeName(child),(void*)&child,qPrint(w?w->word():""));
1458 }
1459 printf("]\n");
1460}
1461
1462//----------------------------------------------------------------------------------
1463
1464/** Class representing the abstract syntax tree of a documentation block */
1466{
1467 public:
1468 // Note that r can only be a rvalue, not a general forwarding reference.
1469 // The compiler will error on lvalues because DotNodeVariant doesn't have a copy constructor
1470 template<class DocNode>
1471 DocNodeAST(DocNode &&r) : root(std::move(r))
1472 {
1473 std::get_if<DocNode>(&root)->setThisVariant(&root);
1474 }
1475 bool isEmpty() const override
1476 {
1477 if (std::holds_alternative<DocRoot>(root))
1478 {
1479 return std::get<DocRoot>(root).isEmpty();
1480 }
1481 else if (std::holds_alternative<DocText>(root))
1482 {
1483 return std::get<DocText>(root).isEmpty();
1484 }
1485 else if (std::holds_alternative<DocTitle>(root))
1486 {
1487 return std::get<DocTitle>(root).isEmpty();
1488 }
1489 return false;
1490 }
1492};
1493
1494template<class T,class... Args>
1495std::unique_ptr<DocNodeVariant> createDocNode(Args&&...args)
1496{
1497 auto node = std::make_unique<DocNodeVariant>(T(std::forward<Args>(args)...));
1498 std::get_if<T>(node.get())->setThisVariant(node.get());
1499 return node;
1500}
1501
1502#endif
The common base class of all entity definitions found in the sources.
Definition definition.h:76
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:2932
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:2925
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:2885
QCString m_anchor
Definition docnode.h:260
QCString getText() const
Definition docnode.cpp:939
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:903
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:1175
DocDiaFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1168
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:1097
DocDotFile(DocParser *parser, DocNodeVariant *parent, const QCString &name, const QCString &context, const QCString &srcFile, int srcLine)
Definition docnode.cpp:1090
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:1489
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:1293
const HtmlAttribList & attribs() const
Definition docnode.h:1296
HtmlAttribList m_attribs
Definition docnode.h:1299
bool hasCaptionId() const
Definition docnode.h:1233
HtmlAttribList m_attribs
Definition docnode.h:1238
bool m_hasCaptionId
Definition docnode.h:1239
DocHtmlCaption(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.cpp:1696
QCString m_file
Definition docnode.h:1240
const HtmlAttribList & attribs() const
Definition docnode.h:1231
QCString anchor() const
Definition docnode.h:1235
QCString file() const
Definition docnode.h:1234
QCString m_anchor
Definition docnode.h:1241
Valignment valignment() const
Definition docnode.cpp:1900
friend class DocHtmlTable
Definition docnode.h:1194
void setColumnIndex(uint32_t idx)
Definition docnode.h:1217
bool isFirst() const
Definition docnode.h:1201
Token parseXml()
Definition docnode.cpp:1804
uint32_t columnIndex() const
Definition docnode.h:1209
void setRowIndex(uint32_t idx)
Definition docnode.h:1216
void markLast(bool v=TRUE)
Definition docnode.h:1204
uint32_t rowSpan() const
Definition docnode.cpp:1838
uint32_t rowIndex() const
Definition docnode.h:1208
DocHtmlCell(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, bool isHeading)
Definition docnode.h:1198
uint32_t m_colIdx
Definition docnode.h:1223
bool m_isFirst
Definition docnode.h:1219
void markFirst(bool v=TRUE)
Definition docnode.h:1203
Alignment alignment() const
Definition docnode.cpp:1862
bool isLast() const
Definition docnode.h:1202
bool isHeading() const
Definition docnode.h:1200
bool m_isLast
Definition docnode.h:1220
const HtmlAttribList & attribs() const
Definition docnode.h:1205
HtmlAttribList m_attribs
Definition docnode.h:1221
bool m_isHeading
Definition docnode.h:1218
Token parse()
Definition docnode.cpp:1770
uint32_t m_rowIdx
Definition docnode.h:1222
uint32_t colSpan() const
Definition docnode.cpp:1850
DocHtmlDescData(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:1183
const HtmlAttribList & attribs() const
Definition docnode.h:1184
HtmlAttribList m_attribs
Definition docnode.h:1188
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:1479
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:1304
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:2732
const HtmlAttribList & attribs() const
Definition docnode.h:1006
HtmlAttribList m_attribs
Definition docnode.h:1012
Token parse()
Definition docnode.cpp:2657
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:1170
HtmlAttribList m_attribs
Definition docnode.h:1175
int itemNumber() const
Definition docnode.h:1169
DocHtmlListItem(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs, int num)
Definition docnode.h:1167
Token parseXml(bool header)
Definition docnode.cpp:2075
uint32_t m_rowIdx
Definition docnode.h:1264
void setVisibleCells(uint32_t n)
Definition docnode.h:1256
friend class DocHtmlTable
Definition docnode.h:1247
DocHtmlRow(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1249
HtmlAttribList m_attribs
Definition docnode.h:1262
bool isHeading() const
Definition docnode.cpp:1922
size_t numCells() const
Definition docnode.h:1251
uint32_t m_visibleCells
Definition docnode.h:1263
uint32_t rowIndex() const
Definition docnode.h:1258
const HtmlAttribList & attribs() const
Definition docnode.h:1252
void setRowIndex(uint32_t idx)
Definition docnode.h:1261
uint32_t visibleCells() const
Definition docnode.h:1257
Token parse()
Definition docnode.cpp:1968
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:1273
Token parseXml()
Definition docnode.cpp:2242
std::unique_ptr< DocNodeVariant > m_caption
Definition docnode.h:1284
Token parse()
Definition docnode.cpp:2155
void computeTableGrid()
determines the location of all cells in a grid, resolving row and column spans.
Definition docnode.cpp:2299
size_t numColumns() const
Definition docnode.h:1278
size_t m_numCols
Definition docnode.h:1286
const DocNodeVariant * caption() const
Definition docnode.cpp:2141
const HtmlAttribList & attribs() const
Definition docnode.h:1275
bool hasCaption() const
Definition docnode.cpp:2136
HtmlAttribList m_attribs
Definition docnode.h:1285
DocHtmlTable(DocParser *parser, DocNodeVariant *parent, const HtmlAttribList &attribs)
Definition docnode.h:1271
const DocNodeVariant * firstRow() const
Definition docnode.cpp:2146
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:1281
@ DocBook
Definition docnode.h:644
std::unique_ptr< Private > p
Definition docnode.h:675
void parse()
Definition docnode.cpp:1296
bool isInlineImage() const
Definition docnode.h:654
bool isSVG() const
Definition docnode.cpp:1287
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:1599
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:1539
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:670
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:1128
bool parse()
Definition docnode.cpp:1135
bool isEmpty() const override
Definition docnode.h:1475
DocNodeVariant root
Definition docnode.h:1491
DocNodeAST(DocNode &&r)
Definition docnode.h:1471
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
@ Section
Definition docnode.h:110
@ Anchor
Definition docnode.h:110
DocParBlock(DocParser *parser, DocNodeVariant *parent)
Definition docnode.h:981
Token parse()
Definition docnode.cpp:2826
bool isEmpty() const
Definition docnode.h:1084
Token handleSimpleSection(DocSimpleSect::Type t, bool xmlContext=FALSE)
Definition docnode.cpp:3354
void handleLink(const QCString &cmdName, bool isJavaLink)
Definition docnode.cpp:3869
void handleInheritDoc()
Definition docnode.cpp:4127
void handleCite(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3407
DocPara(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:3348
void handleInclude(const QCString &cmdName, DocInclude::Type t)
Definition docnode.cpp:3937
Token handleCommand(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:4164
void handleDoxyConfig(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3543
void handleSection(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:4042
void handleFile(const QCString &cmdName)
Definition docnode.cpp:3830
bool isLast() const
Definition docnode.h:1088
void handleIFile(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3746
Token handleParamSection(const QCString &cmdName, DocParamSect::Type t, bool xmlContext, int direction)
Definition docnode.cpp:3384
const HtmlAttribList & attribs() const
Definition docnode.h:1114
void markLast(bool v=TRUE)
Definition docnode.h:1086
Token handleHtmlStartTag(const QCString &tagName, const HtmlAttribList &tagHtmlAttribs)
Definition docnode.cpp:4914
void handleEmoji(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3512
void handleIncludeOperator(const QCString &cmdName, DocIncOperator::Type t)
Definition docnode.cpp:3770
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:3910
void handleILine(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3732
void setAttribs(const HtmlAttribList &attribs)
Definition docnode.h:1115
HtmlAttribList m_attribs
Definition docnode.h:1120
bool m_isFirst
Definition docnode.h:1118
Token parse()
Definition docnode.cpp:5660
void handleVhdlFlow()
Definition docnode.cpp:3862
Token handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs, int level)
Definition docnode.cpp:4073
void handleShowDate(char cmdChar, const QCString &cmdName)
Definition docnode.cpp:3662
bool m_isLast
Definition docnode.h:1119
Token handleXRefItem()
Definition docnode.cpp:3641
Token handleHtmlEndTag(const QCString &tagName)
Definition docnode.cpp:5387
Token handleStartCode()
Definition docnode.cpp:4091
bool injectToken(Token tok, const QCString &tokText)
Definition docnode.cpp:4084
DocNodeList m_paramTypes
Definition docnode.h:1144
DocNodeList m_paragraphs
Definition docnode.h:1142
bool m_isFirst
Definition docnode.h:1147
DocParamSect::Direction m_dir
Definition docnode.h:1146
const DocNodeList & parameters() const
Definition docnode.h:1129
bool isFirst() const
Definition docnode.h:1136
const DocNodeList & paramTypes() const
Definition docnode.h:1130
void markFirst(bool b=TRUE)
Definition docnode.h:1134
DocParamSect::Type type() const
Definition docnode.h:1132
Token parseXml(const QCString &paramName)
Definition docnode.cpp:3237
void markLast(bool b=TRUE)
Definition docnode.h:1135
bool isLast() const
Definition docnode.h:1137
Token parse(const QCString &cmdName)
Definition docnode.cpp:3158
bool m_isLast
Definition docnode.h:1148
DocParamList(DocParser *parser, DocNodeVariant *parent, DocParamSect::Type t, DocParamSect::Direction d)
Definition docnode.h:1127
DocParamSect::Type m_type
Definition docnode.h:1145
DocParamSect::Direction direction() const
Definition docnode.h:1133
DocNodeList m_params
Definition docnode.h:1143
const DocNodeList & paragraphs() const
Definition docnode.h:1131
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:3305
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:1207
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
void parse()
Definition docnode.cpp:857
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:705
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:1319
bool indent() const
Definition docnode.h:1318
bool m_singleLine
Definition docnode.h:1324
void parse()
Definition docnode.cpp:6249
DocRoot(DocParser *parser, bool indent, bool sl)
Definition docnode.h:1315
bool m_indent
Definition docnode.h:1323
bool isEmpty() const
Definition docnode.h:1320
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:5965
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:2870
std::unique_ptr< DocNodeVariant > m_paragraph
Definition docnode.h:1160
const DocNodeVariant * paragraph() const
Definition docnode.h:1157
DocSimpleListItem(DocParser *parser, DocNodeVariant *parent)
Definition docnode.cpp:2851
QCString typeString() const
Definition docnode.cpp:3129
Type type() const
Definition docnode.h:1026
Token parse(bool userTitle, bool needsSeparator)
Definition docnode.cpp:3019
Token parseRcs()
Definition docnode.cpp:3056
DocSimpleSect(DocParser *parser, DocNodeVariant *parent, Type t)
Definition docnode.cpp:3009
const DocNodeVariant * title() const
Definition docnode.h:1033
Token parseXml()
Definition docnode.cpp:3073
void appendLinkWord(const QCString &word)
Definition docnode.cpp:3109
bool hasTitle() const
Definition docnode.cpp:3014
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:1306
void parse()
Definition docnode.cpp:6135
bool isEmpty() const
Definition docnode.h:1308
void parse()
Definition docnode.cpp:2978
bool isEmpty() const
Definition docnode.h:614
void parseFromString(DocNodeVariant *, const QCString &title)
Definition docnode.cpp:2996
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:1251
void parse()
Definition docnode.cpp:1255
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:1427
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
constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
returns true iff v holds one of types passed as template parameters
Definition docnode.h:1366
DocNodeList * call_method_children(DocNodeVariant *v)
Definition docnode.h:1385
#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:1330
std::unique_ptr< DocNodeVariant > createDocNode(Args &&...args)
Definition docnode.h:1495
void dumpDocNodeList(const DocNodeList &children)
Definition docnode.h:1451
constexpr const char * docNodeName(const DocWord &)
Definition docnode.h:76
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: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:816
void append(Args &&... args)
Append a new DocNodeVariant to the list by constructing it with type T and parameters Args.
Definition docnode.h:1399
T * get_last()
Returns a pointer to the last element in the list if that element exists and holds a T,...
Definition docnode.h:1410
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:1356
static constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
Definition docnode.h:1347