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");
345 bool hasProjectName = !projectName.
isEmpty();
352 bool hasCookie = treeView || searchEngine ||
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE;
353 static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
358 cssFile =
"doxygen.css";
371 cssFile =
"doxygen.css";
378 for (
const auto &fileName : extraCssFile)
380 if (!fileName.empty())
385 extraCssText +=
"<link href=\""+htmlStyleSheet+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
392 extraCssText +=
"<link href=\"$relpath^"+
stripPath(fileName)+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
400 case TIMESTAMP_t::NO:
404 generatedBy =
theTranslator->trGeneratedAt(
"<span class=\"timestamp\"></span>",
410 treeViewCssJs =
"<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
411 "<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
412 "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n";
417 searchCssJs =
"<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
418 if (!serverBasedSearch)
420 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
422 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
424 if (!serverBasedSearch)
428 searchCssJs +=
"<script type=\"text/javascript\">\n"
429 " $(function() { init_search(); });\n"
437 searchCssJs +=
"<script type=\"text/javascript\">\n"
439 " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
445 searchCssJs +=
"<link rel=\"search\" href=\"" + relPath +
446 "search_opensearch.php?v=opensearch.xml\" "
447 "type=\"application/opensearchdescription+xml\" title=\"" +
448 (hasProjectName ? projectName :
QCString(
"Doxygen")) +
464 auto writeMathJax3Packages = [&mathJaxJs](
const StringVector &mathJaxExtensions)
466 mathJaxJs +=
" packages: ['base','configmacros'";
469 mathJaxJs+=
",'newcommand'";
471 for (
const auto &s : mathJaxExtensions)
473 mathJaxJs+=
",'"+s+
"'";
478 auto writeMathJax4Packages = [&mathJaxJs](
const StringVector &mathJaxExtensions)
480 mathJaxJs +=
" packages: {\n";
482 for (
const auto &s : mathJaxExtensions)
484 if (!first) mathJaxJs+=
",";
487 mathJaxJs+=
"\n '[-]': ['";
488 mathJaxJs+=s.
data()+1;
493 mathJaxJs+=
"\n '[+]': ['"+s+
"']";
497 mathJaxJs +=
"\n }\n";
500 auto writeMathJaxScript = [&path,&mathJaxJs](
const QCString &pathPostfix,
504 mathJaxJs +=
"<script type=\"text/javascript\">\n"
505 "window.MathJax = {\n"
507 " ignoreHtmlClass: 'tex2jax_ignore',\n"
508 " processHtmlClass: 'tex2jax_process'\n"
515 if (!mathJaxExtensions.empty())
518 mathJaxJs+=
" loader: {\n"
520 for (
const auto &s : mathJaxExtensions)
524 if (!first) mathJaxJs+=
",";
525 mathJaxJs+=
"'[tex]/"+s+
"'";
532 mathJaxJs+=
" tex: {\n"
539 writePackages(mathJaxExtensions);
553 mathJaxJs+=
"</script>\n";
554 mathJaxJs +=
"<script type=\"text/javascript\" id=\"MathJax-script\" async=\"async\" src=\"" +
555 path + pathPostfix +
"tex-" + mathJaxFormat.
lower() +
".js\">";
556 mathJaxJs+=
"</script>\n";
559 switch (mathJaxVersion)
561 case MATHJAX_VERSION_t::MathJax_4:
562 writeMathJaxScript(
"",writeMathJax4Packages);
564 case MATHJAX_VERSION_t::MathJax_3:
565 writeMathJaxScript(
"es5/",writeMathJax3Packages);
567 case MATHJAX_VERSION_t::MathJax_2:
570 mathJaxJs =
"<script type=\"text/x-mathjax-config\">\n"
571 "MathJax.Hub.Config({\n"
572 " extensions: [\"tex2jax.js\"";
574 for (
const auto &s : mathJaxExtensions)
576 mathJaxJs+=
", \""+
QCString(s)+
".js\"";
580 mathJaxFormat =
"HTML-CSS";
583 " jax: [\"input/TeX\",\"output/"+mathJaxFormat+
"\"],\n";
586 mathJaxJs +=
" TeX: { Macros: {\n";
591 mathJaxJs +=
"});\n";
597 mathJaxJs +=
"</script>\n";
598 mathJaxJs +=
"<script type=\"text/javascript\" async=\"async\" src=\"" + path +
"MathJax.js\"></script>\n";
607 darkModeJs=
"<script type=\"text/javascript\" src=\"$relpath^darkmode_toggle.js\"></script>\n";
612 treeViewCssJs+=
"<script type=\"text/javascript\" src=\"$relpath^cookie.js\"></script>\n";
625 {
"$datetime", [&]() {
return "<span class=\"datetime\"></span>"; } },
626 {
"$date", [&]() {
return "<span class=\"date\"></span>"; } },
627 {
"$time", [&]() {
return "<span class=\"time\"></span>"; } },
628 {
"$year", [&]() {
return "<span class=\"year\"></span>"; } },
629 {
"$navpath", [&]() {
return navPath; } },
630 {
"$stylesheet", [&]() {
return cssFile; } },
631 {
"$treeview", [&]() {
return treeViewCssJs; } },
632 {
"$searchbox", [&]() {
return searchBox; } },
633 {
"$search", [&]() {
return searchCssJs; } },
634 {
"$mathjax", [&]() {
return mathJaxJs; } },
635 {
"$darkmode", [&]() {
return darkModeJs; } },
636 {
"$generatedby", [&]() {
return generatedBy; } },
637 {
"$extrastylesheet",[&]() {
return extraCssText; } },
638 {
"$relpath$", [&]() {
return relPath; } }
641 result =
substitute(result,
"$relpath^",relPath);
647 {
"FULL_SIDEBAR", hasFullSideBar },
648 {
"DISABLE_INDEX", disableIndex },
649 {
"GENERATE_TREEVIEW", treeView },
650 {
"SEARCHENGINE", searchEngine },
651 {
"TITLEAREA", titleArea },
652 {
"PROJECT_NAME", hasProjectName },
653 {
"PROJECT_NUMBER", hasProjectNumber },
654 {
"PROJECT_BRIEF", hasProjectBrief },
655 {
"PROJECT_LOGO", hasProjectLogo },
656 {
"PROJECT_ICON", hasProjectIcon },
657 {
"COPY_CLIPBOARD", hasCopyClipboard },
673 while ((i=definitions.
find(
'\n',p))!=-1)
678 int separator = line.
find(
':');
679 assert(separator!=-1);
680 std::string key = line.
left(separator).
str();
684 map.emplace(key,value);
695 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
699 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
711 while ((i=input.
find(
"var(",p))!=-1)
714 int j=input.
find(
")",i+4);
716 auto it = mapping.find(input.
mid(i+4,j-i-4).
str());
717 if (it==mapping.end())
719 err(
"failed to find value variable {}. It is not longer defined in doxygen.css\n",input.
mid(i+4,j-i-4));
724 output.
addStr(it->second);
734 if (colorStyle==HTML_COLORSTYLE_t::LIGHT)
738 else if (colorStyle==HTML_COLORSTYLE_t::DARK)
774 const char *p=str.
data();
787 int spacesToNextTabStop = tabSize - (
m_col%tabSize);
788 while (spacesToNextTabStop--)
807 case '\'': *
m_t <<
"'";
m_col++;
809 case '"': *
m_t <<
""";
m_col++;
813 { *
m_t <<
"<"; p++; }
815 { *
m_t <<
">"; p++; }
817 { *
m_t <<
"\\‍[";
m_col++;p++; }
819 { *
m_t <<
"\\‍]";
m_col++;p++; }
821 { *
m_t <<
"\\‍(";
m_col++;p++; }
823 { *
m_t <<
"\\‍)";
m_col++;p++; }
830 uint8_t uc =
static_cast<uint8_t
>(c);
833 *
m_t <<
"$" <<
hex[uc>>4] <<
hex[uc&0xF] <<
";";
877 const QCString &anchor,
int l,
bool writeLineAnchor)
881 const int maxLineNrStr = 10;
882 char lineNumber[maxLineNrStr];
883 char lineAnchor[maxLineNrStr];
884 qsnprintf(lineNumber,maxLineNrStr,
"%5d",l);
885 qsnprintf(lineAnchor,maxLineNrStr,
"l%05d",l);
890 *
m_t <<
"<div class=\"line\">";
894 if (writeLineAnchor) *
m_t <<
"<a id=\"" << lineAnchor <<
"\" name=\"" << lineAnchor <<
"\"></a>";
895 *
m_t <<
"<span class=\"lineno\">";
933 *
m_t <<
"<a class=\"" << className <<
"Ref\" ";
938 *
m_t <<
"<a class=\"" << className <<
"\" ";
958 *
m_t <<
"<div class=\"ttc\" id=\"" <<
id <<
"\">";
959 *
m_t <<
"<div class=\"ttname\">";
962 *
m_t <<
"<a href=\"";
978 *
m_t <<
"<div class=\"ttdeci\">";
985 *
m_t <<
"<div class=\"ttdoc\">";
992 *
m_t <<
"<div class=\"ttdef\"><b>" <<
theTranslator->trDefinition() <<
"</b> ";
995 *
m_t <<
"<a href=\"";
1011 *
m_t <<
"<div class=\"ttdecl\"><b>" <<
theTranslator->trDeclaration() <<
"</b> ";
1014 *
m_t <<
"<a href=\"";
1039 *
m_t <<
"<div class=\"line\">";
1063 *
m_t <<
"<span class=\"" << s <<
"\">";
1075 *
m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1080 *
m_t <<
"<div class=\"fragment\">";
1092 *
m_t <<
"</div><!-- fragment -->";
1102 const int maxLineNrStr = 10;
1103 char lineNumber[maxLineNrStr];
1104 qsnprintf(lineNumber,maxLineNrStr,
"%05d",lineNr);
1105 *
m_t <<
"<div class=\"foldopen\" id=\"foldopen" << lineNumber <<
1106 "\" data-start=\"" << startMarker <<
1107 "\" data-end=\"" << endMarker <<
1111 *
m_t <<
"<div class=\"line\">";
1119 *
m_t <<
"<div class=\"line\">";
1195 return (str.
contains(
"$datetime",
false) ||
1208 term(
"Could not create output directory {}\n",dname);
1378 searchCss = mgr.
getAsString(
"search_sidebar.css");
1384 searchCss = mgr.
getAsString(
"search_nomenu_toggle.css");
1393 searchCss = mgr.
getAsString(
"search_fixedtabs.css");
1400 searchCss += mgr.
getAsString(
"search_common.css");
1401 searchCss =
substitute(searchCss,
"$doxygenversion",getDoxygenVersion());
1409 t <<
"/* The standard CSS for doxygen " << getDoxygenVersion() <<
"*/\n\n";
1412 case HTML_COLORSTYLE_t::LIGHT:
1413 case HTML_COLORSTYLE_t::DARK:
1416 case HTML_COLORSTYLE_t::AUTO_LIGHT:
1417 case HTML_COLORSTYLE_t::TOGGLE:
1422 case HTML_COLORSTYLE_t::AUTO_DARK:
1428 if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_LIGHT)
1430 t <<
"@media (prefers-color-scheme: dark) {\n";
1431 t <<
" html:not(.dark-mode) {\n";
1432 t <<
" color-scheme: dark;\n\n";
1436 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::AUTO_DARK)
1438 t <<
"@media (prefers-color-scheme: light) {\n";
1439 t <<
" html:not(.light-mode) {\n";
1440 t <<
" color-scheme: light;\n\n";
1444 else if (
Config_getEnum(HTML_COLORSTYLE)==HTML_COLORSTYLE_t::TOGGLE)
1446 t <<
"html.dark-mode {\n";
1457 " border-bottom: none;\n"
1458 " background-color: var(--nav-background-color);\n"
1459 " border-right: 1px solid var(--nav-border-color);\n"
1474 case TIMESTAMP_t::YES:
1475 case TIMESTAMP_t::DATETIME:
1478 case TIMESTAMP_t::DATE:
1484 t <<
"--timestamp: '" << timeStampStr <<
"';\n";
1497 t <<
"span.timestamp { content: ' '; }\n";
1498 t <<
"span.timestamp:before { content: var(--timestamp); }\n\n";
1502 t <<
"span.datetime { content: ' '; }\n";
1503 t <<
"span.datetime:before { content: var(--datetime); }\n\n";
1504 t <<
"span.date { content: ' '; }\n";
1505 t <<
"span.date:before { content: var(--date); }\n\n";
1506 t <<
"span.time { content: ' '; }\n";
1507 t <<
"span.time:before { content: var(--time); }\n\n";
1508 t <<
"span.year { content: ' '; }\n";
1509 t <<
"span.year:before { content: var(--year); }\n\n";
1516 bool addScrollbarStyling =
Config_getList(HTML_EXTRA_STYLESHEET).empty();
1517 if (addScrollbarStyling)
1532 t <<
"<!-- HTML header for doxygen " << getDoxygenVersion() <<
"-->\n";
1538 t <<
"<!-- HTML footer for doxygen " << getDoxygenVersion() <<
"-->\n";
1565 << getDoxygenVersion() <<
" -->\n";
1569 m_t <<
"<script type=\"text/javascript\">\n";
1570 m_t <<
"var searchBox = new SearchBox(\"searchBox\", \""
1572 m_t <<
"</script>\n";
1576 m_t <<
"<script type=\"text/javascript\">\n";
1577 m_t <<
"$(function() { codefold.init(); });\n";
1578 m_t <<
"</script>\n";
1587 if (searchEngine && !serverBasedSearch)
1589 t <<
"<!-- window showing the filter options -->\n";
1590 t <<
"<div id=\"MSearchSelectWindow\"\n";
1591 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
1592 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
1593 t <<
" onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
1596 t <<
"<!-- iframe showing the search results (closed by default) -->\n";
1597 t <<
"<div id=\"MSearchResultsWindow\">\n";
1598 t <<
"<div id=\"MSearchResults\">\n";
1599 t <<
"<div class=\"SRPage\">\n";
1600 t <<
"<div id=\"SRIndex\">\n";
1601 t <<
"<div id=\"SRResults\"></div>\n";
1602 t <<
"<div class=\"SRStatus\" id=\"Loading\">" <<
theTranslator->trLoading() <<
"</div>\n";
1603 t <<
"<div class=\"SRStatus\" id=\"Searching\">" <<
theTranslator->trSearching() <<
"</div>\n";
1604 t <<
"<div class=\"SRStatus\" id=\"NoMatches\">" <<
theTranslator->trNoMatches() <<
"</div>\n";
1624 case TIMESTAMP_t::NO:
1628 result =
theTranslator->trGeneratedAt(
"<span class=\"timestamp\"></span>",
1632 result +=
" \n<a href=\"https://www.doxygen.org/index.html\">\n"
1633 "<img class=\"footer\" src=\"";
1635 result +=
"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> ";
1636 result += getDoxygenVersion();
1664 m_t <<
"<h3 class=\"version\">";
1693 err(
"style sheet {} does not exist or is not readable!\n",
Config_getString(HTML_STYLESHEET));
1708 for (
const auto &
fileName : extraCssFiles)
1747 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1761 m_t <<
"\n<p class=\"" << classDef <<
"\">";
1793 m_t <<
"<a class=\"elRef\" ";
1798 m_t <<
"<a class=\"el\" ";
1836 m_t <<
"<a class=\"el\" href=\"" << fn <<
"\">";
1846 m_t <<
"<a class=\"elRef\" ";
1851 m_t <<
"<a class=\"el\" ";
1867 m_t <<
"<a href=\"";
1884 if (extraIndentLevel==2)
1888 else if (extraIndentLevel==1)
1900 m_t <<
" class=\"groupheader\">";
1905 if (extraIndentLevel==2)
1909 else if (extraIndentLevel==1)
1921 switch(
type.level())
1930 default:
ASSERT(0);
break;
1932 m_t <<
"<a id=\"" << lab <<
"\" name=\"" << lab <<
"\"></a>";
1937 switch(
type.level())
1946 default:
ASSERT(0);
break;
1959 const char *p=str.
data();
1965 case '<':
m_t <<
"<";
break;
1966 case '>':
m_t <<
">";
break;
1967 case '&':
m_t <<
"&";
break;
1968 case '"':
m_t <<
""";
break;
1969 case '-':
if (inHtmlComment)
m_t <<
"-";
else m_t <<
"-";
break;
1972 {
m_t <<
"<"; p++; }
1974 {
m_t <<
">"; p++; }
1976 {
m_t <<
"\\‍["; p++; }
1978 {
m_t <<
"\\‍]"; p++; }
1980 {
m_t <<
"\\‍("; p++; }
1982 {
m_t <<
"\\‍)"; p++; }
2003 const QCString &relPath,
int sectionCount)
2007 if (dynamicSections)
2009 t <<
"<div id=\"dynsection-" << sectionCount <<
"\" "
2010 "onclick=\"return dynsection.toggleVisibility(this)\" "
2011 "class=\"dynheader closed\" "
2012 "style=\"cursor:pointer;\">"
2013 "<span class=\"dynarrow\"><span class=\"arrowhead closed\"></span></span>";
2017 t <<
"<div class=\"dynheader\">\n";
2031 if (dynamicSections)
2033 t <<
"<div id=\"dynsection-" << sectionCount <<
"-summary\" "
2034 "class=\"dynsummary\" "
2035 "style=\"display:block;\">\n";
2043 if (dynamicSections)
2053 if (dynamicSections)
2055 t <<
"<div id=\"dynsection-" << sectionCount <<
"-content\" "
2056 "class=\"dyncontent\" "
2057 "style=\"display:none;\">\n";
2061 t <<
"<div class=\"dyncontent\">\n";
2089 m_t <<
" <div class=\"center\">\n";
2090 m_t <<
" <img src=\"";
2092 m_t <<
"_map\" alt=\"\"/>\n";
2102 m_t <<
" <div class=\"center\">\n";
2103 m_t <<
" <img src=\"";
2131 m_t <<
"<table class=\"memberdecls\">\n";
2137 m_t <<
" inherit " << inheritId;
2154 m_t <<
"</td></tr>\n";
2163 m_t <<
"</td></tr>\n";
2167 m_t <<
" inherit " << inheritId;
2169 m_t <<
" template\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">";
2174 m_t <<
"<div class=\"compoundTemplParams\">";
2185 m_t <<
" </td><td class=\"memItemRight\" valign=\"bottom\">";
2190 if (!initTag)
m_t <<
" </td>";
2202 DBG_HTML(
m_t <<
"<!-- startMemberDescription -->\n")
2205 m_t <<
"<table class=\"memberdecls\">\n";
2208 m_t <<
"<tr class=\"memdesc:" << anchor;
2211 m_t <<
" inherit " << inheritId;
2214 m_t <<
"<td class=\"mdescLeft\"> </td>";
2215 if (typ)
m_t <<
"<td class=\"mdescLeft\"> </td>";
2216 m_t <<
"<td class=\"mdescRight\">";
2221 DBG_HTML(
m_t <<
"<!-- endMemberDescription -->\n")
2222 m_t <<
"<br /></td></tr>\n";
2238 m_t <<
"</table>\n";
2252 m_t <<
"<table class=\"memberdecls\">\n";
2255 m_t <<
"<tr class=\"heading\"><td colspan=\"" << typ <<
"\"><h2";
2258 m_t <<
" id=\"header-" << anchor <<
"\"";
2260 m_t <<
" class=\"groupheader\">";
2263 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>\n";
2270 m_t <<
"</h2></td></tr>\n";
2278 m_t <<
"<table class=\"memberdecls\">\n";
2281 m_t <<
"<tr><td class=\"ititle\" colspan=\"2\">";
2287 m_t <<
"</td></tr>\n";
2297 m_t <<
"</table>\n";
2332 int memCount,
int memTotal,
bool )
2335 m_t <<
"\n<h2 class=\"memtitle\">"
2336 <<
"<span class=\"permalink\"><a href=\"#" << anchor <<
"\">◆ </a></span>";
2340 m_t <<
" <span class=\"overload\">[" << memCount <<
"/" << memTotal <<
"]</span>";
2343 m_t <<
"\n<div class=\"memitem\">\n";
2344 m_t <<
"<div class=\"memproto\">\n";
2349 DBG_HTML(
m_t <<
"<!-- startMemberDocPrefixItem -->\n";)
2350 m_t <<
"<div class=\"memtemplate\">\n";
2355 DBG_HTML(
m_t <<
"<!-- endMemberDocPrefixItem -->\n";)
2363 m_t <<
" <table class=\"memname\">\n";
2366 m_t <<
" <td class=\"memname\">";
2379 if (openBracket)
m_t <<
"(";
2387 DBG_HTML(
m_t <<
"<!-- startFirstParameterType -->\n";)
2388 m_t <<
" <td class=\"paramtype\">";
2394 m_t <<
" <td class=\"paramkey\">" << key <<
"</td>\n";
2395 m_t <<
" <td></td>\n";
2396 m_t <<
" <td class=\"paramtype\">";
2409 m_t <<
" <td class=\"paramname\"><span class=\"paramname\"><em>";
2415 m_t <<
"</em></span>";
2420 DBG_HTML(
m_t <<
"<!-- startParameterExtra -->\n";)
2430 if (closeBracket)
m_t <<
"</td><td>)";
2437 if (closeBracket)
m_t <<
")";
2449 m_t <<
"<span class=\"paramdefsep\">";
2451 m_t <<
"</span><span class=\"paramdefval\">";
2474 m_t <<
" <td align=\"right\">";
2478 m_t <<
prefix <<
"</td><td>(</td><td colspan=\"2\">";
2479 else if (closeBracket)
2480 m_t <<
" )</td><td></td><td></td><td>";
2482 m_t <<
"</td><td></td><td colspan=\"2\">";
2492 m_t <<
" </table>\n";
2511 if (generateLegend && !umlLook)
2514 m_t <<
"<center><span class=\"legend\">[";
2517 if (generateTreeView)
m_t <<
"target=\"top\" ";
2523 m_t <<
"]</span></center>";
2609 m_t <<
"<tr id=\"" <<
id <<
"\" class=\"groupHeader\"><td colspan=\"2\"><div class=\"groupHeader\">";
2614 m_t <<
"</div></td></tr>\n";
2619 m_t <<
"<tr><td colspan=\"2\" class=\"ititle\"><div class=\"groupText\">";
2624 m_t <<
"</div></td></tr>\n";
2639 m_t <<
"<div class=\"memdoc\">\n";
2645 m_t <<
"\n</div>\n" <<
"</div>\n";
2654 for (
int i=0; i<n; i++)
2662 m_t <<
"<table class=\"fieldtable\">\n"
2663 <<
"<tr><th colspan=\"" << (hasInits?3:2) <<
"\">" << title <<
"</th></tr>";
2667 m_t <<
"</table>\n";
2682 m_t <<
"<td class=\"fieldname\">";
2687 m_t <<
" </td>";
2692 m_t <<
"<td class=\"fieldinit\">";
2697 m_t <<
" </td>";
2702 m_t <<
"<td class=\"fielddoc\">";
2712 m_t <<
"<dl class=\"section examples\"><dt>";
2729 std::visit(visitor,astImpl->
root);
2741 t <<
" <div id=\"navrow1\" class=\"tabs\">\n";
2745 t <<
" <div id=\"navrow2\" class=\"tabs2\">\n";
2747 t <<
" <ul class=\"tablist\">\n";
2775 t <<
" class=\"current\"";
2785 if (!l.
isEmpty()) t <<
"</a>";
2796 case LayoutNavEntry::MainPage:
return TRUE;
2797 case LayoutNavEntry::User:
return TRUE;
2798 case LayoutNavEntry::UserGroup:
return TRUE;
2799 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
2800 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
2801 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
2802 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
2804 case LayoutNavEntry::Namespaces:
return showNamespaces && index.numDocumentedNamespaces()>0;
2805 case LayoutNavEntry::NamespaceList:
return showNamespaces && index.numDocumentedNamespaces()>0;
2807 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
2808 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
2809 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
2810 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
2811 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
2813 case LayoutNavEntry::Files:
return showFiles && index.numDocumentedFiles()>0;
2814 case LayoutNavEntry::FileList:
return showFiles && index.numDocumentedFiles()>0;
2817 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
2818 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
2819 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
2820 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
2821 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
2822 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
2823 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
2824 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
2825 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
2826 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
2827 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
2828 case LayoutNavEntry::None:
2829 assert(kind != LayoutNavEntry::None);
2839 for (
const auto &entry : root->
children())
2846 for (
const auto &entry : root->
children())
2851 t <<
"<li><a href=\"" << relPath << url <<
"\"><span>";
2853 t <<
"</span></a>\n";
2866 bool highlightParent,
bool highlightSearch)
2889 entry.get()==hlEntry &&
2890 (!entry->children().empty() ||
2891 (entry->kind()==kind && !highlightParent)
2909 if (disableIndex || !generateTreeView || !fullSidebar)
2911 if (!serverBasedSearch)
2919 if (!highlightSearch)
2960 bool highlightParent=
false;
2988 highlightParent =
true;
break;
2990 highlightParent =
true;
break;
2992 highlightParent =
true;
break;
2994 highlightParent =
true;
break;
2996 highlightParent =
true;
break;
2998 highlightParent =
true;
break;
3000 highlightParent =
true;
break;
3002 highlightParent =
true;
break;
3007 if (!disableIndex && dynamicMenus)
3016 searchPage =
"search.php";
3018 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menudata.js\"></script>\n";
3019 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menu.js\"></script>\n";
3020 t <<
"<script type=\"text/javascript\">\n";
3021 t <<
"$(function() {\n";
3022 t <<
" initMenu('" << relPath <<
"',"
3023 << (searchEngine && !(generateTreeView && fullSidebar)?
"true":
"false") <<
","
3024 << (serverBasedSearch?
"true":
"false") <<
",'"
3025 << searchPage <<
"','"
3027 << (generateTreeView?
"true":
"false")
3031 if (!serverBasedSearch)
3033 if (!disableIndex && dynamicMenus && !fullSidebar)
3035 t <<
" $(function() { init_search(); });\n";
3040 t <<
" $(function() {\n"
3041 <<
" if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n";
3047 t <<
"<div id=\"main-nav\"></div>\n";
3049 else if (!disableIndex)
3053 if (!hlEntry && altKind!=LayoutNavEntry::None) { hlEntry=root->
find(altKind); kind=altKind; }
3056 highlightParent=
TRUE;
3057 hlEntry = root->
children().front().get();
3058 if (hlEntry==
nullptr)
3063 if (kind==LayoutNavEntry::UserGroup)
3071 t <<
"<div id=\"main-nav\">\n";
3075 t <<
"</div><!-- main-nav -->\n";
3078 else if (!generateTreeView)
3082 if (generateTreeView && !disableIndex && fullSidebar && !extraTabs)
3084 t <<
"<div id=\"container\"><div id=\"doc-content\">\n";
3091 m_t <<
"</div><!-- top -->\n";
3092 if (!generateTreeView)
3094 m_t <<
"<div id=\"doc-content\">\n";
3103 if (generateTreeView)
3110 "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n");
3113 " <div id=\"nav-tree\">\n"
3114 " <div id=\"nav-tree-contents\">\n"
3115 " <div id=\"nav-sync\" class=\"sync\"></div>\n"
3118 " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
3119 " class=\"ui-resizable-handle\">\n"
3122 "<script type=\"text/javascript\">\n"
3123 "$(function(){initNavTree('" + fn +
"','" + relpath +
"','" + allMembersFile +
"'); });\n"
3127 result+=
"<div id=\"container\">\n<div id=\"doc-content\">\n";
3145 m_t <<
"<div class=\"contents\">\n";
3150 m_t <<
"</div><!-- contents -->\n";
3160 m_t <<
"</div><!-- PageDoc -->\n";
3174 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3179 QCString configFileName = htmlOutput+
"/search_config.php";
3185 t <<
"$config = array(\n";
3186 t <<
" 'PROJECT_NAME' => \"" <<
convertToHtml(projectName) <<
"\",\n";
3187 t <<
" 'GENERATE_TREEVIEW' => " << (generateTreeView?
"true":
"false") <<
",\n";
3188 t <<
" 'DISABLE_INDEX' => " << (disableIndex?
"true":
"false") <<
",\n";
3189 t <<
" 'FULL_SIDEBAR' => " << (fullSidebar?
"true":
"false") <<
",\n";
3191 t <<
"$translator = array(\n";
3192 t <<
" 'search_results_title' => \"" <<
theTranslator->trSearchResultsTitle() <<
"\",\n";
3193 t <<
" 'search_results' => array(\n";
3194 t <<
" 0 => \"" <<
theTranslator->trSearchResults(0) <<
"\",\n";
3195 t <<
" 1 => \"" <<
theTranslator->trSearchResults(1) <<
"\",\n";
3198 t <<
" 'search_matches' => \"" <<
theTranslator->trSearchMatches() <<
"\",\n";
3199 t <<
" 'search' => \"" <<
theTranslator->trSearch() <<
"\",\n";
3217 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3218 << getDoxygenVersion() <<
" -->\n";
3219 t <<
"<script type=\"text/javascript\">\n";
3220 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3224 if (!disableIndex && !quickLinksAfterSplitbar)
3228 if (generateTreeView)
3230 t <<
"</div><!-- top -->\n";
3233 if (quickLinksAfterSplitbar)
3237 t <<
"<!-- generated -->\n";
3240 t <<
"require_once \"search_functions.php\";\n";
3245 if (generateTreeView)
3247 t <<
"</div><!-- doc-content -->\n";
3248 t <<
"</div><!-- container -->\n";
3255 QCString scriptName = htmlOutput+
"/search/search.js";
3264 err(
"Failed to open file '{}' for writing...\n",scriptName);
3273 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3282 t <<
"<!-- " <<
theTranslator->trGeneratedBy() <<
" Doxygen "
3283 << getDoxygenVersion() <<
" -->\n";
3284 t <<
"<script type=\"text/javascript\">\n";
3285 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
3289 if (!disableIndex && !quickLinksAfterSplitbar)
3293 if (generateTreeView)
3295 t <<
"</div><!-- top -->\n";
3298 if (quickLinksAfterSplitbar)
3303 t <<
"<div class=\"header\">\n";
3304 t <<
" <div class=\"headertitle\">\n";
3305 t <<
" <div class=\"title\">" <<
theTranslator->trSearchResultsTitle() <<
"</div>\n";
3308 t <<
"<div class=\"contents\">\n";
3310 t <<
"<div id=\"searchresults\"></div>\n";
3313 if (generateTreeView)
3315 t <<
"</div><!-- doc-content -->\n";
3316 t <<
"</div><!-- container -->\n";
3324 QCString scriptName = dname+
"/search/search.js";
3329 t <<
"var searchResultsText=["
3334 t <<
"var tagMap = {\n";
3338 for (
const auto &ml : extraSearchMappings)
3341 int eqPos = mapLine.
find(
'=');
3348 if (!first) t <<
",\n";
3349 t <<
" \"" << tagName <<
"\": \"" << destName <<
"\"";
3354 if (!first) t <<
"\n";
3358 t <<
"$(function() {\n";
3359 t <<
" var query = trim(getURLParameter('query'));\n";
3360 t <<
" if (query) {\n";
3361 t <<
" searchFor(query,0,20);\n";
3363 t <<
" var results = $('#results');\n";
3364 t <<
" results.html('<p>" <<
theTranslator->trSearchResults(0) <<
"</p>');\n";
3370 err(
"Failed to open file '{}' for writing...\n",scriptName);
3376 m_t <<
"<div class=\"typeconstraint\">\n";
3377 m_t <<
"<dl><dt><b>" << header <<
"</b></dt><dd>\n";
3378 m_t <<
"<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n";
3383 m_t <<
"<tr><td valign=\"top\"><em>";
3388 m_t <<
"</em></td>";
3393 m_t <<
"<td> :</td><td valign=\"top\"><em>";
3398 m_t <<
"</em></td>";
3403 m_t <<
"<td> ";
3408 m_t <<
"</td></tr>\n";
3413 m_t <<
"</table>\n";
3423 m_t <<
"<br class=\"" << style <<
"\" />\n";
3433 m_t <<
"<div class=\"header\">\n";
3438 m_t <<
" <div class=\"headertitle\">";
3450 m_t <<
"</div><!--header-->\n";
3457 m_t <<
"<table class=\"memberdecls\">\n";
3460 m_t <<
"<tr><td colspan=\"2\"><h3>";
3465 m_t <<
"</h3></td></tr>\n";
3470 DBG_HTML(
m_t <<
"<!-- startMemberDocSimple -->\n";)
3471 m_t <<
"<table class=\"fieldtable\">\n";
3472 m_t <<
"<tr><th colspan=\"" << (isEnum?
"2":
"3") <<
"\">";
3480 m_t <<
"</table>\n";
3485 DBG_HTML(
m_t <<
"<!-- startInlineMemberType -->\n";)
3486 m_t <<
"<tr><td class=\"fieldtype\">\n";
3491 DBG_HTML(
m_t <<
"<!-- endInlineMemberType -->\n";)
3497 DBG_HTML(
m_t <<
"<!-- startInlineMemberName -->\n";)
3498 m_t <<
"<td class=\"fieldname\">\n";
3503 DBG_HTML(
m_t <<
"<!-- endInlineMemberName -->\n";)
3509 DBG_HTML(
m_t <<
"<!-- startInlineMemberDoc -->\n";)
3510 m_t <<
"<td class=\"fielddoc\">\n";
3516 m_t <<
"</td></tr>\n";
3522 m_t <<
"<span class=\"mlabels\">";
3527 DBG_HTML(
m_t <<
"<!-- writeLabel(" << label <<
") -->\n";)
3529 auto convertLabelToClass = [](
const std::string &lab) {
3542 for (
size_t i=0; i<l; i++)
3544 char c = input.
at(i);
3545 if (c<0 || (c>=
'a' && c<=
'z') || c==
'_')
3550 else if (nmstart && (c<0 || (c>=
'a' && c<=
'z') || (c>=
'0' && c<=
'9') || c==
'_'))
3554 else if (nmstart && (c==
' ' || c==
'-'))
3562 m_t <<
"<span class=\"mlabel " << convertLabelToClass(label.
stripWhiteSpace().
str()) <<
"\">" << label <<
"</span>";
3576 DBG_HTML(
m_t <<
"<!-- writeInheritedSectionTitle -->\n";)
3578 if (!a.isEmpty()) a.
prepend(
"#");
3583 classLink +=
" href=\"";
3588 classLink +=
"href=\"";
3593 classLink=classLink+fn+a;
3595 m_t <<
"<tr class=\"inherit_header " <<
id <<
"\">"
3596 <<
"<td colspan=\"2\" onclick=\"javascript:dynsection.toggleInherit('" <<
id <<
"')\">"
3597 <<
"<span class=\"dynarrow\"><span class=\"arrowhead closed\"></span></span>"
3606 m_t <<
" <div class=\"summary\">\n";
3612 m_t <<
"<a href=\"";
3631 m_t <<
"<div id=\"page-nav\" class=\"page-nav-panel\">\n";
3632 m_t <<
"<div id=\"page-nav-resize-handle\"></div>\n";
3633 m_t <<
"<div id=\"page-nav-tree\">\n";
3634 m_t <<
"<div id=\"page-nav-contents\">\n";
3635 m_t <<
"</div><!-- page-nav-contents -->\n";
3636 m_t <<
"</div><!-- page-nav-tree -->\n";
3637 m_t <<
"</div><!-- page-nav -->\n";
3661 m_t <<
"<div class=\"toc\">";
3680 if (
type.isSection())
3683 int nextLevel =
type.level();
3691 char cs[2] = {
static_cast<char>(
'0'+l+1), 0 };
3692 const char *empty = (l!=nextLevel-1) ?
" empty" :
"";
3711 char cs[2] = {
static_cast<char>(
'0'+nextLevel), 0 };
3716 m_t <<
"<a href=\"#"+label+
"\">";
3724 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)