75 default:
return nullptr;
78static const char *
hex=
"0123456789ABCDEF";
85 result += cntStr.
setNum(cnt);
88 const char *str = word.
data();
94 if ((c >=
'a' && c <=
'z') ||
95 (c >=
'A' && c <=
'Z') ||
96 (c >=
'0' && c <=
'9') ||
107 enc[1] =
hex[(c & 0xf0) >> 4];
108 enc[2] =
hex[c & 0xf];
142 const DocVerbatim *dv = std::get_if<DocVerbatim>(&n);
156 const DocFormula *df = std::get_if<DocFormula>(&n);
161 const DocImage *di = std::get_if<DocImage>(&n);
218 const DocImage *di = std::get_if<DocImage>(&node);
221 const DocVerbatim *dv = std::get_if<DocVerbatim>(&node);
224 const DocInclude *dinc = std::get_if<DocInclude>(&node);
246 t <<
"<div class=\"caption\">\n";
247 for (
const auto &child : n.children())
249 std::visit(*
this, child);
304 err(
"HTML: non supported HTML-entity found: {}\n",
316 m_t <<
"<span class=\"emoji\">" << res <<
"</span>";
328 m_t <<
"<a href=\"mailto:" << url <<
"\">";
332 m_t <<
"<a href=\"#\" onclick=\"location.href='mai'+'lto:'";
335 const char *p = url.
data();
340 for (uint32_t j=0;j<size && *p;j++)
345 if (size==3) size=2;
else size=3;
348 m_t <<
"; return false;\">";
366 const char *p = url.
data();
371 for (uint32_t j=0;j<size && *p;j++)
375 if (*p)
m_t <<
"<span class=\"obfuscator\">.nosp@m.</span>";
376 if (size==5) size=4;
else size=5;
434 attribs.mergeAttribute(
"class",
"arg");
436 m_t <<
"<em" << attribs.toString() <<
">";
464 attribs.mergeAttribute(
"class",
"param");
466 m_t <<
"<code" << attribs.toString() <<
">";
546 m_ci.startCodeFragment(
"DoxyCode");
557 m_ci.endCodeFragment(
"DoxyCode");
562 m_t <<
"<pre class=\"fragment\">";
571 m_t <<
"<code class=\"JavaDocCode\">";
599 if (!fileName.isEmpty())
601 m_t <<
"<div class=\"dotgraph\">\n";
617 "msc {"+s.
text()+
"}",
619 if (!fileName.isEmpty())
621 m_t <<
"<div class=\"mscgraph\">\n";
643 for (
const auto &baseName: baseNameVector)
645 m_t <<
"<div class=\"plantumlgraph\">\n";
656 if (
Config_getEnum(MERMAID_RENDER_MODE)==MERMAID_RENDER_MODE_t::CLI)
664 m_t <<
"<div class=\"mermaidgraph\">\n";
671 m_t <<
"<div class=\"mermaidgraph\">\n";
672 m_t <<
"<pre class=\"mermaid\">\n";
698 m_ci.startCodeFragment(
"DoxyCode");
710 m_ci.endCodeFragment(
"DoxyCode");
716 m_ci.startCodeFragment(
"DoxyCode");
730 m_ci.endCodeFragment(
"DoxyCode");
751 m_t <<
"<pre class=\"fragment\">";
759 m_ci.startCodeFragment(
"DoxyCode");
768 m_ci.endCodeFragment(
"DoxyCode");
781 if (!
m_hide)
m_ci.startCodeFragment(
"DoxyCode");
793 std::unique_ptr<FileDef> fd;
819 if (!
m_hide)
m_ci.endCodeFragment(
"DoxyCode");
835 m_t <<
"<p class=\"formulaDsp\">\n";
841 bool closeInline =
FALSE;
842 if (!bDisplay && !text.
isEmpty() && text.
at(0)==
'$' &&
849 else if (!bDisplay && !text.
isEmpty())
864 enum class ImageType { Light, Dark };
865 enum class Visibility { Always, Dark, Light, AutoDark, AutoLight };
866 auto writeFormula = [&](ImageType imgType,Visibility visibility) ->
QCString {
870 if (visibility==Visibility::AutoDark || visibility==Visibility::AutoLight)
873 t <<
"<source srcset=\"" << f.
relPath() << f.
name();
874 if (visibility==Visibility::AutoDark)
877 t <<
"\" media=\"(prefers-color-scheme: light)\"";
883 t <<
"\" media=\"(prefers-color-scheme: dark)\"";
887 t <<
"<img class=\"formula";
888 t << (bDisplay ?
"Dsp" :
"Inl");
889 if (visibility==Visibility::Light) t <<
" light-mode-visible";
890 else if (visibility==Visibility::Dark) t <<
" dark-mode-visible";
892 if (imgType==ImageType::Dark) t <<
"_dark";
894 if (formula && formula->
width()!=-1)
897 t << formula->
width();
899 if (formula && formula->
height()!=-1)
905 if (visibility==Visibility::AutoDark || visibility==Visibility::AutoLight)
915 case HTML_COLORSTYLE_t::LIGHT:
916 m_t << writeFormula(ImageType::Light,Visibility::Always);
918 case HTML_COLORSTYLE_t::DARK:
919 m_t << writeFormula(ImageType::Dark, Visibility::Always);
921 case HTML_COLORSTYLE_t::AUTO_LIGHT:
922 m_t << writeFormula(ImageType::Light, Visibility::AutoLight);
924 case HTML_COLORSTYLE_t::AUTO_DARK:
925 m_t << writeFormula(ImageType::Dark, Visibility::AutoDark);
927 case HTML_COLORSTYLE_t::TOGGLE:
929 m_t << writeFormula(ImageType::Light,Visibility::Light);
930 m_t << writeFormula(ImageType::Dark, Visibility::Dark);
948 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
976 if (!opt.noPar())
filter(
"[");
978 if (!opt.noPar())
filter(
"]");
1010 m_t <<
"<ul class=\"check\">";
1037 m_t <<
"<li class=\"unchecked\">";
1041 m_t <<
"<li class=\"checked\">";
1055 bool b = std::visit([&](
auto &&x) {
1058 return val==
static_cast<const DocNode*
>(&x);
1078 auto it = std::find_if(std::begin(nodes),std::end(nodes),[&par](
const auto &n) {
return holds_value(&par,n); });
1079 if (it==std::end(nodes))
return FALSE;
1080 size_t count =
parent.children().size();
1081 auto isSeparator = [](
auto &&it_) {
return std::get_if<DocSimpleSectSep>(&(*it_))!=
nullptr; };
1082 if (count>1 && it==std::begin(nodes))
1084 return isSeparator(std::next(it));
1086 else if (count>1 && it==std::prev(std::end(nodes)))
1088 return isSeparator(std::prev(it));
1090 else if (count>2 && it!=std::begin(nodes) && it!=std::prev(std::end(nodes)))
1092 return isSeparator(std::prev(it)) && isSeparator(std::next(it));
1104 const auto parBlock = std::get_if<DocParBlock>(p.
parent());
1128 if (!isFirst && !isLast)
1134 const auto docAutoListItem = std::get_if<DocAutoListItem>(p.
parent());
1135 if (docAutoListItem)
1142 const auto docSimpleListItem = std::get_if<DocSimpleListItem>(p.
parent());
1143 if (docSimpleListItem)
1150 const auto docParamList = std::get_if<DocParamList>(p.
parent());
1158 const auto docHtmlListItem = std::get_if<DocHtmlListItem>(p.
parent());
1159 if (docHtmlListItem)
1168 const auto docSecRefItem = std::get_if<DocSecRefItem>(p.
parent());
1178 const auto docHtmlDescData = std::get_if<DocHtmlDescData>(p.
parent());
1179 if (docHtmlDescData)
1188 const auto docXRefItem = std::get_if<DocXRefItem>(p.
parent());
1198 const auto docSimpleSect = std::get_if<DocSimpleSect>(p.
parent());
1210 isFirst=isLast=
TRUE;
1215 const auto docHtmlCell = std::get_if<DocHtmlCell>(p.
parent());
1231 bool needsTag =
FALSE;
1251 else if (std::get_if<DocRoot>(p.
parent()))
1253 needsTag = !std::get<DocRoot>(*p.
parent()).singleLine();
1268 bool needsTagBefore = needsTag;
1269 bool needsTagAfter = needsTag;
1277 [](
const auto &node) { return !isInvisibleNode(node); });
1283 needsTagBefore =
FALSE;
1291 bool isFirst =
false;
1292 bool isLast =
false;
1295 if (isFirst && isLast) needsTagBefore=
FALSE;
1314 auto it = std::prev(std::end(p.
children()));
1322 needsTagAfter =
FALSE;
1340 if (isFirst && isLast) needsTagAfter=
FALSE;
1343 if (needsTagAfter)
m_t <<
"</p>\n";
1359 m_t <<
"<dl class=\"section " << s.
typeString() <<
"\"><dt>";
1401 std::visit(*
this,*s.
title());
1405 m_t <<
"</dd></dl>\n";
1443 m_t <<
"<h" << s.
level() <<
" class=\"doxsection\">";
1444 m_t <<
"<a class=\"anchor\" id=\"" << s.
anchor();
1448 std::visit(*
this,*s.
title());
1450 m_t <<
"</h" << s.
level() <<
">\n";
1527 m_t <<
"<a class=\"anchor\" id=\"" << anc <<
"\"></a>\n";
1534 m_t <<
"<table class=\"doxtable\">\n";
1542 std::visit(*
this,*t.
caption());
1545 m_t <<
"</table>\n";
1577 m_t <<
"</caption>\n";
1608 m_t <<
"</summary>\n";
1619 std::visit(*
this,*summary);
1622 m_t <<
"</details>\n";
1632 m_t <<
"</h" << header.
level() <<
">\n";
1641 bool typeSVG = img.
isSVG();
1650 if (!inlineImage)
m_t <<
"<div class=\"image\">\n";
1654 sizeAttribs+=
" width=\""+img.
width()+
"\"";
1658 sizeAttribs+=
" height=\""+img.
height()+
"\"";
1681 <<
"\"" << sizeAttribs << attrs;
1688 m_t <<
">" << alt <<
"</object>\n";
1693 m_t <<
"<img src=\"" <<
convertToHtml(src) <<
"\" alt=\"" << alt <<
"\"" << sizeAttribs << attrs;
1696 m_t <<
" class=\"inline\"";
1712 m_t <<
"<div class=\"caption\">\n";
1715 else if (inlineImage)
1749 bool exists =
false;
1757 if (!fileName.isEmpty())
1759 m_t <<
"<div class=\"dotgraph\">\n";
1763 m_t <<
"<div class=\"caption\">\n";
1780 bool exists =
false;
1788 if (!fileName.isEmpty())
1790 m_t <<
"<div class=\"mscgraph\">\n";
1794 m_t <<
"<div class=\"caption\">\n";
1811 bool exists =
false;
1819 if (!fileName.isEmpty())
1821 m_t <<
"<div class=\"diagraph\">\n";
1825 m_t <<
"<div class=\"caption\">\n";
1854 for (
const auto &bName: baseNameVector)
1857 m_t <<
"<div class=\"plantumlgraph\">\n";
1861 m_t <<
"<div class=\"caption\">\n";
1878 if (
Config_getEnum(MERMAID_RENDER_MODE)==MERMAID_RENDER_MODE_t::CLI)
1887 m_t <<
"<div class=\"mermaidgraph\">\n";
1891 m_t <<
"<div class=\"caption\">\n";
1905 m_t <<
"<div class=\"mermaidgraph\">\n";
1906 m_t <<
"<pre class=\"mermaid\">\n";
1911 m_t <<
"<div class=\"caption\">\n";
1967 m_t <<
"<ul class=\"multicol\">\n";
1992 className=
"exception";
1996 className=
"tparams";
2001 m_t <<
"<dl class=\"" << className <<
"\"><dt>";
2003 m_t <<
"</dt><dd>\n";
2004 m_t <<
" <table class=\"" << className <<
"\">\n";
2006 m_t <<
" </table>\n";
2015 m_t <<
" " << s.
chars() <<
" ";
2026 m_t <<
"<td class=\"paramdir\">";
2048 m_t <<
"<td class=\"paramtype\">";
2051 std::visit(*
this,type);
2055 m_t <<
"<td class=\"paramname\">";
2059 if (!first)
m_t <<
",";
else first=
FALSE;
2060 std::visit(*
this,param);
2065 std::visit(*
this,par);
2067 m_t <<
"</td></tr>\n";
2076 bool anonymousEnum = x.
file()==
"@";
2081 m_t <<
"<dl class=\"" << x.
key() <<
"\"><dt><b><a class=\"el\" href=\""
2083 <<
"#" << x.
anchor() <<
"\">";
2087 m_t <<
"<dl class=\"" << x.
key() <<
"\"><dt><b>";
2090 if (!anonymousEnum)
m_t <<
"</a>";
2091 m_t <<
"</b></dt><dd>";
2094 m_t <<
"</dd></dl>\n";
2118 m_t <<
"</blockquote>\n";
2132 m_t <<
"<a href=\"";
2159 const char *p=str.
data();
2165 case '\n':
if(retainNewline)
m_t <<
"<br/>";
m_t << c;
break;
2166 case '<':
m_t <<
"<";
break;
2167 case '>':
m_t <<
">";
break;
2168 case '&':
m_t <<
"&";
break;
2170 if ((*p ==
'(') || (*p ==
')') || (*p ==
'[') || (*p ==
']'))
2171 m_t <<
"\\‍" << *p++;
2177 uint8_t uc =
static_cast<uint8_t
>(c);
2178 if (uc<32 && !isspace(c))
2180 m_t <<
"$" <<
hex[uc>>4] <<
hex[uc&0xF] <<
";";
2196 if (str.
isEmpty())
return str;
2199 const char *p=str.
data();
2205 case '&': result+=
"&";
break;
2206 case '"': result+=
""";
break;
2207 case '<': result+=
"<";
break;
2208 case '>': result+=
">";
break;
2210 if ((*p ==
'(') || (*p ==
')') || (*p ==
'[') || (*p ==
']'))
2222 uint8_t uc =
static_cast<uint8_t
>(c);
2223 if (uc<32 && !isspace(c))
2227 result+=
hex[uc&0xF];
2248 m_t <<
"<a class=\"elRef\" ";
2253 m_t <<
"<a class=\"el\" ";
2302 m_t <<
"<img src=\"" << relPath << baseName <<
".png" <<
"\" />\n";
2317 m_t <<
"<object type=\"image/svg+xml\" data=\"" << relPath << baseName <<
".svg\"></object>\n";
2322 m_t <<
"<img src=\"" << relPath << baseName <<
".png" <<
"\" />\n";
2337 m_t <<
"<object type=\"image/svg+xml\" data=\"" << relPath << baseName <<
"." << imgExt <<
"\"></object>\n";
2341 m_t <<
"<img src=\"" << relPath << baseName <<
"." << imgExt <<
"\" />\n";
2355 bool styleOutsideParagraph=
FALSE;
2356 while (!styleOutsideParagraph)
2364 styleMask|=
static_cast<int>(sc->
style());
2370 if (sc->
enable() && (styleMask&
static_cast<int>(sc->
style()))==0 &&
2374 styleOutsideParagraph=
TRUE;
2377 if (it!=std::begin(para->
children()))
2386 return styleOutsideParagraph;
2396 const DocPara *para=std::get_if<DocPara>(n.parent());
2404 auto it = std::find_if(std::begin(children),std::end(children),
2405 [&n](
const auto &np) {
return holds_value(&n,np); });
2406 if (it==std::end(children))
return;
2407 if (it==std::begin(children))
return;
2414 if (it!=std::begin(children))
2426 bool styleOutsideParagraph=
false;
2427 if (it!=std::begin(children))
2432 bool isFirst =
false;
2433 bool isLast =
false;
2436 if (isFirst && isLast)
return;
2437 if (styleOutsideParagraph)
return;
2453 if (n.parent() && (para = std::get_if<DocPara>(n.parent())))
2457 auto it = std::find_if(std::begin(children),
2459 [&n](
const auto &np)
2461 if (it==std::end(children))
return;
2465 if (styleOutsideParagraph)
return;
2471 if (it!=std::end(children))
2481 bool needsTag =
true;
2482 bool isFirst =
false;
2483 bool isLast =
false;
2485 if (isFirst && isLast) needsTag =
false;
2488 if (needsTag)
m_t <<
"<p>";
void parseCodeFragment(OutputCodeList &codeOutList, const QCString &fileName, const QCString &blockId, const QCString &scopeName, bool showLineNumbers, bool trimLeft, bool stripCodeComments)
static CodeFragmentManager & instance()
virtual void parseCode(OutputCodeList &codeOutList, const QCString &scopeName, const QCString &input, SrcLangExt lang, bool stripCodeComments, const CodeParserOptions &options)=0
Parses a source file or fragment with the goal to produce highlighted and cross-referenced output.
The common base class of all entity definitions found in the sources.
virtual QCString anchor() const =0
virtual QCString getDefFileExtension() const =0
virtual const QCString & name() const =0
Node representing an anchor.
const HtmlAttribList & attribs() const
Node representing an auto List.
bool isCheckedList() const
Node representing an item of a auto list.
Node representing a citation of some bibliographic reference.
CiteInfoOption option() const
Node representing a dia file.
Node representing a dot file.
Node representing an emoji.
Node representing a Hypertext reference.
const HtmlAttribList & attribs() const
Node representing a horizontal ruler.
const HtmlAttribList & attribs() const
Node representing an HTML blockquote.
const HtmlAttribList & attribs() const
Node representing a HTML table caption.
const HtmlAttribList & attribs() const
Node representing a HTML table cell.
const HtmlAttribList & attribs() const
Node representing a HTML description data.
const HtmlAttribList & attribs() const
Node representing a Html description list.
const HtmlAttribList & attribs() const
Node representing a Html description item.
const HtmlAttribList & attribs() const
const HtmlAttribList & attribs() const
const DocNodeVariant * summary() const
Node representing a Html list.
const HtmlAttribList & attribs() const
Node representing a HTML list item.
const HtmlAttribList & attribs() const
Node representing a HTML table row.
const HtmlAttribList & attribs() const
const HtmlAttribList & attribs() const
Node representing a HTML table.
const DocNodeVariant * caption() const
const HtmlAttribList & attribs() const
Node representing an image.
const HtmlAttribList & attribs() const
bool isInlineImage() const
Node representing a include/dontinclude operator block.
bool stripCodeComments() const
QCString includeFileName() const
QCString exampleFile() const
Node representing an included text block from file.
QCString extension() const
bool stripCodeComments() const
QCString exampleFile() const
Node representing an entry in the index.
const Definition * scope() const
const MemberDef * member() const
Node representing an internal section of documentation.
Node representing an internal reference to some item.
Node representing a line break.
const HtmlAttribList & attribs() const
Node representing a link to some item.
Node representing a word that can be linked to something.
Node representing a mermaid file.
Node representing a msc file.
Abstract node interface with type information.
bool isPreformatted() const
DocNodeVariant * parent()
Node representing an block of paragraphs.
Node representing a paragraph in the documentation tree.
const HtmlAttribList & attribs() const
Node representing a parameter list.
const DocNodeList & parameters() const
const DocNodeList & paramTypes() const
DocParamSect::Direction direction() const
const DocNodeList & paragraphs() const
Node representing a parameter section.
bool hasInOutSpecifier() const
bool hasTypeSpecifier() const
Node representing a uml file.
Node representing a reference to some item.
QCString targetTitle() const
Root node of documentation tree.
Node representing a reference to a section.
Node representing a list of section references.
Node representing a normal section.
const DocNodeVariant * title() const
Node representing a separator.
Node representing a simple list.
Node representing a simple list item.
const DocNodeVariant * paragraph() const
Node representing a simple section.
QCString typeString() const
const DocNodeVariant * title() const
Node representing a separator between two simple sections of the same type.
Node representing a style change.
const HtmlAttribList & attribs() const
Node representing a special symbol.
HtmlEntityMapper::SymType symbol() const
Root node of a text fragment.
Node representing a simple section title.
Node representing a URL (or email address).
Node representing a verbatim, unparsed text fragment.
QCString language() const
QCString exampleFile() const
Node representing a VHDL flow chart.
CodeParserInterface & getCodeParser(const QCString &langExt)
void pushHidden(bool hide)
Node representing some amount of white space.
Node representing a word.
Node representing an item of a cross-referenced list.
static IndexList * indexList
const char * unicode(int index) const
Access routine to the unicode sequence for the Emoji entity.
static EmojiEntityMapper & instance()
Returns the one and only instance of the Emoji entity mapper.
Minimal replacement for QFileInfo.
std::string fileName() const
std::string dirPath(bool absPath=true) const
static QCString convertNameToFileName()
Iterator< const GrowVector, const DocNodeVariant > const_iterator
bool empty() const
checks whether the container is empty
Class representing a list of HTML attributes.
QCString toString(QCString *pAltValue=nullptr) const
void mergeAttribute(const QCString &optName, const QCString &optValue)
HtmlDocVisitor(TextStream &t, OutputCodeList &ci, const Definition *ctx, const QCString &fn=QCString())
void writeMscFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine, bool newFile=true)
void writePlantUMLFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)
QCString filterQuotedCdataAttr(const QCString &str)
Escape basic entities to produce a valid CDATA attribute value, assume that the outer quoting will be...
void forceStartParagraph(const DocNode &n)
void operator()(const DocWord &)
void startLink(const QCString &ref, const QCString &file, const QCString &relPath, const QCString &anchor, const QCString &tooltip="")
void visitCaption(TextStream &t, const T &n)
void writeDotFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine, bool newFile=true)
void visitChildren(const T &t)
void writeMermaidFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)
void filter(const QCString &str, const bool retainNewline=false)
void forceEndParagraph(const DocNode &n)
void writeDiaFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine, bool newFile=true)
void writeObfuscatedMailAddress(const QCString &url)
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
const char * html(SymType symb, bool useInPrintf=FALSE) const
Access routine to the html code of the HTML entity.
void generateMermaidOutput(const QCString &baseName, const QCString &outDir, ImageFormat format, bool toIndex)
Register a generated Mermaid image with the index.
static QCString imageExtension(ImageFormat imageFormat)
static MermaidManager & instance()
static ImageFormat convertToImageFormat(OutputFormat outputFormat)
QCString writeMermaidSource(const QCString &outDirArg, const QCString &fileName, const QCString &content, ImageFormat format, const QCString &srcFile, int srcLine)
Write a Mermaid source file and register it for CLI rendering.
Class representing a list of different code generators.
OutputFormat
Plant UML output image formats.
void generatePlantUMLOutput(const QCString &baseName, const QCString &outDir, OutputFormat format, bool toIndex)
Convert a PlantUML file to an image.
StringVector writePlantUMLSource(const QCString &outDirArg, const QCString &fileName, const QCString &content, OutputFormat format, const QCString &engine, const QCString &srcFile, int srcLine, bool inlineCode)
Write a PlantUML compatible file.
static PlantumlManager & instance()
This is an alternative implementation of QCString.
QCString & prepend(const char *s)
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool startsWith(const char *s) const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
bool isEmpty() const
Returns TRUE iff the string is empty.
const std::string & str() const
QCString & setNum(short n)
void reserve(size_t size)
Reserve space for size bytes without changing the string contents.
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Text streaming class that buffers data.
std::string str() const
Return the contents of the buffer as a std::string object.
static const MemberDef * getFlowMember()
#define Config_getBool(name)
#define Config_getString(name)
#define Config_getEnum(name)
void writeDiaGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, DiaOutputFormat format, const QCString &srcFile, int srcLine, bool toIndex)
static constexpr auto hex
constexpr bool holds_one_of_alternatives(const DocNodeVariant &v)
returns true iff v holds one of types passed as template parameters
std::variant< DocWord, DocLinkedWord, DocURL, DocLineBreak, DocHorRuler, DocAnchor, DocCite, DocStyleChange, DocSymbol, DocEmoji, DocWhiteSpace, DocSeparator, DocVerbatim, DocInclude, DocIncOperator, DocFormula, DocIndexEntry, DocAutoList, DocAutoListItem, DocTitle, DocXRefItem, DocImage, DocDotFile, DocMscFile, DocDiaFile, DocVhdlFlow, DocLink, DocRef, DocInternalRef, DocHRef, DocHtmlHeader, DocHtmlDescTitle, DocHtmlDescList, DocSection, DocSecRefItem, DocSecRefList, DocInternal, DocParBlock, DocSimpleList, DocHtmlList, DocSimpleSect, DocSimpleSectSep, DocParamSect, DocPara, DocParamList, DocSimpleListItem, DocHtmlListItem, DocHtmlDescData, DocHtmlCell, DocHtmlCaption, DocHtmlRow, DocHtmlTable, DocHtmlBlockQuote, DocText, DocRoot, DocHtmlDetails, DocHtmlSummary, DocPlantUmlFile, DocMermaidFile > DocNodeVariant
constexpr DocNodeVariant * parent(DocNodeVariant *n)
returns the parent node of a given node n or nullptr if the node has no parent.
void writeDotGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, GraphOutputFormat format, const QCString &srcFile, int srcLine, bool toIndex)
void writeDotImageMapFromFile(TextStream &t, const QCString &inFile, const QCString &outDir, const QCString &relPath, const QCString &baseName, const QCString &context, int graphId, const QCString &srcFile, int srcLine, bool newFile)
std::unique_ptr< FileDef > createFileDef(const QCString &p, const QCString &n, const QCString &ref, const QCString &dn)
static bool isInvisibleNode(const DocNodeVariant &node)
static bool determineIfNeedsTag(const DocPara &p)
static const char g_types[][NUM_HTML_LIST_TYPES]
static constexpr const char * contexts(contexts_t type)
bool isFirstChildNode(const T *parent, const DocPara &node)
static const int NUM_HTML_LIST_TYPES
static QCString convertIndexWordToAnchor(const QCString &word)
static contexts_t getParagraphContext(const DocPara &p, bool &isFirst, bool &isLast)
static bool mustBeOutsideParagraph(const DocNodeVariant &n)
static bool isDocVerbatimVisible(const DocVerbatim &s)
static bool insideStyleChangeThatIsOutsideParagraph(const DocPara *para, DocNodeList::const_iterator it)
Returns TRUE if the child nodes in paragraph para until nodeIndex contain a style change node that is...
static bool holds_value(const Node *val, const DocNodeVariant &v)
static bool isDocIncOperatorVisible(const DocIncOperator &s)
bool isSeparatedParagraph(const DocSimpleSect &parent, const DocPara &par)
bool isLastChildNode(const T *parent, const DocPara &node)
static bool isDocIncludeVisible(const DocInclude &s)
Translator * theTranslator
void writeMscImageMapFromFile(TextStream &t, const QCString &inFile, const QCString &outDir, const QCString &relPath, const QCString &baseName, const QCString &context, MscOutputFormat format, const QCString &srcFile, int srcLine)
void writeMscGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, MscOutputFormat format, const QCString &srcFile, int srcLine, bool toIndex)
Portable versions of functions that are platform dependent.
Options to configure the code parser.
CodeParserOptions & setSearchCtx(const Definition *d)
CodeParserOptions & setStartLine(int lineNr)
CodeParserOptions & setInlineFragment(bool enable)
CodeParserOptions & setShowLineNumbers(bool enable)
CodeParserOptions & setFileDef(const FileDef *fd)
const char * writeUTF8Char(TextStream &t, const char *s)
Writes the UTF8 character pointed to by s to stream t and returns a pointer to the next character.
QCString writeFileContents(const QCString &baseName, const QCString &extension, const QCString &content, bool &exists)
Thread-safe function to write a string to a file.
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
QCString convertToHtml(const QCString &s, bool keepEntities)
QCString correctURL(const QCString &url, const QCString &relPath)
Corrects URL url according to the relative path relPath.
QCString stripPath(const QCString &s)
bool readInputFile(const QCString &fileName, std::string &contents, bool filter, bool isSourceCode)
read a file name fileName and optionally filter and transcode it
SrcLangExt getLanguageFromCodeLang(QCString &fileName)
Routine to handle the language attribute of the \code command.
QCString getDotImageExtension()
QCString makeBaseName(const QCString &name, const QCString &ext)
bool copyFile(const QCString &src, const QCString &dest)
Copies the contents of file with name src to the newly created file with name dest.
QCString externalLinkTarget(const bool parent)
QCString getFileNameExtension(const QCString &fn)
void addHtmlExtensionIfMissing(QCString &fName)
QCString createHtmlUrl(const QCString &relPath, const QCString &ref, bool href, bool isLocalFile, const QCString &targetFileName, const QCString &anchor)
A bunch of utility functions.