67static constexpr auto hex=
"0123456789ABCDEF";
75 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
76 t <<
" <span class=\"left\">\n";
77 t <<
" <span id=\"MSearchSelect\" ";
78 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\" ";
79 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"> </span>\n";
80 t <<
" <input type=\"text\" id=\"MSearchField\" value=\"\" placeholder=\""
82 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
83 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
84 t <<
" onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
85 t <<
" </span><span class=\"right\">\n";
86 t <<
" <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
87 <<
"<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath <<
"search/close.svg\" alt=\"\"/></a>\n";
97 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
98 t <<
" <div class=\"left\">\n";
99 t <<
" <form id=\"FSearchBox\" action=\"" << relPath;
108 t <<
"\" method=\"get\">\n";
109 t <<
" <span id=\"MSearchSelectExt\"> </span>\n";
110 if (!highlightSearch)
112 t <<
" <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"\" placeholder=\""
113 <<
theTranslator->trSearch() <<
"\" size=\"20\" accesskey=\"S\" \n";
114 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
115 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
117 t <<
" </div><div class=\"right\"></div>\n";
148 if (macrofile.
isEmpty())
return "";
153 const char *data = s.
data();
162 while (i < size && (data[i] ==
' ' || data[i] ==
'\t' || data[i] ==
'\n'))
164 if (data[i] ==
'\n') line++;
167 if (i >= size)
break;
171 warn(macrofile,line,
"file contains non valid code, expected '\\' got '%c'",data[i]);
175 if (!
qstrncmp(data + i,
"newcommand", strlen(
"newcommand")))
177 i += strlen(
"newcommand");
179 else if (!
qstrncmp(data + i,
"renewcommand", strlen(
"renewcommand")))
181 i += strlen(
"renewcommand");
185 warn(macrofile,line,
"file contains non valid code, expected 'newcommand' or 'renewcommand'");
191 warn(macrofile,line,
"file contains non valid code, expected '{' got '%c'",data[i]);
197 warn(macrofile,line,
"file contains non valid code, expected '\\' got '%c'",data[i]);
203 while (i < size && (data[i] !=
'}')) out.
addChar(data[i++]);
206 warn(macrofile,line,
"file contains non valid code, no closing '}' for command");
219 while (i < size && (data[i] !=
']')) nr += data[i++];
222 warn(macrofile,line,
"file contains non valid code, no closing ']'");
227 else if (data[i] !=
'{')
229 warn(macrofile,line,
"file contains non valid code, expected '[' or '{' got '%c'",data[i]);
236 warn(macrofile,line,
"file contains non valid code, expected '{' got '%c'",data[i]);
244 while (i < size && cnt)
258 else if (data[i] !=
'"') out.
addChar(data[i++]);
284 warn(macrofile,line,
"file contains non valid code, no closing '}' for replacement");
340 bool hasProjectName = !projectName.
isEmpty();
345 bool hasFullSideBar =
Config_getBool(FULL_SIDEBAR) && disableIndex && treeView;
347 bool hasCookie = treeView || searchEngine ||
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE;
348 static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
353 cssFile =
"doxygen.css";
366 cssFile =
"doxygen.css";
373 for (
const auto &fileName : extraCssFile)
375 if (!fileName.empty())
377 QCString htmlStyleSheet = fileName.c_str();
380 extraCssText +=
"<link href=\""+htmlStyleSheet+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
387 extraCssText +=
"<link href=\"$relpath^"+
stripPath(fileName.c_str())+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
395 case TIMESTAMP_t::YES:
396 case TIMESTAMP_t::DATETIME:
400 case TIMESTAMP_t::DATE:
404 case TIMESTAMP_t::NO:
408 treeViewCssJs =
"<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
411 treeViewCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
412 "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n";
414 treeViewCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^resize.js\"></script>\n";
418 searchCssJs =
"<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
419 if (!serverBasedSearch)
421 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
423 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
425 if (!serverBasedSearch)
429 searchCssJs +=
"<script type=\"text/javascript\">\n"
430 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
431 " $(function() { init_search(); });\n"
432 "/* @license-end */\n"
440 searchCssJs +=
"<script type=\"text/javascript\">\n"
441 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
443 " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
445 " /* @license-end */\n"
450 searchCssJs +=
"<link rel=\"search\" href=\"" + relPath +
451 "search_opensearch.php?v=opensearch.xml\" "
452 "type=\"application/opensearchdescription+xml\" title=\"" +
453 (hasProjectName ? projectName :
QCString(
"Doxygen")) +
469 switch (mathJaxVersion)
471 case MATHJAX_VERSION_t::MathJax_3:
474 "<script type=\"text/javascript\">\n"
475 "window.MathJax = {\n"
477 " ignoreHtmlClass: 'tex2jax_ignore',\n"
478 " processHtmlClass: 'tex2jax_process'\n"
484 if (!mathJaxExtensions.empty())
487 mathJaxJs+=
" loader: {\n"
489 for (
const auto &s : mathJaxExtensions)
491 if (!first) mathJaxJs+=
",";
492 mathJaxJs+=
"'[tex]/"+
QCString(s.c_str())+
"'";
498 mathJaxJs+=
" tex: {\n"
505 " packages: ['base','configmacros'";
508 mathJaxJs+=
",'newcommand'";
510 for (
const auto &s : mathJaxExtensions)
512 mathJaxJs+=
",'"+
QCString(s.c_str())+
"'";
528 mathJaxJs +=
"</script>\n";
529 mathJaxJs +=
"<script type=\"text/javascript\" id=\"MathJax-script\" async=\"async\" src=\"" +
530 path +
"es5/tex-" + mathJaxFormat.
lower() +
".js\">";
531 mathJaxJs+=
"</script>\n";
534 case MATHJAX_VERSION_t::MathJax_2:
536 mathJaxJs =
"<script type=\"text/x-mathjax-config\">\n"
537 "MathJax.Hub.Config({\n"
538 " extensions: [\"tex2jax.js\"";
540 for (
const auto &s : mathJaxExtensions)
542 mathJaxJs+=
", \""+
QCString(s.c_str())+
".js\"";
546 mathJaxFormat =
"HTML-CSS";
549 " jax: [\"input/TeX\",\"output/"+mathJaxFormat+
"\"],\n";
552 mathJaxJs +=
" TeX: { Macros: {\n";
557 mathJaxJs +=
"});\n";
563 mathJaxJs +=
"</script>\n";
564 mathJaxJs +=
"<script type=\"text/javascript\" async=\"async\" src=\"" + path +
"MathJax.js\"></script>\n";
573 darkModeJs=
"<script type=\"text/javascript\" src=\"$relpath^darkmode_toggle.js\"></script>\n";
578 treeViewCssJs+=
"<script type=\"text/javascript\" src=\"$relpath^cookie.js\"></script>\n";
591 {
"$navpath", [&]() {
return navPath; } },
592 {
"$stylesheet", [&]() {
return cssFile; } },
593 {
"$treeview", [&]() {
return treeViewCssJs; } },
594 {
"$searchbox", [&]() {
return searchBox; } },
595 {
"$search", [&]() {
return searchCssJs; } },
596 {
"$mathjax", [&]() {
return mathJaxJs; } },
597 {
"$darkmode", [&]() {
return darkModeJs; } },
598 {
"$generatedby", [&]() {
return generatedBy; } },
599 {
"$extrastylesheet",[&]() {
return extraCssText; } },
600 {
"$relpath$", [&]() {
return relPath; } }
603 result =
substitute(result,
"$relpath^",relPath);
609 {
"FULL_SIDEBAR", hasFullSideBar },
610 {
"DISABLE_INDEX", disableIndex },
611 {
"GENERATE_TREEVIEW", treeView },
612 {
"SEARCHENGINE", searchEngine },
613 {
"TITLEAREA", titleArea },
614 {
"PROJECT_NAME", hasProjectName },
615 {
"PROJECT_NUMBER", hasProjectNumber },
616 {
"PROJECT_BRIEF", hasProjectBrief },
617 {
"PROJECT_LOGO", hasProjectLogo },
618 {
"PROJECT_ICON", hasProjectIcon },
619 {
"COPY_CLIPBOARD", hasCopyClipboard },
635 while ((i=definitions.
find(
'\n',p))!=-1)
640 int separator = line.
find(
':');
641 assert(separator!=-1);
642 std::string key = line.
left(separator).
str();
646 map.emplace(key,value);
657 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
661 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
673 while ((i=input.
find(
"var(",p))!=-1)
676 int j=input.
find(
")",i+4);
678 auto it = mapping.find(input.
mid(i+4,j-i-4).
str());
679 assert(it!=mapping.end());
680 output.
addStr(it->second);
690 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
694 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
730 const char *p=str.
data();
743 int spacesToNextTabStop = tabSize - (
m_col%tabSize);
744 while (spacesToNextTabStop--)
763 case '\'': *
m_t <<
"'";
m_col++;
765 case '"': *
m_t <<
""";
m_col++;
769 { *
m_t <<
"<"; p++; }
771 { *
m_t <<
">"; p++; }
773 { *
m_t <<
"\\‍(";
m_col++;p++; }
775 { *
m_t <<
"\\‍)";
m_col++;p++; }
782 uint8_t uc =
static_cast<uint8_t
>(c);
785 *
m_t <<
"$" <<
hex[uc>>4] <<
hex[uc&0xF] <<
";";
829 const QCString &anchor,
int l,
bool writeLineAnchor)
833 const int maxLineNrStr = 10;
834 char lineNumber[maxLineNrStr];
835 char lineAnchor[maxLineNrStr];
836 qsnprintf(lineNumber,maxLineNrStr,
"%5d",l);
837 qsnprintf(lineAnchor,maxLineNrStr,
"l%05d",l);
841 *
m_t <<
"<div class=\"line\">";
845 if (writeLineAnchor) *
m_t <<
"<a id=\"" << lineAnchor <<
"\" name=\"" << lineAnchor <<
"\"></a>";
846 *
m_t <<
"<span class=\"lineno\">";
866 QCString hlClass =
"code";
884 *
m_t <<
"<a class=\"" << className <<
"Ref\" ";
889 *
m_t <<
"<a class=\"" << className <<
"\" ";
909 *
m_t <<
"<div class=\"ttc\" id=\"" <<
id <<
"\">";
910 *
m_t <<
"<div class=\"ttname\">";
913 *
m_t <<
"<a href=\"";
914 QCString fn = docInfo.
url;
929 *
m_t <<
"<div class=\"ttdeci\">";
936 *
m_t <<
"<div class=\"ttdoc\">";
946 *
m_t <<
"<a href=\"";
947 QCString fn = defInfo.
url;
965 *
m_t <<
"<a href=\"";
966 QCString fn = declInfo.
url;
989 *
m_t <<
"<div class=\"line\">";
1012 *
m_t <<
"<span class=\"" << s <<
"\">";
1024 *
m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1029 *
m_t <<
"<div class=\"fragment\">";
1037 *
m_t <<
"</div><!-- fragment -->";
1046 const int maxLineNrStr = 10;
1047 char lineNumber[maxLineNrStr];
1048 qsnprintf(lineNumber,maxLineNrStr,
"%05d",lineNr);
1049 *
m_t <<
"<div class=\"foldopen\" id=\"foldopen" << lineNumber <<
1050 "\" data-start=\"" << startMarker <<
1051 "\" data-end=\"" << endMarker <<
1055 *
m_t <<
"<div class=\"line\">";
1062 *
m_t <<
"<div class=\"line\">";
1141 term(
"Could not create output directory %s\n",
qPrint(dname));
1237 "$TREEVIEW_WIDTH", QCString().setNum(
Config_getInt(TREEVIEW_WIDTH))),
1349 QCString searchDirName = dname;
1361 searchCss = mgr.
getAsString(
"search_sidebar.css");
1363 else if (
Config_getBool(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE)
1365 searchCss = mgr.
getAsString(
"search_nomenu_toggle.css");
1374 searchCss = mgr.
getAsString(
"search_fixedtabs.css");
1381 searchCss += mgr.
getAsString(
"search_common.css");
1382 searchCss =
substitute(searchCss,
"$doxygenversion",getDoxygenVersion());
1390 t <<
"/* The standard CSS for doxygen " << getDoxygenVersion() <<
"*/\n\n";
1393 case HTML_COLORSTYLE_t::LIGHT:
1394 case HTML_COLORSTYLE_t::DARK:
1397 case HTML_COLORSTYLE_t::AUTO_LIGHT:
1398 case HTML_COLORSTYLE_t::TOGGLE:
1403 case HTML_COLORSTYLE_t::AUTO_DARK:
1409 if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_LIGHT)
1411 t <<
"@media (prefers-color-scheme: dark) {\n";
1412 t <<
" html:not(.dark-mode) {\n";
1413 t <<
" color-scheme: dark;\n\n";
1417 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_DARK)
1419 t <<
"@media (prefers-color-scheme: light) {\n";
1420 t <<
" html:not(.light-mode) {\n";
1421 t <<
" color-scheme: light;\n\n";
1425 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE)
1427 t <<
"html.dark-mode {\n";
1437 bool addScrollbarStyling =
Config_getList(HTML_EXTRA_STYLESHEET).empty();
1438 if (addScrollbarStyling)
1453 t <<
"<!-- HTML header for doxygen " << getDoxygenVersion() <<
"-->\n";
1459 t <<
"<!-- HTML footer for doxygen " << getDoxygenVersion() <<
"-->\n";
1486 << getDoxygenVersion() <<
" -->\n";
1490 m_t <<
"<script type=\"text/javascript\">\n";
1491 m_t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
1492 m_t <<
"var searchBox = new SearchBox(\"searchBox\", \""
1494 m_t <<
"/* @license-end */\n";
1495 m_t <<
"</script>\n";
1499 m_t <<
"<script type=\"text/javascript\">\n";
1500 m_t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
1501 m_t <<
"$(function() { codefold.init(" << (
m_relPath.isEmpty() ?
"0" :
"1") <<
"); });\n";
1502 m_t <<
"/* @license-end */\n";
1503 m_t <<
"</script>\n";
1512 if (searchEngine && !serverBasedSearch)
1514 t <<
"<!-- window showing the filter options -->\n";
1515 t <<
"<div id=\"MSearchSelectWindow\"\n";
1516 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
1517 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
1518 t <<
" onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
1521 t <<
"<!-- iframe showing the search results (closed by default) -->\n";
1522 t <<
"<div id=\"MSearchResultsWindow\">\n";
1523 t <<
"<div id=\"MSearchResults\">\n";
1524 t <<
"<div class=\"SRPage\">\n";
1525 t <<
"<div id=\"SRIndex\">\n";
1526 t <<
"<div id=\"SRResults\"></div>\n";
1549 case TIMESTAMP_t::YES:
1550 case TIMESTAMP_t::DATETIME:
1556 case TIMESTAMP_t::DATE:
1562 case TIMESTAMP_t::NO:
1566 result +=
" \n<a href=\"https://www.doxygen.org/index.html\">\n"
1567 "<img class=\"footer\" src=\"";
1569 result +=
"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> ";
1570 result += getDoxygenVersion();
1598 m_t <<
"<h3 class=\"version\">";
1624 FileInfo cssfi(cssName.
str());
1642 for (
const auto &
fileName : extraCssFiles)
1682 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1696 m_t <<
"\n<p class=\"" << classDef <<
"\">";
1728 m_t <<
"<a class=\"elRef\" ";
1733 m_t <<
"<a class=\"el\" ";
1771 m_t <<
"<a class=\"el\" href=\"" << fn <<
"\">";
1781 m_t <<
"<a class=\"elRef\" ";
1786 m_t <<
"<a class=\"el\" ";
1802 m_t <<
"<a href=\"";
1819 if (extraIndentLevel==2)
1821 m_t <<
"<h4 class=\"groupheader\">";
1823 else if (extraIndentLevel==1)
1825 m_t <<
"<h3 class=\"groupheader\">";
1829 m_t <<
"<h2 class=\"groupheader\">";
1835 if (extraIndentLevel==2)
1839 else if (extraIndentLevel==1)
1851 switch(
type.level())
1860 default:
ASSERT(0);
break;
1862 m_t <<
"<a id=\"" << lab <<
"\" name=\"" << lab <<
"\"></a>";
1867 switch(
type.level())
1876 default:
ASSERT(0);
break;
1889 const char *p=str.
data();
1895 case '<':
m_t <<
"<";
break;
1896 case '>':
m_t <<
">";
break;
1897 case '&':
m_t <<
"&";
break;
1898 case '"':
m_t <<
""";
break;
1899 case '-':
if (inHtmlComment)
m_t <<
"-";
else m_t <<
"-";
break;
1902 {
m_t <<
"<"; p++; }
1904 {
m_t <<
">"; p++; }
1906 {
m_t <<
"\\‍("; p++; }
1908 {
m_t <<
"\\‍)"; p++; }
1929 const QCString &relPath,
int sectionCount)
1933 if (dynamicSections)
1935 t <<
"<div id=\"dynsection-" << sectionCount <<
"\" "
1936 "onclick=\"return dynsection.toggleVisibility(this)\" "
1937 "class=\"dynheader closed\" "
1938 "style=\"cursor:pointer;\">\n";
1939 t <<
" <img id=\"dynsection-" << sectionCount <<
"-trigger\" src=\""
1940 << relPath <<
"closed.png\" alt=\"+\"/> ";
1944 t <<
"<div class=\"dynheader\">\n";
1958 if (dynamicSections)
1960 t <<
"<div id=\"dynsection-" << sectionCount <<
"-summary\" "
1961 "class=\"dynsummary\" "
1962 "style=\"display:block;\">\n";
1970 if (dynamicSections)
1980 if (dynamicSections)
1982 t <<
"<div id=\"dynsection-" << sectionCount <<
"-content\" "
1983 "class=\"dyncontent\" "
1984 "style=\"display:none;\">\n";
1988 t <<
"<div class=\"dyncontent\">\n";
2016 m_t <<
" <div class=\"center\">\n";
2017 m_t <<
" <img src=\"";
2019 m_t <<
"_map\" alt=\"\"/>\n";
2029 m_t <<
" <div class=\"center\">\n";
2030 m_t <<
" <img src=\"";
2058 m_t <<
"<table class=\"memberdecls\">\n";
2061 m_t <<
"<tr class=\"memitem:" << anchor;
2064 m_t <<
" inherit " << inheritId;
2069 m_t <<
" id=\"r_" << anchor <<
"\"";
2081 m_t <<
"</td></tr>\n";
2090 m_t <<
"</td></tr>\n";
2091 m_t <<
"<tr class=\"memitem:" << anchor;
2094 m_t <<
" inherit " << inheritId;
2096 m_t <<
"\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">";
2101 m_t <<
"<div class=\"compoundTemplParams\">";
2112 QCString className = templ ?
"memTemplItemRight" :
"memItemRight";
2113 m_t <<
" </td><td class=\"" << className <<
"\" valign=\"bottom\">";
2118 if (!initTag)
m_t <<
" </td>";
2130 DBG_HTML(
m_t <<
"<!-- startMemberDescription -->\n")
2133 m_t <<
"<table class=\"memberdecls\">\n";
2136 m_t <<
"<tr class=\"memdesc:" << anchor;
2139 m_t <<
" inherit " << inheritId;
2142 m_t <<
"<td class=\"mdescLeft\"> </td>";
2143 if (typ)
m_t <<
"<td class=\"mdescLeft\"> </td>";
2144 m_t <<
"<td class=\"mdescRight\">";
2149 DBG_HTML(
m_t <<
"<!-- endMemberDescription -->\n")
2150 m_t <<
"<br /></td></tr>\n";
2166 m_t <<
"</table>\n";
2180 m_t <<
"<table class=\"memberdecls\">\n";
2183 m_t <<
"<tr class=\"heading\"><td colspan=\"" << typ <<
"\"><h2 class=\"groupheader\">";
2186 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>\n";
2193 m_t <<
"</h2></td></tr>\n";
2199 m_t <<
"<tr><td class=\"ititle\" colspan=\"2\">";
2205 m_t <<
"</td></tr>\n";
2215 m_t <<
"</table>\n";
2250 int memCount,
int memTotal,
bool )
2253 m_t <<
"\n<h2 class=\"memtitle\">"
2254 <<
"<span class=\"permalink\"><a href=\"#" << anchor <<
"\">◆ </a></span>";
2258 m_t <<
" <span class=\"overload\">[" << memCount <<
"/" << memTotal <<
"]</span>";
2261 m_t <<
"\n<div class=\"memitem\">\n";
2262 m_t <<
"<div class=\"memproto\">\n";
2267 DBG_HTML(
m_t <<
"<!-- startMemberDocPrefixItem -->\n";)
2268 m_t <<
"<div class=\"memtemplate\">\n";
2273 DBG_HTML(
m_t <<
"<!-- endMemberDocPrefixItem -->\n";)
2281 m_t <<
" <table class=\"memname\">\n";
2284 m_t <<
" <td class=\"memname\">";
2297 if (openBracket)
m_t <<
"(";
2305 DBG_HTML(
m_t <<
"<!-- startFirstParameterType -->\n";)
2306 m_t <<
" <td class=\"paramtype\">";
2312 m_t <<
" <td class=\"paramkey\">" << key <<
"</td>\n";
2313 m_t <<
" <td></td>\n";
2314 m_t <<
" <td class=\"paramtype\">";
2327 m_t <<
" <td class=\"paramname\"><span class=\"paramname\"><em>";
2333 m_t <<
"</em></span>";
2338 DBG_HTML(
m_t <<
"<!-- startParameterExtra -->\n";)
2348 if (closeBracket)
m_t <<
"</td><td>)";
2355 if (closeBracket)
m_t <<
")";
2367 m_t <<
"<span class=\"paramdefsep\">";
2369 m_t <<
"</span><span class=\"paramdefval\">";
2392 m_t <<
" <td align=\"right\">";
2396 m_t <<
prefix <<
"</td><td>(</td><td colspan=\"2\">";
2397 else if (closeBracket)
2398 m_t <<
" )</td><td></td><td></td><td>";
2400 m_t <<
"</td><td></td><td colspan=\"2\">";
2410 m_t <<
" </table>\n";
2429 if (generateLegend && !umlLook)
2432 m_t <<
"<center><span class=\"legend\">[";
2435 if (generateTreeView)
m_t <<
"target=\"top\" ";
2441 m_t <<
"]</span></center>";
2527 m_t <<
"<tr><td colspan=\"2\"><div class=\"groupHeader\">";
2532 m_t <<
"</div></td></tr>\n";
2537 m_t <<
"<tr><td colspan=\"2\"><div class=\"groupText\">";
2542 m_t <<
"</div></td></tr>\n";
2557 m_t <<
"<div class=\"memdoc\">\n";
2563 m_t <<
"\n</div>\n" <<
"</div>\n";
2572 for (
int i=0; i<n; i++)
2580 m_t <<
"<table class=\"fieldtable\">\n"
2581 <<
"<tr><th colspan=\"" << (hasInits?3:2) <<
"\">" << title <<
"</th></tr>";
2585 m_t <<
"</table>\n";
2600 m_t <<
"<td class=\"fieldname\">";
2605 m_t <<
" </td>";
2610 m_t <<
"<td class=\"fieldinit\">";
2615 m_t <<
" </td>";
2620 m_t <<
"<td class=\"fielddoc\">";
2630 m_t <<
"<dl class=\"section examples\"><dt>";
2642 const DocNodeAST *astImpl =
dynamic_cast<const DocNodeAST*
>(ast);
2647 std::visit(visitor,astImpl->
root);
2659 t <<
" <div id=\"navrow1\" class=\"tabs\">\n";
2663 t <<
" <div id=\"navrow2\" class=\"tabs2\">\n";
2665 t <<
" <ul class=\"tablist\">\n";
2693 t <<
" class=\"current\"";
2703 if (!l.
isEmpty()) t <<
"</a>";
2714 case LayoutNavEntry::MainPage:
return TRUE;
2715 case LayoutNavEntry::User:
return TRUE;
2716 case LayoutNavEntry::UserGroup:
return TRUE;
2717 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
2718 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
2719 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
2720 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
2722 case LayoutNavEntry::Namespaces:
return showNamespaces && index.numDocumentedNamespaces()>0;
2723 case LayoutNavEntry::NamespaceList:
return showNamespaces && index.numDocumentedNamespaces()>0;
2725 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
2726 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
2727 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
2728 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
2729 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
2731 case LayoutNavEntry::Files:
return showFiles && index.numDocumentedFiles()>0;
2732 case LayoutNavEntry::FileList:
return showFiles && index.numDocumentedFiles()>0;
2735 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
2736 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
2737 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
2738 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
2739 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
2740 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
2741 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
2742 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
2743 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
2744 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
2745 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
2746 case LayoutNavEntry::None:
2747 assert(kind != LayoutNavEntry::None);
2757 for (
const auto &entry : root->
children())
2764 for (
const auto &entry : root->
children())
2769 t <<
"<li><a href=\"" << relPath << url <<
"\"><span>";
2771 t <<
"</span></a>\n";
2784 bool highlightParent,
bool highlightSearch)
2807 entry.get()==hlEntry &&
2808 (!entry->children().empty() ||
2809 (entry->kind()==kind && !highlightParent)
2823 if (!serverBasedSearch)
2831 if (!highlightSearch)
2837 if (!highlightSearch)
2863 bool highlightParent=
false;
2891 highlightParent =
true;
break;
2893 highlightParent =
true;
break;
2895 highlightParent =
true;
break;
2897 highlightParent =
true;
break;
2899 highlightParent =
true;
break;
2901 highlightParent =
true;
break;
2903 highlightParent =
true;
break;
2905 highlightParent =
true;
break;
2919 searchPage =
"search.php";
2921 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menudata.js\"></script>\n";
2922 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menu.js\"></script>\n";
2923 t <<
"<script type=\"text/javascript\">\n";
2924 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
2925 t <<
"$(function() {\n";
2926 t <<
" initMenu('" << relPath <<
"',"
2927 << (searchEngine?
"true":
"false") <<
","
2928 << (serverBasedSearch?
"true":
"false") <<
",'"
2929 << searchPage <<
"','"
2931 << (generateTreeView?
"true":
"false")
2935 if (!serverBasedSearch)
2937 t <<
" $(function() { init_search(); });\n";
2941 t <<
" $(function() {\n"
2942 <<
" if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n";
2947 t <<
"/* @license-end */\n";
2949 t <<
"<div id=\"main-nav\"></div>\n";
2955 if (!hlEntry && altKind!=LayoutNavEntry::None) { hlEntry=root->
find(altKind); kind=altKind; }
2958 highlightParent=
TRUE;
2959 hlEntry = root->
children().front().get();
2960 if (hlEntry==
nullptr)
2965 if (kind==LayoutNavEntry::UserGroup)
2984 m_t <<
"</div><!-- top -->\n";
2985 if (!generateTreeView)
2987 m_t <<
"<div id=\"doc-content\">\n";
2996 if (generateTreeView)
3003 "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n");
3006 " <div id=\"nav-tree\">\n"
3007 " <div id=\"nav-tree-contents\">\n"
3008 " <div id=\"nav-sync\" class=\"sync\"></div>\n"
3011 " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
3012 " class=\"ui-resizable-handle\">\n"
3015 "<script type=\"text/javascript\">\n"
3016 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
3017 "$(function(){initNavTree('") + fn +
3018 QCString(
"','") + relpath +
3019 QCString(
"'); initResizable(true); });\n"
3020 "/* @license-end */\n"
3022 "<div id=\"doc-content\">\n");
3026 result +=
"<script type=\"text/javascript\">\n"
3027 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
3028 "$(function(){ initResizable(false); });\n"
3029 "/* @license-end */\n"
3047 m_t <<
"<div class=\"contents\">\n";
3052 m_t <<
"</div><!-- contents -->\n";
3062 m_t <<
"</div><!-- PageDoc -->\n";
3079 QCString configFileName = htmlOutput+
"/search_config.php";
3085 t <<
"$config = array(\n";
3086 t <<
" 'PROJECT_NAME' => \"" <<
convertToHtml(projectName) <<
"\",\n";
3087 t <<
" 'GENERATE_TREEVIEW' => " << (generateTreeView?
"true":
"false") <<
",\n";
3088 t <<
" 'DISABLE_INDEX' => " << (disableIndex?
"true":
"false") <<
",\n";
3090 t <<
"$translator = array(\n";
3092 t <<
" 'search_results' => array(\n";
3110 QCString
fileName = htmlOutput+
"/search.php";
3118 << getDoxygenVersion() <<
" -->\n";
3119 t <<
"<script type=\"text/javascript\">\n";
3120 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
3121 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3123 t <<
"/* @license-end */\n";
3135 t <<
"require_once \"search_functions.php\";\n";
3140 if (generateTreeView)
3142 t <<
"</div><!-- doc-content -->\n";
3149 QCString scriptName = htmlOutput+
"/search/search.js";
3158 err(
"Failed to open file '%s' for writing...\n",
qPrint(scriptName));
3174 << getDoxygenVersion() <<
" -->\n";
3175 t <<
"<script type=\"text/javascript\">\n";
3176 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
3177 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3179 t <<
"/* @license-end */\n";
3186 t <<
" <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"\" placeholder=\"" <<
theTranslator->
trSearch() <<
3187 "\" size=\"20\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
3190 t <<
" </div><div class=\"right\"></div>\n";
3202 t <<
"<div class=\"header\">\n";
3203 t <<
" <div class=\"headertitle\">\n";
3207 t <<
"<div class=\"contents\">\n";
3209 t <<
"<div id=\"searchresults\"></div>\n";
3212 if (generateTreeView)
3214 t <<
"</div><!-- doc-content -->\n";
3222 QCString scriptName = dname+
"/search/search.js";
3227 t <<
"var searchResultsText=["
3232 t <<
"var tagMap = {\n";
3236 for (
const auto &ml : extraSearchMappings)
3238 QCString mapLine = ml.c_str();
3239 int eqPos = mapLine.
find(
'=');
3246 if (!first) t <<
",\n";
3247 t <<
" \"" << tagName <<
"\": \"" << destName <<
"\"";
3252 if (!first) t <<
"\n";
3256 t <<
"$(function() {\n";
3257 t <<
" var query = trim(getURLParameter('query'));\n";
3258 t <<
" if (query) {\n";
3259 t <<
" searchFor(query,0,20);\n";
3261 t <<
" var results = $('#results');\n";
3268 err(
"Failed to open file '%s' for writing...\n",
qPrint(scriptName));
3274 m_t <<
"<div class=\"typeconstraint\">\n";
3275 m_t <<
"<dl><dt><b>" << header <<
"</b></dt><dd>\n";
3276 m_t <<
"<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n";
3281 m_t <<
"<tr><td valign=\"top\"><em>";
3286 m_t <<
"</em></td>";
3291 m_t <<
"<td> :</td><td valign=\"top\"><em>";
3296 m_t <<
"</em></td>";
3301 m_t <<
"<td> ";
3306 m_t <<
"</td></tr>\n";
3311 m_t <<
"</table>\n";
3321 m_t <<
"<br class=\"" << style <<
"\" />\n";
3331 m_t <<
"<div class=\"header\">\n";
3336 m_t <<
" <div class=\"headertitle\">";
3348 m_t <<
"</div><!--header-->\n";
3355 m_t <<
"<table class=\"memberdecls\">\n";
3358 m_t <<
"<tr><td colspan=\"2\"><h3>";
3363 m_t <<
"</h3></td></tr>\n";
3368 DBG_HTML(
m_t <<
"<!-- startMemberDocSimple -->\n";)
3369 m_t <<
"<table class=\"fieldtable\">\n";
3370 m_t <<
"<tr><th colspan=\"" << (isEnum?
"2":
"3") <<
"\">";
3378 m_t <<
"</table>\n";
3383 DBG_HTML(
m_t <<
"<!-- startInlineMemberType -->\n";)
3384 m_t <<
"<tr><td class=\"fieldtype\">\n";
3389 DBG_HTML(
m_t <<
"<!-- endInlineMemberType -->\n";)
3395 DBG_HTML(
m_t <<
"<!-- startInlineMemberName -->\n";)
3396 m_t <<
"<td class=\"fieldname\">\n";
3401 DBG_HTML(
m_t <<
"<!-- endInlineMemberName -->\n";)
3407 DBG_HTML(
m_t <<
"<!-- startInlineMemberDoc -->\n";)
3408 m_t <<
"<td class=\"fielddoc\">\n";
3414 m_t <<
"</td></tr>\n";
3420 m_t <<
"<span class=\"mlabels\">";
3425 DBG_HTML(
m_t <<
"<!-- writeLabel(" << l <<
") -->\n";)
3428 m_t <<
"<span class=\"mlabel\">" << l <<
"</span>";
3442 DBG_HTML(
m_t <<
"<!-- writeInheritedSectionTitle -->\n";)
3443 QCString a = anchor;
3444 if (!a.isEmpty()) a.
prepend(
"#");
3445 QCString classLink = QCString(
"<a class=\"el\" ");
3449 classLink +=
" href=\"";
3454 classLink +=
"href=\"";
3459 classLink=classLink+fn+a;
3461 m_t <<
"<tr class=\"inherit_header " <<
id <<
"\">"
3462 <<
"<td colspan=\"2\" onclick=\"javascript:dynsection.toggleInherit('" <<
id <<
"')\">"
3463 <<
"<img src=\"" <<
m_relPath <<
"closed.png\" alt=\"-\"/> "
3472 m_t <<
" <div class=\"summary\">\n";
3478 m_t <<
"<a href=\"";
3497 m_t <<
"<tr class=\"separator:" << anchor;
3500 m_t <<
" inherit " << inheritId;
3502 m_t <<
"\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n";
3522 auto writeIndent = [&]() {
for (
int i=0;i<indent*2;i++)
m_t <<
" "; };
3523 auto incIndent = [&](
const QCString &text) {
writeIndent();
m_t << text <<
"\n"; indent++; };
3524 auto decIndent = [&](
const QCString &text) { indent--;
writeIndent();
m_t << text <<
"\n"; };
3525 m_t <<
"<div class=\"toc\">";
3531 for (
const SectionInfo *si : sectionRefs)
3534 SectionType
type = si->type();
3535 if (
type.isSection())
3538 int nextLevel =
type.level();
3539 if (nextLevel>level)
3541 for (
int l=level;l<nextLevel;l++)
3546 cs[0]=
static_cast<char>(
'0'+l+1);
3547 const char *empty = (l!=nextLevel-1) ?
" empty" :
"";
3548 incIndent(
"<li class=\"level" + QCString(cs) + empty +
"\">");
3552 else if (nextLevel<level)
3554 for (
int l=level;l>nextLevel;l--)
3556 if (l <= maxLevel) decIndent(
"</li>");
3558 if (l <= maxLevel) decIndent(
"</ul>");
3561 if (nextLevel <= maxLevel)
3563 if (inLi[nextLevel] || level>nextLevel)
3566 cs[0]=
static_cast<char>(
'0'+nextLevel);
3567 incIndent(
"<li class=\"level" + QCString(cs) +
"\">");
3569 QCString titleDoc = si->title();
3570 QCString label = si->label();
3571 if (titleDoc.
isEmpty()) titleDoc = label;
3573 m_t <<
"<a href=\"#"+label+
"\">"
3576 inLi[nextLevel]=
true;
3581 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.
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
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)
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
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()
void addStyleSheetFile(const QCString &name)
void addIndexFile(const QCString &name)
void addImageFile(const QCString &name)
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
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
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 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.
virtual QCString trSearchMatches()=0
virtual QCString trDeclaration()=0
virtual QCString trSearch()=0
virtual QCString trInheritedFrom(const QCString &members, const QCString &what)=0
virtual QCString trSearchResultsTitle()=0
virtual QCString trLoading()=0
virtual QCString trEnumerationValues()=0
virtual QCString trSearching()=0
virtual QCString trRTFTableOfContents()=0
virtual QCString trCompoundMembers()=0
virtual QCString trNoMatches()=0
virtual QCString trGeneratedBy()=0
virtual QCString trDefinition()=0
virtual QCString trCopyToClipboard()=0
virtual QCString trLegend()=0
virtual QCString trSearchResults(int numDocuments)=0
virtual QCString trExamples()=0
virtual QCString trGeneratedAt(const QCString &date, const QCString &projName)=0
#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
int qstrncmp(const char *str1, const char *str2, size_t len)
const char * qPrint(const char *s)
static void writeIndent(TextStream &t, int indent)
Web server based search engine.
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)
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)