26 #include "docvisitor.h" 27 #include "docparser.h" 28 #include "htmlattrib.h" 29 #include "htmlentity.h" 30 #include "growvector.h" 40 DN(DocWord) DN_SEP DN(DocLinkedWord) DN_SEP DN(DocURL) DN_SEP DN(DocLineBreak) DN_SEP DN(DocHorRuler) DN_SEP \ 41 DN(DocAnchor) DN_SEP DN(DocCite) DN_SEP DN(DocStyleChange) DN_SEP DN(DocSymbol) DN_SEP DN(DocEmoji) DN_SEP \ 42 DN(DocWhiteSpace) DN_SEP DN(DocSeparator) DN_SEP DN(DocVerbatim) DN_SEP DN(DocInclude) DN_SEP DN(DocIncOperator) DN_SEP \ 43 DN(DocFormula) DN_SEP DN(DocIndexEntry) DN_SEP DN(DocAutoList) DN_SEP DN(DocAutoListItem) DN_SEP DN(DocTitle) DN_SEP \ 44 DN(DocXRefItem) DN_SEP DN(DocImage) DN_SEP DN(DocDotFile) DN_SEP DN(DocMscFile) DN_SEP DN(DocDiaFile) DN_SEP \ 45 DN(DocVhdlFlow) DN_SEP DN(DocLink) DN_SEP DN(DocRef) DN_SEP DN(DocInternalRef) DN_SEP DN(DocHRef) DN_SEP \ 46 DN(DocHtmlHeader) DN_SEP DN(DocHtmlDescTitle) DN_SEP DN(DocHtmlDescList) DN_SEP DN(DocSection) DN_SEP DN(DocSecRefItem) DN_SEP \ 47 DN(DocSecRefList) DN_SEP DN(DocInternal) DN_SEP DN(DocParBlock) DN_SEP DN(DocSimpleList) DN_SEP DN(DocHtmlList) DN_SEP \ 48 DN(DocSimpleSect) DN_SEP DN(DocSimpleSectSep) DN_SEP DN(DocParamSect) DN_SEP DN(DocPara) DN_SEP DN(DocParamList) DN_SEP \ 49 DN(DocSimpleListItem) DN_SEP DN(DocHtmlListItem) DN_SEP DN(DocHtmlDescData) DN_SEP DN(DocHtmlCell) DN_SEP DN(DocHtmlCaption) DN_SEP \ 50 DN(DocHtmlRow) DN_SEP DN(DocHtmlTable) DN_SEP DN(DocHtmlBlockQuote) DN_SEP DN(DocText) DN_SEP DN(DocRoot) DN_SEP \ 51 DN(DocHtmlDetails) DN_SEP DN(DocHtmlSummary) \ 54 #define DN(x) class x; 63 using DocNodeVariant = std::variant<
70 #define DN(x) constexpr const char *docNodeName(const x &) { return #x; } 91 DocNodeVariant *
parent() {
return m_parent; }
92 const DocNodeVariant *
parent()
const {
return m_parent; }
94 DocNodeVariant *thisVariant() {
return m_thisVariant; }
95 const DocNodeVariant *thisVariant()
const {
return m_thisVariant; }
97 void setThisVariant(DocNodeVariant *thisVariant) { m_thisVariant=thisVariant; }
100 const DocParser *parser()
const {
return m_parser; }
111 enum RefType { Unknown, Anchor, Section, Table };
113 bool m_insidePre =
false;
115 DocNodeVariant *m_parent;
116 DocNodeVariant *m_thisVariant =
nullptr;
124 template<
class T,
class...Args>
125 void append(Args&&... args);
145 const DocNodeList &children()
const {
return m_children; }
157 QCString word()
const {
return m_word; }
171 QCString word()
const {
return m_word; }
172 QCString file()
const {
return m_file; }
173 QCString relPath()
const {
return m_relPath; }
174 QCString ref()
const {
return m_ref; }
175 QCString anchor()
const {
return m_anchor; }
176 QCString tooltip()
const {
return m_tooltip; }
192 DocNode(parser,parent), m_url(url), m_isEmail(isEmail) {}
193 QCString url()
const {
return m_url; }
194 bool isEmail()
const {
return m_isEmail; }
198 bool m_isEmail =
false;
207 :
DocNode(parser,parent), m_attribs(attribs) {}
220 :
DocNode(parser,parent), m_attribs(attribs) {}
233 QCString anchor()
const {
return m_anchor; }
234 QCString file()
const {
return m_file; }
249 QCString file()
const {
return m_file; }
250 QCString relPath()
const {
return m_relPath; }
251 QCString ref()
const {
return m_ref; }
252 QCString anchor()
const {
return m_anchor; }
253 QCString text()
const {
return m_text; }
268 enum Style { Bold = (1<<0),
274 Superscript = (1<<6),
275 Preformatted = (1<<7),
288 :
DocNode(parser,parent), m_position(position), m_style(s), m_enable(enable)
290 if (attribs) m_attribs=*attribs;
291 m_tagName = tagName.lower();
293 Style style()
const {
return m_style; }
294 const char *styleString()
const;
295 bool enable()
const {
return m_enable; }
296 size_t position()
const {
return m_position; }
298 QCString tagName()
const {
return m_tagName; }
301 size_t m_position = 0;
302 Style m_style = Bold;
303 bool m_enable =
false;
313 :
DocNode(parser,parent), m_symbol(s) {}
314 HtmlEntityMapper::SymType symbol()
const {
return m_symbol; }
315 static HtmlEntityMapper::SymType decodeSymbol(
const QCString &symName);
318 HtmlEntityMapper::SymType m_symbol = HtmlEntityMapper::Sym_Unknown;
326 QCString name()
const {
return m_symName; }
327 int index()
const {
return m_index; }
339 :
DocNode(parser,parent), m_chars(chars) {}
340 QCString chars()
const {
return m_chars; }
350 :
DocNode(parser,parent), m_chars(chars) {}
351 QCString chars()
const {
return m_chars; }
360 enum Type { Code, HtmlOnly, ManOnly, LatexOnly, RtfOnly, XmlOnly, Verbatim, Dot, Msc, DocbookOnly, PlantUML, JavaDocCode, JavaDocLiteral };
362 const QCString &text, Type t,
bool isExample,
364 Type type()
const {
return p->type; }
365 QCString text()
const {
return p->text; }
366 QCString context()
const {
return p->context; }
367 bool isExample()
const {
return p->isExample; }
368 QCString exampleFile()
const {
return p->exampleFile; }
369 QCString relPath()
const {
return p->relPath; }
370 QCString language()
const {
return p->lang; }
371 bool isBlock()
const {
return p->isBlock; }
372 bool hasCaption()
const {
return !p->children.empty(); }
373 QCString width()
const {
return p->width; }
374 QCString height()
const {
return p->height; }
375 QCString engine()
const {
return p->engine; }
376 bool useBitmap()
const {
return p->useBitmap; }
377 const DocNodeList &children()
const {
return p->children; }
379 QCString srcFile()
const {
return p->srcFile; }
380 int srcLine()
const {
return p->srcLine; }
381 void setText(
const QCString &t) { p->text=t; }
382 void setWidth(
const QCString &w) { p->width=w; }
383 void setHeight(
const QCString &h) { p->height=h; }
384 void setEngine(
const QCString &e) { p->engine=e; }
385 void setUseBitmap(
const bool &u) { p->useBitmap=u; }
386 void setLocation(
const QCString &file,
int line) { p->srcFile=file; p->srcLine=line; }
391 Private(
const QCString &context_,
const QCString &text_, Type type_,
bool isExample_,
393 : context(context_), text(text_), type(type_), isExample(isExample_),
394 exampleFile(exampleFile_), relPath(relPath_), lang(lang_), isBlock(isBlock_) {}
406 bool useBitmap=
false;
411 std::unique_ptr<Private> p;
419 enum Type { Include, DontInclude, VerbInclude, HtmlInclude, LatexInclude,
420 IncWithLines, Snippet , IncludeDoc, SnippetDoc, SnipWithLines,
421 DontIncWithLines, RtfInclude, ManInclude, DocbookInclude, XmlInclude,
425 bool isExample,
const QCString &exampleFile,
426 const QCString &blockId,
bool isBlock)
427 :
DocNode(parser,parent), m_file(file), m_context(context), m_type(t),
428 m_isExample(isExample), m_isBlock(isBlock),
429 m_exampleFile(exampleFile), m_blockId(blockId) {}
430 QCString file()
const {
return m_file; }
431 QCString extension()
const {
int i=m_file.findRev(
'.');
433 return m_file.right(m_file.length()-
static_cast<uint32_t
>(i));
437 Type type()
const {
return m_type; }
438 QCString text()
const {
return m_text; }
439 QCString context()
const {
return m_context; }
440 QCString blockId()
const {
return m_blockId; }
441 bool isExample()
const {
return m_isExample; }
442 QCString exampleFile()
const {
return m_exampleFile; }
443 bool isBlock()
const {
return m_isBlock; }
461 enum Type { Line, SkipLine, Skip, Until };
464 :
DocNode(parser,parent), m_type(t), m_pattern(pat), m_context(context),
465 m_isFirst(FALSE), m_isLast(FALSE),
466 m_isExample(isExample), m_exampleFile(exampleFile) {}
467 Type type()
const {
return m_type; }
468 const char *typeAsString()
const 472 case Line:
return "line";
473 case SkipLine:
return "skipline";
474 case Skip:
return "skip";
475 case Until:
return "until";
479 int line()
const {
return m_line; }
480 bool showLineNo()
const {
return m_showLineNo; }
481 QCString text()
const {
return m_text; }
482 QCString pattern()
const {
return m_pattern; }
483 QCString context()
const {
return m_context; }
484 bool isFirst()
const {
return m_isFirst; }
485 bool isLast()
const {
return m_isLast; }
486 void markFirst(
bool v=TRUE) { m_isFirst = v; }
487 void markLast(
bool v=TRUE) { m_isLast = v; }
488 bool isExample()
const {
return m_isExample; }
489 QCString exampleFile()
const {
return m_exampleFile; }
490 QCString includeFileName()
const {
return m_includeFileName; }
496 bool m_showLineNo =
false;
500 bool m_isFirst =
false;
501 bool m_isLast =
false;
502 bool m_isExample =
false;
512 QCString name()
const {
return m_name; }
513 QCString text()
const {
return m_text; }
514 QCString relPath()
const {
return m_relPath; }
515 int id()
const {
return m_id; }
516 bool isInline()
const 518 if (m_text.length()>1 && m_text.at(0)==
'\\' && m_text.at(1)==
'[')
return false;
519 if (m_text.startsWith(
"\\begin{"))
return false;
535 :
DocNode(parser,parent), m_scope(scope), m_member(md) {}
537 const Definition *scope()
const {
return m_scope; }
538 const MemberDef *member()
const {
return m_member; }
539 QCString entry()
const {
return m_entry; }
554 bool isEnumList()
const {
return m_isEnumList; }
555 int indent()
const {
return m_indent; }
556 int depth()
const {
return m_depth; }
561 bool m_isEnumList =
false;
570 int itemNumber()
const {
return m_itemNum; }
584 void parseFromString(DocNodeVariant *,
const QCString &title);
585 bool hasTitle()
const {
return !children().empty(); }
595 QCString file()
const {
return m_file; }
596 QCString anchor()
const {
return m_anchor; }
597 QCString title()
const {
return m_title; }
598 QCString relPath()
const {
return m_relPath; }
599 QCString key()
const {
return m_key; }
615 enum Type { Html, Latex, Rtf, DocBook, Xml };
618 Type type()
const {
return p->type; }
619 QCString name()
const {
return p->name; }
620 bool hasCaption()
const {
return !children().empty(); }
621 QCString width()
const {
return p->width; }
622 QCString height()
const {
return p->height; }
623 QCString relPath()
const {
return p->relPath; }
624 QCString url()
const {
return p->url; }
625 bool isInlineImage()
const {
return p->inlineImage; }
635 : attribs(attribs_), name(name_), type(type_),
636 relPath(relPath_), url(url_), inlineImage(inlineImage_) {}
646 std::unique_ptr<Private> p;
654 :
DocCompoundNode(parser,parent), p(std::make_unique<Private>(name, context, srcFile, srcLine)) {}
655 QCString name()
const {
return p->name; }
656 QCString file()
const {
return p->file; }
657 QCString relPath()
const {
return p->relPath; }
658 bool hasCaption()
const {
return !children().empty(); }
659 QCString width()
const {
return p->width; }
660 QCString height()
const {
return p->height; }
661 QCString context()
const {
return p->context; }
662 QCString srcFile()
const {
return p->srcFile; }
663 int srcLine()
const {
return p->srcLine; }
669 : name(name_), context(context_), srcFile(srcFile_), srcLine(srcLine_) {}
679 std::unique_ptr<Private> p;
687 const QCString &srcFile,
int srcLine);
696 const QCString &srcFile,
int srcLine);
705 const QCString &srcFile,
int srcLine);
715 bool hasCaption()
const {
return !children().empty(); }
724 QCString parse(
bool,
bool isXmlLink=FALSE);
725 QCString file()
const {
return m_file; }
726 QCString relPath()
const {
return m_relPath; }
727 QCString ref()
const {
return m_ref; }
728 QCString anchor()
const {
return m_anchor; }
744 QCString file()
const {
return m_file; }
745 QCString relPath()
const {
return m_relPath; }
746 QCString ref()
const {
return m_ref; }
747 QCString anchor()
const {
return m_anchor; }
748 QCString targetTitle()
const {
return m_text; }
749 SectionType sectionType()
const {
return m_sectionType; }
750 bool hasLinkText()
const {
return !children().empty(); }
751 bool refToAnchor()
const {
return m_refType==Anchor; }
752 bool refToSection()
const {
return m_refType==Section; }
753 bool refToTable()
const {
return m_refType==Table; }
754 bool isSubPage()
const {
return m_isSubPage; }
757 RefType m_refType = Unknown;
758 SectionType m_sectionType = SectionType::Anchor;
759 bool m_isSubPage =
false;
773 QCString file()
const {
return m_file; }
774 QCString relPath()
const {
return m_relPath; }
775 QCString anchor()
const {
return m_anchor; }
790 m_relPath(relPath), m_file(file) {}
792 QCString url()
const {
return m_url; }
793 QCString file()
const {
return m_file; }
794 QCString relPath()
const {
return m_relPath; }
826 const DocNodeVariant *summary()
const {
return m_summary.get(); }
830 std::unique_ptr<DocNodeVariant> m_summary;
839 int level()
const {
return m_level; }
880 int level()
const {
return m_level; }
881 QCString title()
const {
return m_title; }
882 QCString anchor()
const {
return m_anchor; }
883 QCString id()
const {
return m_id; }
884 QCString file()
const {
return m_file; }
900 QCString target()
const {
return m_target; }
901 QCString file()
const {
return m_file; }
902 QCString anchor()
const {
return m_anchor; }
903 QCString relPath()
const {
return m_relPath; }
904 QCString ref()
const {
return m_ref; }
905 bool refToTable()
const {
return m_refType==Table; }
906 bool isSubPage()
const {
return m_isSubPage; }
911 RefType m_refType = Unknown;
912 bool m_isSubPage =
false;
964 enum Type { Unordered, Ordered };
967 Type type()
const {
return m_type; }
973 Type m_type = Unordered;
983 Unknown, See, Return, Author, Authors, Version, Since, Date,
984 Note, Warning, Copyright, Pre, Post, Invar, Remark, Attention, User, Rcs
987 Type type()
const {
return m_type; }
989 int parse(
bool userTitle,
bool needsSeparator);
992 void appendLinkWord(
const QCString &word);
993 bool hasTitle()
const;
994 const DocNodeVariant *title()
const {
return m_title.get(); }
997 Type m_type = Unknown;
998 std::unique_ptr<DocNodeVariant> m_title;
1019 Unknown, Param, RetVal, Exception, TemplateParam
1023 In=1, Out=2, InOut=3, Unspecified=0
1026 :
DocCompoundNode(parser,parent), m_type(t), m_hasInOutSpecifier(FALSE), m_hasTypeSpecifier(FALSE)
1028 int parse(
const QCString &cmdName,
bool xmlContext,Direction d);
1029 Type type()
const {
return m_type; }
1030 bool hasInOutSpecifier()
const {
return m_hasInOutSpecifier; }
1031 bool hasTypeSpecifier()
const {
return m_hasTypeSpecifier; }
1034 Type m_type = Unknown;
1035 bool m_hasInOutSpecifier =
false;
1036 bool m_hasTypeSpecifier =
false;
1045 bool isEmpty()
const {
return children().empty(); }
1046 void markFirst(
bool v=TRUE) { m_isFirst=v; }
1047 void markLast(
bool v=TRUE) { m_isLast=v; }
1048 bool isFirst()
const {
return m_isFirst; }
1049 bool isLast()
const {
return m_isLast; }
1051 int handleCommand(
const QCString &cmdName,
const int tok);
1053 int handleHtmlEndTag(
const QCString &tagName);
1054 int handleSimpleSection(DocSimpleSect::Type t,
bool xmlContext=FALSE);
1055 int handleXRefItem();
1056 int handleParamSection(
const QCString &cmdName,DocParamSect::Type t,
bool xmlContext,
int direction);
1057 void handleIncludeOperator(
const QCString &cmdName,DocIncOperator::Type t);
1058 template<
class T>
void handleFile(
const QCString &cmdName);
1059 void handleInclude(
const QCString &cmdName,DocInclude::Type t);
1060 void handleLink(
const QCString &cmdName,
bool isJavaLink);
1062 void handleDoxyConfig();
1064 void handleRef(
const QCString &cmdName);
1065 void handleSection(
const QCString &cmdName);
1066 void handleInheritDoc();
1067 void handleVhdlFlow();
1070 void handleShowDate();
1071 int handleStartCode();
1072 int handleHtmlHeader(
const HtmlAttribList &tagHtmlAttribs,
int level);
1074 bool injectToken(
int tok,
const QCString &tokText);
1076 void setAttribs(
const HtmlAttribList &attribs) { m_attribs = attribs; }
1079 bool m_isFirst =
false;
1080 bool m_isLast =
false;
1089 :
DocNode(parser,parent), m_type(t), m_dir(d) {}
1090 const DocNodeList ¶meters()
const {
return m_params; }
1091 const DocNodeList ¶mTypes()
const {
return m_paramTypes; }
1092 const DocNodeList ¶graphs()
const {
return m_paragraphs; }
1093 DocParamSect::Type type()
const {
return m_type; }
1094 DocParamSect::Direction direction()
const {
return m_dir; }
1095 void markFirst(
bool b=TRUE) { m_isFirst=b; }
1096 void markLast(
bool b=TRUE) { m_isLast=b; }
1097 bool isFirst()
const {
return m_isFirst; }
1098 bool isLast()
const {
return m_isLast; }
1099 int parse(
const QCString &cmdName);
1100 int parseXml(
const QCString ¶mName);
1106 DocParamSect::Type m_type = DocParamSect::Unknown;
1107 DocParamSect::Direction m_dir = DocParamSect::Unspecified;
1108 bool m_isFirst =
false;
1109 bool m_isLast =
false;
1118 const DocNodeVariant *paragraph()
const {
return m_paragraph.get(); }
1121 std::unique_ptr<DocNodeVariant> m_paragraph;
1129 :
DocCompoundNode(parser,parent), m_attribs(attribs), m_itemNum(num) {}
1130 int itemNumber()
const {
return m_itemNum; }
1157 enum Alignment { Left, Right, Center };
1158 enum Valignment {Top, Middle, Bottom};
1160 DocCompoundNode(parser,parent), m_isHeading(isHeading), m_attribs(attribs) {}
1161 bool isHeading()
const {
return m_isHeading; }
1162 bool isFirst()
const {
return m_isFirst; }
1163 bool isLast()
const {
return m_isLast; }
1164 void markFirst(
bool v=TRUE) { m_isFirst=v; }
1165 void markLast(
bool v=TRUE) { m_isLast=v; }
1169 uint32_t rowIndex()
const {
return m_rowIdx; }
1170 uint32_t columnIndex()
const {
return m_colIdx; }
1171 uint32_t rowSpan()
const;
1172 uint32_t colSpan()
const;
1173 Alignment alignment()
const;
1174 Valignment valignment()
const;
1177 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1178 void setColumnIndex(uint32_t idx) { m_colIdx = idx; }
1179 bool m_isHeading =
false;
1180 bool m_isFirst =
false;
1181 bool m_isLast =
false;
1183 uint32_t m_rowIdx =
static_cast<uint32_t
>(-1);
1184 uint32_t m_colIdx =
static_cast<uint32_t
>(-1);
1194 bool hasCaptionId()
const {
return m_hasCaptionId; }
1195 QCString file()
const {
return m_file; }
1196 QCString anchor()
const {
return m_anchor; }
1200 bool m_hasCaptionId =
false;
1212 size_t numCells()
const {
return children().size(); }
1215 int parseXml(
bool header);
1216 bool isHeading()
const;
1217 void setVisibleCells(uint32_t n) { m_visibleCells = n; }
1218 uint32_t visibleCells()
const {
return m_visibleCells; }
1219 uint32_t rowIndex()
const {
return m_rowIdx; }
1222 void setRowIndex(uint32_t idx) { m_rowIdx = idx; }
1224 uint32_t m_visibleCells = 0;
1225 uint32_t m_rowIdx =
static_cast<uint32_t
>(-1);
1234 size_t numRows()
const {
return children().size(); }
1235 bool hasCaption()
const;
1239 size_t numColumns()
const {
return m_numCols; }
1240 const DocNodeVariant *caption()
const;
1241 const DocNodeVariant *firstRow()
const;
1244 void computeTableGrid();
1245 std::unique_ptr<DocNodeVariant> m_caption;
1247 size_t m_numCols = 0;
1269 bool isEmpty()
const {
return children().empty(); }
1279 bool indent()
const {
return m_indent; }
1280 bool singleLine()
const {
return m_singleLine; }
1281 bool isEmpty()
const {
return children().empty(); }
1284 bool m_indent =
false;
1285 bool m_singleLine =
false;
1291 constexpr DocNodeVariant *
parent(DocNodeVariant *n)
1293 return n ? std::visit([](
auto &&x)->decltype(
auto) {
return x.parent(); }, *n) :
nullptr;
1297 constexpr
const DocNodeVariant *
parent(
const DocNodeVariant *n)
1299 return n ? std::visit([](
auto &&x)->decltype(
auto) {
return x.parent(); }, *n) :
nullptr;
1305 template<
class T,
class... Ts>
1308 static constexpr
bool holds_one_of_alternatives(
const DocNodeVariant &v)
1317 static constexpr
bool holds_one_of_alternatives(
const DocNodeVariant &v)
1319 return std::holds_alternative<T>(v);
1326 template<
class... Ts>
1327 constexpr
bool holds_one_of_alternatives(
const DocNodeVariant &v)
1334 template<
class T,
class...Args>
1338 emplace_back(T(std::forward<Args>(args)...));
1342 std::get_if<T>(&back())->setThisVariant(&back());
1347 for (
auto &&elem : elements)
1349 emplace_back(std::move(elem));
1357 return std::get_if<T>(&back());
1364 inline const char *docNodeName(
const DocNodeVariant &v)
1366 static const char *table[] = { DOC_NODES };
1367 return table[v.index()];
1372 inline void dumpDocNodeSizes()
1376 static const char *tableWithNames[] = { DOC_NODES };
1380 #define DN(x) sizeof(x) 1382 static size_t tableWithSizes[] = { DOC_NODES };
1387 printf(
"DocNodeVariant(\n");
1388 for (
size_t i=0;i<
sizeof(tableWithNames)/
sizeof(tableWithNames[0]);i++)
1390 printf(
" /* %2zu */ sizeof(%s)=%zu\n",i,tableWithNames[i],tableWithSizes[i]);
1391 if (tableWithSizes[i]>maxSize) maxSize = tableWithSizes[i];
1393 printf(
")=%zu\n",maxSize);
1396 inline void dumpDocNodeList(
const DocNodeList &children)
1398 printf(
"children=[\n");
1399 for (
const auto &child : children)
1401 const DocWord *w = std::get_if<DocWord>(&child);
1402 printf(
" %s (%p) %s\n",docNodeName(child),(
void*)&child,qPrint(w?w->word():
""));
1413 template<
class DocNode>
1416 std::get_if<DocNode>(&root)->setThisVariant(&root);
1418 bool isEmpty()
const override 1420 if (std::holds_alternative<DocRoot>(root))
1422 return std::get<DocRoot>(root).isEmpty();
1424 else if (std::holds_alternative<DocText>(root))
1426 return std::get<DocText>(root).isEmpty();
1430 DocNodeVariant root;
1433 template<
class T,
class... Args>
1434 std::unique_ptr<DocNodeVariant> createDocNode(Args&&...args)
1436 auto node = std::make_unique<DocNodeVariant>(T(std::forward<Args>(args)...));
1437 std::get_if<T>(node.get())->setThisVariant(node.get());
Node representing a separator.
Definition: docnode.h:346
Node representing an HTML blockquote.
Definition: docnode.h:1251
Node representing a URL (or email address)
Definition: docnode.h:188
Node representing a word.
Definition: docnode.h:153
Node representing some amount of white space.
Definition: docnode.h:335
Node representing a Hypertext reference.
Definition: docnode.h:784
Root node of a text fragment.
Definition: docnode.h:1264
Node representing a horizontal ruler.
Definition: docnode.h:216
The common base class of all entity definitions found in the sources.
Definition: definition.h:74
Node representing a simple section title.
Definition: docnode.h:579
Definition: docparser_p.h:92
A model of a class/file/namespace member symbol.
Definition: memberdef.h:46
Node representing a reference to some item.
Definition: docnode.h:739
Node representing a style change.
Definition: docnode.h:265
Node representing an auto List.
Definition: docnode.h:550
Node representing an emoji.
Definition: docnode.h:322
Node representing a citation of some bibliographic reference.
Definition: docnode.h:245
Node representing a HTML table caption.
Definition: docnode.h:1188
void move_append(DocNodeList &l)
moves the element of list l at the end of this list.
Definition: docnode.h:1345
Root node of documentation tree.
Definition: docnode.h:1273
Node representing a HTML table cell.
Definition: docnode.h:1153
Node representing an entry in the index.
Definition: docnode.h:531
bool isPreformatted() const
Definition: docnode.h:106
Node representing a simple section.
Definition: docnode.h:978
Node representing a paragraph in the documentation tree.
Definition: docnode.h:1040
Class representing the abstract syntax tree of a documentation block.
Definition: docnode.h:1410
DocNode(DocParser *parser, DocNodeVariant *parent)
Definition: docnode.h:81
std::vector like container optimised for pushing elements to the back.
Definition: growvector.h:37
Node representing a special symbol.
Definition: docnode.h:309
void setInsidePreformatted(bool p)
Definition: docnode.h:110
Node representing a link to some item.
Definition: docnode.h:720
Node Html details.
Definition: docnode.h:818
Node representing a VHDL flow chart.
Definition: docnode.h:710
Node representing a Html description list.
Definition: docnode.h:862
Node representing a HTML list item.
Definition: docnode.h:1125
Node representing a msc file.
Definition: docnode.h:692
Node representing a verbatim, unparsed text fragment.
Definition: docnode.h:357
Node representing a Html description item.
Definition: docnode.h:849
Definition: docnode.h:666
Definition: docnode.h:1302
Node representing a HTML table.
Definition: docnode.h:1229
DocNodeVariant * parent()
Definition: docnode.h:91
void append(Args &&... args)
Append a new DocNodeVariant to the list by constructing it with type T and parameters Args...
Definition: docnode.h:1335
Node representing a dia file.
Definition: docnode.h:701
Node representing a HTML table row.
Definition: docnode.h:1206
opaque representation of the abstract syntax tree (AST)
Definition: docparser.h:46
Definition: docnode.h:119
Node representing a line break.
Definition: docnode.h:202
Node representing a list of section references.
Definition: docnode.h:920
Node representing a reference to a section.
Definition: docnode.h:896
Node representing a parameter section.
Definition: docnode.h:1013
T * get_last()
Returns a pointer to the last element in the list if that element exists and holds a T...
Definition: docnode.h:1355
Definition: docnode.h:1306
Node representing an image.
Definition: docnode.h:612
Node representing a parameter list.
Definition: docnode.h:1085
Node representing a normal section.
Definition: docnode.h:875
Node representing a Html list.
Definition: docnode.h:961
Node representing an internal reference to some item.
Definition: docnode.h:768
Node representing an included text block from file.
Definition: docnode.h:416
void setParent(DocNodeVariant *parent)
Definition: docnode.h:103
Node representing an block of paragraphs.
Definition: docnode.h:940
Node representing an anchor.
Definition: docnode.h:229
Abstract node interface with type information.
Definition: docnode.h:77
Node representing a separator between two simple sections of the same type.
Definition: docnode.h:1004
Node representing a simple list item.
Definition: docnode.h:1113
Node representing a HTML description data.
Definition: docnode.h:1141
Class representing a list of HTML attributes.
Definition: htmlattrib.h:30
This is an alternative implementation of QCString.
Definition: qcstring.h:92
Node representing a word that can be linked to something.
Definition: docnode.h:165
Node representing a simple list.
Definition: docnode.h:951
Node representing a dot file.
Definition: docnode.h:683
Node representing an item of a auto list.
Definition: docnode.h:566
Definition: docnode.h:649
Node representing an internal section of documentation.
Definition: docnode.h:930
Node representing an item of a cross-referenced list.
Definition: docnode.h:591
Node representing a include/dontinclude operator block.
Definition: docnode.h:458
Node Html summary.
Definition: docnode.h:805
Base class for nodes with children.
Definition: docnode.h:139