68static constexpr auto hex=
"0123456789ABCDEF";
76 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
77 t <<
" <span class=\"left\">\n";
78 t <<
" <span id=\"MSearchSelect\" ";
79 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\" ";
80 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"> </span>\n";
81 t <<
" <input type=\"text\" id=\"MSearchField\" value=\"\" placeholder=\""
83 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
84 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
85 t <<
" onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
86 t <<
" </span><span class=\"right\">\n";
87 t <<
" <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
88 <<
"<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath <<
"search/close.svg\" alt=\"\"/></a>\n";
98 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
99 t <<
" <div class=\"left\">\n";
100 t <<
" <form id=\"FSearchBox\" action=\"" << relPath;
109 t <<
"\" method=\"get\">\n";
110 t <<
" <span id=\"MSearchSelectExt\"> </span>\n";
113 t <<
" <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"\" placeholder=\""
114 <<
theTranslator->trSearch() <<
"\" size=\"20\" accesskey=\"S\" \n";
115 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
116 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
118 t <<
" </div><div class=\"right\"></div>\n";
149 if (macrofile.
isEmpty())
return "";
154 const char *data = s.
data();
163 while (i < size && (data[i] ==
' ' || data[i] ==
'\t' || data[i] ==
'\n'))
165 if (data[i] ==
'\n') line++;
168 if (i >= size)
break;
172 warn(macrofile,line,
"file contains non valid code, expected '\\' got '{:c}'",data[i]);
178 i += strlen(
"newcommand");
182 i += strlen(
"renewcommand");
186 warn(macrofile,line,
"file contains non valid code, expected 'newcommand' or 'renewcommand'");
192 warn(macrofile,line,
"file contains non valid code, expected '{{' got '{:c}'",data[i]);
198 warn(macrofile,line,
"file contains non valid code, expected '\\' got '{:c}'",data[i]);
204 while (i < size && (data[i] !=
'}')) out.
addChar(data[i++]);
207 warn(macrofile,line,
"file contains non valid code, no closing '}}' for command");
220 while (i < size && (data[i] !=
']')) nr += data[i++];
223 warn(macrofile,line,
"file contains non valid code, no closing ']'");
228 else if (data[i] !=
'{')
230 warn(macrofile,line,
"file contains non valid code, expected '[' or '{{' got '{:c}'",data[i]);
237 warn(macrofile,line,
"file contains non valid code, expected '{{' got '{:c}'",data[i]);
245 while (i < size && cnt)
259 else if (data[i] !=
'"') out.
addChar(data[i++]);
285 warn(macrofile,line,
"file contains non valid code, no closing '}}' for replacement");
341 bool hasProjectName = !projectName.
isEmpty();
348 bool hasCookie = treeView || searchEngine ||
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE;
349 static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
354 cssFile =
"doxygen.css";
367 cssFile =
"doxygen.css";
374 for (
const auto &fileName : extraCssFile)
376 if (!fileName.empty())
378 QCString htmlStyleSheet = fileName.c_str();
381 extraCssText +=
"<link href=\""+htmlStyleSheet+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
388 extraCssText +=
"<link href=\"$relpath^"+
stripPath(fileName.c_str())+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
396 case TIMESTAMP_t::YES:
397 case TIMESTAMP_t::DATETIME:
401 case TIMESTAMP_t::DATE:
405 case TIMESTAMP_t::NO:
409 treeViewCssJs =
"<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
412 treeViewCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
413 "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n";
415 treeViewCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^resize.js\"></script>\n";
419 searchCssJs =
"<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
420 if (!serverBasedSearch)
422 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
424 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
426 if (!serverBasedSearch)
430 searchCssJs +=
"<script type=\"text/javascript\">\n"
431 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
432 " $(function() { init_search(); });\n"
433 "/* @license-end */\n"
441 searchCssJs +=
"<script type=\"text/javascript\">\n"
442 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
444 " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
446 " /* @license-end */\n"
451 searchCssJs +=
"<link rel=\"search\" href=\"" + relPath +
452 "search_opensearch.php?v=opensearch.xml\" "
453 "type=\"application/opensearchdescription+xml\" title=\"" +
454 (hasProjectName ? projectName :
QCString(
"Doxygen")) +
470 switch (mathJaxVersion)
472 case MATHJAX_VERSION_t::MathJax_3:
475 "<script type=\"text/javascript\">\n"
476 "window.MathJax = {\n"
478 " ignoreHtmlClass: 'tex2jax_ignore',\n"
479 " processHtmlClass: 'tex2jax_process'\n"
485 if (!mathJaxExtensions.empty())
488 mathJaxJs+=
" loader: {\n"
490 for (
const auto &s : mathJaxExtensions)
492 if (!first) mathJaxJs+=
",";
493 mathJaxJs+=
"'[tex]/"+
QCString(s.c_str())+
"'";
499 mathJaxJs+=
" tex: {\n"
506 " packages: ['base','configmacros'";
509 mathJaxJs+=
",'newcommand'";
511 for (
const auto &s : mathJaxExtensions)
513 mathJaxJs+=
",'"+
QCString(s.c_str())+
"'";
529 mathJaxJs +=
"</script>\n";
530 mathJaxJs +=
"<script type=\"text/javascript\" id=\"MathJax-script\" async=\"async\" src=\"" +
531 path +
"es5/tex-" + mathJaxFormat.
lower() +
".js\">";
532 mathJaxJs+=
"</script>\n";
535 case MATHJAX_VERSION_t::MathJax_2:
537 mathJaxJs =
"<script type=\"text/x-mathjax-config\">\n"
538 "MathJax.Hub.Config({\n"
539 " extensions: [\"tex2jax.js\"";
541 for (
const auto &s : mathJaxExtensions)
543 mathJaxJs+=
", \""+
QCString(s.c_str())+
".js\"";
547 mathJaxFormat =
"HTML-CSS";
550 " jax: [\"input/TeX\",\"output/"+mathJaxFormat+
"\"],\n";
553 mathJaxJs +=
" TeX: { Macros: {\n";
558 mathJaxJs +=
"});\n";
564 mathJaxJs +=
"</script>\n";
565 mathJaxJs +=
"<script type=\"text/javascript\" async=\"async\" src=\"" + path +
"MathJax.js\"></script>\n";
574 darkModeJs=
"<script type=\"text/javascript\" src=\"$relpath^darkmode_toggle.js\"></script>\n";
579 treeViewCssJs+=
"<script type=\"text/javascript\" src=\"$relpath^cookie.js\"></script>\n";
592 {
"$navpath", [&]() {
return navPath; } },
593 {
"$stylesheet", [&]() {
return cssFile; } },
594 {
"$treeview", [&]() {
return treeViewCssJs; } },
595 {
"$searchbox", [&]() {
return searchBox; } },
596 {
"$search", [&]() {
return searchCssJs; } },
597 {
"$mathjax", [&]() {
return mathJaxJs; } },
598 {
"$darkmode", [&]() {
return darkModeJs; } },
599 {
"$generatedby", [&]() {
return generatedBy; } },
600 {
"$extrastylesheet",[&]() {
return extraCssText; } },
601 {
"$relpath$", [&]() {
return relPath; } }
604 result =
substitute(result,
"$relpath^",relPath);
610 {
"FULL_SIDEBAR", hasFullSideBar },
611 {
"DISABLE_INDEX", disableIndex },
612 {
"GENERATE_TREEVIEW", treeView },
613 {
"SEARCHENGINE", searchEngine },
614 {
"TITLEAREA", titleArea },
615 {
"PROJECT_NAME", hasProjectName },
616 {
"PROJECT_NUMBER", hasProjectNumber },
617 {
"PROJECT_BRIEF", hasProjectBrief },
618 {
"PROJECT_LOGO", hasProjectLogo },
619 {
"PROJECT_ICON", hasProjectIcon },
620 {
"COPY_CLIPBOARD", hasCopyClipboard },
636 while ((i=definitions.
find(
'\n',p))!=-1)
641 int separator = line.
find(
':');
642 assert(separator!=-1);
643 std::string key = line.
left(separator).
str();
647 map.emplace(key,value);
658 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
662 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
674 while ((i=input.
find(
"var(",p))!=-1)
677 int j=input.
find(
")",i+4);
679 auto it = mapping.find(input.
mid(i+4,j-i-4).
str());
680 assert(it!=mapping.end());
681 output.
addStr(it->second);
691 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
695 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
731 const char *p=str.
data();
744 int spacesToNextTabStop = tabSize - (
m_col%tabSize);
745 while (spacesToNextTabStop--)
764 case '\'': *
m_t <<
"'";
m_col++;
766 case '"': *
m_t <<
""";
m_col++;
770 { *
m_t <<
"<"; p++; }
772 { *
m_t <<
">"; p++; }
774 { *
m_t <<
"\\‍(";
m_col++;p++; }
776 { *
m_t <<
"\\‍)";
m_col++;p++; }
783 uint8_t uc =
static_cast<uint8_t
>(c);
786 *
m_t <<
"$" <<
hex[uc>>4] <<
hex[uc&0xF] <<
";";
830 const QCString &anchor,
int l,
bool writeLineAnchor)
834 const int maxLineNrStr = 10;
835 char lineNumber[maxLineNrStr];
836 char lineAnchor[maxLineNrStr];
837 qsnprintf(lineNumber,maxLineNrStr,
"%5d",l);
838 qsnprintf(lineAnchor,maxLineNrStr,
"l%05d",l);
842 *
m_t <<
"<div class=\"line\">";
846 if (writeLineAnchor) *
m_t <<
"<a id=\"" << lineAnchor <<
"\" name=\"" << lineAnchor <<
"\"></a>";
847 *
m_t <<
"<span class=\"lineno\">";
885 *
m_t <<
"<a class=\"" << className <<
"Ref\" ";
890 *
m_t <<
"<a class=\"" << className <<
"\" ";
910 *
m_t <<
"<div class=\"ttc\" id=\"" <<
id <<
"\">";
911 *
m_t <<
"<div class=\"ttname\">";
914 *
m_t <<
"<a href=\"";
930 *
m_t <<
"<div class=\"ttdeci\">";
937 *
m_t <<
"<div class=\"ttdoc\">";
944 *
m_t <<
"<div class=\"ttdef\"><b>" <<
theTranslator->trDefinition() <<
"</b> ";
947 *
m_t <<
"<a href=\"";
963 *
m_t <<
"<div class=\"ttdecl\"><b>" <<
theTranslator->trDeclaration() <<
"</b> ";
966 *
m_t <<
"<a href=\"";
990 *
m_t <<
"<div class=\"line\">";
1013 *
m_t <<
"<span class=\"" << s <<
"\">";
1025 *
m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1030 *
m_t <<
"<div class=\"fragment\">";
1038 *
m_t <<
"</div><!-- fragment -->";
1047 const int maxLineNrStr = 10;
1048 char lineNumber[maxLineNrStr];
1049 qsnprintf(lineNumber,maxLineNrStr,
"%05d",lineNr);
1050 *
m_t <<
"<div class=\"foldopen\" id=\"foldopen" << lineNumber <<
1051 "\" data-start=\"" << startMarker <<
1052 "\" data-end=\"" << endMarker <<
1056 *
m_t <<
"<div class=\"line\">";
1063 *
m_t <<
"<div class=\"line\">";
1142 term(
"Could not create output directory {}\n",dname);
1362 searchCss = mgr.
getAsString(
"search_sidebar.css");
1364 else if (
Config_getBool(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE)
1366 searchCss = mgr.
getAsString(
"search_nomenu_toggle.css");
1375 searchCss = mgr.
getAsString(
"search_fixedtabs.css");
1382 searchCss += mgr.
getAsString(
"search_common.css");
1383 searchCss =
substitute(searchCss,
"$doxygenversion",getDoxygenVersion());
1391 t <<
"/* The standard CSS for doxygen " << getDoxygenVersion() <<
"*/\n\n";
1394 case HTML_COLORSTYLE_t::LIGHT:
1395 case HTML_COLORSTYLE_t::DARK:
1398 case HTML_COLORSTYLE_t::AUTO_LIGHT:
1399 case HTML_COLORSTYLE_t::TOGGLE:
1404 case HTML_COLORSTYLE_t::AUTO_DARK:
1410 if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_LIGHT)
1412 t <<
"@media (prefers-color-scheme: dark) {\n";
1413 t <<
" html:not(.dark-mode) {\n";
1414 t <<
" color-scheme: dark;\n\n";
1418 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_DARK)
1420 t <<
"@media (prefers-color-scheme: light) {\n";
1421 t <<
" html:not(.light-mode) {\n";
1422 t <<
" color-scheme: light;\n\n";
1426 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE)
1428 t <<
"html.dark-mode {\n";
1438 bool addScrollbarStyling =
Config_getList(HTML_EXTRA_STYLESHEET).empty();
1439 if (addScrollbarStyling)
1454 t <<
"<!-- HTML header for doxygen " << getDoxygenVersion() <<
"-->\n";
1460 t <<
"<!-- HTML footer for doxygen " << getDoxygenVersion() <<
"-->\n";
1487 << getDoxygenVersion() <<
" -->\n";
1491 m_t <<
"<script type=\"text/javascript\">\n";
1492 m_t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
1493 m_t <<
"var searchBox = new SearchBox(\"searchBox\", \""
1495 m_t <<
"/* @license-end */\n";
1496 m_t <<
"</script>\n";
1500 m_t <<
"<script type=\"text/javascript\">\n";
1501 m_t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
1502 m_t <<
"$(function() { codefold.init(" << (
m_relPath.isEmpty() ?
"0" :
"1") <<
"); });\n";
1503 m_t <<
"/* @license-end */\n";
1504 m_t <<
"</script>\n";
1513 if (searchEngine && !serverBasedSearch)
1515 t <<
"<!-- window showing the filter options -->\n";
1516 t <<
"<div id=\"MSearchSelectWindow\"\n";
1517 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
1518 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
1519 t <<
" onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
1522 t <<
"<!-- iframe showing the search results (closed by default) -->\n";
1523 t <<
"<div id=\"MSearchResultsWindow\">\n";
1524 t <<
"<div id=\"MSearchResults\">\n";
1525 t <<
"<div class=\"SRPage\">\n";
1526 t <<
"<div id=\"SRIndex\">\n";
1527 t <<
"<div id=\"SRResults\"></div>\n";
1528 t <<
"<div class=\"SRStatus\" id=\"Loading\">" <<
theTranslator->trLoading() <<
"</div>\n";
1529 t <<
"<div class=\"SRStatus\" id=\"Searching\">" <<
theTranslator->trSearching() <<
"</div>\n";
1530 t <<
"<div class=\"SRStatus\" id=\"NoMatches\">" <<
theTranslator->trNoMatches() <<
"</div>\n";
1550 case TIMESTAMP_t::YES:
1551 case TIMESTAMP_t::DATETIME:
1557 case TIMESTAMP_t::DATE:
1563 case TIMESTAMP_t::NO:
1567 result +=
" \n<a href=\"https://www.doxygen.org/index.html\">\n"
1568 "<img class=\"footer\" src=\"";
1570 result +=
"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> ";
1571 result += getDoxygenVersion();
1599 m_t <<
"<h3 class=\"version\">";
1628 err(
"style sheet {} does not exist or is not readable!\n",
Config_getString(HTML_STYLESHEET));
1643 for (
const auto &
fileName : extraCssFiles)
1683 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1697 m_t <<
"\n<p class=\"" << classDef <<
"\">";
1729 m_t <<
"<a class=\"elRef\" ";
1734 m_t <<
"<a class=\"el\" ";
1772 m_t <<
"<a class=\"el\" href=\"" << fn <<
"\">";
1782 m_t <<
"<a class=\"elRef\" ";
1787 m_t <<
"<a class=\"el\" ";
1803 m_t <<
"<a href=\"";
1820 if (extraIndentLevel==2)
1822 m_t <<
"<h4 class=\"groupheader\">";
1824 else if (extraIndentLevel==1)
1826 m_t <<
"<h3 class=\"groupheader\">";
1830 m_t <<
"<h2 class=\"groupheader\">";
1836 if (extraIndentLevel==2)
1840 else if (extraIndentLevel==1)
1852 switch(
type.level())
1861 default:
ASSERT(0);
break;
1863 m_t <<
"<a id=\"" << lab <<
"\" name=\"" << lab <<
"\"></a>";
1868 switch(
type.level())
1877 default:
ASSERT(0);
break;
1890 const char *p=str.
data();
1896 case '<':
m_t <<
"<";
break;
1897 case '>':
m_t <<
">";
break;
1898 case '&':
m_t <<
"&";
break;
1899 case '"':
m_t <<
""";
break;
1900 case '-':
if (inHtmlComment)
m_t <<
"-";
else m_t <<
"-";
break;
1903 {
m_t <<
"<"; p++; }
1905 {
m_t <<
">"; p++; }
1907 {
m_t <<
"\\‍("; p++; }
1909 {
m_t <<
"\\‍)"; p++; }
1930 const QCString &relPath,
int sectionCount)
1934 if (dynamicSections)
1936 t <<
"<div id=\"dynsection-" << sectionCount <<
"\" "
1937 "onclick=\"return dynsection.toggleVisibility(this)\" "
1938 "class=\"dynheader closed\" "
1939 "style=\"cursor:pointer;\">\n";
1940 t <<
" <img id=\"dynsection-" << sectionCount <<
"-trigger\" src=\""
1941 << relPath <<
"closed.png\" alt=\"+\"/> ";
1945 t <<
"<div class=\"dynheader\">\n";
1959 if (dynamicSections)
1961 t <<
"<div id=\"dynsection-" << sectionCount <<
"-summary\" "
1962 "class=\"dynsummary\" "
1963 "style=\"display:block;\">\n";
1971 if (dynamicSections)
1981 if (dynamicSections)
1983 t <<
"<div id=\"dynsection-" << sectionCount <<
"-content\" "
1984 "class=\"dyncontent\" "
1985 "style=\"display:none;\">\n";
1989 t <<
"<div class=\"dyncontent\">\n";
2017 m_t <<
" <div class=\"center\">\n";
2018 m_t <<
" <img src=\"";
2020 m_t <<
"_map\" alt=\"\"/>\n";
2030 m_t <<
" <div class=\"center\">\n";
2031 m_t <<
" <img src=\"";
2059 m_t <<
"<table class=\"memberdecls\">\n";
2062 m_t <<
"<tr class=\"memitem:" << anchor;
2065 m_t <<
" inherit " << inheritId;
2070 m_t <<
" id=\"r_" << anchor <<
"\"";
2082 m_t <<
"</td></tr>\n";
2091 m_t <<
"</td></tr>\n";
2092 m_t <<
"<tr class=\"memitem:" << anchor;
2095 m_t <<
" inherit " << inheritId;
2097 m_t <<
"\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">";
2102 m_t <<
"<div class=\"compoundTemplParams\">";
2113 QCString className = templ ?
"memTemplItemRight" :
"memItemRight";
2114 m_t <<
" </td><td class=\"" << className <<
"\" valign=\"bottom\">";
2119 if (!initTag)
m_t <<
" </td>";
2131 DBG_HTML(
m_t <<
"<!-- startMemberDescription -->\n")
2134 m_t <<
"<table class=\"memberdecls\">\n";
2137 m_t <<
"<tr class=\"memdesc:" << anchor;
2140 m_t <<
" inherit " << inheritId;
2143 m_t <<
"<td class=\"mdescLeft\"> </td>";
2144 if (typ)
m_t <<
"<td class=\"mdescLeft\"> </td>";
2145 m_t <<
"<td class=\"mdescRight\">";
2150 DBG_HTML(
m_t <<
"<!-- endMemberDescription -->\n")
2151 m_t <<
"<br /></td></tr>\n";
2167 m_t <<
"</table>\n";
2181 m_t <<
"<table class=\"memberdecls\">\n";
2184 m_t <<
"<tr class=\"heading\"><td colspan=\"" << typ <<
"\"><h2 class=\"groupheader\">";
2187 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>\n";
2194 m_t <<
"</h2></td></tr>\n";
2200 m_t <<
"<tr><td class=\"ititle\" colspan=\"2\">";
2206 m_t <<
"</td></tr>\n";
2216 m_t <<
"</table>\n";
2251 int memCount,
int memTotal,
bool )
2254 m_t <<
"\n<h2 class=\"memtitle\">"
2255 <<
"<span class=\"permalink\"><a href=\"#" << anchor <<
"\">◆ </a></span>";
2259 m_t <<
" <span class=\"overload\">[" << memCount <<
"/" << memTotal <<
"]</span>";
2262 m_t <<
"\n<div class=\"memitem\">\n";
2263 m_t <<
"<div class=\"memproto\">\n";
2268 DBG_HTML(
m_t <<
"<!-- startMemberDocPrefixItem -->\n";)
2269 m_t <<
"<div class=\"memtemplate\">\n";
2274 DBG_HTML(
m_t <<
"<!-- endMemberDocPrefixItem -->\n";)
2282 m_t <<
" <table class=\"memname\">\n";
2285 m_t <<
" <td class=\"memname\">";
2298 if (openBracket)
m_t <<
"(";
2306 DBG_HTML(
m_t <<
"<!-- startFirstParameterType -->\n";)
2307 m_t <<
" <td class=\"paramtype\">";
2313 m_t <<
" <td class=\"paramkey\">" << key <<
"</td>\n";
2314 m_t <<
" <td></td>\n";
2315 m_t <<
" <td class=\"paramtype\">";
2328 m_t <<
" <td class=\"paramname\"><span class=\"paramname\"><em>";
2334 m_t <<
"</em></span>";
2339 DBG_HTML(
m_t <<
"<!-- startParameterExtra -->\n";)
2349 if (closeBracket)
m_t <<
"</td><td>)";
2356 if (closeBracket)
m_t <<
")";
2368 m_t <<
"<span class=\"paramdefsep\">";
2370 m_t <<
"</span><span class=\"paramdefval\">";
2393 m_t <<
" <td align=\"right\">";
2397 m_t <<
prefix <<
"</td><td>(</td><td colspan=\"2\">";
2398 else if (closeBracket)
2399 m_t <<
" )</td><td></td><td></td><td>";
2401 m_t <<
"</td><td></td><td colspan=\"2\">";
2411 m_t <<
" </table>\n";
2430 if (generateLegend && !umlLook)
2433 m_t <<
"<center><span class=\"legend\">[";
2436 if (generateTreeView)
m_t <<
"target=\"top\" ";
2442 m_t <<
"]</span></center>";
2528 m_t <<
"<tr><td colspan=\"2\"><div class=\"groupHeader\">";
2533 m_t <<
"</div></td></tr>\n";
2538 m_t <<
"<tr><td colspan=\"2\"><div class=\"groupText\">";
2543 m_t <<
"</div></td></tr>\n";
2558 m_t <<
"<div class=\"memdoc\">\n";
2564 m_t <<
"\n</div>\n" <<
"</div>\n";
2573 for (
int i=0; i<n; i++)
2581 m_t <<
"<table class=\"fieldtable\">\n"
2582 <<
"<tr><th colspan=\"" << (hasInits?3:2) <<
"\">" << title <<
"</th></tr>";
2586 m_t <<
"</table>\n";
2601 m_t <<
"<td class=\"fieldname\">";
2606 m_t <<
" </td>";
2611 m_t <<
"<td class=\"fieldinit\">";
2616 m_t <<
" </td>";
2621 m_t <<
"<td class=\"fielddoc\">";
2631 m_t <<
"<dl class=\"section examples\"><dt>";
2648 std::visit(visitor,astImpl->
root);
2660 t <<
" <div id=\"navrow1\" class=\"tabs\">\n";
2664 t <<
" <div id=\"navrow2\" class=\"tabs2\">\n";
2666 t <<
" <ul class=\"tablist\">\n";
2694 t <<
" class=\"current\"";
2704 if (!l.
isEmpty()) t <<
"</a>";
2715 case LayoutNavEntry::MainPage:
return TRUE;
2716 case LayoutNavEntry::User:
return TRUE;
2717 case LayoutNavEntry::UserGroup:
return TRUE;
2718 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
2719 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
2720 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
2721 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
2723 case LayoutNavEntry::Namespaces:
return showNamespaces && index.numDocumentedNamespaces()>0;
2724 case LayoutNavEntry::NamespaceList:
return showNamespaces && index.numDocumentedNamespaces()>0;
2726 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
2727 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
2728 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
2729 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
2730 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
2732 case LayoutNavEntry::Files:
return showFiles && index.numDocumentedFiles()>0;
2733 case LayoutNavEntry::FileList:
return showFiles && index.numDocumentedFiles()>0;
2736 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
2737 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
2738 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
2739 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
2740 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
2741 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
2742 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
2743 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
2744 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
2745 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
2746 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
2747 case LayoutNavEntry::None:
2748 assert(kind != LayoutNavEntry::None);
2758 for (
const auto &entry : root->
children())
2765 for (
const auto &entry : root->
children())
2770 t <<
"<li><a href=\"" << relPath << url <<
"\"><span>";
2772 t <<
"</span></a>\n";
2785 bool highlightParent,
bool highlightSearch)
2808 entry.get()==hlEntry &&
2809 (!entry->children().empty() ||
2810 (entry->kind()==kind && !highlightParent)
2828 if (disableIndex || !generateTreeView || !fullSidebar)
2830 if (!serverBasedSearch)
2838 if (!highlightSearch)
2877 bool highlightParent=
false;
2905 highlightParent =
true;
break;
2907 highlightParent =
true;
break;
2909 highlightParent =
true;
break;
2911 highlightParent =
true;
break;
2913 highlightParent =
true;
break;
2915 highlightParent =
true;
break;
2917 highlightParent =
true;
break;
2919 highlightParent =
true;
break;
2933 searchPage =
"search.php";
2935 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menudata.js\"></script>\n";
2936 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menu.js\"></script>\n";
2937 t <<
"<script type=\"text/javascript\">\n";
2938 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
2939 t <<
"$(function() {\n";
2940 t <<
" initMenu('" << relPath <<
"',"
2941 << (searchEngine && !(generateTreeView && fullSidebar)?
"true":
"false") <<
","
2942 << (serverBasedSearch?
"true":
"false") <<
",'"
2943 << searchPage <<
"','"
2945 << (generateTreeView?
"true":
"false")
2949 if (!serverBasedSearch)
2951 t <<
" $(function() { init_search(); });\n";
2955 t <<
" $(function() {\n"
2956 <<
" if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n";
2961 t <<
"/* @license-end */\n";
2963 t <<
"<div id=\"main-nav\"></div>\n";
2965 else if (!disableIndex)
2969 if (!hlEntry && altKind!=LayoutNavEntry::None) { hlEntry=root->
find(altKind); kind=altKind; }
2972 highlightParent=
TRUE;
2973 hlEntry = root->
children().front().get();
2974 if (hlEntry==
nullptr)
2979 if (kind==LayoutNavEntry::UserGroup)
2987 t <<
"<div id=\"main-nav\">\n";
2991 else if (!generateTreeView)
2995 if (generateTreeView && !disableIndex && fullSidebar)
2997 t <<
"<div id=\"doc-content\">\n";
3004 m_t <<
"</div><!-- top -->\n";
3005 if (!generateTreeView)
3007 m_t <<
"<div id=\"doc-content\">\n";
3016 if (generateTreeView)
3023 "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n");
3026 " <div id=\"nav-tree\">\n"
3027 " <div id=\"nav-tree-contents\">\n"
3028 " <div id=\"nav-sync\" class=\"sync\"></div>\n"
3031 " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
3032 " class=\"ui-resizable-handle\">\n"
3035 "<script type=\"text/javascript\">\n"
3036 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
3037 "$(function(){initNavTree('" + fn +
3039 "'); initResizable(true); });\n"
3040 "/* @license-end */\n"
3044 result+=
"<div id=\"doc-content\">\n";
3049 result +=
"<script type=\"text/javascript\">\n"
3050 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
3051 "$(function(){ initResizable(false); });\n"
3052 "/* @license-end */\n"
3070 m_t <<
"<div class=\"contents\">\n";
3075 m_t <<
"</div><!-- contents -->\n";
3085 m_t <<
"</div><!-- PageDoc -->\n";
3099 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3104 QCString configFileName = htmlOutput+
"/search_config.php";
3110 t <<
"$config = array(\n";
3111 t <<
" 'PROJECT_NAME' => \"" <<
convertToHtml(projectName) <<
"\",\n";
3112 t <<
" 'GENERATE_TREEVIEW' => " << (generateTreeView?
"true":
"false") <<
",\n";
3113 t <<
" 'DISABLE_INDEX' => " << (disableIndex?
"true":
"false") <<
",\n";
3114 t <<
" 'FULL_SIDEBAR' => " << (fullSidebar?
"true":
"false") <<
",\n";
3116 t <<
"$translator = array(\n";
3117 t <<
" 'search_results_title' => \"" <<
theTranslator->trSearchResultsTitle() <<
"\",\n";
3118 t <<
" 'search_results' => array(\n";
3119 t <<
" 0 => \"" <<
theTranslator->trSearchResults(0) <<
"\",\n";
3120 t <<
" 1 => \"" <<
theTranslator->trSearchResults(1) <<
"\",\n";
3123 t <<
" 'search_matches' => \"" <<
theTranslator->trSearchMatches() <<
"\",\n";
3124 t <<
" 'search' => \"" <<
theTranslator->trSearch() <<
"\",\n";
3142 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3143 << getDoxygenVersion() <<
" -->\n";
3144 t <<
"<script type=\"text/javascript\">\n";
3145 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
3146 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3148 t <<
"/* @license-end */\n";
3151 if (!disableIndex && !quickLinksAfterSplitbar)
3155 if (generateTreeView)
3157 t <<
"</div><!-- top -->\n";
3160 if (quickLinksAfterSplitbar)
3164 t <<
"<!-- generated -->\n";
3167 t <<
"require_once \"search_functions.php\";\n";
3172 if (generateTreeView)
3174 t <<
"</div><!-- doc-content -->\n";
3181 QCString scriptName = htmlOutput+
"/search/search.js";
3190 err(
"Failed to open file '{}' for writing...\n",scriptName);
3199 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3208 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3209 << getDoxygenVersion() <<
" -->\n";
3210 t <<
"<script type=\"text/javascript\">\n";
3211 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
3212 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3214 t <<
"/* @license-end */\n";
3217 if (!disableIndex && !quickLinksAfterSplitbar)
3221 if (generateTreeView)
3223 t <<
"</div><!-- top -->\n";
3226 if (quickLinksAfterSplitbar)
3231 t <<
"<div class=\"header\">\n";
3232 t <<
" <div class=\"headertitle\">\n";
3233 t <<
" <div class=\"title\">" <<
theTranslator->trSearchResultsTitle() <<
"</div>\n";
3236 t <<
"<div class=\"contents\">\n";
3238 t <<
"<div id=\"searchresults\"></div>\n";
3241 if (generateTreeView)
3243 t <<
"</div><!-- doc-content -->\n";
3251 QCString scriptName = dname+
"/search/search.js";
3256 t <<
"var searchResultsText=["
3261 t <<
"var tagMap = {\n";
3265 for (
const auto &ml : extraSearchMappings)
3268 int eqPos = mapLine.
find(
'=');
3275 if (!first) t <<
",\n";
3276 t <<
" \"" << tagName <<
"\": \"" << destName <<
"\"";
3281 if (!first) t <<
"\n";
3285 t <<
"$(function() {\n";
3286 t <<
" var query = trim(getURLParameter('query'));\n";
3287 t <<
" if (query) {\n";
3288 t <<
" searchFor(query,0,20);\n";
3290 t <<
" var results = $('#results');\n";
3291 t <<
" results.html('<p>" <<
theTranslator->trSearchResults(0) <<
"</p>');\n";
3297 err(
"Failed to open file '{}' for writing...\n",scriptName);
3303 m_t <<
"<div class=\"typeconstraint\">\n";
3304 m_t <<
"<dl><dt><b>" << header <<
"</b></dt><dd>\n";
3305 m_t <<
"<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n";
3310 m_t <<
"<tr><td valign=\"top\"><em>";
3315 m_t <<
"</em></td>";
3320 m_t <<
"<td> :</td><td valign=\"top\"><em>";
3325 m_t <<
"</em></td>";
3330 m_t <<
"<td> ";
3335 m_t <<
"</td></tr>\n";
3340 m_t <<
"</table>\n";
3350 m_t <<
"<br class=\"" << style <<
"\" />\n";
3360 m_t <<
"<div class=\"header\">\n";
3365 m_t <<
" <div class=\"headertitle\">";
3377 m_t <<
"</div><!--header-->\n";
3384 m_t <<
"<table class=\"memberdecls\">\n";
3387 m_t <<
"<tr><td colspan=\"2\"><h3>";
3392 m_t <<
"</h3></td></tr>\n";
3397 DBG_HTML(
m_t <<
"<!-- startMemberDocSimple -->\n";)
3398 m_t <<
"<table class=\"fieldtable\">\n";
3399 m_t <<
"<tr><th colspan=\"" << (isEnum?
"2":
"3") <<
"\">";
3407 m_t <<
"</table>\n";
3412 DBG_HTML(
m_t <<
"<!-- startInlineMemberType -->\n";)
3413 m_t <<
"<tr><td class=\"fieldtype\">\n";
3418 DBG_HTML(
m_t <<
"<!-- endInlineMemberType -->\n";)
3424 DBG_HTML(
m_t <<
"<!-- startInlineMemberName -->\n";)
3425 m_t <<
"<td class=\"fieldname\">\n";
3430 DBG_HTML(
m_t <<
"<!-- endInlineMemberName -->\n";)
3436 DBG_HTML(
m_t <<
"<!-- startInlineMemberDoc -->\n";)
3437 m_t <<
"<td class=\"fielddoc\">\n";
3443 m_t <<
"</td></tr>\n";
3449 m_t <<
"<span class=\"mlabels\">";
3454 DBG_HTML(
m_t <<
"<!-- writeLabel(" << label <<
") -->\n";)
3456 auto convertLabelToClass = [](
const std::string &lab) {
3469 for (
size_t i=0; i<l; i++)
3471 char c = input.
at(i);
3472 if (c<0 || (c>=
'a' && c<=
'z') || c==
'_')
3477 else if (nmstart && (c<0 || (c>=
'a' && c<=
'z') || (c>=
'0' && c<=
'9') || c==
'_'))
3481 else if (nmstart && (c==
' ' || c==
'-'))
3489 m_t <<
"<span class=\"mlabel " << convertLabelToClass(label.
stripWhiteSpace().
str()) <<
"\">" << label <<
"</span>";
3503 DBG_HTML(
m_t <<
"<!-- writeInheritedSectionTitle -->\n";)
3505 if (!a.isEmpty()) a.
prepend(
"#");
3510 classLink +=
" href=\"";
3515 classLink +=
"href=\"";
3520 classLink=classLink+fn+a;
3522 m_t <<
"<tr class=\"inherit_header " <<
id <<
"\">"
3523 <<
"<td colspan=\"2\" onclick=\"javascript:dynsection.toggleInherit('" <<
id <<
"')\">"
3524 <<
"<img src=\"" <<
m_relPath <<
"closed.png\" alt=\"-\"/> "
3533 m_t <<
" <div class=\"summary\">\n";
3539 m_t <<
"<a href=\"";
3558 m_t <<
"<tr class=\"separator:" << anchor;
3561 m_t <<
" inherit " << inheritId;
3563 m_t <<
"\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n";
3583 auto writeIndent = [&]() {
for (
int i=0;i<indent*2;i++)
m_t <<
" "; };
3586 m_t <<
"<div class=\"toc\">";
3596 if (
type.isSection())
3599 int nextLevel =
type.level();
3600 if (nextLevel>level)
3602 for (
int l=level;l<nextLevel;l++)
3607 cs[0]=
static_cast<char>(
'0'+l+1);
3608 const char *empty = (l!=nextLevel-1) ?
" empty" :
"";
3609 incIndent(
"<li class=\"level" +
QCString(cs) + empty +
"\">");
3613 else if (nextLevel<level)
3615 for (
int l=level;l>nextLevel;l--)
3617 if (l <= maxLevel) decIndent(
"</li>");
3619 if (l <= maxLevel) decIndent(
"</ul>");
3622 if (nextLevel <= maxLevel)
3624 if (inLi[nextLevel] || level>nextLevel)
3627 cs[0]=
static_cast<char>(
'0'+nextLevel);
3628 incIndent(
"<li class=\"level" +
QCString(cs) +
"\">");
3632 if (titleDoc.
isEmpty()) titleDoc = label;
3634 m_t <<
"<a href=\"#"+label+
"\">"
3637 inLi[nextLevel]=
true;
3642 if (level > maxLevel) level = maxLevel;
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
Class representing a string buffer optimized for growing.
void addStr(const QCString &s)
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 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 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 writeDoc(const IDocNodeAST *node, const Definition *, const MemberDef *, int id) override
void startDotGraph() override
void endIndent() override
void endParameterName() override
void endPageDoc() override
void startMemberDocList() override
static QCString writeLogoAsString(const QCString &path)
void endDescTableRow() override
void writeSplitBar(const QCString &name) override
void startParameterType(bool first, const QCString &key) override
void startDescTableInit() 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 writeQuickLinks(HighlightedItem hli, const QCString &file) 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)
static QCString writeSplitBarAsString(const QCString &name, const QCString &relpath)
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)
std::unique_ptr< OutputCodeList > m_codeList
static void writeHeaderFile(TextStream &t, const QCString &cssname)
void startConstraintType() override
void endConstraintParam() override
void startTitleHead(const QCString &) override
void startFile(const QCString &name, const QCString &manName, const QCString &title, int id, int hierarchyLevel) 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 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 endInclDepGraph(DotInclDepGraph &g) override
void startParameterExtra() override
void writeLocalToc(const SectionRefs &sr, const LocalToc <) override
void startProjectNumber() override
void writeGraphicalHierarchy(DotGfxHierarchyTable &g) override
void startExamples() override
void docify(const QCString &text) override
void endInlineMemberDoc() override
void endCallGraph(DotCallGraph &g) override
void endConstraintType() override
void endMemberSubtitle() override
void startGroupHeader(int) override
void startMemberDocPrefixItem() override
void startSection(const QCString &, const QCString &, SectionType) 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
static QCString getMathJaxMacros()
void startParameterList(bool) override
void startMemberGroupHeader(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.
bool isHtmlEnabled() const
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
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.
class that represents a list of constant references to sections.
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.
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 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 endSectionContent(TextStream &t)
static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSearch)
static void writeDefaultQuickLinks(TextStream &t, HighlightedItem hli, const QCString &file, const QCString &relPath)
static QCString g_latex_macro
static void fillColorStyleMaps()
static QCString substituteHtmlKeywords(const QCString &str, const QCString &title, const QCString &relPath, const QCString &navPath=QCString())
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)
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
static void writeIndent(TextStream &t, int indent)
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)
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 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 substituteKeywords(const QCString &s, const KeywordSubstitutionList &keywords)
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)