70static constexpr auto hex=
"0123456789ABCDEF";
78 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
79 t <<
" <span class=\"left\">\n";
80 t <<
" <span id=\"MSearchSelect\" class=\"search-icon\" ";
81 t <<
"onmouseover=\"return searchBox.OnSearchSelectShow()\" ";
82 t <<
"onmouseout=\"return searchBox.OnSearchSelectHide()\">";
83 t <<
"<span class=\"search-icon-dropdown\"></span></span>\n";
84 t <<
" <input type=\"text\" id=\"MSearchField\" value=\"\" placeholder=\""
86 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
87 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
88 t <<
" onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
89 t <<
" </span><span class=\"right\">\n";
90 t <<
" <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
91 <<
"<div id=\"MSearchCloseImg\" class=\"close-icon\"></div></a>\n";
101 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
102 t <<
" <div class=\"left\">\n";
103 t <<
" <form id=\"FSearchBox\" action=\"" << relPath;
112 t <<
"\" method=\"get\">\n";
113 t <<
" <span id=\"MSearchSelectExt\" class=\"search-icon\"></span>\n";
116 t <<
" <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"\" placeholder=\""
117 <<
theTranslator->trSearch() <<
"\" size=\"20\" accesskey=\"S\" \n";
118 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
119 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
121 t <<
" </div><div class=\"right\"></div>\n";
152 if (macrofile.
isEmpty())
return "";
158 const char *data = s.
data();
167 while (i < size && (data[i] ==
' ' || data[i] ==
'\t' || data[i] ==
'\n'))
169 if (data[i] ==
'\n') line++;
172 if (i >= size)
break;
176 warn(macrofile,line,
"file contains non valid code, expected '\\' got '{:c}'",data[i]);
182 i += strlen(
"newcommand");
186 i += strlen(
"renewcommand");
190 warn(macrofile,line,
"file contains non valid code, expected 'newcommand' or 'renewcommand'");
196 warn(macrofile,line,
"file contains non valid code, expected '{{' got '{:c}'",data[i]);
202 warn(macrofile,line,
"file contains non valid code, expected '\\' got '{:c}'",data[i]);
208 while (i < size && (data[i] !=
'}')) result+=data[i++];
211 warn(macrofile,line,
"file contains non valid code, no closing '}}' for command");
223 while (i < size && (data[i] !=
']')) nr += data[i++];
226 warn(macrofile,line,
"file contains non valid code, no closing ']'");
231 else if (data[i] !=
'{')
233 warn(macrofile,line,
"file contains non valid code, expected '[' or '{{' got '{:c}'",data[i]);
240 warn(macrofile,line,
"file contains non valid code, expected '{{' got '{:c}'",data[i]);
247 while (i < size && cnt)
259 else if (data[i] !=
'"') result+=data[i++];
267 if (cnt) result+=data[i];
285 warn(macrofile,line,
"file contains non valid code, no closing '}}' for replacement");
319 bool isSource =
false)
336 bool hasProjectName = !projectName.
isEmpty();
343 bool hasCookie = treeView || searchEngine ||
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE;
344 static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
349 cssFile =
"doxygen.css";
362 cssFile =
"doxygen.css";
369 for (
const auto &fileName : extraCssFile)
371 if (!fileName.empty())
376 extraCssText +=
"<link href=\""+htmlStyleSheet+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
383 extraCssText +=
"<link href=\"$relpath^"+
stripPath(fileName)+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
391 case TIMESTAMP_t::NO:
395 generatedBy =
theTranslator->trGeneratedAt(
"<span class=\"timestamp\"></span>",
401 treeViewCssJs =
"<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
402 "<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
403 "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n";
408 searchCssJs =
"<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
409 if (!serverBasedSearch)
411 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
413 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
415 if (!serverBasedSearch)
419 searchCssJs +=
"<script type=\"text/javascript\">\n"
420 " $(function() { init_search(); });\n"
428 searchCssJs +=
"<script type=\"text/javascript\">\n"
430 " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
436 searchCssJs +=
"<link rel=\"search\" href=\"" + relPath +
437 "search_opensearch.php?v=opensearch.xml\" "
438 "type=\"application/opensearchdescription+xml\" title=\"" +
439 (hasProjectName ? projectName :
QCString(
"Doxygen")) +
446 if (mathJax && !isSource)
455 auto writeMathJax3Packages = [&mathJaxJs](
const StringVector &mathJaxExtensions)
457 mathJaxJs +=
" packages: ['base','configmacros'";
460 mathJaxJs+=
",'newcommand'";
462 for (
const auto &s : mathJaxExtensions)
464 mathJaxJs+=
",'"+s+
"'";
469 auto writeMathJax4Packages = [&mathJaxJs](
const StringVector &mathJaxExtensions)
471 mathJaxJs +=
" packages: {\n";
473 for (
const auto &s : mathJaxExtensions)
475 if (!first) mathJaxJs+=
",";
478 mathJaxJs+=
"\n '[-]': ['";
479 mathJaxJs+=s.
data()+1;
484 mathJaxJs+=
"\n '[+]': ['"+s+
"']";
488 mathJaxJs +=
"\n }\n";
491 auto writeMathJaxScript = [&path,&mathJaxJs](
const QCString &pathPostfix,
495 mathJaxJs +=
"<script type=\"text/javascript\">\n"
496 "window.MathJax = {\n"
498 " ignoreHtmlClass: 'tex2jax_ignore',\n"
499 " processHtmlClass: 'tex2jax_process'\n"
506 if (!mathJaxExtensions.empty())
509 mathJaxJs+=
" loader: {\n"
511 for (
const auto &s : mathJaxExtensions)
515 if (!first) mathJaxJs+=
",";
516 mathJaxJs+=
"'[tex]/"+s+
"'";
523 mathJaxJs+=
" tex: {\n"
530 writePackages(mathJaxExtensions);
544 mathJaxJs+=
"</script>\n";
545 mathJaxJs +=
"<script type=\"text/javascript\" id=\"MathJax-script\" async=\"async\" src=\"" +
546 path + pathPostfix +
"tex-" + mathJaxFormat.
lower() +
".js\">";
547 mathJaxJs+=
"</script>\n";
550 switch (mathJaxVersion)
552 case MATHJAX_VERSION_t::MathJax_4:
553 writeMathJaxScript(
"",writeMathJax4Packages);
555 case MATHJAX_VERSION_t::MathJax_3:
556 writeMathJaxScript(
"es5/",writeMathJax3Packages);
558 case MATHJAX_VERSION_t::MathJax_2:
561 mathJaxJs =
"<script type=\"text/x-mathjax-config\">\n"
562 "MathJax.Hub.Config({\n"
563 " extensions: [\"tex2jax.js\"";
565 for (
const auto &s : mathJaxExtensions)
567 mathJaxJs+=
", \""+
QCString(s)+
".js\"";
571 mathJaxFormat =
"HTML-CSS";
574 " jax: [\"input/TeX\",\"output/"+mathJaxFormat+
"\"],\n";
577 mathJaxJs +=
" TeX: { Macros: {\n";
582 mathJaxJs +=
"});\n";
588 mathJaxJs +=
"</script>\n";
589 mathJaxJs +=
"<script type=\"text/javascript\" async=\"async\" src=\"" + path +
"MathJax.js\"></script>\n";
598 darkModeJs=
"<script type=\"text/javascript\" src=\"$relpath^darkmode_toggle.js\"></script>\n";
603 treeViewCssJs+=
"<script type=\"text/javascript\" src=\"$relpath^cookie.js\"></script>\n";
616 {
"$datetime", [&]() ->
QCString {
return "<span class=\"datetime\"></span>"; } },
617 {
"$date", [&]() ->
QCString {
return "<span class=\"date\"></span>"; } },
618 {
"$time", [&]() ->
QCString {
return "<span class=\"time\"></span>"; } },
619 {
"$year", [&]() ->
QCString {
return "<span class=\"year\"></span>"; } },
620 {
"$navpath", [&]() ->
QCString {
return navPath; } },
621 {
"$stylesheet", [&]() ->
QCString {
return cssFile; } },
622 {
"$treeview", [&]() ->
QCString {
return treeViewCssJs; } },
623 {
"$searchbox", [&]() ->
QCString {
return searchBox; } },
624 {
"$search", [&]() ->
QCString {
return searchCssJs; } },
625 {
"$mathjax", [&]() ->
QCString {
return mathJaxJs; } },
626 {
"$darkmode", [&]() ->
QCString {
return darkModeJs; } },
627 {
"$generatedby", [&]() ->
QCString {
return generatedBy; } },
628 {
"$extrastylesheet",[&]() ->
QCString {
return extraCssText; } },
629 {
"$relpath$", [&]() ->
QCString {
return relPath; } }
632 result =
substitute(result,
"$relpath^",relPath);
638 {
"FULL_SIDEBAR", hasFullSideBar },
639 {
"DISABLE_INDEX", disableIndex },
640 {
"GENERATE_TREEVIEW", treeView },
641 {
"SEARCHENGINE", searchEngine },
642 {
"TITLEAREA", titleArea },
643 {
"PROJECT_NAME", hasProjectName },
644 {
"PROJECT_NUMBER", hasProjectNumber },
645 {
"PROJECT_BRIEF", hasProjectBrief },
646 {
"PROJECT_LOGO", hasProjectLogo },
647 {
"PROJECT_ICON", hasProjectIcon },
648 {
"COPY_CLIPBOARD", hasCopyClipboard },
664 while ((i=definitions.
find(
'\n',p))!=-1)
669 int separator = line.
find(
':');
670 assert(separator!=-1);
671 std::string key = line.
left(separator).
str();
675 map.emplace(key,value);
686 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
690 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
703 while ((i=input.
find(
"var(",p))!=-1)
705 result+=input.
mid(p,i-p);
706 int j=input.
find(
")",i+4);
708 auto it = mapping.find(input.
mid(i+4,j-i-4).
str());
709 if (it==mapping.end())
711 err(
"failed to find value variable {}. It is not longer defined in doxygen.css\n",input.
mid(i+4,j-i-4));
725 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
729 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
765 const char *p=str.
data();
778 int spacesToNextTabStop = tabSize - (
m_col%tabSize);
779 while (spacesToNextTabStop--)
798 case '\'': *
m_t <<
"'";
m_col++;
800 case '"': *
m_t <<
""";
m_col++;
804 { *
m_t <<
"<"; p++; }
806 { *
m_t <<
">"; p++; }
808 { *
m_t <<
"\\‍[";
m_col++;p++; }
810 { *
m_t <<
"\\‍]";
m_col++;p++; }
812 { *
m_t <<
"\\‍(";
m_col++;p++; }
814 { *
m_t <<
"\\‍)";
m_col++;p++; }
821 uint8_t uc =
static_cast<uint8_t
>(c);
824 *
m_t <<
"$" <<
hex[uc>>4] <<
hex[uc&0xF] <<
";";
868 const QCString &anchor,
int l,
bool writeLineAnchor)
872 const int maxLineNrStr = 10;
873 char lineNumber[maxLineNrStr];
874 char lineAnchor[maxLineNrStr];
875 qsnprintf(lineNumber,maxLineNrStr,
"%5d",l);
876 qsnprintf(lineAnchor,maxLineNrStr,
"l%05d",l);
881 *
m_t <<
"<div class=\"line\">";
885 if (writeLineAnchor) *
m_t <<
"<a id=\"" << lineAnchor <<
"\" name=\"" << lineAnchor <<
"\"></a>";
886 *
m_t <<
"<span class=\"lineno\">";
924 *
m_t <<
"<a class=\"" << className <<
"Ref\" ";
929 *
m_t <<
"<a class=\"" << className <<
"\" ";
949 *
m_t <<
"<div class=\"ttc\" id=\"" <<
id <<
"\">";
950 *
m_t <<
"<div class=\"ttname\">";
953 *
m_t <<
"<a href=\"";
969 *
m_t <<
"<div class=\"ttdeci\">";
976 *
m_t <<
"<div class=\"ttdoc\">";
983 *
m_t <<
"<div class=\"ttdef\"><b>" <<
theTranslator->trDefinition() <<
"</b> ";
986 *
m_t <<
"<a href=\"";
1002 *
m_t <<
"<div class=\"ttdecl\"><b>" <<
theTranslator->trDeclaration() <<
"</b> ";
1005 *
m_t <<
"<a href=\"";
1030 *
m_t <<
"<div class=\"line\">";
1054 *
m_t <<
"<span class=\"" << s <<
"\">";
1066 *
m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1071 *
m_t <<
"<div class=\"fragment\">";
1083 *
m_t <<
"</div><!-- fragment -->";
1093 const int maxLineNrStr = 10;
1094 char lineNumber[maxLineNrStr];
1095 qsnprintf(lineNumber,maxLineNrStr,
"%05d",lineNr);
1096 *
m_t <<
"<div class=\"foldopen\" id=\"foldopen" << lineNumber <<
1097 "\" data-start=\"" << startMarker <<
1098 "\" data-end=\"" << endMarker <<
1102 *
m_t <<
"<div class=\"line\">";
1110 *
m_t <<
"<div class=\"line\">";
1186 return (str.
contains(
"$datetime",
false) ||
1199 term(
"Could not create output directory {}\n",dname);
1369 searchCss = mgr.
getAsString(
"search_sidebar.css");
1375 searchCss = mgr.
getAsString(
"search_nomenu_toggle.css");
1384 searchCss = mgr.
getAsString(
"search_fixedtabs.css");
1391 searchCss += mgr.
getAsString(
"search_common.css");
1392 searchCss =
substitute(searchCss,
"$doxygenversion",getDoxygenVersion());
1400 t <<
"/* The standard CSS for doxygen " << getDoxygenVersion() <<
"*/\n\n";
1403 case HTML_COLORSTYLE_t::LIGHT:
1404 case HTML_COLORSTYLE_t::DARK:
1407 case HTML_COLORSTYLE_t::AUTO_LIGHT:
1408 case HTML_COLORSTYLE_t::TOGGLE:
1413 case HTML_COLORSTYLE_t::AUTO_DARK:
1419 if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_LIGHT)
1421 t <<
"@media (prefers-color-scheme: dark) {\n";
1422 t <<
" html:not(.dark-mode) {\n";
1423 t <<
" color-scheme: dark;\n\n";
1427 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_DARK)
1429 t <<
"@media (prefers-color-scheme: light) {\n";
1430 t <<
" html:not(.light-mode) {\n";
1431 t <<
" color-scheme: light;\n\n";
1435 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE)
1437 t <<
"html.dark-mode {\n";
1448 " border-bottom: none;\n"
1449 " background-color: var(--nav-background-color);\n"
1450 " border-right: 1px solid var(--nav-border-color);\n"
1465 case TIMESTAMP_t::YES:
1466 case TIMESTAMP_t::DATETIME:
1469 case TIMESTAMP_t::DATE:
1475 t <<
"--timestamp: '" << timeStampStr <<
"';\n";
1488 t <<
"span.timestamp { content: ' '; }\n";
1489 t <<
"span.timestamp:before { content: var(--timestamp); }\n\n";
1493 t <<
"span.datetime { content: ' '; }\n";
1494 t <<
"span.datetime:before { content: var(--datetime); }\n\n";
1495 t <<
"span.date { content: ' '; }\n";
1496 t <<
"span.date:before { content: var(--date); }\n\n";
1497 t <<
"span.time { content: ' '; }\n";
1498 t <<
"span.time:before { content: var(--time); }\n\n";
1499 t <<
"span.year { content: ' '; }\n";
1500 t <<
"span.year:before { content: var(--year); }\n\n";
1507 bool addScrollbarStyling =
Config_getList(HTML_EXTRA_STYLESHEET).empty();
1508 if (addScrollbarStyling)
1523 t <<
"<!-- HTML header for doxygen " << getDoxygenVersion() <<
"-->\n";
1529 t <<
"<!-- HTML footer for doxygen " << getDoxygenVersion() <<
"-->\n";
1556 << getDoxygenVersion() <<
" -->\n";
1560 m_t <<
"<script type=\"text/javascript\">\n";
1561 m_t <<
"var searchBox = new SearchBox(\"searchBox\", \""
1563 m_t <<
"</script>\n";
1567 m_t <<
"<script type=\"text/javascript\">\n";
1568 m_t <<
"$(function() { codefold.init(); });\n";
1569 m_t <<
"</script>\n";
1578 if (searchEngine && !serverBasedSearch)
1580 t <<
"<!-- window showing the filter options -->\n";
1581 t <<
"<div id=\"MSearchSelectWindow\"\n";
1582 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
1583 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
1584 t <<
" onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
1587 t <<
"<!-- iframe showing the search results (closed by default) -->\n";
1588 t <<
"<div id=\"MSearchResultsWindow\">\n";
1589 t <<
"<div id=\"MSearchResults\">\n";
1590 t <<
"<div class=\"SRPage\">\n";
1591 t <<
"<div id=\"SRIndex\">\n";
1592 t <<
"<div id=\"SRResults\"></div>\n";
1593 t <<
"<div class=\"SRStatus\" id=\"Loading\">" <<
theTranslator->trLoading() <<
"</div>\n";
1594 t <<
"<div class=\"SRStatus\" id=\"Searching\">" <<
theTranslator->trSearching() <<
"</div>\n";
1595 t <<
"<div class=\"SRStatus\" id=\"NoMatches\">" <<
theTranslator->trNoMatches() <<
"</div>\n";
1615 case TIMESTAMP_t::NO:
1619 result =
theTranslator->trGeneratedAt(
"<span class=\"timestamp\"></span>",
1623 result +=
" \n<a href=\"https://www.doxygen.org/index.html\">\n"
1624 "<img class=\"footer\" src=\"";
1626 result +=
"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> ";
1627 result += getDoxygenVersion();
1655 m_t <<
"<h3 class=\"version\">";
1684 err(
"style sheet {} does not exist or is not readable!\n",
Config_getString(HTML_STYLESHEET));
1699 for (
const auto &
fileName : extraCssFiles)
1738 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1752 m_t <<
"\n<p class=\"" << classDef <<
"\">";
1784 m_t <<
"<a class=\"elRef\" ";
1789 m_t <<
"<a class=\"el\" ";
1827 m_t <<
"<a class=\"el\" href=\"" << fn <<
"\">";
1837 m_t <<
"<a class=\"elRef\" ";
1842 m_t <<
"<a class=\"el\" ";
1858 m_t <<
"<a href=\"";
1875 if (extraIndentLevel==2)
1879 else if (extraIndentLevel==1)
1891 m_t <<
" class=\"groupheader\">";
1896 if (extraIndentLevel==2)
1900 else if (extraIndentLevel==1)
1912 switch(
type.level())
1921 default:
ASSERT(0);
break;
1923 m_t <<
"<a id=\"" << lab <<
"\" name=\"" << lab <<
"\"></a>";
1928 switch(
type.level())
1937 default:
ASSERT(0);
break;
1950 const char *p=str.
data();
1956 case '<':
m_t <<
"<";
break;
1957 case '>':
m_t <<
">";
break;
1958 case '&':
m_t <<
"&";
break;
1959 case '"':
m_t <<
""";
break;
1960 case '-':
if (inHtmlComment)
m_t <<
"-";
else m_t <<
"-";
break;
1963 {
m_t <<
"<"; p++; }
1965 {
m_t <<
">"; p++; }
1967 {
m_t <<
"\\‍["; p++; }
1969 {
m_t <<
"\\‍]"; p++; }
1971 {
m_t <<
"\\‍("; p++; }
1973 {
m_t <<
"\\‍)"; p++; }
1994 const QCString &relPath,
int sectionCount)
1998 if (dynamicSections)
2000 t <<
"<div id=\"dynsection-" << sectionCount <<
"\" "
2001 "onclick=\"return dynsection.toggleVisibility(this)\" "
2002 "class=\"dynheader closed\" "
2003 "style=\"cursor:pointer;\">"
2004 "<span class=\"dynarrow\"><span class=\"arrowhead closed\"></span></span>";
2008 t <<
"<div class=\"dynheader\">\n";
2022 if (dynamicSections)
2024 t <<
"<div id=\"dynsection-" << sectionCount <<
"-summary\" "
2025 "class=\"dynsummary\" "
2026 "style=\"display:block;\">\n";
2034 if (dynamicSections)
2044 if (dynamicSections)
2046 t <<
"<div id=\"dynsection-" << sectionCount <<
"-content\" "
2047 "class=\"dyncontent\" "
2048 "style=\"display:none;\">\n";
2052 t <<
"<div class=\"dyncontent\">\n";
2080 m_t <<
" <div class=\"center\">\n";
2081 m_t <<
" <img src=\"";
2083 m_t <<
"_map\" alt=\"\"/>\n";
2093 m_t <<
" <div class=\"center\">\n";
2094 m_t <<
" <img src=\"";
2122 m_t <<
"<table class=\"memberdecls\">\n";
2128 m_t <<
" inherit " << inheritId;
2145 m_t <<
"</td></tr>\n";
2154 m_t <<
"</td></tr>\n";
2158 m_t <<
" inherit " << inheritId;
2160 m_t <<
" template\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">";
2165 m_t <<
"<div class=\"compoundTemplParams\">";
2176 m_t <<
" </td><td class=\"memItemRight\" valign=\"bottom\">";
2181 if (!initTag)
m_t <<
" </td>";
2193 DBG_HTML(
m_t <<
"<!-- startMemberDescription -->\n")
2196 m_t <<
"<table class=\"memberdecls\">\n";
2199 m_t <<
"<tr class=\"memdesc:" << anchor;
2202 m_t <<
" inherit " << inheritId;
2205 m_t <<
"<td class=\"mdescLeft\"> </td>";
2206 if (typ)
m_t <<
"<td class=\"mdescLeft\"> </td>";
2207 m_t <<
"<td class=\"mdescRight\">";
2212 DBG_HTML(
m_t <<
"<!-- endMemberDescription -->\n")
2213 m_t <<
"<br /></td></tr>\n";
2229 m_t <<
"</table>\n";
2243 m_t <<
"<table class=\"memberdecls\">\n";
2246 m_t <<
"<tr class=\"heading\"><td colspan=\"" << typ <<
"\"><h2";
2249 m_t <<
" id=\"header-" << anchor <<
"\"";
2251 m_t <<
" class=\"groupheader\">";
2254 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>\n";
2261 m_t <<
"</h2></td></tr>\n";
2269 m_t <<
"<table class=\"memberdecls\">\n";
2272 m_t <<
"<tr><td class=\"ititle\" colspan=\"2\">";
2278 m_t <<
"</td></tr>\n";
2288 m_t <<
"</table>\n";
2323 int memCount,
int memTotal,
bool )
2326 m_t <<
"\n<h2 class=\"memtitle\">"
2327 <<
"<span class=\"permalink\"><a href=\"#" << anchor <<
"\">◆ </a></span>";
2331 m_t <<
" <span class=\"overload\">[" << memCount <<
"/" << memTotal <<
"]</span>";
2334 m_t <<
"\n<div class=\"memitem\">\n";
2335 m_t <<
"<div class=\"memproto\">\n";
2340 DBG_HTML(
m_t <<
"<!-- startMemberDocPrefixItem -->\n";)
2341 m_t <<
"<div class=\"memtemplate\">\n";
2346 DBG_HTML(
m_t <<
"<!-- endMemberDocPrefixItem -->\n";)
2354 m_t <<
" <table class=\"memname\">\n";
2357 m_t <<
" <td class=\"memname\">";
2370 if (openBracket)
m_t <<
"(";
2378 DBG_HTML(
m_t <<
"<!-- startFirstParameterType -->\n";)
2379 m_t <<
" <td class=\"paramtype\">";
2385 m_t <<
" <td class=\"paramkey\">" << key <<
"</td>\n";
2386 m_t <<
" <td></td>\n";
2387 m_t <<
" <td class=\"paramtype\">";
2400 m_t <<
" <td class=\"paramname\"><span class=\"paramname\"><em>";
2406 m_t <<
"</em></span>";
2411 DBG_HTML(
m_t <<
"<!-- startParameterExtra -->\n";)
2421 if (closeBracket)
m_t <<
"</td><td>)";
2428 if (closeBracket)
m_t <<
")";
2440 m_t <<
"<span class=\"paramdefsep\">";
2442 m_t <<
"</span><span class=\"paramdefval\">";
2465 m_t <<
" <td align=\"right\">";
2469 m_t <<
prefix <<
"</td><td>(</td><td colspan=\"2\">";
2470 else if (closeBracket)
2471 m_t <<
" )</td><td></td><td></td><td>";
2473 m_t <<
"</td><td></td><td colspan=\"2\">";
2483 m_t <<
" </table>\n";
2502 if (generateLegend && !umlLook)
2505 m_t <<
"<center><span class=\"legend\">[";
2508 if (generateTreeView)
m_t <<
"target=\"top\" ";
2514 m_t <<
"]</span></center>";
2600 m_t <<
"<tr id=\"" <<
id <<
"\" class=\"groupHeader\"><td colspan=\"2\"><div class=\"groupHeader\">";
2605 m_t <<
"</div></td></tr>\n";
2610 m_t <<
"<tr><td colspan=\"2\" class=\"ititle\"><div class=\"groupText\">";
2615 m_t <<
"</div></td></tr>\n";
2630 m_t <<
"<div class=\"memdoc\">\n";
2636 m_t <<
"\n</div>\n" <<
"</div>\n";
2645 for (
int i=0; i<n; i++)
2653 m_t <<
"<table class=\"fieldtable\">\n"
2654 <<
"<tr><th colspan=\"" << (hasInits?3:2) <<
"\">" << title <<
"</th></tr>";
2658 m_t <<
"</table>\n";
2673 m_t <<
"<td class=\"fieldname\">";
2678 m_t <<
" </td>";
2683 m_t <<
"<td class=\"fieldinit\">";
2688 m_t <<
" </td>";
2693 m_t <<
"<td class=\"fielddoc\">";
2703 m_t <<
"<dl class=\"section examples\"><dt>";
2716 if (astImpl && sectionLevel<=
m_tocState.maxLevel)
2720 std::visit(visitor,astImpl->
root);
2732 t <<
" <div id=\"navrow1\" class=\"tabs\">\n";
2736 t <<
" <div id=\"navrow2\" class=\"tabs2\">\n";
2738 t <<
" <ul class=\"tablist\">\n";
2766 t <<
" class=\"current\"";
2776 if (!l.
isEmpty()) t <<
"</a>";
2787 case LayoutNavEntry::MainPage:
return TRUE;
2788 case LayoutNavEntry::User:
return TRUE;
2789 case LayoutNavEntry::UserGroup:
return TRUE;
2790 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
2791 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
2792 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
2793 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
2795 case LayoutNavEntry::Namespaces:
return showNamespaces && index.numDocumentedNamespaces()>0;
2796 case LayoutNavEntry::NamespaceList:
return showNamespaces && index.numDocumentedNamespaces()>0;
2798 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
2799 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
2800 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
2801 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
2802 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
2804 case LayoutNavEntry::Files:
return showFiles && index.numDocumentedFiles()>0;
2805 case LayoutNavEntry::FileList:
return showFiles && index.numDocumentedFiles()>0;
2808 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
2809 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
2810 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
2811 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
2812 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
2813 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
2814 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
2815 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
2816 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
2817 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
2818 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
2819 case LayoutNavEntry::None:
2820 assert(kind != LayoutNavEntry::None);
2830 for (
const auto &entry : root->
children())
2837 for (
const auto &entry : root->
children())
2842 t <<
"<li><a href=\"" << relPath << url <<
"\"><span>";
2844 t <<
"</span></a>\n";
2857 bool highlightParent,
bool highlightSearch)
2880 entry.get()==hlEntry &&
2881 (!entry->children().empty() ||
2882 (entry->kind()==kind && !highlightParent)
2900 if (disableIndex || !generateTreeView || !fullSidebar)
2902 if (!serverBasedSearch)
2910 if (!highlightSearch)
2951 bool highlightParent=
false;
2979 highlightParent =
true;
break;
2981 highlightParent =
true;
break;
2983 highlightParent =
true;
break;
2985 highlightParent =
true;
break;
2987 highlightParent =
true;
break;
2989 highlightParent =
true;
break;
2991 highlightParent =
true;
break;
2993 highlightParent =
true;
break;
2998 if (!disableIndex && dynamicMenus)
3007 searchPage =
"search.php";
3009 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menudata.js\"></script>\n";
3010 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menu.js\"></script>\n";
3011 t <<
"<script type=\"text/javascript\">\n";
3012 t <<
"$(function() {\n";
3013 t <<
" initMenu('" << relPath <<
"',"
3014 << (searchEngine && !(generateTreeView && fullSidebar)?
"true":
"false") <<
","
3015 << (serverBasedSearch?
"true":
"false") <<
",'"
3016 << searchPage <<
"','"
3018 << (generateTreeView?
"true":
"false")
3022 if (!serverBasedSearch)
3024 if (!disableIndex && dynamicMenus && !fullSidebar)
3026 t <<
" $(function() { init_search(); });\n";
3031 t <<
" $(function() {\n"
3032 <<
" if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n";
3038 t <<
"<div id=\"main-nav\"></div>\n";
3040 else if (!disableIndex)
3044 if (!hlEntry && altKind!=LayoutNavEntry::None) { hlEntry=root->
find(altKind); kind=altKind; }
3047 highlightParent=
TRUE;
3048 hlEntry = root->
children().front().get();
3049 if (hlEntry==
nullptr)
3054 if (kind==LayoutNavEntry::UserGroup)
3062 t <<
"<div id=\"main-nav\">\n";
3066 t <<
"</div><!-- main-nav -->\n";
3069 else if (!generateTreeView)
3073 if (generateTreeView && !disableIndex && fullSidebar && !extraTabs)
3075 t <<
"<div id=\"container\"><div id=\"doc-content\">\n";
3082 m_t <<
"</div><!-- top -->\n";
3083 if (!generateTreeView)
3085 m_t <<
"<div id=\"doc-content\">\n";
3094 if (generateTreeView)
3101 "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n");
3104 " <div id=\"nav-tree\">\n"
3105 " <div id=\"nav-tree-contents\">\n"
3106 " <div id=\"nav-sync\" class=\"sync\"></div>\n"
3109 " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
3110 " class=\"ui-resizable-handle\">\n"
3113 "<script type=\"text/javascript\">\n"
3114 "$(function(){initNavTree('" + fn +
"','" + relpath +
"','" + allMembersFile +
"'); });\n"
3118 result+=
"<div id=\"container\">\n<div id=\"doc-content\">\n";
3136 m_t <<
"<div class=\"contents\">\n";
3141 m_t <<
"</div><!-- contents -->\n";
3151 m_t <<
"</div><!-- PageDoc -->\n";
3165 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3170 QCString configFileName = htmlOutput+
"/search_config.php";
3176 t <<
"$config = array(\n";
3177 t <<
" 'PROJECT_NAME' => \"" <<
convertToHtml(projectName) <<
"\",\n";
3178 t <<
" 'GENERATE_TREEVIEW' => " << (generateTreeView?
"true":
"false") <<
",\n";
3179 t <<
" 'DISABLE_INDEX' => " << (disableIndex?
"true":
"false") <<
",\n";
3180 t <<
" 'FULL_SIDEBAR' => " << (fullSidebar?
"true":
"false") <<
",\n";
3182 t <<
"$translator = array(\n";
3183 t <<
" 'search_results_title' => \"" <<
theTranslator->trSearchResultsTitle() <<
"\",\n";
3184 t <<
" 'search_results' => array(\n";
3185 t <<
" 0 => \"" <<
theTranslator->trSearchResults(0) <<
"\",\n";
3186 t <<
" 1 => \"" <<
theTranslator->trSearchResults(1) <<
"\",\n";
3189 t <<
" 'search_matches' => \"" <<
theTranslator->trSearchMatches() <<
"\",\n";
3190 t <<
" 'search' => \"" <<
theTranslator->trSearch() <<
"\",\n";
3208 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3209 << getDoxygenVersion() <<
" -->\n";
3210 t <<
"<script type=\"text/javascript\">\n";
3211 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3215 if (!disableIndex && !quickLinksAfterSplitbar)
3219 if (generateTreeView)
3221 t <<
"</div><!-- top -->\n";
3224 if (quickLinksAfterSplitbar)
3228 t <<
"<!-- generated -->\n";
3231 t <<
"require_once \"search_functions.php\";\n";
3236 if (generateTreeView)
3238 t <<
"</div><!-- doc-content -->\n";
3239 t <<
"</div><!-- container -->\n";
3246 QCString scriptName = htmlOutput+
"/search/search.js";
3255 err(
"Failed to open file '{}' for writing...\n",scriptName);
3264 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3273 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3274 << getDoxygenVersion() <<
" -->\n";
3275 t <<
"<script type=\"text/javascript\">\n";
3276 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3280 if (!disableIndex && !quickLinksAfterSplitbar)
3284 if (generateTreeView)
3286 t <<
"</div><!-- top -->\n";
3289 if (quickLinksAfterSplitbar)
3294 t <<
"<div class=\"header\">\n";
3295 t <<
" <div class=\"headertitle\">\n";
3296 t <<
" <div class=\"title\">" <<
theTranslator->trSearchResultsTitle() <<
"</div>\n";
3299 t <<
"<div class=\"contents\">\n";
3301 t <<
"<div id=\"searchresults\"></div>\n";
3304 if (generateTreeView)
3306 t <<
"</div><!-- doc-content -->\n";
3307 t <<
"</div><!-- container -->\n";
3315 QCString scriptName = dname+
"/search/search.js";
3320 t <<
"var searchResultsText=["
3325 t <<
"var tagMap = {\n";
3329 for (
const auto &ml : extraSearchMappings)
3332 int eqPos = mapLine.
find(
'=');
3339 if (!first) t <<
",\n";
3340 t <<
" \"" << tagName <<
"\": \"" << destName <<
"\"";
3345 if (!first) t <<
"\n";
3349 t <<
"$(function() {\n";
3350 t <<
" var query = trim(getURLParameter('query'));\n";
3351 t <<
" if (query) {\n";
3352 t <<
" searchFor(query,0,20);\n";
3354 t <<
" var results = $('#results');\n";
3355 t <<
" results.html('<p>" <<
theTranslator->trSearchResults(0) <<
"</p>');\n";
3361 err(
"Failed to open file '{}' for writing...\n",scriptName);
3367 m_t <<
"<div class=\"typeconstraint\">\n";
3368 m_t <<
"<dl><dt><b>" << header <<
"</b></dt><dd>\n";
3369 m_t <<
"<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n";
3374 m_t <<
"<tr><td valign=\"top\"><em>";
3379 m_t <<
"</em></td>";
3384 m_t <<
"<td> :</td><td valign=\"top\"><em>";
3389 m_t <<
"</em></td>";
3394 m_t <<
"<td> ";
3399 m_t <<
"</td></tr>\n";
3404 m_t <<
"</table>\n";
3414 m_t <<
"<br class=\"" << style <<
"\" />\n";
3424 m_t <<
"<div class=\"header\">\n";
3429 m_t <<
" <div class=\"headertitle\">";
3441 m_t <<
"</div><!--header-->\n";
3448 m_t <<
"<table class=\"memberdecls\">\n";
3451 m_t <<
"<tr><td colspan=\"2\"><h3>";
3456 m_t <<
"</h3></td></tr>\n";
3461 DBG_HTML(
m_t <<
"<!-- startMemberDocSimple -->\n";)
3462 m_t <<
"<table class=\"fieldtable\">\n";
3463 m_t <<
"<tr><th colspan=\"" << (isEnum?
"2":
"3") <<
"\">";
3471 m_t <<
"</table>\n";
3476 DBG_HTML(
m_t <<
"<!-- startInlineMemberType -->\n";)
3477 m_t <<
"<tr><td class=\"fieldtype\">\n";
3482 DBG_HTML(
m_t <<
"<!-- endInlineMemberType -->\n";)
3488 DBG_HTML(
m_t <<
"<!-- startInlineMemberName -->\n";)
3489 m_t <<
"<td class=\"fieldname\">\n";
3494 DBG_HTML(
m_t <<
"<!-- endInlineMemberName -->\n";)
3500 DBG_HTML(
m_t <<
"<!-- startInlineMemberDoc -->\n";)
3501 m_t <<
"<td class=\"fielddoc\">\n";
3507 m_t <<
"</td></tr>\n";
3513 m_t <<
"<span class=\"mlabels\">";
3518 DBG_HTML(
m_t <<
"<!-- writeLabel(" << label <<
") -->\n";)
3520 auto convertLabelToClass = [](
const std::string &lab) {
3533 for (
size_t i=0; i<l; i++)
3535 char c = input.
at(i);
3536 if (c<0 || (c>=
'a' && c<=
'z') || c==
'_')
3541 else if (nmstart && (c<0 || (c>=
'a' && c<=
'z') || (c>=
'0' && c<=
'9') || c==
'_'))
3545 else if (nmstart && (c==
' ' || c==
'-'))
3553 m_t <<
"<span class=\"mlabel " << convertLabelToClass(label.
stripWhiteSpace().
str()) <<
"\">" << label <<
"</span>";
3567 DBG_HTML(
m_t <<
"<!-- writeInheritedSectionTitle -->\n";)
3569 if (!a.isEmpty()) a.
prepend(
"#");
3574 classLink +=
" href=\"";
3579 classLink +=
"href=\"";
3584 classLink=classLink+fn+a;
3586 m_t <<
"<tr class=\"inherit_header " <<
id <<
"\">"
3587 <<
"<td colspan=\"2\" onclick=\"javascript:dynsection.toggleInherit('" <<
id <<
"')\">"
3588 <<
"<span class=\"dynarrow\"><span class=\"arrowhead closed\"></span></span>"
3597 m_t <<
" <div class=\"summary\">\n";
3603 m_t <<
"<a href=\"";
3622 m_t <<
"<div id=\"page-nav\" class=\"page-nav-panel\">\n";
3623 m_t <<
"<div id=\"page-nav-resize-handle\"></div>\n";
3624 m_t <<
"<div id=\"page-nav-tree\">\n";
3625 m_t <<
"<div id=\"page-nav-contents\">\n";
3626 m_t <<
"</div><!-- page-nav-contents -->\n";
3627 m_t <<
"</div><!-- page-nav-tree -->\n";
3628 m_t <<
"</div><!-- page-nav -->\n";
3647 m_t <<
"<div class=\"toc\">";
3666 if (
type.isSection())
3669 int nextLevel =
type.level();
3677 char cs[2] = {
static_cast<char>(
'0'+l+1), 0 };
3678 const char *empty = (l!=nextLevel-1) ?
" empty" :
"";
3697 char cs[2] = {
static_cast<char>(
'0'+nextLevel), 0 };
3702 m_t <<
"<a href=\"#"+label+
"\">";
3710 int nextLevel =
type.level();
Class representing a built-in class diagram.
void writeImage(TextStream &t, const QCString &path, const QCString &relPath, const QCString &file, bool generateMap=true) const
The common base class of all entity definitions found in the sources.
Class representing a directory in the file system.
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
Class representing the abstract syntax tree of a documentation block.
Representation of an call graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
Representation of a class inheritance or dependency graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool TBRank=TRUE, bool imageMap=TRUE, int graphId=-1)
Representation of an directory dependency graph.
QCString writeGraph(TextStream &out, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1, bool linkRelations=TRUE)
Represents a graphical class hierarchy.
void writeGraph(TextStream &t, const QCString &path, const QCString &fileName)
Representation of a group collaboration graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
Representation of an include dependency graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
static PageLinkedMap * exampleLinkedMap
static IndexList * indexList
static QCString htmlFileExtension
Minimal replacement for QFileInfo.
std::string fileName() const
std::string absFilePath() const
Generator for HTML code fragments.
void codify(const QCString &text) override
void startSpecialComment() override
void endCodeLine() override
void startFontClass(const QCString &s) override
void writeCodeAnchor(const QCString &anchor) override
size_t m_stripIndentAmount
void writeCodeLink(CodeSymbolType type, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name, const QCString &tooltip) override
void startFold(int, const QCString &, const QCString &) override
void writeLineNumber(const QCString &, const QCString &, const QCString &, int, bool) override
void startCodeLine(int) override
void _writeCodeLink(const QCString &className, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name, const QCString &tooltip)
void setRelativePath(const QCString &path)
void setStripIndentAmount(size_t amount) override
void endSpecialComment() override
HtmlCodeGenerator(TextStream *t, const QCString &relPath)
void writeTooltip(const QCString &id, const DocLinkInfo &docInfo, const QCString &decl, const QCString &desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo) override
void endFontClass() override
void startCodeFragment(const QCString &style) override
void endCodeFragment(const QCString &) override
void stripCodeComments(bool b) override
OutputType type() const override
Concrete visitor implementation for HTML output.
void startClassDiagram() override
void writeLogo() override
void endParameterExtra(bool last, bool emptyList, bool closeBracket) override
void startTocEntry(const SectionInfo *si) override
void startInlineMemberName() override
void endDescTableInit() override
void startTextLink(const QCString &file, const QCString &anchor) override
void startInlineMemberType() override
void endDescTable() override
void startParameterDefVal(const char *sep) override
void endMemberGroupHeader() override
void startIndexKey() override
void lineBreak(const QCString &style) override
void startParameterName(bool) override
void startMemberItem(const QCString &anchor, MemberItemType, const QCString &inheritId) override
static void writeSearchPage()
void startInclDepGraph() override
void insertMemberAlignLeft(MemberItemType, bool) override
void writeQuickLinks(HighlightedItem hli, const QCString &file, bool extraTabs) override
void startMemberSubtitle() override
HtmlGenerator & operator=(const HtmlGenerator &)
void writeFooter(const QCString &navPath) override
void startMemberDocName(bool) override
void endParameterType() override
void startLabels() override
void startCallGraph() override
void endMemberList() override
static QCString getNavTreeCss()
void startParagraph(const QCString &classDef) override
void endIndexList() override
void writeSearchInfo() override
void startContents() override
void startMemberDoc(const QCString &clName, const QCString &memName, const QCString &anchor, const QCString &title, int memCount, int memTotal, bool showInline) override
void startDescTableRow() override
void startDoxyAnchor(const QCString &fName, const QCString &manName, const QCString &anchor, const QCString &name, const QCString &args) override
void startDirDepGraph() override
void startCompoundTemplateParams() override
void startConstraintParam() override
void endGroupHeader(int) override
void writeNavigationPath(const QCString &s) override
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name) override
void startMemberDescription(const QCString &anchor, const QCString &inheritId, bool typ) override
void writeChar(char c) override
void endConstraintList() override
void endParameterList() override
void startMemberGroupHeader(const QCString &, bool) override
void startDotGraph() override
void startFile(const QCString &name, bool isSource, const QCString &manName, const QCString &title, int id, int hierarchyLevel) override
void endIndent() override
void endParameterName() override
void endPageDoc() override
void startMemberDocList() override
static QCString writeLogoAsString(const QCString &path)
void endDescTableRow() override
void startParameterType(bool first, const QCString &key) override
void startDescTableInit() override
void startLocalToc(int level) override
void startMemberList() override
void endQuickIndices() override
void startHeaderSection() override
void startDescTableTitle() override
void endDirDepGraph(DotDirDeps &g) override
void startIndexList() override
void endParameterDefVal() override
void endMemberGroup(bool) override
void endInlineHeader() override
static void writeFooterFile(TextStream &t)
void endMemberDescription() override
void startGroupCollaboration() override
void endClassDiagram(const ClassDiagram &, const QCString &, const QCString &) override
void startConstraintList(const QCString &) override
void startDescTable(const QCString &title, const bool hasInits) override
void endConstraintDocs() override
void writeNonBreakableSpace(int) override
void writePageOutline() override
void startInlineMemberDoc() override
void exceptionEntry(const QCString &, bool) override
static void writeTabData()
Additional initialization after indices have been created.
void endExamples() override
void endIndexKey() override
void writeString(const QCString &text) override
void endMemberDocName() override
void endContents() override
void endInlineMemberType() override
void startMemberGroupDocs() override
void startMemberDocSimple(bool) override
void startIndexItem(const QCString &ref, const QCString &file) override
OutputType type() const override
void endHeaderSection() override
void startIndent() override
void writeStyleInfo(int part) override
void addIndexItem(const QCString &, const QCString &) override
void docify_(const QCString &text, bool inHtmlComment)
void endMemberGroupDocs() override
void endDotGraph(DotClassGraph &g) override
void endMemberHeader() override
void endTextLink() override
void writeLabel(const QCString &l, bool isLast) override
void startMemberSections() override
static void writeSearchData(const QCString &dir)
void endMemberSections() override
void endMemberDocList() override
void endCompoundTemplateParams() override
static void writeExternalSearchPage()
void endDescTableData() override
void startDescTableData() override
void writeStartAnnoItem(const QCString &type, const QCString &file, const QCString &path, const QCString &name) override
static void writePageFooter(TextStream &t, const QCString &, const QCString &, const QCString &)
void endParagraph() override
void insertMemberAlign(bool) override
static void writeStyleSheetFile(TextStream &t)
void endDoxyAnchor(const QCString &fName, const QCString &anchor) override
void startMemberTemplateParams() override
void endLabels() override
void startPageDoc(const QCString &pageTitle) override
void endMemberDeclaration(const QCString &anchor, const QCString &inheritId) override
HtmlCodeGenerator * m_codeGen
void startIndexValue(bool) override
void endGroupCollaboration(DotGroupCollaboration &g) override
static void writeSearchInfoStatic(TextStream &t, const QCString &relPath)
void endLocalToc() override
std::unique_ptr< OutputCodeList > m_codeList
static void writeHeaderFile(TextStream &t, const QCString &cssname)
void startConstraintType() override
void endConstraintParam() override
static QCString writeSplitBarAsString(const QCString &name, const QCString &relpath, const QCString &allMembersFile)
void startTitleHead(const QCString &) override
void endIndexValue(const QCString &, bool) override
void addCodeGen(OutputCodeList &list) override
void startConstraintDocs() override
void endMemberTemplateParams(const QCString &anchor, const QCString &inheritId) override
void endPlainFile() override
void startIndexListItem() override
void endProjectNumber() override
void writeDoc(const IDocNodeAST *node, const Definition *, const MemberDef *, int id, int sectionLevel) override
void writeSummaryLink(const QCString &file, const QCString &anchor, const QCString &title, bool first) override
void endMemberDocPrefixItem() override
void endDescTableTitle() override
void addLabel(const QCString &, const QCString &) override
void startGroupHeader(const QCString &, int) override
void endInclDepGraph(DotInclDepGraph &g) override
void startParameterExtra() override
void startProjectNumber() override
void writeGraphicalHierarchy(DotGfxHierarchyTable &g) override
void startExamples() override
void docify(const QCString &text) override
void endInlineMemberDoc() override
void writeSplitBar(const QCString &name, const QCString &allMembersFile) override
void endCallGraph(DotCallGraph &g) override
void endConstraintType() override
void endMemberSubtitle() override
void startMemberDocPrefixItem() override
void startSection(const QCString &, const QCString &, SectionType) override
void endTocEntry(const SectionInfo *si) override
void endMemberItem(MemberItemType) override
void startMemberGroup() override
void endMemberDoc(bool) override
void endIndexItem(const QCString &ref, const QCString &file) override
void startMemberHeader(const QCString &, int) override
void endTitleHead(const QCString &, const QCString &) override
void endSection(const QCString &, SectionType) override
void startInlineHeader() override
void endInlineMemberName() override
void endMemberDocSimple(bool) override
void writeInheritedSectionTitle(const QCString &id, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &title, const QCString &name) override
void endIndexListItem() override
void startParameterList(bool) override
void startPlainFile(const QCString &name) override
opaque representation of the abstract syntax tree (AST)
static Index & instance()
static LayoutDocManager & instance()
Returns a reference to this singleton.
LayoutNavEntry * rootNavEntry() const
returns the (invisible) root of the navigation tree.
A model of a class/file/namespace member symbol.
Class representing a list of different code generators.
void add(OutputCodeIntfPtr &&p)
Abstract interface for output generators.
QCString fileName() const
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
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.
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
const std::string & str() const
QCString right(size_t len) const
void reserve(size_t size)
Reserve space for size bytes without changing the string contents.
int findRev(char c, int index=-1, bool cs=TRUE) const
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
int contains(char c, bool cs=TRUE) const
Singleton for managing resources compiled into an executable.
static ResourceMgr & instance()
Returns the one and only instance of this class.
bool copyResource(const QCString &name, const QCString &targetDir) const
Copies a registered resource to a given target directory.
QCString getAsString(const QCString &name) const
Gets the resource data as a C string.
class that provide information about a section.
static constexpr int Section
static constexpr int Subsection
static constexpr int Subsubsection
static constexpr int Page
static constexpr int Paragraph
static constexpr int Subsubparagraph
static constexpr int Subparagraph
Text streaming class that buffers data.
bool empty() const
Returns true iff the buffer is empty.
std::string str() const
Return the contents of the buffer as a std::string object.
#define Config_getInt(name)
#define Config_getList(name)
#define Config_getEnumAsString(name)
#define Config_getBool(name)
#define Config_getString(name)
#define Config_getEnum(name)
std::vector< std::string > StringVector
std::unordered_map< std::string, std::string > StringUnorderedMap
std::vector< bool > BoolVector
QCString dateToString(DateTimeType includeTime)
Returns the current date, when includeTime is set also the time is provided.
QCString yearToString()
Returns the current year as a string.
static constexpr auto hex
static QCString replaceVariables(const QCString &input)
static void fillColorStyleMap(const QCString &definitions, StringUnorderedMap &map)
static void startSectionContent(TextStream &t, int sectionCount)
static QCString g_header_file
static void endQuickIndexList(TextStream &t)
static QCString g_mathjax_code
static void writeServerSearchBox(TextStream &t, const QCString &relPath, bool highlightSearch)
static void startQuickIndexList(TextStream &t, bool topLevel=TRUE)
static void startSectionSummary(TextStream &t, int sectionCount)
static void startQuickIndexItem(TextStream &t, const QCString &l, bool hl, bool, const QCString &relPath)
static void renderQuickLinksAsTabs(TextStream &t, const QCString &relPath, LayoutNavEntry *hlEntry, LayoutNavEntry::Kind kind, bool highlightParent, bool highlightSearch)
static const SelectionMarkerInfo htmlMarkerInfo
static QCString getConvertLatexMacro()
Convert a set of LaTeX commands \(re)newcommand to a form readable by MathJax LaTeX syntax:
static void writeDefaultQuickLinks(TextStream &t, HighlightedItem hli, const QCString &file, const QCString &relPath, bool extraTabs)
static QCString g_footer_file
static void endSectionContent(TextStream &t)
static bool hasDateReplacement(const QCString &str)
static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSearch)
static QCString g_latex_macro
static void fillColorStyleMaps()
static void endQuickIndexItem(TextStream &t, const QCString &l)
static StringUnorderedMap g_lightMap
static void startSectionHeader(TextStream &t, const QCString &relPath, int sectionCount)
static void writeDefaultStyleSheet(TextStream &t)
static void renderQuickLinksAsTree(TextStream &t, const QCString &relPath, LayoutNavEntry *root)
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
static std::mutex g_indexLock
static StringUnorderedMap g_darkMap
static void endSectionHeader(TextStream &t)
static void writeClientSearchBox(TextStream &t, const QCString &relPath)
static void endSectionSummary(TextStream &t)
static QCString substituteHtmlKeywords(const QCString &file, const QCString &str, const QCString &title, const QCString &relPath, const QCString &navPath=QCString(), bool isSource=false)
Translator * theTranslator
#define warn(file, line, fmt,...)
std::ofstream openOutputStream(const QCString &name, bool append=false)
OutputCodeDefer< HtmlCodeGenerator > HtmlCodeGeneratorDefer
Portable versions of functions that are platform dependent.
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Web server based search engine.
Some helper functions for std::string.
bool literal_at(const char *data, const char(&str)[N])
returns TRUE iff data points to a substring that matches string literal str
Base class for the layout of a navigation item at the top of the HTML pages.
const LayoutNavEntryList & children() const
LayoutNavEntry * parent() const
LayoutNavEntry * find(LayoutNavEntry::Kind k, const QCString &file=QCString()) const
constexpr const char * codeSymbolType2Str(CodeSymbolType type) noexcept
std::string convertUTF8ToLower(const std::string &input)
Converts the input string into a lower case version, also taking into account non-ASCII characters th...
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.
Various UTF8 related helper functions.
QCString externalRef(const QCString &relPath, const QCString &ref, bool href)
size_t updateColumnCount(const char *s, size_t col)
QCString convertToHtml(const QCString &s, bool keepEntities)
void checkBlocks(const QCString &s, const QCString fileName, const SelectionMarkerInfo &markerInfo)
QCString correctURL(const QCString &url, const QCString &relPath)
Corrects URL url according to the relative path relPath.
QCString stripPath(const QCString &s)
QCString removeEmptyLines(const QCString &s)
QCString selectBlocks(const QCString &s, const SelectionBlockList &blockList, const SelectionMarkerInfo &markerInfo)
remove disabled blocks and all block markers from s and return the result as a string
QCString substituteKeywords(const QCString &file, const QCString &s, const KeywordSubstitutionList &keywords)
QCString relativePathToRoot(const QCString &name)
void clearSubDirs(const Dir &d)
QCString fileToString(const QCString &name, bool filter, bool isSourceCode)
QCString filterTitle(const QCString &title)
void createSubDirs(const Dir &d)
QCString externalLinkTarget(const bool parent)
QCString replaceColorMarkers(const QCString &str)
Replaces any markers of the form ##AA in input string str by new markers of the form #AABBCC,...
QCString convertToId(const QCString &s)
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.
QCString fixSpaces(const QCString &s)