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 "";
157 const char *data = s.
data();
166 while (i < size && (data[i] ==
' ' || data[i] ==
'\t' || data[i] ==
'\n'))
168 if (data[i] ==
'\n') line++;
171 if (i >= size)
break;
175 warn(macrofile,line,
"file contains non valid code, expected '\\' got '{:c}'",data[i]);
181 i += strlen(
"newcommand");
185 i += strlen(
"renewcommand");
189 warn(macrofile,line,
"file contains non valid code, expected 'newcommand' or 'renewcommand'");
195 warn(macrofile,line,
"file contains non valid code, expected '{{' got '{:c}'",data[i]);
201 warn(macrofile,line,
"file contains non valid code, expected '\\' got '{:c}'",data[i]);
207 while (i < size && (data[i] !=
'}')) out.
addChar(data[i++]);
210 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]);
248 while (i < size && cnt)
262 else if (data[i] !=
'"') out.
addChar(data[i++]);
288 warn(macrofile,line,
"file contains non valid code, no closing '}}' for replacement");
345 bool hasProjectName = !projectName.
isEmpty();
352 bool hasCookie = treeView || searchEngine ||
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE;
353 static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
358 cssFile =
"doxygen.css";
371 cssFile =
"doxygen.css";
378 for (
const auto &fileName : extraCssFile)
380 if (!fileName.empty())
382 QCString htmlStyleSheet = fileName.c_str();
385 extraCssText +=
"<link href=\""+htmlStyleSheet+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
392 extraCssText +=
"<link href=\"$relpath^"+
stripPath(fileName.c_str())+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
400 case TIMESTAMP_t::YES:
401 case TIMESTAMP_t::DATETIME:
405 case TIMESTAMP_t::DATE:
409 case TIMESTAMP_t::NO:
415 treeViewCssJs =
"<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
416 "<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
417 "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n";
419 treeViewCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^resize.js\"></script>\n";
423 searchCssJs =
"<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
424 if (!serverBasedSearch)
426 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
428 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
430 if (!serverBasedSearch)
434 searchCssJs +=
"<script type=\"text/javascript\">\n"
435 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
436 " $(function() { init_search(); });\n"
437 "/* @license-end */\n"
445 searchCssJs +=
"<script type=\"text/javascript\">\n"
446 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
448 " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
450 " /* @license-end */\n"
455 searchCssJs +=
"<link rel=\"search\" href=\"" + relPath +
456 "search_opensearch.php?v=opensearch.xml\" "
457 "type=\"application/opensearchdescription+xml\" title=\"" +
458 (hasProjectName ? projectName :
QCString(
"Doxygen")) +
474 switch (mathJaxVersion)
476 case MATHJAX_VERSION_t::MathJax_3:
479 "<script type=\"text/javascript\">\n"
480 "window.MathJax = {\n"
482 " ignoreHtmlClass: 'tex2jax_ignore',\n"
483 " processHtmlClass: 'tex2jax_process'\n"
489 if (!mathJaxExtensions.empty())
492 mathJaxJs+=
" loader: {\n"
494 for (
const auto &s : mathJaxExtensions)
496 if (!first) mathJaxJs+=
",";
497 mathJaxJs+=
"'[tex]/"+
QCString(s.c_str())+
"'";
503 mathJaxJs+=
" tex: {\n"
510 " packages: ['base','configmacros'";
513 mathJaxJs+=
",'newcommand'";
515 for (
const auto &s : mathJaxExtensions)
517 mathJaxJs+=
",'"+
QCString(s.c_str())+
"'";
533 mathJaxJs +=
"</script>\n";
534 mathJaxJs +=
"<script type=\"text/javascript\" id=\"MathJax-script\" async=\"async\" src=\"" +
535 path +
"es5/tex-" + mathJaxFormat.
lower() +
".js\">";
536 mathJaxJs+=
"</script>\n";
539 case MATHJAX_VERSION_t::MathJax_2:
541 mathJaxJs =
"<script type=\"text/x-mathjax-config\">\n"
542 "MathJax.Hub.Config({\n"
543 " extensions: [\"tex2jax.js\"";
545 for (
const auto &s : mathJaxExtensions)
547 mathJaxJs+=
", \""+
QCString(s.c_str())+
".js\"";
551 mathJaxFormat =
"HTML-CSS";
554 " jax: [\"input/TeX\",\"output/"+mathJaxFormat+
"\"],\n";
557 mathJaxJs +=
" TeX: { Macros: {\n";
562 mathJaxJs +=
"});\n";
568 mathJaxJs +=
"</script>\n";
569 mathJaxJs +=
"<script type=\"text/javascript\" async=\"async\" src=\"" + path +
"MathJax.js\"></script>\n";
578 darkModeJs=
"<script type=\"text/javascript\" src=\"$relpath^darkmode_toggle.js\"></script>\n";
583 treeViewCssJs+=
"<script type=\"text/javascript\" src=\"$relpath^cookie.js\"></script>\n";
596 {
"$navpath", [&]() {
return navPath; } },
597 {
"$stylesheet", [&]() {
return cssFile; } },
598 {
"$treeview", [&]() {
return treeViewCssJs; } },
599 {
"$searchbox", [&]() {
return searchBox; } },
600 {
"$search", [&]() {
return searchCssJs; } },
601 {
"$mathjax", [&]() {
return mathJaxJs; } },
602 {
"$darkmode", [&]() {
return darkModeJs; } },
603 {
"$generatedby", [&]() {
return generatedBy; } },
604 {
"$extrastylesheet",[&]() {
return extraCssText; } },
605 {
"$relpath$", [&]() {
return relPath; } }
608 result =
substitute(result,
"$relpath^",relPath);
614 {
"FULL_SIDEBAR", hasFullSideBar },
615 {
"DISABLE_INDEX", disableIndex },
616 {
"GENERATE_TREEVIEW", treeView },
617 {
"SEARCHENGINE", searchEngine },
618 {
"TITLEAREA", titleArea },
619 {
"PROJECT_NAME", hasProjectName },
620 {
"PROJECT_NUMBER", hasProjectNumber },
621 {
"PROJECT_BRIEF", hasProjectBrief },
622 {
"PROJECT_LOGO", hasProjectLogo },
623 {
"PROJECT_ICON", hasProjectIcon },
624 {
"COPY_CLIPBOARD", hasCopyClipboard },
640 while ((i=definitions.
find(
'\n',p))!=-1)
645 int separator = line.
find(
':');
646 assert(separator!=-1);
647 std::string key = line.
left(separator).
str();
651 map.emplace(key,value);
662 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
666 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
678 while ((i=input.
find(
"var(",p))!=-1)
681 int j=input.
find(
")",i+4);
683 auto it = mapping.find(input.
mid(i+4,j-i-4).
str());
684 assert(it!=mapping.end());
685 output.
addStr(it->second);
695 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
699 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
735 const char *p=str.
data();
748 int spacesToNextTabStop = tabSize - (
m_col%tabSize);
749 while (spacesToNextTabStop--)
768 case '\'': *
m_t <<
"'";
m_col++;
770 case '"': *
m_t <<
""";
m_col++;
774 { *
m_t <<
"<"; p++; }
776 { *
m_t <<
">"; p++; }
778 { *
m_t <<
"\\‍(";
m_col++;p++; }
780 { *
m_t <<
"\\‍)";
m_col++;p++; }
787 uint8_t uc =
static_cast<uint8_t
>(c);
790 *
m_t <<
"$" <<
hex[uc>>4] <<
hex[uc&0xF] <<
";";
834 const QCString &anchor,
int l,
bool writeLineAnchor)
838 const int maxLineNrStr = 10;
839 char lineNumber[maxLineNrStr];
840 char lineAnchor[maxLineNrStr];
841 qsnprintf(lineNumber,maxLineNrStr,
"%5d",l);
842 qsnprintf(lineAnchor,maxLineNrStr,
"l%05d",l);
846 *
m_t <<
"<div class=\"line\">";
850 if (writeLineAnchor) *
m_t <<
"<a id=\"" << lineAnchor <<
"\" name=\"" << lineAnchor <<
"\"></a>";
851 *
m_t <<
"<span class=\"lineno\">";
889 *
m_t <<
"<a class=\"" << className <<
"Ref\" ";
894 *
m_t <<
"<a class=\"" << className <<
"\" ";
914 *
m_t <<
"<div class=\"ttc\" id=\"" <<
id <<
"\">";
915 *
m_t <<
"<div class=\"ttname\">";
918 *
m_t <<
"<a href=\"";
934 *
m_t <<
"<div class=\"ttdeci\">";
941 *
m_t <<
"<div class=\"ttdoc\">";
948 *
m_t <<
"<div class=\"ttdef\"><b>" <<
theTranslator->trDefinition() <<
"</b> ";
951 *
m_t <<
"<a href=\"";
967 *
m_t <<
"<div class=\"ttdecl\"><b>" <<
theTranslator->trDeclaration() <<
"</b> ";
970 *
m_t <<
"<a href=\"";
994 *
m_t <<
"<div class=\"line\">";
1017 *
m_t <<
"<span class=\"" << s <<
"\">";
1029 *
m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1034 *
m_t <<
"<div class=\"fragment\">";
1042 *
m_t <<
"</div><!-- fragment -->";
1051 const int maxLineNrStr = 10;
1052 char lineNumber[maxLineNrStr];
1053 qsnprintf(lineNumber,maxLineNrStr,
"%05d",lineNr);
1054 *
m_t <<
"<div class=\"foldopen\" id=\"foldopen" << lineNumber <<
1055 "\" data-start=\"" << startMarker <<
1056 "\" data-end=\"" << endMarker <<
1060 *
m_t <<
"<div class=\"line\">";
1067 *
m_t <<
"<div class=\"line\">";
1146 term(
"Could not create output directory {}\n",dname);
1328 searchCss = mgr.
getAsString(
"search_sidebar.css");
1334 searchCss = mgr.
getAsString(
"search_nomenu_toggle.css");
1343 searchCss = mgr.
getAsString(
"search_fixedtabs.css");
1350 searchCss += mgr.
getAsString(
"search_common.css");
1351 searchCss =
substitute(searchCss,
"$doxygenversion",getDoxygenVersion());
1359 t <<
"/* The standard CSS for doxygen " << getDoxygenVersion() <<
"*/\n\n";
1362 case HTML_COLORSTYLE_t::LIGHT:
1363 case HTML_COLORSTYLE_t::DARK:
1366 case HTML_COLORSTYLE_t::AUTO_LIGHT:
1367 case HTML_COLORSTYLE_t::TOGGLE:
1372 case HTML_COLORSTYLE_t::AUTO_DARK:
1378 if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_LIGHT)
1380 t <<
"@media (prefers-color-scheme: dark) {\n";
1381 t <<
" html:not(.dark-mode) {\n";
1382 t <<
" color-scheme: dark;\n\n";
1386 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_DARK)
1388 t <<
"@media (prefers-color-scheme: light) {\n";
1389 t <<
" html:not(.light-mode) {\n";
1390 t <<
" color-scheme: light;\n\n";
1394 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE)
1396 t <<
"html.dark-mode {\n";
1407 " border-bottom: none;\n"
1408 " background-color: var(--nav-background-color);\n"
1409 " border-right: 1px solid var(--nav-border-color);\n"
1417 bool addScrollbarStyling =
Config_getList(HTML_EXTRA_STYLESHEET).empty();
1418 if (addScrollbarStyling)
1433 t <<
"<!-- HTML header for doxygen " << getDoxygenVersion() <<
"-->\n";
1439 t <<
"<!-- HTML footer for doxygen " << getDoxygenVersion() <<
"-->\n";
1466 << getDoxygenVersion() <<
" -->\n";
1470 m_t <<
"<script type=\"text/javascript\">\n";
1471 m_t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
1472 m_t <<
"var searchBox = new SearchBox(\"searchBox\", \""
1474 m_t <<
"/* @license-end */\n";
1475 m_t <<
"</script>\n";
1479 m_t <<
"<script type=\"text/javascript\">\n";
1480 m_t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
1481 m_t <<
"$(function() { codefold.init(); });\n";
1482 m_t <<
"/* @license-end */\n";
1483 m_t <<
"</script>\n";
1492 if (searchEngine && !serverBasedSearch)
1494 t <<
"<!-- window showing the filter options -->\n";
1495 t <<
"<div id=\"MSearchSelectWindow\"\n";
1496 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
1497 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
1498 t <<
" onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
1501 t <<
"<!-- iframe showing the search results (closed by default) -->\n";
1502 t <<
"<div id=\"MSearchResultsWindow\">\n";
1503 t <<
"<div id=\"MSearchResults\">\n";
1504 t <<
"<div class=\"SRPage\">\n";
1505 t <<
"<div id=\"SRIndex\">\n";
1506 t <<
"<div id=\"SRResults\"></div>\n";
1507 t <<
"<div class=\"SRStatus\" id=\"Loading\">" <<
theTranslator->trLoading() <<
"</div>\n";
1508 t <<
"<div class=\"SRStatus\" id=\"Searching\">" <<
theTranslator->trSearching() <<
"</div>\n";
1509 t <<
"<div class=\"SRStatus\" id=\"NoMatches\">" <<
theTranslator->trNoMatches() <<
"</div>\n";
1529 case TIMESTAMP_t::YES:
1530 case TIMESTAMP_t::DATETIME:
1536 case TIMESTAMP_t::DATE:
1542 case TIMESTAMP_t::NO:
1546 result +=
" \n<a href=\"https://www.doxygen.org/index.html\">\n"
1547 "<img class=\"footer\" src=\"";
1549 result +=
"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> ";
1550 result += getDoxygenVersion();
1578 m_t <<
"<h3 class=\"version\">";
1607 err(
"style sheet {} does not exist or is not readable!\n",
Config_getString(HTML_STYLESHEET));
1622 for (
const auto &
fileName : extraCssFiles)
1662 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1676 m_t <<
"\n<p class=\"" << classDef <<
"\">";
1708 m_t <<
"<a class=\"elRef\" ";
1713 m_t <<
"<a class=\"el\" ";
1751 m_t <<
"<a class=\"el\" href=\"" << fn <<
"\">";
1761 m_t <<
"<a class=\"elRef\" ";
1766 m_t <<
"<a class=\"el\" ";
1782 m_t <<
"<a href=\"";
1799 if (extraIndentLevel==2)
1801 m_t <<
"<h4 class=\"groupheader\">";
1803 else if (extraIndentLevel==1)
1805 m_t <<
"<h3 class=\"groupheader\">";
1809 m_t <<
"<h2 class=\"groupheader\">";
1815 if (extraIndentLevel==2)
1819 else if (extraIndentLevel==1)
1831 switch(
type.level())
1840 default:
ASSERT(0);
break;
1842 m_t <<
"<a id=\"" << lab <<
"\" name=\"" << lab <<
"\"></a>";
1847 switch(
type.level())
1856 default:
ASSERT(0);
break;
1869 const char *p=str.
data();
1875 case '<':
m_t <<
"<";
break;
1876 case '>':
m_t <<
">";
break;
1877 case '&':
m_t <<
"&";
break;
1878 case '"':
m_t <<
""";
break;
1879 case '-':
if (inHtmlComment)
m_t <<
"-";
else m_t <<
"-";
break;
1882 {
m_t <<
"<"; p++; }
1884 {
m_t <<
">"; p++; }
1886 {
m_t <<
"\\‍("; p++; }
1888 {
m_t <<
"\\‍)"; p++; }
1909 const QCString &relPath,
int sectionCount)
1913 if (dynamicSections)
1915 t <<
"<div id=\"dynsection-" << sectionCount <<
"\" "
1916 "onclick=\"return dynsection.toggleVisibility(this)\" "
1917 "class=\"dynheader closed\" "
1918 "style=\"cursor:pointer;\">"
1919 "<span class=\"dynarrow\"><span class=\"arrowhead closed\"></span></span>";
1923 t <<
"<div class=\"dynheader\">\n";
1937 if (dynamicSections)
1939 t <<
"<div id=\"dynsection-" << sectionCount <<
"-summary\" "
1940 "class=\"dynsummary\" "
1941 "style=\"display:block;\">\n";
1949 if (dynamicSections)
1959 if (dynamicSections)
1961 t <<
"<div id=\"dynsection-" << sectionCount <<
"-content\" "
1962 "class=\"dyncontent\" "
1963 "style=\"display:none;\">\n";
1967 t <<
"<div class=\"dyncontent\">\n";
1995 m_t <<
" <div class=\"center\">\n";
1996 m_t <<
" <img src=\"";
1998 m_t <<
"_map\" alt=\"\"/>\n";
2008 m_t <<
" <div class=\"center\">\n";
2009 m_t <<
" <img src=\"";
2037 m_t <<
"<table class=\"memberdecls\">\n";
2040 m_t <<
"<tr class=\"memitem:" << anchor;
2043 m_t <<
" inherit " << inheritId;
2048 m_t <<
" id=\"r_" << anchor <<
"\"";
2060 m_t <<
"</td></tr>\n";
2069 m_t <<
"</td></tr>\n";
2070 m_t <<
"<tr class=\"memitem:" << anchor;
2073 m_t <<
" inherit " << inheritId;
2075 m_t <<
" template\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">";
2080 m_t <<
"<div class=\"compoundTemplParams\">";
2091 m_t <<
" </td><td class=\"memItemRight\" valign=\"bottom\">";
2096 if (!initTag)
m_t <<
" </td>";
2108 DBG_HTML(
m_t <<
"<!-- startMemberDescription -->\n")
2111 m_t <<
"<table class=\"memberdecls\">\n";
2114 m_t <<
"<tr class=\"memdesc:" << anchor;
2117 m_t <<
" inherit " << inheritId;
2120 m_t <<
"<td class=\"mdescLeft\"> </td>";
2121 if (typ)
m_t <<
"<td class=\"mdescLeft\"> </td>";
2122 m_t <<
"<td class=\"mdescRight\">";
2127 DBG_HTML(
m_t <<
"<!-- endMemberDescription -->\n")
2128 m_t <<
"<br /></td></tr>\n";
2144 m_t <<
"</table>\n";
2158 m_t <<
"<table class=\"memberdecls\">\n";
2161 m_t <<
"<tr class=\"heading\"><td colspan=\"" << typ <<
"\"><h2 class=\"groupheader\">";
2164 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>\n";
2171 m_t <<
"</h2></td></tr>\n";
2177 m_t <<
"<tr><td class=\"ititle\" colspan=\"2\">";
2183 m_t <<
"</td></tr>\n";
2193 m_t <<
"</table>\n";
2228 int memCount,
int memTotal,
bool )
2231 m_t <<
"\n<h2 class=\"memtitle\">"
2232 <<
"<span class=\"permalink\"><a href=\"#" << anchor <<
"\">◆ </a></span>";
2236 m_t <<
" <span class=\"overload\">[" << memCount <<
"/" << memTotal <<
"]</span>";
2239 m_t <<
"\n<div class=\"memitem\">\n";
2240 m_t <<
"<div class=\"memproto\">\n";
2245 DBG_HTML(
m_t <<
"<!-- startMemberDocPrefixItem -->\n";)
2246 m_t <<
"<div class=\"memtemplate\">\n";
2251 DBG_HTML(
m_t <<
"<!-- endMemberDocPrefixItem -->\n";)
2259 m_t <<
" <table class=\"memname\">\n";
2262 m_t <<
" <td class=\"memname\">";
2275 if (openBracket)
m_t <<
"(";
2283 DBG_HTML(
m_t <<
"<!-- startFirstParameterType -->\n";)
2284 m_t <<
" <td class=\"paramtype\">";
2290 m_t <<
" <td class=\"paramkey\">" << key <<
"</td>\n";
2291 m_t <<
" <td></td>\n";
2292 m_t <<
" <td class=\"paramtype\">";
2305 m_t <<
" <td class=\"paramname\"><span class=\"paramname\"><em>";
2311 m_t <<
"</em></span>";
2316 DBG_HTML(
m_t <<
"<!-- startParameterExtra -->\n";)
2326 if (closeBracket)
m_t <<
"</td><td>)";
2333 if (closeBracket)
m_t <<
")";
2345 m_t <<
"<span class=\"paramdefsep\">";
2347 m_t <<
"</span><span class=\"paramdefval\">";
2370 m_t <<
" <td align=\"right\">";
2374 m_t <<
prefix <<
"</td><td>(</td><td colspan=\"2\">";
2375 else if (closeBracket)
2376 m_t <<
" )</td><td></td><td></td><td>";
2378 m_t <<
"</td><td></td><td colspan=\"2\">";
2388 m_t <<
" </table>\n";
2407 if (generateLegend && !umlLook)
2410 m_t <<
"<center><span class=\"legend\">[";
2413 if (generateTreeView)
m_t <<
"target=\"top\" ";
2419 m_t <<
"]</span></center>";
2505 m_t <<
"<tr><td colspan=\"2\"><div class=\"groupHeader\">";
2510 m_t <<
"</div></td></tr>\n";
2515 m_t <<
"<tr><td colspan=\"2\"><div class=\"groupText\">";
2520 m_t <<
"</div></td></tr>\n";
2535 m_t <<
"<div class=\"memdoc\">\n";
2541 m_t <<
"\n</div>\n" <<
"</div>\n";
2550 for (
int i=0; i<n; i++)
2558 m_t <<
"<table class=\"fieldtable\">\n"
2559 <<
"<tr><th colspan=\"" << (hasInits?3:2) <<
"\">" << title <<
"</th></tr>";
2563 m_t <<
"</table>\n";
2578 m_t <<
"<td class=\"fieldname\">";
2583 m_t <<
" </td>";
2588 m_t <<
"<td class=\"fieldinit\">";
2593 m_t <<
" </td>";
2598 m_t <<
"<td class=\"fielddoc\">";
2608 m_t <<
"<dl class=\"section examples\"><dt>";
2625 std::visit(visitor,astImpl->
root);
2637 t <<
" <div id=\"navrow1\" class=\"tabs\">\n";
2641 t <<
" <div id=\"navrow2\" class=\"tabs2\">\n";
2643 t <<
" <ul class=\"tablist\">\n";
2671 t <<
" class=\"current\"";
2681 if (!l.
isEmpty()) t <<
"</a>";
2692 case LayoutNavEntry::MainPage:
return TRUE;
2693 case LayoutNavEntry::User:
return TRUE;
2694 case LayoutNavEntry::UserGroup:
return TRUE;
2695 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
2696 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
2697 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
2698 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
2700 case LayoutNavEntry::Namespaces:
return showNamespaces && index.numDocumentedNamespaces()>0;
2701 case LayoutNavEntry::NamespaceList:
return showNamespaces && index.numDocumentedNamespaces()>0;
2703 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
2704 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
2705 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
2706 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
2707 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
2709 case LayoutNavEntry::Files:
return showFiles && index.numDocumentedFiles()>0;
2710 case LayoutNavEntry::FileList:
return showFiles && index.numDocumentedFiles()>0;
2713 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
2714 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
2715 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
2716 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
2717 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
2718 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
2719 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
2720 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
2721 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
2722 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
2723 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
2724 case LayoutNavEntry::None:
2725 assert(kind != LayoutNavEntry::None);
2735 for (
const auto &entry : root->
children())
2742 for (
const auto &entry : root->
children())
2747 t <<
"<li><a href=\"" << relPath << url <<
"\"><span>";
2749 t <<
"</span></a>\n";
2762 bool highlightParent,
bool highlightSearch)
2785 entry.get()==hlEntry &&
2786 (!entry->children().empty() ||
2787 (entry->kind()==kind && !highlightParent)
2805 if (disableIndex || !generateTreeView || !fullSidebar)
2807 if (!serverBasedSearch)
2815 if (!highlightSearch)
2856 bool highlightParent=
false;
2884 highlightParent =
true;
break;
2886 highlightParent =
true;
break;
2888 highlightParent =
true;
break;
2890 highlightParent =
true;
break;
2892 highlightParent =
true;
break;
2894 highlightParent =
true;
break;
2896 highlightParent =
true;
break;
2898 highlightParent =
true;
break;
2903 if (!disableIndex && dynamicMenus)
2912 searchPage =
"search.php";
2914 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menudata.js\"></script>\n";
2915 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menu.js\"></script>\n";
2916 t <<
"<script type=\"text/javascript\">\n";
2917 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
2918 t <<
"$(function() {\n";
2919 t <<
" initMenu('" << relPath <<
"',"
2920 << (searchEngine && !(generateTreeView && fullSidebar)?
"true":
"false") <<
","
2921 << (serverBasedSearch?
"true":
"false") <<
",'"
2922 << searchPage <<
"','"
2924 << (generateTreeView?
"true":
"false")
2928 if (!serverBasedSearch)
2930 if (!disableIndex && dynamicMenus && !fullSidebar)
2932 t <<
" $(function() { init_search(); });\n";
2937 t <<
" $(function() {\n"
2938 <<
" if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n";
2943 t <<
"/* @license-end */\n";
2945 t <<
"<div id=\"main-nav\"></div>\n";
2947 else if (!disableIndex)
2951 if (!hlEntry && altKind!=LayoutNavEntry::None) { hlEntry=root->
find(altKind); kind=altKind; }
2954 highlightParent=
TRUE;
2955 hlEntry = root->
children().front().get();
2956 if (hlEntry==
nullptr)
2961 if (kind==LayoutNavEntry::UserGroup)
2969 t <<
"<div id=\"main-nav\">\n";
2973 t <<
"</div><!-- main-nav -->\n";
2976 else if (!generateTreeView)
2980 if (generateTreeView && !disableIndex && fullSidebar && !extraTabs)
2982 t <<
"<div id=\"doc-content\">\n";
2989 m_t <<
"</div><!-- top -->\n";
2990 if (!generateTreeView)
2992 m_t <<
"<div id=\"doc-content\">\n";
3001 if (generateTreeView)
3008 "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n");
3011 " <div id=\"nav-tree\">\n"
3012 " <div id=\"nav-tree-contents\">\n"
3013 " <div id=\"nav-sync\" class=\"sync\"></div>\n"
3016 " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
3017 " class=\"ui-resizable-handle\">\n"
3020 "<script type=\"text/javascript\">\n"
3021 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
3022 "$(function(){initNavTree('" + fn +
3024 "'); initResizable(true); });\n"
3025 "/* @license-end */\n"
3029 result+=
"<div id=\"doc-content\">\n";
3034 result +=
"<script type=\"text/javascript\">\n"
3035 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
3036 "$(function(){ initResizable(false); });\n"
3037 "/* @license-end */\n"
3055 m_t <<
"<div class=\"contents\">\n";
3060 m_t <<
"</div><!-- contents -->\n";
3070 m_t <<
"</div><!-- PageDoc -->\n";
3084 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3089 QCString configFileName = htmlOutput+
"/search_config.php";
3095 t <<
"$config = array(\n";
3096 t <<
" 'PROJECT_NAME' => \"" <<
convertToHtml(projectName) <<
"\",\n";
3097 t <<
" 'GENERATE_TREEVIEW' => " << (generateTreeView?
"true":
"false") <<
",\n";
3098 t <<
" 'DISABLE_INDEX' => " << (disableIndex?
"true":
"false") <<
",\n";
3099 t <<
" 'FULL_SIDEBAR' => " << (fullSidebar?
"true":
"false") <<
",\n";
3101 t <<
"$translator = array(\n";
3102 t <<
" 'search_results_title' => \"" <<
theTranslator->trSearchResultsTitle() <<
"\",\n";
3103 t <<
" 'search_results' => array(\n";
3104 t <<
" 0 => \"" <<
theTranslator->trSearchResults(0) <<
"\",\n";
3105 t <<
" 1 => \"" <<
theTranslator->trSearchResults(1) <<
"\",\n";
3108 t <<
" 'search_matches' => \"" <<
theTranslator->trSearchMatches() <<
"\",\n";
3109 t <<
" 'search' => \"" <<
theTranslator->trSearch() <<
"\",\n";
3127 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3128 << getDoxygenVersion() <<
" -->\n";
3129 t <<
"<script type=\"text/javascript\">\n";
3130 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
3131 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3133 t <<
"/* @license-end */\n";
3136 if (!disableIndex && !quickLinksAfterSplitbar)
3140 if (generateTreeView)
3142 t <<
"</div><!-- top -->\n";
3145 if (quickLinksAfterSplitbar)
3149 t <<
"<!-- generated -->\n";
3152 t <<
"require_once \"search_functions.php\";\n";
3157 if (generateTreeView)
3159 t <<
"</div><!-- doc-content -->\n";
3166 QCString scriptName = htmlOutput+
"/search/search.js";
3175 err(
"Failed to open file '{}' for writing...\n",scriptName);
3184 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3193 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3194 << getDoxygenVersion() <<
" -->\n";
3195 t <<
"<script type=\"text/javascript\">\n";
3196 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
3197 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3199 t <<
"/* @license-end */\n";
3202 if (!disableIndex && !quickLinksAfterSplitbar)
3206 if (generateTreeView)
3208 t <<
"</div><!-- top -->\n";
3211 if (quickLinksAfterSplitbar)
3216 t <<
"<div class=\"header\">\n";
3217 t <<
" <div class=\"headertitle\">\n";
3218 t <<
" <div class=\"title\">" <<
theTranslator->trSearchResultsTitle() <<
"</div>\n";
3221 t <<
"<div class=\"contents\">\n";
3223 t <<
"<div id=\"searchresults\"></div>\n";
3226 if (generateTreeView)
3228 t <<
"</div><!-- doc-content -->\n";
3236 QCString scriptName = dname+
"/search/search.js";
3241 t <<
"var searchResultsText=["
3246 t <<
"var tagMap = {\n";
3250 for (
const auto &ml : extraSearchMappings)
3253 int eqPos = mapLine.
find(
'=');
3260 if (!first) t <<
",\n";
3261 t <<
" \"" << tagName <<
"\": \"" << destName <<
"\"";
3266 if (!first) t <<
"\n";
3270 t <<
"$(function() {\n";
3271 t <<
" var query = trim(getURLParameter('query'));\n";
3272 t <<
" if (query) {\n";
3273 t <<
" searchFor(query,0,20);\n";
3275 t <<
" var results = $('#results');\n";
3276 t <<
" results.html('<p>" <<
theTranslator->trSearchResults(0) <<
"</p>');\n";
3282 err(
"Failed to open file '{}' for writing...\n",scriptName);
3288 m_t <<
"<div class=\"typeconstraint\">\n";
3289 m_t <<
"<dl><dt><b>" << header <<
"</b></dt><dd>\n";
3290 m_t <<
"<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n";
3295 m_t <<
"<tr><td valign=\"top\"><em>";
3300 m_t <<
"</em></td>";
3305 m_t <<
"<td> :</td><td valign=\"top\"><em>";
3310 m_t <<
"</em></td>";
3315 m_t <<
"<td> ";
3320 m_t <<
"</td></tr>\n";
3325 m_t <<
"</table>\n";
3335 m_t <<
"<br class=\"" << style <<
"\" />\n";
3345 m_t <<
"<div class=\"header\">\n";
3350 m_t <<
" <div class=\"headertitle\">";
3362 m_t <<
"</div><!--header-->\n";
3369 m_t <<
"<table class=\"memberdecls\">\n";
3372 m_t <<
"<tr><td colspan=\"2\"><h3>";
3377 m_t <<
"</h3></td></tr>\n";
3382 DBG_HTML(
m_t <<
"<!-- startMemberDocSimple -->\n";)
3383 m_t <<
"<table class=\"fieldtable\">\n";
3384 m_t <<
"<tr><th colspan=\"" << (isEnum?
"2":
"3") <<
"\">";
3392 m_t <<
"</table>\n";
3397 DBG_HTML(
m_t <<
"<!-- startInlineMemberType -->\n";)
3398 m_t <<
"<tr><td class=\"fieldtype\">\n";
3403 DBG_HTML(
m_t <<
"<!-- endInlineMemberType -->\n";)
3409 DBG_HTML(
m_t <<
"<!-- startInlineMemberName -->\n";)
3410 m_t <<
"<td class=\"fieldname\">\n";
3415 DBG_HTML(
m_t <<
"<!-- endInlineMemberName -->\n";)
3421 DBG_HTML(
m_t <<
"<!-- startInlineMemberDoc -->\n";)
3422 m_t <<
"<td class=\"fielddoc\">\n";
3428 m_t <<
"</td></tr>\n";
3434 m_t <<
"<span class=\"mlabels\">";
3439 DBG_HTML(
m_t <<
"<!-- writeLabel(" << label <<
") -->\n";)
3441 auto convertLabelToClass = [](
const std::string &lab) {
3454 for (
size_t i=0; i<l; i++)
3456 char c = input.
at(i);
3457 if (c<0 || (c>=
'a' && c<=
'z') || c==
'_')
3462 else if (nmstart && (c<0 || (c>=
'a' && c<=
'z') || (c>=
'0' && c<=
'9') || c==
'_'))
3466 else if (nmstart && (c==
' ' || c==
'-'))
3474 m_t <<
"<span class=\"mlabel " << convertLabelToClass(label.
stripWhiteSpace().
str()) <<
"\">" << label <<
"</span>";
3488 DBG_HTML(
m_t <<
"<!-- writeInheritedSectionTitle -->\n";)
3490 if (!a.isEmpty()) a.
prepend(
"#");
3495 classLink +=
" href=\"";
3500 classLink +=
"href=\"";
3505 classLink=classLink+fn+a;
3507 m_t <<
"<tr class=\"inherit_header " <<
id <<
"\">"
3508 <<
"<td colspan=\"2\" onclick=\"javascript:dynsection.toggleInherit('" <<
id <<
"')\">"
3509 <<
"<span class=\"dynarrow\"><span class=\"arrowhead closed\"></span></span>"
3518 m_t <<
" <div class=\"summary\">\n";
3524 m_t <<
"<a href=\"";
3543 m_t <<
"<tr class=\"separator:" << anchor;
3546 m_t <<
" inherit " << inheritId;
3548 m_t <<
"\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n";
3568 auto writeIndent = [&]() {
for (
int i=0;i<indent*2;i++)
m_t <<
" "; };
3571 m_t <<
"<div class=\"toc\">";
3581 if (
type.isSection())
3584 int nextLevel =
type.level();
3585 if (nextLevel>level)
3587 for (
int l=level;l<nextLevel;l++)
3592 cs[0]=
static_cast<char>(
'0'+l+1);
3593 const char *empty = (l!=nextLevel-1) ?
" empty" :
"";
3594 incIndent(
"<li class=\"level" +
QCString(cs) + empty +
"\">");
3598 else if (nextLevel<level)
3600 for (
int l=level;l>nextLevel;l--)
3602 if (l <= maxLevel) decIndent(
"</li>");
3604 if (l <= maxLevel) decIndent(
"</ul>");
3607 if (nextLevel <= maxLevel)
3609 if (inLi[nextLevel] || level>nextLevel)
3612 cs[0]=
static_cast<char>(
'0'+nextLevel);
3613 incIndent(
"<li class=\"level" +
QCString(cs) +
"\">");
3617 if (titleDoc.
isEmpty()) titleDoc = label;
3619 m_t <<
"<a href=\"#"+label+
"\">"
3622 inLi[nextLevel]=
true;
3627 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 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 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 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 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 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 QCString substituteHtmlKeywords(const QCString &file, const QCString &str, const QCString &title, const QCString &relPath, const QCString &navPath=QCString())
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 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)