浏览该文件的文档.
64 static const char *
hex=
"0123456789ABCDEF";
70 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
71 t <<
" <span class=\"left\">\n";
72 t <<
" <img id=\"MSearchSelect\" src=\"" << relPath <<
"search/mag_sel.svg\"\n";
73 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
74 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
76 t <<
" <input type=\"text\" id=\"MSearchField\" value=\""
78 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
79 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
80 t <<
" onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
81 t <<
" </span><span class=\"right\">\n";
82 t <<
" <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
83 <<
"<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath <<
"search/close.svg\" alt=\"\"/></a>\n";
93 t <<
" <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
94 t <<
" <div class=\"left\">\n";
95 t <<
" <form id=\"FSearchBox\" action=\"" << relPath;
104 t <<
"\" method=\"get\">\n";
105 t <<
" <img id=\"MSearchSelect\" src=\"" << relPath <<
"search/mag.svg\" alt=\"\"/>\n";
106 if (!highlightSearch)
108 t <<
" <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
110 t <<
" onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
111 t <<
" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
113 t <<
" </div><div class=\"right\"></div>\n";
144 if (macrofile.
isEmpty())
return "";
149 const char *data = s.
data();
158 while (i < size && (data[i] ==
' ' || data[i] ==
'\t' || data[i] ==
'\n'))
160 if (data[i] ==
'\n') line++;
163 if (i >= size)
break;
167 warn(macrofile,line,
"file contains non valid code, expected '\\' got '%c'\n",data[i]);
171 if (!
qstrncmp(data + i,
"newcommand", (
uint)strlen(
"newcommand")))
173 i += (int)strlen(
"newcommand");
175 else if (!
qstrncmp(data + i,
"renewcommand", (
uint)strlen(
"renewcommand")))
177 i += (int)strlen(
"renewcommand");
181 warn(macrofile,line,
"file contains non valid code, expected 'newcommand' or 'renewcommand'");
187 warn(macrofile,line,
"file contains non valid code, expected '{' got '%c'\n",data[i]);
193 warn(macrofile,line,
"file contains non valid code, expected '\\' got '%c'\n",data[i]);
199 while (i < size && (data[i] !=
'}')) out.
addChar(data[i++]);
202 warn(macrofile,line,
"file contains non valid code, no closing '}' for command");
215 while (i < size && (data[i] !=
']')) nr += data[i++];
218 warn(macrofile,line,
"file contains non valid code, no closing ']'");
223 else if (data[i] !=
'{')
225 warn(macrofile,line,
"file contains non valid code, expected '[' or '{' got '%c'\n",data[i]);
232 warn(macrofile,line,
"file contains non valid code, expected '{' got '%c'\n",data[i]);
240 while (i < size && cnt)
254 else if (data[i] !=
'"') out.
addChar(data[i++]);
280 warn(macrofile,line,
"file contains non valid code, no closing '}' for replacement");
337 bool hasProjectName = !projectName.
isEmpty();
341 bool hasFullSideBar =
Config_getBool(FULL_SIDEBAR) && disableIndex && treeView;
342 static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
347 cssFile =
"doxygen.css";
358 cssFile =
"doxygen.css";
364 for (
const auto &fileName : extraCssFile)
366 if (!fileName.empty())
371 extraCssText +=
"<link href=\"$relpath^"+
stripPath(fileName.c_str())+
"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
388 treeViewCssJs =
"<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
392 "<script type=\"text/javascript\" src=\"$relpath^resize.js\"></script>\n"
393 "<script type=\"text/javascript\" src=\"$relpath^navtreedata.js\"></script>\n"
394 "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n";
399 searchCssJs =
"<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
400 if (!serverBasedSearch)
402 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
404 searchCssJs +=
"<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
406 if (!serverBasedSearch)
410 searchCssJs +=
"<script type=\"text/javascript\">\n"
411 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
412 " $(document).ready(function() { init_search(); });\n"
413 "/* @license-end */\n"
421 searchCssJs +=
"<script type=\"text/javascript\">\n"
422 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
423 " $(document).ready(function() {\n"
424 " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
426 " /* @license-end */\n"
431 searchCssJs +=
"<link rel=\"search\" href=\"" + relPath +
432 "search_opensearch.php?v=opensearch.xml\" "
433 "type=\"application/opensearchdescription+xml\" title=\"" +
434 (hasProjectName ? projectName :
QCString(
"Doxygen")) +
450 switch (mathJaxVersion)
452 case MATHJAX_VERSION_t::MathJax_3:
454 mathJaxJs +=
"<script src=\"https://polyfill.io/v3/polyfill.min.js?features=es6\"></script>\n"
455 "<script type=\"text/javascript\">\n"
456 "window.MathJax = {\n"
458 " ignoreHtmlClass: 'tex2jax_ignore',\n"
459 " processHtmlClass: 'tex2jax_process'\n"
472 " packages: ['base','configmacros'";
475 mathJaxJs+=
",'newcommand'";
477 for (
const auto &s : mathJaxExtensions)
479 mathJaxJs+=
",'"+
QCString(s.c_str())+
"'";
495 mathJaxJs +=
"</script>\n";
496 mathJaxJs +=
"<script type=\"text/javascript\" id=\"MathJax-script\" async=\"async\" src=\"" +
497 path +
"es5/tex-" + mathJaxFormat.
lower() +
".js\">";
498 mathJaxJs+=
"</script>\n";
501 case MATHJAX_VERSION_t::MathJax_2:
503 mathJaxJs =
"<script type=\"text/x-mathjax-config\">\n"
504 "MathJax.Hub.Config({\n"
505 " extensions: [\"tex2jax.js\"";
507 for (
const auto &s : mathJaxExtensions)
509 mathJaxJs+=
", \""+
QCString(s.c_str())+
".js\"";
513 mathJaxFormat =
"HTML-CSS";
516 " jax: [\"input/TeX\",\"output/"+mathJaxFormat+
"\"],\n";
519 mathJaxJs +=
" TeX: { Macros: {\n";
524 mathJaxJs +=
"});\n";
530 mathJaxJs +=
"</script>\n";
531 mathJaxJs +=
"<script type=\"text/javascript\" async=\"async\" src=\"" + path +
"MathJax.js\"></script>\n";
544 result =
substitute(result,
"$navpath",navPath);
545 result =
substitute(result,
"$stylesheet",cssFile);
546 result =
substitute(result,
"$treeview",treeViewCssJs);
547 result =
substitute(result,
"$searchbox",searchBox);
548 result =
substitute(result,
"$search",searchCssJs);
549 result =
substitute(result,
"$mathjax",mathJaxJs);
550 result =
substitute(result,
"$generatedby",generatedBy);
551 result =
substitute(result,
"$extrastylesheet",extraCssText);
552 result =
substitute(result,
"$relpath$",relPath);
553 result =
substitute(result,
"$relpath^",relPath);
578 : m_t(t), m_relPath(relPath)
592 const char *p=str.
data();
594 int spacesToNextTabStop;
600 case '\t': spacesToNextTabStop =
601 tabSize - (
m_col%tabSize);
603 m_col+=spacesToNextTabStop;
620 {
m_t <<
"<"; p++; }
622 {
m_t <<
">"; p++; }
636 m_t <<
"$" <<
hex[uc>>4] <<
hex[uc&0xF] <<
";";
657 const char *p=str.
data();
664 case '<':
m_t <<
"<";
break;
665 case '>':
m_t <<
">";
break;
666 case '&':
m_t <<
"&";
break;
667 case '"':
m_t <<
""";
break;
670 {
m_t <<
"<"; p++; }
672 {
m_t <<
">"; p++; }
674 {
m_t <<
"\\‍("; p++; }
676 {
m_t <<
"\\‍)"; p++; }
685 m_t <<
"$" <<
hex[uc>>4] <<
hex[uc&0xF] <<
";";
699 const QCString &anchor,
int l,
bool writeLineAnchor)
701 const int maxLineNrStr = 10;
702 char lineNumber[maxLineNrStr];
703 char lineAnchor[maxLineNrStr];
704 qsnprintf(lineNumber,maxLineNrStr,
"%5d",l);
705 qsnprintf(lineAnchor,maxLineNrStr,
"l%05d",l);
709 m_t <<
"<div class=\"line\">";
713 if (writeLineAnchor)
m_t <<
"<a id=\"" << lineAnchor <<
"\" name=\"" << lineAnchor <<
"\"></a>";
714 m_t <<
"<span class=\"lineno\">";
749 m_t <<
"<a class=\"" << className <<
"Ref\" ";
754 m_t <<
"<a class=\"" << className <<
"\" ";
773 m_t <<
"<div class=\"ttc\" id=\"" <<
id <<
"\">";
774 m_t <<
"<div class=\"ttname\">";
794 m_t <<
"<div class=\"ttdeci\">";
800 m_t <<
"<div class=\"ttdoc\">";
806 m_t <<
"<div class=\"ttdef\"><b>Definition:</b> ";
827 m_t <<
"<div class=\"ttdecl\"><b>Declaration:</b> ";
855 m_t <<
"<div class=\"line\">";
876 m_t <<
"<span class=\"" << s <<
"\">";
886 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
891 m_t <<
"<div class=\"fragment\">";
899 m_t <<
"</div><!-- fragment -->";
921 return std::make_unique<HtmlGenerator>(*
this);
936 term(
"Could not create output directory %s\n",
qPrint(dname));
992 std::ofstream f(dname.
str()+
"/dynsections.js",std::ofstream::out | std::ofstream::binary);
1056 if (serverBasedSearch)
1070 std::ofstream f(searchDirName.
str()+
"/search.css",std::ofstream::out | std::ofstream::binary);
1079 searchCss = mgr.
getAsString(
"search_sidebar.css");
1088 searchCss = mgr.
getAsString(
"search_fixedtabs.css");
1094 searchCss += mgr.
getAsString(
"search_common.css");
1108 t <<
"<!-- HTML header for doxygen " << getDoxygenVersion() <<
"-->\n";
1114 t <<
"<!-- HTML footer for doxygen " << getDoxygenVersion() <<
"-->\n";
1140 << getDoxygenVersion() <<
" -->\n";
1145 m_t <<
"<script type=\"text/javascript\">\n";
1146 m_t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
1147 m_t <<
"var searchBox = new SearchBox(\"searchBox\", \""
1149 m_t <<
"/* @license-end */\n";
1150 m_t <<
"</script>\n";
1160 if (searchEngine && !serverBasedSearch)
1162 t <<
"<!-- window showing the filter options -->\n";
1163 t <<
"<div id=\"MSearchSelectWindow\"\n";
1164 t <<
" onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
1165 t <<
" onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
1166 t <<
" onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
1169 t <<
"<!-- iframe showing the search results (closed by default) -->\n";
1170 t <<
"<div id=\"MSearchResultsWindow\">\n";
1171 t <<
"<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n";
1172 t <<
" name=\"MSearchResults\" id=\"MSearchResults\">\n";
1200 result +=
" \n<a href=\"https://www.doxygen.org/index.html\">\n"
1201 "<img class=\"footer\" src=\"";
1203 result +=
"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> ";
1204 result += getDoxygenVersion();
1232 m_t <<
"<h3 class=\"version\">";
1278 for (
const auto &
fileName : extraCssFiles)
1303 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>";
1318 m_t <<
"\n<p class=\"" << classDef <<
"\">";
1350 m_t <<
"<a class=\"elRef\" ";
1355 m_t <<
"<a class=\"el\" ";
1396 m_t <<
"<a class=\"elRef\" ";
1401 m_t <<
"<a class=\"el\" ";
1414 m_t <<
"<a href=\"";
1429 if (generateTreeView)
m_t <<
"target=\"top\" ";
1442 if (extraIndentLevel==2)
1444 m_t <<
"<h4 class=\"groupheader\">";
1446 else if (extraIndentLevel==1)
1448 m_t <<
"<h3 class=\"groupheader\">";
1452 m_t <<
"<h2 class=\"groupheader\">";
1458 if (extraIndentLevel==2)
1462 else if (extraIndentLevel==1)
1481 default:
ASSERT(0);
break;
1483 m_t <<
"<a id=\"" << lab <<
"\" name=\"" << lab <<
"\"></a>";
1495 default:
ASSERT(0);
break;
1508 const char *p=str.
data();
1515 case '<':
m_t <<
"<";
break;
1516 case '>':
m_t <<
">";
break;
1517 case '&':
m_t <<
"&";
break;
1518 case '"':
m_t <<
""";
break;
1519 case '-':
if (inHtmlComment)
m_t <<
"-";
else m_t <<
"-";
break;
1522 {
m_t <<
"<"; p++; }
1524 {
m_t <<
">"; p++; }
1526 {
m_t <<
"\\‍("; p++; }
1528 {
m_t <<
"\\‍)"; p++; }
1549 const QCString &relPath,
int sectionCount)
1553 if (dynamicSections)
1555 t <<
"<div id=\"dynsection-" << sectionCount <<
"\" "
1556 "onclick=\"return toggleVisibility(this)\" "
1557 "class=\"dynheader closed\" "
1558 "style=\"cursor:pointer;\">\n";
1559 t <<
" <img id=\"dynsection-" << sectionCount <<
"-trigger\" src=\""
1560 << relPath <<
"closed.png\" alt=\"+\"/> ";
1564 t <<
"<div class=\"dynheader\">\n";
1578 if (dynamicSections)
1580 t <<
"<div id=\"dynsection-" << sectionCount <<
"-summary\" "
1581 "class=\"dynsummary\" "
1582 "style=\"display:block;\">\n";
1590 if (dynamicSections)
1600 if (dynamicSections)
1602 t <<
"<div id=\"dynsection-" << sectionCount <<
"-content\" "
1603 "class=\"dyncontent\" "
1604 "style=\"display:none;\">\n";
1608 t <<
"<div class=\"dyncontent\">\n";
1636 m_t <<
" <div class=\"center\">\n";
1637 m_t <<
" <img src=\"";
1639 m_t <<
"_map\" alt=\"\"/>\n";
1649 m_t <<
" <div class=\"center\">\n";
1650 m_t <<
" <img src=\"";
1678 m_t <<
"<table class=\"memberdecls\">\n";
1681 m_t <<
"<tr class=\"memitem:" << anchor;
1684 m_t <<
" inherit " << inheritId;
1692 m_t <<
"</td></tr>\n";
1701 m_t <<
"</td></tr>\n";
1702 m_t <<
"<tr class=\"memitem:" << anchor;
1705 m_t <<
" inherit " << inheritId;
1707 m_t <<
"\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">";
1712 m_t <<
"<div class=\"compoundTemplParams\">";
1723 QCString className = templ ?
"memTemplItemRight" :
"memItemRight";
1724 m_t <<
" </td><td class=\"" << className <<
"\" valign=\"bottom\">";
1729 if (!initTag)
m_t <<
" </td>";
1732 case 0:
m_t <<
"<td class=\"memItemLeft\" align=\"right\" valign=\"top\">";
break;
1733 case 1:
m_t <<
"<td class=\"memItemLeft\" >";
break;
1734 case 2:
m_t <<
"<td class=\"memItemLeft\" valign=\"top\">";
break;
1735 default:
m_t <<
"<td class=\"memTemplParams\" colspan=\"2\">";
break;
1741 DBG_HTML(
m_t <<
"<!-- startMemberDescription -->\n")
1744 m_t <<
"<table class=\"memberdecls\">\n";
1747 m_t <<
"<tr class=\"memdesc:" << anchor;
1750 m_t <<
" inherit " << inheritId;
1753 m_t <<
"<td class=\"mdescLeft\"> </td>";
1754 if (typ)
m_t <<
"<td class=\"mdescLeft\"> </td>";
1755 m_t <<
"<td class=\"mdescRight\">";;
1760 DBG_HTML(
m_t <<
"<!-- endMemberDescription -->\n")
1761 m_t <<
"<br /></td></tr>\n";
1777 m_t <<
"</table>\n";
1791 m_t <<
"<table class=\"memberdecls\">\n";
1794 m_t <<
"<tr class=\"heading\"><td colspan=\"" << typ <<
"\"><h2 class=\"groupheader\">";
1797 m_t <<
"<a id=\"" << anchor <<
"\" name=\"" << anchor <<
"\"></a>\n";
1804 m_t <<
"</h2></td></tr>\n";
1810 m_t <<
"<tr><td class=\"ititle\" colspan=\"2\">";
1816 m_t <<
"</td></tr>\n";
1826 m_t <<
"</table>\n";
1832 m_t <<
" <tr><td class=\"indexkey\">";
1843 m_t <<
"<td class=\"indexvalue\">";
1848 m_t <<
"</td></tr>\n";
1863 int memCount,
int memTotal,
bool showInline)
1866 m_t <<
"\n<h2 class=\"memtitle\">"
1867 <<
"<span class=\"permalink\"><a href=\"#" << anchor <<
"\">◆ </a></span>";
1871 m_t <<
" <span class=\"overload\">[" << memCount <<
"/" << memTotal <<
"]</span>";
1874 m_t <<
"\n<div class=\"memitem\">\n";
1875 m_t <<
"<div class=\"memproto\">\n";
1880 DBG_HTML(
m_t <<
"<!-- startMemberDocPrefixItem -->\n";)
1881 m_t <<
"<div class=\"memtemplate\">\n";
1886 DBG_HTML(
m_t <<
"<!-- endMemberDocPrefixItem -->\n";)
1894 m_t <<
" <table class=\"memname\">\n";
1897 m_t <<
" <td class=\"memname\">";
1910 if (openBracket)
m_t <<
"(";
1918 DBG_HTML(
m_t <<
"<!-- startFirstParameterType -->\n";)
1919 m_t <<
" <td class=\"paramtype\">";
1925 m_t <<
" <td class=\"paramkey\">" << key <<
"</td>\n";
1926 m_t <<
" <td></td>\n";
1927 m_t <<
" <td class=\"paramtype\">";
1934 m_t <<
" </td>\n";
1940 m_t <<
" <td class=\"paramname\">";
1950 if (closeBracket)
m_t <<
"</td><td>)";
1956 m_t <<
" </td>\n";
1959 m_t <<
" <td></td>\n";
1961 if (closeBracket)
m_t <<
")";
1963 m_t <<
" <td></td><td>";
1986 m_t <<
" <td align=\"right\">";
1989 m_t << prefix <<
"</td><td>(</td><td colspan=\"2\">";
1990 else if (closeBracket)
1991 m_t <<
"</td><td>)</td><td></td><td>";
1993 m_t <<
"</td><td></td><td colspan=\"2\">";
2003 m_t <<
" </table>\n";
2022 if (generateLegend && !umlLook)
2024 m_t <<
"<center><span class=\"legend\">[";
2028 m_t <<
"]</span></center>";
2114 m_t <<
"<tr><td colspan=\"2\"><div class=\"groupHeader\">";
2119 m_t <<
"</div></td></tr>\n";
2124 m_t <<
"<tr><td colspan=\"2\"><div class=\"groupText\">";
2129 m_t <<
"</div></td></tr>\n";
2144 m_t <<
"<div class=\"memdoc\">\n";
2150 m_t <<
"\n</div>\n" <<
"</div>\n";
2168 m_t <<
"<table class=\"fieldtable\">\n"
2169 <<
"<tr><th colspan=\"2\">" << title <<
"</th></tr>";
2173 m_t <<
"</table>\n";
2188 m_t <<
"<td class=\"fieldname\">";
2193 m_t <<
" </td>";
2198 m_t <<
"<td class=\"fielddoc\">";
2208 m_t <<
"<dl class=\"section examples\"><dt>";
2221 m_t <<
"<dl><dt><b>";
2247 t <<
" <div id=\"navrow1\" class=\"tabs\">\n";
2251 t <<
" <div id=\"navrow2\" class=\"tabs2\">\n";
2253 t <<
" <ul class=\"tablist\">\n";
2281 t <<
" class=\"current\"";
2291 if (!l.
isEmpty()) t <<
"</a>";
2340 for (
const auto &entry : root->
children())
2347 for (
const auto &entry : root->
children())
2352 t <<
"<li><a href=\"" << relPath << url <<
"\"><span>";
2354 t <<
"</span></a>\n";
2367 bool highlightParent,
bool highlightSearch)
2390 entry.get()==hlEntry &&
2391 (!entry->children().empty() ||
2392 (entry->kind()==kind && !highlightParent)
2406 if (!serverBasedSearch)
2414 if (!highlightSearch)
2420 if (!highlightSearch)
2445 bool highlightParent=
FALSE;
2472 highlightParent =
TRUE;
break;
2474 highlightParent =
TRUE;
break;
2476 highlightParent =
TRUE;
break;
2478 highlightParent =
TRUE;
break;
2480 highlightParent =
TRUE;
break;
2482 highlightParent =
TRUE;
break;
2484 highlightParent =
TRUE;
break;
2498 searchPage =
"search.php";
2500 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menudata.js\"></script>\n";
2501 t <<
"<script type=\"text/javascript\" src=\"" << relPath <<
"menu.js\"></script>\n";
2502 t <<
"<script type=\"text/javascript\">\n";
2503 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
2504 t <<
"$(function() {\n";
2505 t <<
" initMenu('" << relPath <<
"',"
2506 << (searchEngine?
"true":
"false") <<
","
2507 << (serverBasedSearch?
"true":
"false") <<
",'"
2508 << searchPage <<
"','"
2512 if (!serverBasedSearch)
2514 t <<
" $(document).ready(function() { init_search(); });\n";
2518 t <<
" $(document).ready(function() {\n"
2519 <<
" if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
2524 t <<
"/* @license-end */\n";
2526 t <<
"<div id=\"main-nav\"></div>\n";
2535 highlightParent=
TRUE;
2536 hlEntry = root->
children().front().get();
2560 m_t <<
"</div><!-- top -->\n";
2568 if (generateTreeView)
2573 "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n");
2576 " <div id=\"nav-tree\">\n"
2577 " <div id=\"nav-tree-contents\">\n"
2578 " <div id=\"nav-sync\" class=\"sync\"></div>\n"
2581 " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
2582 " class=\"ui-resizable-handle\">\n"
2585 "<script type=\"text/javascript\">\n"
2586 "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n"
2587 "$(document).ready(function(){initNavTree('") +
2590 QCString(
"'); initResizable(); });\n"
2591 "/* @license-end */\n"
2593 "<div id=\"doc-content\">\n");
2610 m_t <<
"<div class=\"contents\">\n";
2615 m_t <<
"</div><!-- contents -->\n";
2625 m_t <<
"</div><!-- PageDoc -->\n";
2642 QCString configFileName = htmlOutput+
"/search_config.php";
2643 std::ofstream f(configFileName.
str(),std::ofstream::out | std::ofstream::binary);
2648 t <<
"$config = array(\n";
2649 t <<
" 'PROJECT_NAME' => \"" <<
convertToHtml(projectName) <<
"\",\n";
2650 t <<
" 'GENERATE_TREEVIEW' => " << (generateTreeView?
"true":
"false") <<
",\n";
2651 t <<
" 'DISABLE_INDEX' => " << (disableIndex?
"true":
"false") <<
",\n";
2653 t <<
"$translator = array(\n";
2655 t <<
" 'search_results' => array(\n";
2674 f.open(
fileName.
str(),std::ofstream::out | std::ofstream::binary);
2681 << getDoxygenVersion() <<
" -->\n";
2682 t <<
"<script type=\"text/javascript\">\n";
2683 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
2684 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
2686 t <<
"/* @license-end */\n";
2698 t <<
"require_once \"search_functions.php\";\n";
2703 if (generateTreeView)
2705 t <<
"</div><!-- doc-content -->\n";
2712 QCString scriptName = htmlOutput+
"/search/search.js";
2713 f.open(scriptName.
str(),std::ofstream::out | std::ofstream::binary);
2721 err(
"Failed to open file '%s' for writing...\n",
qPrint(scriptName));
2730 std::ofstream f(
fileName.
str(),std::ofstream::out | std::ofstream::binary);
2737 << getDoxygenVersion() <<
" -->\n";
2738 t <<
"<script type=\"text/javascript\">\n";
2739 t <<
"/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */\n";
2740 t <<
"var searchBox = new SearchBox(\"searchBox\", \""
2742 t <<
"/* @license-end */\n";
2747 t <<
" <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"\" size=\"20\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
2749 t <<
" </div><div class=\"right\"></div>\n";
2761 t <<
"<div class=\"header\">\n";
2762 t <<
" <div class=\"headertitle\">\n";
2766 t <<
"<div class=\"contents\">\n";
2768 t <<
"<div id=\"searchresults\"></div>\n";
2771 if (generateTreeView)
2773 t <<
"</div><!-- doc-content -->\n";
2781 QCString scriptName = dname+
"/search/search.js";
2782 f.open(scriptName.
str(),std::ofstream::out | std::ofstream::binary);
2786 t <<
"var searchResultsText=["
2791 t <<
"var tagMap = {\n";
2795 for (
const auto &ml : extraSearchMappings)
2798 int eqPos = mapLine.
find(
'=');
2805 if (!first) t <<
",\n";
2806 t <<
" \"" << tagName <<
"\": \"" << destName <<
"\"";
2811 if (!first) t <<
"\n";
2815 t <<
"$(document).ready(function() {\n";
2816 t <<
" var query = trim(getURLParameter('query'));\n";
2817 t <<
" if (query) {\n";
2818 t <<
" searchFor(query,0,20);\n";
2820 t <<
" var results = $('#results');\n";
2827 err(
"Failed to open file '%s' for writing...\n",
qPrint(scriptName));
2833 m_t <<
"<div class=\"typeconstraint\">\n";
2834 m_t <<
"<dl><dt><b>" << header <<
"</b></dt><dd>\n";
2835 m_t <<
"<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n";
2840 m_t <<
"<tr><td valign=\"top\"><em>";
2845 m_t <<
"</em></td>";
2850 m_t <<
"<td> :</td><td valign=\"top\"><em>";
2855 m_t <<
"</em></td>";
2860 m_t <<
"<td> ";
2865 m_t <<
"</td></tr>\n";
2870 m_t <<
"</table>\n";
2880 m_t <<
"<br class=\"" << style <<
"\" />\n";
2890 m_t <<
"<div class=\"header\">\n";
2895 m_t <<
" <div class=\"headertitle\">";
2907 m_t <<
"</div><!--header-->\n";
2914 m_t <<
"<table class=\"memberdecls\">\n";
2917 m_t <<
"<tr><td colspan=\"2\"><h3>";
2922 m_t <<
"</h3></td></tr>\n";
2927 DBG_HTML(
m_t <<
"<!-- startMemberDocSimple -->\n";)
2928 m_t <<
"<table class=\"fieldtable\">\n";
2929 m_t <<
"<tr><th colspan=\"" << (isEnum?
"2":
"3") <<
"\">";
2937 m_t <<
"</table>\n";
2942 DBG_HTML(
m_t <<
"<!-- startInlineMemberType -->\n";)
2943 m_t <<
"<tr><td class=\"fieldtype\">\n";
2948 DBG_HTML(
m_t <<
"<!-- endInlineMemberType -->\n";)
2954 DBG_HTML(
m_t <<
"<!-- startInlineMemberName -->\n";)
2955 m_t <<
"<td class=\"fieldname\">\n";
2960 DBG_HTML(
m_t <<
"<!-- endInlineMemberName -->\n";)
2966 DBG_HTML(
m_t <<
"<!-- startInlineMemberDoc -->\n";)
2967 m_t <<
"<td class=\"fielddoc\">\n";
2973 m_t <<
"</td></tr>\n";
2979 m_t <<
"<span class=\"mlabels\">";
2984 DBG_HTML(
m_t <<
"<!-- writeLabel(" << l <<
") -->\n";)
2987 m_t <<
"<span class=\"mlabel\">" << l <<
"</span>";
3001 DBG_HTML(
m_t <<
"<!-- writeInheritedSectionTitle -->\n";)
3003 if (!a.isEmpty()) a.
prepend(
"#");
3008 classLink +=
" href=\"";
3013 classLink +=
"href=\"";
3018 m_t <<
"<tr class=\"inherit_header " <<
id <<
"\">"
3019 <<
"<td colspan=\"2\" onclick=\"javascript:toggleInherit('" <<
id <<
"')\">"
3020 <<
"<img src=\"" <<
m_relPath <<
"closed.png\" alt=\"-\"/> "
3029 m_t <<
" <div class=\"summary\">\n";
3035 m_t <<
"<a href=\"";
3052 m_t <<
"<tr class=\"separator:" << anchor;
3055 m_t <<
" inherit " << inheritId;
3057 m_t <<
"\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n";
void startMemberDescription(const QCString &anchor, const QCString &inheritId, bool typ)
QCString selectBlock(const QCString &s, const QCString &name, bool enable, OutputGenerator::OutputType o)
std::vector< std::string > StringVector
bool copyResource(const QCString &name, const QCString &targetDir) const
Copies a registered resource to a given target directory
void endCompoundTemplateParams()
QCString fileName() const
void writeTooltip(const QCString &id, const DocLinkInfo &docInfo, const QCString &decl, const QCString &desc, const SourceLinkInfo &defInfo, const SourceLinkInfo &declInfo)
bool copyResourceAs(const QCString &name, const QCString &targetDir, const QCString &targetName, bool append=false) const
Copies a registered resource to a given target directory under a given target name
void startFontClass(const QCString &s)
void _writeCodeLink(const QCString &className, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name, const QCString &tooltip)
void writeLabel(const QCString &l, bool isLast)
static ResourceMgr & instance()
Returns the one and only instance of this class
Base class for the layout of a navigation item at the top of the HTML pages.
static QCString getConvertLatexMacro()
Convert a set of LaTeX commands \(re)newcommand to a form readable by MathJax LaTeX syntax:
void exceptionEntry(const QCString &, bool)
Generator for HTML output
virtual QCString trCompoundMembers()=0
void startIndexValue(bool)
void startGroupCollaboration()
virtual QCString trGeneratedBy()=0
void endClassDiagram(const ClassDiagram &, const QCString &, const QCString &)
void endInlineMemberDoc()
LayoutNavEntry * rootNavEntry() const
returns the (invisible) root of the navigation tree.
#define Config_getEnum(name)
Representation of an directory dependency graph
static std::mutex g_indexLock
void endMemberGroupHeader()
void startMemberDoc(const QCString &clName, const QCString &memName, const QCString &anchor, const QCString &title, int memCount, int memTotal, bool showInline)
QCString getAsString(const QCString &name) const
Gets the resource data as a C string
The common base class of all entity definitions found in the sources.
static void writeServerSearchBox(TextStream &t, const QCString &relPath, bool highlightSearch)
void docify(const QCString &str)
int documentedClassMembers[CMHL_Total]
QCString relativePathToRoot(const QCString &name)
void startPageDoc(const QCString &pageTitle)
virtual QCString trSearchMatches()=0
Class representing a directory in the file system
void endSection(const QCString &, SectionType)
QCString replaceColorMarkers(const QCString &str)
Replaces any markers of the form ##AA in input string str by new markers of the form #AABBCC,...
uint length() const
Returns the length of the string, not counting the 0-terminator.
void writeInheritedSectionTitle(const QCString &id, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &title, const QCString &name)
void writeImage(TextStream &t, const QCString &path, const QCString &relPath, const QCString &file, bool generateMap=true) const
QCString filterTitle(const QCString &title)
void endMemberDeclaration(const QCString &anchor, const QCString &inheritId)
void startIndexItem(const QCString &ref, const QCString &file)
void writeQuickLinks(bool compact, HighlightedItem hli, const QCString &file)
bool isEmpty() const
Returns TRUE iff the string is empty
LayoutNavEntry * find(LayoutNavEntry::Kind k, const QCString &file=QCString()) const
void lineBreak(const QCString &style)
void writeDoc(DocNode *, const Definition *, const MemberDef *, int id)
Abstract node interface with type information.
HtmlCodeGenerator m_codeGen
static IndexList * indexList
int documentedFileMembers[FMHL_Total]
void addStyleSheetFile(const QCString &name)
static QCString substituteHtmlKeywords(const QCString &str, const QCString &title, const QCString &relPath, const QCString &navPath=QCString())
void startGroupHeader(int)
void writeLineNumber(const QCString &, const QCString &, const QCString &, int, bool)
void startMemberDocPrefixItem()
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
void writeSummaryLink(const QCString &file, const QCString &anchor, const QCString &title, bool first)
void writeGraph(TextStream &t, const QCString &path, const QCString &fileName)
static void writeStyleSheetFile(TextStream &t)
void writeFooter(const QCString &navPath)
virtual QCString trLegend()=0
void codify(const QCString &text)
void startMemberTemplateParams()
static void startSectionContent(TextStream &t, int sectionCount)
static void writeSearchData(const QCString &dir)
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)
void startHeaderSection()
QCString correctURL(const QCString &url, const QCString &relPath)
Corrects URL url according to the relative path relPath.
void writeCodeLink(CodeSymbolType type, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name, const QCString &tooltip)
virtual QCString trEnumerationValues()=0
void startDescTableTitle()
void startHtmlLink(const QCString &url)
void startParagraph(const QCString &classDef)
void err(const char *fmt,...)
Text streaming class that buffers data.
void endConstraintParam()
void addStr(const QCString &s)
void startTitleHead(const QCString &)
int find(char c, int index=0, bool cs=TRUE) const
void startParameterType(bool first, const QCString &key)
void startMemberSections()
bool empty() const
Returns true iff the buffer is empty
int qstrncmp(const char *str1, const char *str2, size_t len)
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)
void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
SectionType
enum representing the various types of sections and entities that can be referred to.
void endCallGraph(DotCallGraph &g)
Concrete visitor implementation for HTML output.
static void writeExternalSearchPage()
void endCodeFragment(const QCString &)
void warn(const QCString &file, int line, const char *fmt,...)
void docify(const QCString &text)
@ HLI_AnnotatedExceptions
void endIndexValue(const QCString &, bool)
Class representing a string buffer optimised for growing.
static void renderQuickLinksAsTree(TextStream &t, const QCString &relPath, LayoutNavEntry *root)
static QCString getMathJaxMacros()
static void endSectionContent(TextStream &t)
static void writeFooterFile(TextStream &t)
void endTitleHead(const QCString &, const QCString &)
virtual QCString trGeneratedAt(const QCString &date, const QCString &projName)=0
void endMemberDocPrefixItem()
void endDotGraph(DotClassGraph &g)
void startFile(const QCString &name, const QCString &manName, const QCString &title, int id)
void startMemberSubtitle()
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
QCString addHtmlExtensionIfMissing(const QCString &fName)
void setCurrentDoc(const Definition *context, const QCString &anchor, bool isSourceFile)
A model of a class/file/namespace member symbol.
QCString dateToString(bool includeTime)
QCString removeEmptyLines(const QCString &s)
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
#define Config_getInt(name)
static bool isspace(char c)
static void startQuickIndexList(TextStream &t, bool compact, bool topLevel=TRUE)
virtual QCString trInheritedFrom(const QCString &members, const QCString &what)=0
void writeCodeAnchor(const QCString &anchor)
QCString left(size_t len) const
void insertMemberAlign(bool)
void writeSplitBar(const QCString &name)
static void writeClientSearchBox(TextStream &t, const QCString &relPath)
HtmlGenerator & operator=(const HtmlGenerator &g)
void addImageFile(const QCString &name)
void startMemberDocSimple(bool)
Representation of an call graph
void startDescTableData()
static void startQuickIndexItem(TextStream &t, const QCString &l, bool hl, bool, const QCString &relPath)
void startInlineMemberType()
constexpr const char * codeSymbolType2Str(CodeSymbolType type)
static void endQuickIndexList(TextStream &t, bool compact)
Translator * theTranslator
virtual QCString trSearchResults(int numDocuments)=0
virtual void addWord(const QCString &word, bool hiPriority)=0
#define Config_getEnumAsString(name)
QCString stripPath(const QCString &s)
void writeNavigationPath(const QCString &s)
void startIndexListItem()
QCString fileToString(const QCString &name, bool filter, bool isSourceCode)
void startInlineMemberName()
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
void writeStyleInfo(int part)
@ HLI_AnnotatedInterfaces
std::string str() const
Return the contents of the buffer as a std::string object
void endMemberGroupDocs()
virtual QCString trSearch()=0
void addIndexFile(const QCString &name)
Class representing a built-in class diagram.
static void renderQuickLinksAsTabs(TextStream &t, const QCString &relPath, LayoutNavEntry *hlEntry, LayoutNavEntry::Kind kind, bool highlightParent, bool highlightSearch)
Representation of a class inheritance or dependency graph
static QCString g_mathjax_code
void endDoxyAnchor(const QCString &fName, const QCString &anchor)
void startMemberItem(const QCString &anchor, int, const QCString &inheritId)
void clearSubDirs(const Dir &d)
QCString externalLinkTarget(const bool parent)
static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSearch)
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Various UTF8 related helper functions.
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.
QCString fixSpaces(const QCString &s)
static SearchIndexIntf * searchIndex
void startMemberGroupHeader(bool)
void insertMemberAlignLeft(int, bool)
Abstract output generator.
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
static void startSectionSummary(TextStream &t, int sectionCount)
void startConstraintType()
void startMemberGroupDocs()
void addWord(const QCString &word, bool hiPriority)
void startParameterName(bool)
static QCString writeLogoAsString(const QCString &path)
static QCString g_latex_macro
static void endQuickIndexItem(TextStream &t, const QCString &l)
static void writeSearchPage()
QCString substituteKeywords(const QCString &s, const QCString &title, const QCString &projName, const QCString &projNum, const QCString &projBrief)
#define Config_getBool(name)
void endInlineMemberName()
static void writeDefaultQuickLinks(TextStream &t, bool compact, HighlightedItem hli, const QCString &file, const QCString &relPath)
void setRelativePath(const QCString &path)
static QCString htmlFileExtension
static void endSectionSummary(TextStream &t)
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
void endDirDepGraph(DotDirDeps &g)
virtual QCString trSearchResultsTitle()=0
Singleton for managing resources compiled into an executable
static LayoutDocManager & instance()
Returns a reference to this singleton.
virtual void setCurrentDoc(const Definition *ctx, const QCString &anchor, bool isSourceFile)=0
void term(const char *fmt,...)
Minimal replacement for QFileInfo.
static QCString writeSplitBarAsString(const QCString &name, const QCString &relpath)
void endMemberDocSimple(bool)
void endIndexItem(const QCString &ref, const QCString &file)
std::string absFilePath() const
void endMemberTemplateParams(const QCString &anchor, const QCString &inheritId)
const char * qPrint(const char *s)
void startParamList(ParamListTypes, const QCString &)
void startInlineMemberDoc()
#define Config_getString(name)
void startCompoundTemplateParams()
int documentedNamespaceMembers[NMHL_Total]
void startSection(const QCString &, const QCString &, SectionType)
Representation of a group collaboration graph
static void startSectionHeader(TextStream &t, const QCString &relPath, int sectionCount)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string
void startDoxyAnchor(const QCString &fName, const QCString &manName, const QCString &anchor, const QCString &name, const QCString &args)
void startTextLink(const QCString &file, const QCString &anchor)
void startConstraintList(const QCString &)
void endInlineMemberType()
void startDescTable(const QCString &title)
Representation of an include dependency graph
void startConstraintDocs()
virtual void accept(DocVisitor *v)=0
OutputGenerator & operator=(const OutputGenerator &o)
std::string fileName() const
Represents a graphical class hierarchy
HtmlCodeGenerator(TextStream &t, const QCString &relPath)
void startMemberDocList()
void startConstraintParam()
void endInclDepGraph(DotInclDepGraph &g)
void writeNonBreakableSpace(int)
void writeStartAnnoItem(const QCString &type, const QCString &file, const QCString &path, const QCString &name)
void startMemberHeader(const QCString &, int)
virtual QCString trExamples()=0
QCString externalRef(const QCString &relPath, const QCString &ref, bool href)
void writeString(const QCString &text)
void endGroupCollaboration(DotGroupCollaboration &g)
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
A bunch of utility functions.
virtual std::unique_ptr< OutputGenerator > clone() const
void createSubDirs(const Dir &d)
const LayoutNavEntryList & children() const
static void endSectionHeader(TextStream &t)
void endMemberGroup(bool)
static void writePageFooter(TextStream &t, const QCString &, const QCString &, const QCString &)
static void writeHeaderFile(TextStream &t, const QCString &cssname)
void startMemberDocName(bool)
QCString convertToId(const QCString &s)
void endParameterName(bool last, bool emptyList, bool closeBracket)
void startParameterList(bool)
QCString right(size_t len) const
void startPlainFile(const QCString &name)
QCString & prepend(const char *s)
virtual OutputType type() const
static void writeTabData()
Additional initialization after indices have been created
QCString convertToHtml(const QCString &s, bool keepEntities)
void startProjectNumber()
void addIndexItem(const QCString &, const QCString &)
void endMemberDescription()
LayoutNavEntry * parent() const
#define Config_getList(name)
void startCodeFragment(const QCString &style)
static PageLinkedMap * exampleLinkedMap
This is an alternative implementation of QCString.