71static constexpr auto hex=
"0123456789ABCDEF";
79 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
80 t <<
" <span class=\"left\">\n";
81 t <<
" <span id=\"MSearchSelect\" class=\"search-icon\" ";
82 t <<
"onmouseover=\"return searchBox.OnSearchSelectShow()\" ";
83 t <<
"onmouseout=\"return searchBox.OnSearchSelectHide()\">";
84 t <<
"<span class=\"search-icon-dropdown\"></span></span>\n";
85 t <<
" <input type=\"text\" id=\"MSearchField\" value=\"\" placeholder=\""
87 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
88 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
89 t <<
" onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
90 t <<
" </span><span class=\"right\">\n";
91 t <<
" <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
92 <<
"<div id=\"MSearchCloseImg\" class=\"close-icon\"></div></a>\n";
102 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
103 t <<
" <div class=\"left\">\n";
104 t <<
" <form id=\"FSearchBox\" action=\"" << relPath;
113 t <<
"\" method=\"get\">\n";
114 t <<
" <span id=\"MSearchSelectExt\" class=\"search-icon\"></span>\n";
117 t <<
" <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"\" placeholder=\""
118 <<
theTranslator->trSearch() <<
"\" size=\"20\" accesskey=\"S\" \n";
119 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
120 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
122 t <<
" </div><div class=\"right\"></div>\n";
153 if (macrofile.
isEmpty())
return "";
158 const char *data = s.
data();
167 while (i < size && (data[i] ==
' ' || data[i] ==
'\t' || data[i] ==
'\n'))
169 if (data[i] ==
'\n') line++;
172 if (i >= size)
break;
176 warn(macrofile,line,
"file contains non valid code, expected '\\' got '{:c}'",data[i]);
182 i += strlen(
"newcommand");
186 i += strlen(
"renewcommand");
190 warn(macrofile,line,
"file contains non valid code, expected 'newcommand' or 'renewcommand'");
196 warn(macrofile,line,
"file contains non valid code, expected '{{' got '{:c}'",data[i]);
202 warn(macrofile,line,
"file contains non valid code, expected '\\' got '{:c}'",data[i]);
208 while (i < size && (data[i] !=
'}')) out.
addChar(data[i++]);
211 warn(macrofile,line,
"file contains non valid code, no closing '}}' for command");
224 while (i < size && (data[i] !=
']')) nr += data[i++];
227 warn(macrofile,line,
"file contains non valid code, no closing ']'");
232 else if (data[i] !=
'{')
234 warn(macrofile,line,
"file contains non valid code, expected '[' or '{{' got '{:c}'",data[i]);
241 warn(macrofile,line,
"file contains non valid code, expected '{{' got '{:c}'",data[i]);
249 while (i < size && cnt)
263 else if (data[i] !=
'"') out.
addChar(data[i++]);
289 warn(macrofile,line,
"file contains non valid code, no closing '}}' for replacement");
346 bool hasProjectName = !projectName.
isEmpty();
353 bool hasCookie = treeView || searchEngine ||
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE;
354 static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
359 cssFile =
"doxygen.css";
372 cssFile =
"doxygen.css";
379 for (
const auto &fileName : extraCssFile)
381 if (!fileName.empty())
383 QCString htmlStyleSheet = fileName.c_str();
386 extraCssText +=
"<link href=\""+htmlStyleSheet+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
393 extraCssText +=
"<link href=\"$relpath^"+
stripPath(fileName.c_str())+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
401 case TIMESTAMP_t::NO:
405 generatedBy =
theTranslator->trGeneratedAt(
"<span class=\"timestamp\"></span>",
411 treeViewCssJs =
"<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
412 "<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
413 "<script type=\"text/javascript\" src=\"$relpath^navtree.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 " $(function() { init_search(); });\n"
438 searchCssJs +=
"<script type=\"text/javascript\">\n"
440 " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
446 searchCssJs +=
"<link rel=\"search\" href=\"" + relPath +
447 "search_opensearch.php?v=opensearch.xml\" "
448 "type=\"application/opensearchdescription+xml\" title=\"" +
449 (hasProjectName ? projectName :
QCString(
"Doxygen")) +
465 switch (mathJaxVersion)
467 case MATHJAX_VERSION_t::MathJax_3:
470 "<script type=\"text/javascript\">\n"
471 "window.MathJax = {\n"
473 " ignoreHtmlClass: 'tex2jax_ignore',\n"
474 " processHtmlClass: 'tex2jax_process'\n"
480 if (!mathJaxExtensions.empty())
483 mathJaxJs+=
" loader: {\n"
485 for (
const auto &s : mathJaxExtensions)
487 if (!first) mathJaxJs+=
",";
488 mathJaxJs+=
"'[tex]/"+
QCString(s.c_str())+
"'";
494 mathJaxJs+=
" tex: {\n"
501 " packages: ['base','configmacros'";
504 mathJaxJs+=
",'newcommand'";
506 for (
const auto &s : mathJaxExtensions)
508 mathJaxJs+=
",'"+
QCString(s.c_str())+
"'";
524 mathJaxJs +=
"</script>\n";
525 mathJaxJs +=
"<script type=\"text/javascript\" id=\"MathJax-script\" async=\"async\" src=\"" +
526 path +
"es5/tex-" + mathJaxFormat.
lower() +
".js\">";
527 mathJaxJs+=
"</script>\n";
530 case MATHJAX_VERSION_t::MathJax_2:
532 mathJaxJs =
"<script type=\"text/x-mathjax-config\">\n"
533 "MathJax.Hub.Config({\n"
534 " extensions: [\"tex2jax.js\"";
536 for (
const auto &s : mathJaxExtensions)
538 mathJaxJs+=
", \""+
QCString(s.c_str())+
".js\"";
542 mathJaxFormat =
"HTML-CSS";
545 " jax: [\"input/TeX\",\"output/"+mathJaxFormat+
"\"],\n";
548 mathJaxJs +=
" TeX: { Macros: {\n";
553 mathJaxJs +=
"});\n";
559 mathJaxJs +=
"</script>\n";
560 mathJaxJs +=
"<script type=\"text/javascript\" async=\"async\" src=\"" + path +
"MathJax.js\"></script>\n";
569 darkModeJs=
"<script type=\"text/javascript\" src=\"$relpath^darkmode_toggle.js\"></script>\n";
574 treeViewCssJs+=
"<script type=\"text/javascript\" src=\"$relpath^cookie.js\"></script>\n";
587 {
"$datetime", [&]() {
return "<span class=\"datetime\"></span>"; } },
588 {
"$date", [&]() {
return "<span class=\"date\"></span>"; } },
589 {
"$time", [&]() {
return "<span class=\"time\"></span>"; } },
590 {
"$year", [&]() {
return "<span class=\"year\"></span>"; } },
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 if (it==mapping.end())
681 err(
"failed to find value variable {}. It is not longer defined in doxygen.css\n",input.
mid(i+4,j-i-4));
686 output.
addStr(it->second);
696 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
700 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
736 const char *p=str.
data();
749 int spacesToNextTabStop = tabSize - (
m_col%tabSize);
750 while (spacesToNextTabStop--)
769 case '\'': *
m_t <<
"'";
m_col++;
771 case '"': *
m_t <<
""";
m_col++;
775 { *
m_t <<
"<"; p++; }
777 { *
m_t <<
">"; p++; }
779 { *
m_t <<
"\\‍(";
m_col++;p++; }
781 { *
m_t <<
"\\‍)";
m_col++;p++; }
788 uint8_t uc =
static_cast<uint8_t
>(c);
791 *
m_t <<
"$" <<
hex[uc>>4] <<
hex[uc&0xF] <<
";";
835 const QCString &anchor,
int l,
bool writeLineAnchor)
839 const int maxLineNrStr = 10;
840 char lineNumber[maxLineNrStr];
841 char lineAnchor[maxLineNrStr];
842 qsnprintf(lineNumber,maxLineNrStr,
"%5d",l);
843 qsnprintf(lineAnchor,maxLineNrStr,
"l%05d",l);
848 *
m_t <<
"<div class=\"line\">";
852 if (writeLineAnchor) *
m_t <<
"<a id=\"" << lineAnchor <<
"\" name=\"" << lineAnchor <<
"\"></a>";
853 *
m_t <<
"<span class=\"lineno\">";
891 *
m_t <<
"<a class=\"" << className <<
"Ref\" ";
896 *
m_t <<
"<a class=\"" << className <<
"\" ";
916 *
m_t <<
"<div class=\"ttc\" id=\"" <<
id <<
"\">";
917 *
m_t <<
"<div class=\"ttname\">";
920 *
m_t <<
"<a href=\"";
936 *
m_t <<
"<div class=\"ttdeci\">";
943 *
m_t <<
"<div class=\"ttdoc\">";
950 *
m_t <<
"<div class=\"ttdef\"><b>" <<
theTranslator->trDefinition() <<
"</b> ";
953 *
m_t <<
"<a href=\"";
969 *
m_t <<
"<div class=\"ttdecl\"><b>" <<
theTranslator->trDeclaration() <<
"</b> ";
972 *
m_t <<
"<a href=\"";
997 *
m_t <<
"<div class=\"line\">";
1021 *
m_t <<
"<span class=\"" << s <<
"\">";
1033 *
m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1038 *
m_t <<
"<div class=\"fragment\">";
1050 *
m_t <<
"</div><!-- fragment -->";
1060 const int maxLineNrStr = 10;
1061 char lineNumber[maxLineNrStr];
1062 qsnprintf(lineNumber,maxLineNrStr,
"%05d",lineNr);
1063 *
m_t <<
"<div class=\"foldopen\" id=\"foldopen" << lineNumber <<
1064 "\" data-start=\"" << startMarker <<
1065 "\" data-end=\"" << endMarker <<
1069 *
m_t <<
"<div class=\"line\">";
1077 *
m_t <<
"<div class=\"line\">";
1153 return (str.
contains(
"$datetime",
false) ||
1166 term(
"Could not create output directory {}\n",dname);
1336 searchCss = mgr.
getAsString(
"search_sidebar.css");
1342 searchCss = mgr.
getAsString(
"search_nomenu_toggle.css");
1351 searchCss = mgr.
getAsString(
"search_fixedtabs.css");
1358 searchCss += mgr.
getAsString(
"search_common.css");
1359 searchCss =
substitute(searchCss,
"$doxygenversion",getDoxygenVersion());
1367 t <<
"/* The standard CSS for doxygen " << getDoxygenVersion() <<
"*/\n\n";
1370 case HTML_COLORSTYLE_t::LIGHT:
1371 case HTML_COLORSTYLE_t::DARK:
1374 case HTML_COLORSTYLE_t::AUTO_LIGHT:
1375 case HTML_COLORSTYLE_t::TOGGLE:
1380 case HTML_COLORSTYLE_t::AUTO_DARK:
1386 if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_LIGHT)
1388 t <<
"@media (prefers-color-scheme: dark) {\n";
1389 t <<
" html:not(.dark-mode) {\n";
1390 t <<
" color-scheme: dark;\n\n";
1394 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_DARK)
1396 t <<
"@media (prefers-color-scheme: light) {\n";
1397 t <<
" html:not(.light-mode) {\n";
1398 t <<
" color-scheme: light;\n\n";
1402 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE)
1404 t <<
"html.dark-mode {\n";
1415 " border-bottom: none;\n"
1416 " background-color: var(--nav-background-color);\n"
1417 " border-right: 1px solid var(--nav-border-color);\n"
1432 case TIMESTAMP_t::YES:
1433 case TIMESTAMP_t::DATETIME:
1436 case TIMESTAMP_t::DATE:
1442 t <<
"--timestamp: '" << timeStampStr <<
"';\n";
1455 t <<
"span.timestamp { content: ' '; }\n";
1456 t <<
"span.timestamp:before { content: var(--timestamp); }\n\n";
1460 t <<
"span.datetime { content: ' '; }\n";
1461 t <<
"span.datetime:before { content: var(--datetime); }\n\n";
1462 t <<
"span.date { content: ' '; }\n";
1463 t <<
"span.date:before { content: var(--date); }\n\n";
1464 t <<
"span.time { content: ' '; }\n";
1465 t <<
"span.time:before { content: var(--time); }\n\n";
1466 t <<
"span.year { content: ' '; }\n";
1467 t <<
"span.year:before { content: var(--year); }\n\n";
1474 bool addScrollbarStyling =
Config_getList(HTML_EXTRA_STYLESHEET).empty();
1475 if (addScrollbarStyling)
1490 t <<
"<!-- HTML header for doxygen " << getDoxygenVersion() <<
"-->\n";
1496 t <<
"<!-- HTML footer for doxygen " << getDoxygenVersion() <<
"-->\n";
1523 << getDoxygenVersion() <<
" -->\n";
1527 m_t <<
"<script type=\"text/javascript\">\n";
1528 m_t <<
"var searchBox = new SearchBox(\"searchBox\", \""
1530 m_t <<
"</script>\n";
1534 m_t <<
"<script type=\"text/javascript\">\n";
1535 m_t <<
"$(function() { codefold.init(); });\n";
1536 m_t <<
"</script>\n";
1545 if (searchEngine && !serverBasedSearch)
1547 t <<
"<!-- window showing the filter options -->\n";
1548 t <<
"<div id=\"MSearchSelectWindow\"\n";
1549 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
1550 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
1551 t <<
" onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
1554 t <<
"<!-- iframe showing the search results (closed by default) -->\n";
1555 t <<
"<div id=\"MSearchResultsWindow\">\n";
1556 t <<
"<div id=\"MSearchResults\">\n";
1557 t <<
"<div class=\"SRPage\">\n";
1558 t <<
"<div id=\"SRIndex\">\n";
1559 t <<
"<div id=\"SRResults\"></div>\n";
1560 t <<
"<div class=\"SRStatus\" id=\"Loading\">" <<
theTranslator->trLoading() <<
"</div>\n";
1561 t <<
"<div class=\"SRStatus\" id=\"Searching\">" <<
theTranslator->trSearching() <<
"</div>\n";
1562 t <<
"<div class=\"SRStatus\" id=\"NoMatches\">" <<
theTranslator->trNoMatches() <<
"</div>\n";
1582 case TIMESTAMP_t::NO:
1586 result =
theTranslator->trGeneratedAt(
"<span class=\"timestamp\"></span>",
1590 result +=
" \n<a href=\"https://www.doxygen.org/index.html\">\n"
1591 "<img class=\"footer\" src=\"";
1593 result +=
"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> ";
1594 result += getDoxygenVersion();
1622 m_t <<
"<h3 class=\"version\">";
1651 err(
"style sheet {} does not exist or is not readable!\n",
Config_getString(HTML_STYLESHEET));
1666 for (
const auto &
fileName : extraCssFiles)
1705 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1719 m_t <<
"\n<p class=\"" << classDef <<
"\">";
1751 m_t <<
"<a class=\"elRef\" ";
1756 m_t <<
"<a class=\"el\" ";
1794 m_t <<
"<a class=\"el\" href=\"" << fn <<
"\">";
1804 m_t <<
"<a class=\"elRef\" ";
1809 m_t <<
"<a class=\"el\" ";
1825 m_t <<
"<a href=\"";
1842 if (extraIndentLevel==2)
1846 else if (extraIndentLevel==1)
1858 m_t <<
" class=\"groupheader\">";
1863 if (extraIndentLevel==2)
1867 else if (extraIndentLevel==1)
1879 switch(
type.level())
1888 default:
ASSERT(0);
break;
1890 m_t <<
"<a id=\"" << lab <<
"\" name=\"" << lab <<
"\"></a>";
1895 switch(
type.level())
1904 default:
ASSERT(0);
break;
1917 const char *p=str.
data();
1923 case '<':
m_t <<
"<";
break;
1924 case '>':
m_t <<
">";
break;
1925 case '&':
m_t <<
"&";
break;
1926 case '"':
m_t <<
""";
break;
1927 case '-':
if (inHtmlComment)
m_t <<
"-";
else m_t <<
"-";
break;
1930 {
m_t <<
"<"; p++; }
1932 {
m_t <<
">"; p++; }
1934 {
m_t <<
"\\‍("; p++; }
1936 {
m_t <<
"\\‍)"; p++; }
1957 const QCString &relPath,
int sectionCount)
1961 if (dynamicSections)
1963 t <<
"<div id=\"dynsection-" << sectionCount <<
"\" "
1964 "onclick=\"return dynsection.toggleVisibility(this)\" "
1965 "class=\"dynheader closed\" "
1966 "style=\"cursor:pointer;\">"
1967 "<span class=\"dynarrow\"><span class=\"arrowhead closed\"></span></span>";
1971 t <<
"<div class=\"dynheader\">\n";
1985 if (dynamicSections)
1987 t <<
"<div id=\"dynsection-" << sectionCount <<
"-summary\" "
1988 "class=\"dynsummary\" "
1989 "style=\"display:block;\">\n";
1997 if (dynamicSections)
2007 if (dynamicSections)
2009 t <<
"<div id=\"dynsection-" << sectionCount <<
"-content\" "
2010 "class=\"dyncontent\" "
2011 "style=\"display:none;\">\n";
2015 t <<
"<div class=\"dyncontent\">\n";
2043 m_t <<
" <div class=\"center\">\n";
2044 m_t <<
" <img src=\"";
2046 m_t <<
"_map\" alt=\"\"/>\n";
2056 m_t <<
" <div class=\"center\">\n";
2057 m_t <<
" <img src=\"";
2085 m_t <<
"<table class=\"memberdecls\">\n";
2091 m_t <<
" inherit " << inheritId;
2108 m_t <<
"</td></tr>\n";
2117 m_t <<
"</td></tr>\n";
2121 m_t <<
" inherit " << inheritId;
2123 m_t <<
" template\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">";
2128 m_t <<
"<div class=\"compoundTemplParams\">";
2139 m_t <<
" </td><td class=\"memItemRight\" valign=\"bottom\">";
2144 if (!initTag)
m_t <<
" </td>";
2156 DBG_HTML(
m_t <<
"<!-- startMemberDescription -->\n")
2159 m_t <<
"<table class=\"memberdecls\">\n";
2162 m_t <<
"<tr class=\"memdesc:" << anchor;
2165 m_t <<
" inherit " << inheritId;
2168 m_t <<
"<td class=\"mdescLeft\"> </td>";
2169 if (typ)
m_t <<
"<td class=\"mdescLeft\"> </td>";
2170 m_t <<
"<td class=\"mdescRight\">";
2175 DBG_HTML(
m_t <<
"<!-- endMemberDescription -->\n")
2176 m_t <<
"<br /></td></tr>\n";
2192 m_t <<
"</table>\n";
2206 m_t <<
"<table class=\"memberdecls\">\n";
2209 m_t <<
"<tr class=\"heading\"><td colspan=\"" << typ <<
"\"><h2";
2212 m_t <<
" id=\"header-" << anchor <<
"\"";
2214 m_t <<
" class=\"groupheader\">";
2217 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>\n";
2224 m_t <<
"</h2></td></tr>\n";
2232 m_t <<
"<table class=\"memberdecls\">\n";
2235 m_t <<
"<tr><td class=\"ititle\" colspan=\"2\">";
2241 m_t <<
"</td></tr>\n";
2251 m_t <<
"</table>\n";
2286 int memCount,
int memTotal,
bool )
2289 m_t <<
"\n<h2 class=\"memtitle\">"
2290 <<
"<span class=\"permalink\"><a href=\"#" << anchor <<
"\">◆ </a></span>";
2294 m_t <<
" <span class=\"overload\">[" << memCount <<
"/" << memTotal <<
"]</span>";
2297 m_t <<
"\n<div class=\"memitem\">\n";
2298 m_t <<
"<div class=\"memproto\">\n";
2303 DBG_HTML(
m_t <<
"<!-- startMemberDocPrefixItem -->\n";)
2304 m_t <<
"<div class=\"memtemplate\">\n";
2309 DBG_HTML(
m_t <<
"<!-- endMemberDocPrefixItem -->\n";)
2317 m_t <<
" <table class=\"memname\">\n";
2320 m_t <<
" <td class=\"memname\">";
2333 if (openBracket)
m_t <<
"(";
2341 DBG_HTML(
m_t <<
"<!-- startFirstParameterType -->\n";)
2342 m_t <<
" <td class=\"paramtype\">";
2348 m_t <<
" <td class=\"paramkey\">" << key <<
"</td>\n";
2349 m_t <<
" <td></td>\n";
2350 m_t <<
" <td class=\"paramtype\">";
2363 m_t <<
" <td class=\"paramname\"><span class=\"paramname\"><em>";
2369 m_t <<
"</em></span>";
2374 DBG_HTML(
m_t <<
"<!-- startParameterExtra -->\n";)
2384 if (closeBracket)
m_t <<
"</td><td>)";
2391 if (closeBracket)
m_t <<
")";
2403 m_t <<
"<span class=\"paramdefsep\">";
2405 m_t <<
"</span><span class=\"paramdefval\">";
2428 m_t <<
" <td align=\"right\">";
2432 m_t <<
prefix <<
"</td><td>(</td><td colspan=\"2\">";
2433 else if (closeBracket)
2434 m_t <<
" )</td><td></td><td></td><td>";
2436 m_t <<
"</td><td></td><td colspan=\"2\">";
2446 m_t <<
" </table>\n";
2465 if (generateLegend && !umlLook)
2468 m_t <<
"<center><span class=\"legend\">[";
2471 if (generateTreeView)
m_t <<
"target=\"top\" ";
2477 m_t <<
"]</span></center>";
2563 m_t <<
"<tr id=\"" <<
id <<
"\" class=\"groupHeader\"><td colspan=\"2\"><div class=\"groupHeader\">";
2568 m_t <<
"</div></td></tr>\n";
2573 m_t <<
"<tr><td colspan=\"2\" class=\"ititle\"><div class=\"groupText\">";
2578 m_t <<
"</div></td></tr>\n";
2593 m_t <<
"<div class=\"memdoc\">\n";
2599 m_t <<
"\n</div>\n" <<
"</div>\n";
2608 for (
int i=0; i<n; i++)
2616 m_t <<
"<table class=\"fieldtable\">\n"
2617 <<
"<tr><th colspan=\"" << (hasInits?3:2) <<
"\">" << title <<
"</th></tr>";
2621 m_t <<
"</table>\n";
2636 m_t <<
"<td class=\"fieldname\">";
2641 m_t <<
" </td>";
2646 m_t <<
"<td class=\"fieldinit\">";
2651 m_t <<
" </td>";
2656 m_t <<
"<td class=\"fielddoc\">";
2666 m_t <<
"<dl class=\"section examples\"><dt>";
2683 std::visit(visitor,astImpl->
root);
2695 t <<
" <div id=\"navrow1\" class=\"tabs\">\n";
2699 t <<
" <div id=\"navrow2\" class=\"tabs2\">\n";
2701 t <<
" <ul class=\"tablist\">\n";
2729 t <<
" class=\"current\"";
2739 if (!l.
isEmpty()) t <<
"</a>";
2750 case LayoutNavEntry::MainPage:
return TRUE;
2751 case LayoutNavEntry::User:
return TRUE;
2752 case LayoutNavEntry::UserGroup:
return TRUE;
2753 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
2754 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
2755 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
2756 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
2758 case LayoutNavEntry::Namespaces:
return showNamespaces && index.numDocumentedNamespaces()>0;
2759 case LayoutNavEntry::NamespaceList:
return showNamespaces && index.numDocumentedNamespaces()>0;
2761 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
2762 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
2763 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
2764 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
2765 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
2767 case LayoutNavEntry::Files:
return showFiles && index.numDocumentedFiles()>0;
2768 case LayoutNavEntry::FileList:
return showFiles && index.numDocumentedFiles()>0;
2771 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
2772 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
2773 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
2774 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
2775 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
2776 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
2777 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
2778 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
2779 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
2780 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
2781 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
2782 case LayoutNavEntry::None:
2783 assert(kind != LayoutNavEntry::None);
2793 for (
const auto &entry : root->
children())
2800 for (
const auto &entry : root->
children())
2805 t <<
"<li><a href=\"" << relPath << url <<
"\"><span>";
2807 t <<
"</span></a>\n";
2820 bool highlightParent,
bool highlightSearch)
2843 entry.get()==hlEntry &&
2844 (!entry->children().empty() ||
2845 (entry->kind()==kind && !highlightParent)
2863 if (disableIndex || !generateTreeView || !fullSidebar)
2865 if (!serverBasedSearch)
2873 if (!highlightSearch)
2914 bool highlightParent=
false;
2942 highlightParent =
true;
break;
2944 highlightParent =
true;
break;
2946 highlightParent =
true;
break;
2948 highlightParent =
true;
break;
2950 highlightParent =
true;
break;
2952 highlightParent =
true;
break;
2954 highlightParent =
true;
break;
2956 highlightParent =
true;
break;
2961 if (!disableIndex && dynamicMenus)
2970 searchPage =
"search.php";
2972 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menudata.js\"></script>\n";
2973 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menu.js\"></script>\n";
2974 t <<
"<script type=\"text/javascript\">\n";
2975 t <<
"$(function() {\n";
2976 t <<
" initMenu('" << relPath <<
"',"
2977 << (searchEngine && !(generateTreeView && fullSidebar)?
"true":
"false") <<
","
2978 << (serverBasedSearch?
"true":
"false") <<
",'"
2979 << searchPage <<
"','"
2981 << (generateTreeView?
"true":
"false")
2985 if (!serverBasedSearch)
2987 if (!disableIndex && dynamicMenus && !fullSidebar)
2989 t <<
" $(function() { init_search(); });\n";
2994 t <<
" $(function() {\n"
2995 <<
" if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n";
3001 t <<
"<div id=\"main-nav\"></div>\n";
3003 else if (!disableIndex)
3007 if (!hlEntry && altKind!=LayoutNavEntry::None) { hlEntry=root->
find(altKind); kind=altKind; }
3010 highlightParent=
TRUE;
3011 hlEntry = root->
children().front().get();
3012 if (hlEntry==
nullptr)
3017 if (kind==LayoutNavEntry::UserGroup)
3025 t <<
"<div id=\"main-nav\">\n";
3029 t <<
"</div><!-- main-nav -->\n";
3032 else if (!generateTreeView)
3036 if (generateTreeView && !disableIndex && fullSidebar && !extraTabs)
3038 t <<
"<div id=\"container\"><div id=\"doc-content\">\n";
3045 m_t <<
"</div><!-- top -->\n";
3046 if (!generateTreeView)
3048 m_t <<
"<div id=\"doc-content\">\n";
3057 if (generateTreeView)
3064 "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n");
3067 " <div id=\"nav-tree\">\n"
3068 " <div id=\"nav-tree-contents\">\n"
3069 " <div id=\"nav-sync\" class=\"sync\"></div>\n"
3072 " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
3073 " class=\"ui-resizable-handle\">\n"
3076 "<script type=\"text/javascript\">\n"
3077 "$(function(){initNavTree('" + fn +
"','" + relpath +
"','" + allMembersFile +
"'); });\n"
3081 result+=
"<div id=\"container\">\n<div id=\"doc-content\">\n";
3099 m_t <<
"<div class=\"contents\">\n";
3104 m_t <<
"</div><!-- contents -->\n";
3114 m_t <<
"</div><!-- PageDoc -->\n";
3128 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3133 QCString configFileName = htmlOutput+
"/search_config.php";
3139 t <<
"$config = array(\n";
3140 t <<
" 'PROJECT_NAME' => \"" <<
convertToHtml(projectName) <<
"\",\n";
3141 t <<
" 'GENERATE_TREEVIEW' => " << (generateTreeView?
"true":
"false") <<
",\n";
3142 t <<
" 'DISABLE_INDEX' => " << (disableIndex?
"true":
"false") <<
",\n";
3143 t <<
" 'FULL_SIDEBAR' => " << (fullSidebar?
"true":
"false") <<
",\n";
3145 t <<
"$translator = array(\n";
3146 t <<
" 'search_results_title' => \"" <<
theTranslator->trSearchResultsTitle() <<
"\",\n";
3147 t <<
" 'search_results' => array(\n";
3148 t <<
" 0 => \"" <<
theTranslator->trSearchResults(0) <<
"\",\n";
3149 t <<
" 1 => \"" <<
theTranslator->trSearchResults(1) <<
"\",\n";
3152 t <<
" 'search_matches' => \"" <<
theTranslator->trSearchMatches() <<
"\",\n";
3153 t <<
" 'search' => \"" <<
theTranslator->trSearch() <<
"\",\n";
3171 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3172 << getDoxygenVersion() <<
" -->\n";
3173 t <<
"<script type=\"text/javascript\">\n";
3174 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3178 if (!disableIndex && !quickLinksAfterSplitbar)
3182 if (generateTreeView)
3184 t <<
"</div><!-- top -->\n";
3187 if (quickLinksAfterSplitbar)
3191 t <<
"<!-- generated -->\n";
3194 t <<
"require_once \"search_functions.php\";\n";
3199 if (generateTreeView)
3201 t <<
"</div><!-- doc-content -->\n";
3202 t <<
"</div><!-- container -->\n";
3209 QCString scriptName = htmlOutput+
"/search/search.js";
3218 err(
"Failed to open file '{}' for writing...\n",scriptName);
3227 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3236 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3237 << getDoxygenVersion() <<
" -->\n";
3238 t <<
"<script type=\"text/javascript\">\n";
3239 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3243 if (!disableIndex && !quickLinksAfterSplitbar)
3247 if (generateTreeView)
3249 t <<
"</div><!-- top -->\n";
3252 if (quickLinksAfterSplitbar)
3257 t <<
"<div class=\"header\">\n";
3258 t <<
" <div class=\"headertitle\">\n";
3259 t <<
" <div class=\"title\">" <<
theTranslator->trSearchResultsTitle() <<
"</div>\n";
3262 t <<
"<div class=\"contents\">\n";
3264 t <<
"<div id=\"searchresults\"></div>\n";
3267 if (generateTreeView)
3269 t <<
"</div><!-- doc-content -->\n";
3270 t <<
"</div><!-- container -->\n";
3278 QCString scriptName = dname+
"/search/search.js";
3283 t <<
"var searchResultsText=["
3288 t <<
"var tagMap = {\n";
3292 for (
const auto &ml : extraSearchMappings)
3295 int eqPos = mapLine.
find(
'=');
3302 if (!first) t <<
",\n";
3303 t <<
" \"" << tagName <<
"\": \"" << destName <<
"\"";
3308 if (!first) t <<
"\n";
3312 t <<
"$(function() {\n";
3313 t <<
" var query = trim(getURLParameter('query'));\n";
3314 t <<
" if (query) {\n";
3315 t <<
" searchFor(query,0,20);\n";
3317 t <<
" var results = $('#results');\n";
3318 t <<
" results.html('<p>" <<
theTranslator->trSearchResults(0) <<
"</p>');\n";
3324 err(
"Failed to open file '{}' for writing...\n",scriptName);
3330 m_t <<
"<div class=\"typeconstraint\">\n";
3331 m_t <<
"<dl><dt><b>" << header <<
"</b></dt><dd>\n";
3332 m_t <<
"<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n";
3337 m_t <<
"<tr><td valign=\"top\"><em>";
3342 m_t <<
"</em></td>";
3347 m_t <<
"<td> :</td><td valign=\"top\"><em>";
3352 m_t <<
"</em></td>";
3357 m_t <<
"<td> ";
3362 m_t <<
"</td></tr>\n";
3367 m_t <<
"</table>\n";
3377 m_t <<
"<br class=\"" << style <<
"\" />\n";
3387 m_t <<
"<div class=\"header\">\n";
3392 m_t <<
" <div class=\"headertitle\">";
3404 m_t <<
"</div><!--header-->\n";
3411 m_t <<
"<table class=\"memberdecls\">\n";
3414 m_t <<
"<tr><td colspan=\"2\"><h3>";
3419 m_t <<
"</h3></td></tr>\n";
3424 DBG_HTML(
m_t <<
"<!-- startMemberDocSimple -->\n";)
3425 m_t <<
"<table class=\"fieldtable\">\n";
3426 m_t <<
"<tr><th colspan=\"" << (isEnum?
"2":
"3") <<
"\">";
3434 m_t <<
"</table>\n";
3439 DBG_HTML(
m_t <<
"<!-- startInlineMemberType -->\n";)
3440 m_t <<
"<tr><td class=\"fieldtype\">\n";
3445 DBG_HTML(
m_t <<
"<!-- endInlineMemberType -->\n";)
3451 DBG_HTML(
m_t <<
"<!-- startInlineMemberName -->\n";)
3452 m_t <<
"<td class=\"fieldname\">\n";
3457 DBG_HTML(
m_t <<
"<!-- endInlineMemberName -->\n";)
3463 DBG_HTML(
m_t <<
"<!-- startInlineMemberDoc -->\n";)
3464 m_t <<
"<td class=\"fielddoc\">\n";
3470 m_t <<
"</td></tr>\n";
3476 m_t <<
"<span class=\"mlabels\">";
3481 DBG_HTML(
m_t <<
"<!-- writeLabel(" << label <<
") -->\n";)
3483 auto convertLabelToClass = [](
const std::string &lab) {
3496 for (
size_t i=0; i<l; i++)
3498 char c = input.
at(i);
3499 if (c<0 || (c>=
'a' && c<=
'z') || c==
'_')
3504 else if (nmstart && (c<0 || (c>=
'a' && c<=
'z') || (c>=
'0' && c<=
'9') || c==
'_'))
3508 else if (nmstart && (c==
' ' || c==
'-'))
3516 m_t <<
"<span class=\"mlabel " << convertLabelToClass(label.
stripWhiteSpace().
str()) <<
"\">" << label <<
"</span>";
3530 DBG_HTML(
m_t <<
"<!-- writeInheritedSectionTitle -->\n";)
3532 if (!a.isEmpty()) a.
prepend(
"#");
3537 classLink +=
" href=\"";
3542 classLink +=
"href=\"";
3547 classLink=classLink+fn+a;
3549 m_t <<
"<tr class=\"inherit_header " <<
id <<
"\">"
3550 <<
"<td colspan=\"2\" onclick=\"javascript:dynsection.toggleInherit('" <<
id <<
"')\">"
3551 <<
"<span class=\"dynarrow\"><span class=\"arrowhead closed\"></span></span>"
3560 m_t <<
" <div class=\"summary\">\n";
3566 m_t <<
"<a href=\"";
3585 m_t <<
"<div id=\"page-nav\" class=\"page-nav-panel\">\n";
3586 m_t <<
"<div id=\"page-nav-resize-handle\"></div>\n";
3587 m_t <<
"<div id=\"page-nav-tree\">\n";
3588 m_t <<
"<div id=\"page-nav-contents\">\n";
3589 m_t <<
"</div><!-- page-nav-contents -->\n";
3590 m_t <<
"</div><!-- page-nav-tree -->\n";
3591 m_t <<
"</div><!-- page-nav -->\n";
3615 m_t <<
"<div class=\"toc\">";
3634 if (
type.isSection())
3637 int nextLevel =
type.level();
3645 char cs[2] = {
static_cast<char>(
'0'+l+1), 0 };
3646 const char *empty = (l!=nextLevel-1) ?
" empty" :
"";
3665 char cs[2] = {
static_cast<char>(
'0'+nextLevel), 0 };
3670 m_t <<
"<a href=\"#"+label+
"\">";
3678 int nextLevel =
type.level();
Class representing a built-in class diagram.
void writeImage(TextStream &t, const QCString &path, const QCString &relPath, const QCString &file, bool generateMap=true) const
The common base class of all entity definitions found in the sources.
Class representing a directory in the file system.
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
Class representing the abstract syntax tree of a documentation block.
Representation of an call graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
Representation of a class inheritance or dependency graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool TBRank=TRUE, bool imageMap=TRUE, int graphId=-1)
Representation of an directory dependency graph.
QCString writeGraph(TextStream &out, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1, bool linkRelations=TRUE)
Represents a graphical class hierarchy.
void writeGraph(TextStream &t, const QCString &path, const QCString &fileName)
Representation of a group collaboration graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
Representation of an include dependency graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
static PageLinkedMap * exampleLinkedMap
static IndexList * indexList
static QCString htmlFileExtension
Minimal replacement for QFileInfo.
std::string fileName() const
std::string absFilePath() const
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 startTocEntry(const SectionInfo *si) override
void startInlineMemberName() override
void endDescTableInit() override
void startTextLink(const QCString &file, const QCString &anchor) override
void startInlineMemberType() override
void endDescTable() override
void startParameterDefVal(const char *sep) override
void endMemberGroupHeader() override
void startIndexKey() override
void lineBreak(const QCString &style) override
void startParameterName(bool) override
void startMemberItem(const QCString &anchor, MemberItemType, const QCString &inheritId) override
static void writeSearchPage()
void startInclDepGraph() override
void insertMemberAlignLeft(MemberItemType, bool) override
void writeQuickLinks(HighlightedItem hli, const QCString &file, bool extraTabs) override
void startMemberSubtitle() override
HtmlGenerator & operator=(const HtmlGenerator &)
void writeFooter(const QCString &navPath) override
void startMemberDocName(bool) override
void endParameterType() override
void startLabels() override
void startCallGraph() override
void endMemberList() override
static QCString getNavTreeCss()
void startParagraph(const QCString &classDef) override
void endIndexList() override
void writeSearchInfo() override
void startContents() override
void startMemberDoc(const QCString &clName, const QCString &memName, const QCString &anchor, const QCString &title, int memCount, int memTotal, bool showInline) override
void startDescTableRow() override
void startDoxyAnchor(const QCString &fName, const QCString &manName, const QCString &anchor, const QCString &name, const QCString &args) override
void startDirDepGraph() override
void startCompoundTemplateParams() override
void startConstraintParam() override
void endGroupHeader(int) override
void writeNavigationPath(const QCString &s) override
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name) override
void startMemberDescription(const QCString &anchor, const QCString &inheritId, bool typ) override
void writeChar(char c) override
void endConstraintList() override
void endParameterList() override
void startMemberGroupHeader(const QCString &, bool) override
void 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 startParameterType(bool first, const QCString &key) override
void startDescTableInit() override
void startLocalToc(int level) override
void startMemberList() override
void endQuickIndices() override
void startHeaderSection() override
void startDescTableTitle() override
void endDirDepGraph(DotDirDeps &g) override
void startIndexList() override
void endParameterDefVal() override
void endMemberGroup(bool) override
void endInlineHeader() override
static void writeFooterFile(TextStream &t)
void endMemberDescription() override
void startGroupCollaboration() override
void endClassDiagram(const ClassDiagram &, const QCString &, const QCString &) override
void startConstraintList(const QCString &) override
void startDescTable(const QCString &title, const bool hasInits) override
void endConstraintDocs() override
void writeNonBreakableSpace(int) override
void writePageOutline() override
void startInlineMemberDoc() override
void exceptionEntry(const QCString &, bool) override
static void writeTabData()
Additional initialization after indices have been created.
void endExamples() override
void endIndexKey() override
void writeString(const QCString &text) override
void endMemberDocName() override
void endContents() override
void endInlineMemberType() override
void startMemberGroupDocs() override
void startMemberDocSimple(bool) override
void startIndexItem(const QCString &ref, const QCString &file) override
OutputType type() const override
void endHeaderSection() override
void startIndent() override
void writeStyleInfo(int part) override
void addIndexItem(const QCString &, const QCString &) override
void docify_(const QCString &text, bool inHtmlComment)
void endMemberGroupDocs() override
void endDotGraph(DotClassGraph &g) override
void endMemberHeader() override
void endTextLink() override
void writeLabel(const QCString &l, bool isLast) override
void startMemberSections() override
static void writeSearchData(const QCString &dir)
void endMemberSections() override
void endMemberDocList() override
void endCompoundTemplateParams() override
static void writeExternalSearchPage()
void endDescTableData() override
void startDescTableData() override
void writeStartAnnoItem(const QCString &type, const QCString &file, const QCString &path, const QCString &name) override
static void writePageFooter(TextStream &t, const QCString &, const QCString &, const QCString &)
void endParagraph() override
void insertMemberAlign(bool) override
static void writeStyleSheetFile(TextStream &t)
void endDoxyAnchor(const QCString &fName, const QCString &anchor) override
void startMemberTemplateParams() override
void endLabels() override
void startPageDoc(const QCString &pageTitle) override
void endMemberDeclaration(const QCString &anchor, const QCString &inheritId) override
HtmlCodeGenerator * m_codeGen
void startIndexValue(bool) override
void endGroupCollaboration(DotGroupCollaboration &g) override
static void writeSearchInfoStatic(TextStream &t, const QCString &relPath)
void endLocalToc() override
std::unique_ptr< OutputCodeList > m_codeList
static void writeHeaderFile(TextStream &t, const QCString &cssname)
void startConstraintType() override
void endConstraintParam() override
static QCString writeSplitBarAsString(const QCString &name, const QCString &relpath, const QCString &allMembersFile)
void startTitleHead(const QCString &) override
void 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 startGroupHeader(const QCString &, int) override
void endInclDepGraph(DotInclDepGraph &g) override
void startParameterExtra() override
void startProjectNumber() override
void writeGraphicalHierarchy(DotGfxHierarchyTable &g) override
void startExamples() override
void docify(const QCString &text) override
void endInlineMemberDoc() override
void writeSplitBar(const QCString &name, const QCString &allMembersFile) override
void endCallGraph(DotCallGraph &g) override
void endConstraintType() override
void endMemberSubtitle() override
void startMemberDocPrefixItem() override
void startSection(const QCString &, const QCString &, SectionType) override
void endTocEntry(const SectionInfo *si) override
void endMemberItem(MemberItemType) override
void startMemberGroup() override
void endMemberDoc(bool) override
void endIndexItem(const QCString &ref, const QCString &file) override
void startMemberHeader(const QCString &, int) override
void endTitleHead(const QCString &, const QCString &) override
void endSection(const QCString &, SectionType) override
void startInlineHeader() override
void endInlineMemberName() override
void endMemberDocSimple(bool) override
void writeInheritedSectionTitle(const QCString &id, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &title, const QCString &name) override
void endIndexListItem() override
static QCString getMathJaxMacros()
void startParameterList(bool) override
void startPlainFile(const QCString &name) override
opaque representation of the abstract syntax tree (AST)
static Index & instance()
static LayoutDocManager & instance()
Returns a reference to this singleton.
LayoutNavEntry * rootNavEntry() const
returns the (invisible) root of the navigation tree.
A model of a class/file/namespace member symbol.
Class representing a list of different code generators.
void add(OutputCodeIntfPtr &&p)
Abstract interface for output generators.
QCString fileName() const
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
QCString & prepend(const char *s)
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool startsWith(const char *s) const
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
bool isEmpty() const
Returns TRUE iff the string is empty.
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
const std::string & str() const
QCString right(size_t len) const
void reserve(size_t size)
Reserve space for size bytes without changing the string contents.
int findRev(char c, int index=-1, bool cs=TRUE) const
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
int contains(char c, bool cs=TRUE) const
Singleton for managing resources compiled into an executable.
static ResourceMgr & instance()
Returns the one and only instance of this class.
bool copyResource(const QCString &name, const QCString &targetDir) const
Copies a registered resource to a given target directory.
QCString getAsString(const QCString &name) const
Gets the resource data as a C string.
class that provide information about a section.
static constexpr int Section
static constexpr int Subsection
static constexpr int Subsubsection
static constexpr int Page
static constexpr int Paragraph
static constexpr int Subsubparagraph
static constexpr int Subparagraph
Text streaming class that buffers data.
bool empty() const
Returns true iff the buffer is empty.
std::string str() const
Return the contents of the buffer as a std::string object.
#define Config_getInt(name)
#define Config_getList(name)
#define Config_getEnumAsString(name)
#define Config_getBool(name)
#define Config_getString(name)
#define Config_getEnum(name)
std::vector< std::string > StringVector
std::unordered_map< std::string, std::string > StringUnorderedMap
std::vector< bool > BoolVector
QCString dateToString(DateTimeType includeTime)
Returns the current date, when includeTime is set also the time is provided.
QCString yearToString()
Returns the current year as a string.
static constexpr auto hex
static QCString replaceVariables(const QCString &input)
static void fillColorStyleMap(const QCString &definitions, StringUnorderedMap &map)
static void startSectionContent(TextStream &t, int sectionCount)
static QCString g_header_file
static void endQuickIndexList(TextStream &t)
static QCString g_mathjax_code
static void writeServerSearchBox(TextStream &t, const QCString &relPath, bool highlightSearch)
static void startQuickIndexList(TextStream &t, bool topLevel=TRUE)
static void startSectionSummary(TextStream &t, int sectionCount)
static void startQuickIndexItem(TextStream &t, const QCString &l, bool hl, bool, const QCString &relPath)
static void renderQuickLinksAsTabs(TextStream &t, const QCString &relPath, LayoutNavEntry *hlEntry, LayoutNavEntry::Kind kind, bool highlightParent, bool highlightSearch)
static const SelectionMarkerInfo htmlMarkerInfo
static QCString getConvertLatexMacro()
Convert a set of LaTeX commands \(re)newcommand to a form readable by MathJax LaTeX syntax:
static void writeDefaultQuickLinks(TextStream &t, HighlightedItem hli, const QCString &file, const QCString &relPath, bool extraTabs)
static QCString g_footer_file
static void endSectionContent(TextStream &t)
static bool hasDateReplacement(const QCString &str)
static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSearch)
static QCString g_latex_macro
static void fillColorStyleMaps()
static void endQuickIndexItem(TextStream &t, const QCString &l)
static StringUnorderedMap g_lightMap
static void startSectionHeader(TextStream &t, const QCString &relPath, int sectionCount)
static 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
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)