Doxygen
htmlgen.cpp 文件参考
#include <stdlib.h>
#include <assert.h>
#include <mutex>
#include <sstream>
#include "message.h"
#include "htmlgen.h"
#include "config.h"
#include "util.h"
#include "doxygen.h"
#include "diagram.h"
#include "version.h"
#include "dot.h"
#include "dotcallgraph.h"
#include "dotclassgraph.h"
#include "dotdirdeps.h"
#include "dotgfxhierarchytable.h"
#include "dotgroupcollaboration.h"
#include "dotincldepgraph.h"
#include "language.h"
#include "htmlhelp.h"
#include "docparser.h"
#include "htmldocvisitor.h"
#include "searchindex.h"
#include "pagedef.h"
#include "debug.h"
#include "dirdef.h"
#include "vhdldocgen.h"
#include "layout.h"
#include "image.h"
#include "ftvhelp.h"
#include "bufstr.h"
#include "resourcemgr.h"
#include "tooltip.h"
#include "growbuf.h"
#include "fileinfo.h"
#include "dir.h"
#include "utf8.h"
#include "textstream.h"
+ htmlgen.cpp 的引用(Include)关系图:

浏览源代码.

宏定义

#define DBG_HTML(x)
 

函数

static void writeClientSearchBox (TextStream &t, const QCString &relPath)
 
static void writeServerSearchBox (TextStream &t, const QCString &relPath, bool highlightSearch)
 
static QCString getConvertLatexMacro ()
 Convert a set of LaTeX commands \(re)newcommand to a form readable by MathJax LaTeX syntax: 更多...
 
static QCString getSearchBox (bool serverSide, QCString relPath, bool highlightSearch)
 
static QCString substituteHtmlKeywords (const QCString &str, const QCString &title, const QCString &relPath, const QCString &navPath=QCString())
 
static void startSectionHeader (TextStream &t, const QCString &relPath, int sectionCount)
 
static void endSectionHeader (TextStream &t)
 
static void startSectionSummary (TextStream &t, int sectionCount)
 
static void endSectionSummary (TextStream &t)
 
static void startSectionContent (TextStream &t, int sectionCount)
 
static void endSectionContent (TextStream &t)
 
static void startQuickIndexList (TextStream &t, bool compact, bool topLevel=TRUE)
 
static void endQuickIndexList (TextStream &t, bool compact)
 
static void startQuickIndexItem (TextStream &t, const QCString &l, bool hl, bool, const QCString &relPath)
 
static void endQuickIndexItem (TextStream &t, const QCString &l)
 
static bool quickLinkVisible (LayoutNavEntry::Kind kind)
 
static void renderQuickLinksAsTree (TextStream &t, const QCString &relPath, LayoutNavEntry *root)
 
static void renderQuickLinksAsTabs (TextStream &t, const QCString &relPath, LayoutNavEntry *hlEntry, LayoutNavEntry::Kind kind, bool highlightParent, bool highlightSearch)
 
static void writeDefaultQuickLinks (TextStream &t, bool compact, HighlightedItem hli, const QCString &file, const QCString &relPath)
 

变量

static QCString g_header
 
static QCString g_footer
 
static QCString g_mathjax_code
 
static QCString g_latex_macro
 
static const char * hex ="0123456789ABCDEF"
 
static std::mutex g_indexLock
 

宏定义说明

◆ DBG_HTML

#define DBG_HTML (   x)

在文件 htmlgen.cpp58 行定义.

函数说明

◆ endQuickIndexItem()

static void endQuickIndexItem ( TextStream t,
const QCString l 
)
static

在文件 htmlgen.cpp2288 行定义.

2289 {
2290  t << "</span>";
2291  if (!l.isEmpty()) t << "</a>";
2292  t << "</li>\n";
2293 }

引用了 QCString::isEmpty().

被这些函数引用 renderQuickLinksAsTabs().

◆ endQuickIndexList()

static void endQuickIndexList ( TextStream t,
bool  compact 
)
static

在文件 htmlgen.cpp2261 行定义.

2262 {
2263  if (compact)
2264  {
2265  t << " </ul>\n";
2266  t << " </div>\n";
2267  }
2268  else
2269  {
2270  t << "</ul>\n";
2271  }
2272 }

被这些函数引用 renderQuickLinksAsTabs() , 以及 renderQuickLinksAsTree().

◆ endSectionContent()

static void endSectionContent ( TextStream t)
static

在文件 htmlgen.cpp1612 行定义.

1613 {
1614  //t << "<!-- endSectionContent -->";
1615  t << "</div>\n";
1616 }

被这些函数引用 HtmlGenerator::endCallGraph(), HtmlGenerator::endClassDiagram(), HtmlGenerator::endDirDepGraph(), HtmlGenerator::endDotGraph(), HtmlGenerator::endGroupCollaboration() , 以及 HtmlGenerator::endInclDepGraph().

◆ endSectionHeader()

static void endSectionHeader ( TextStream t)
static

在文件 htmlgen.cpp1568 行定义.

1569 {
1570  //t << "<!-- endSectionHeader -->";
1571  t << "</div>\n";
1572 }

被这些函数引用 HtmlGenerator::endCallGraph(), HtmlGenerator::endClassDiagram(), HtmlGenerator::endDirDepGraph(), HtmlGenerator::endDotGraph(), HtmlGenerator::endGroupCollaboration() , 以及 HtmlGenerator::endInclDepGraph().

◆ endSectionSummary()

static void endSectionSummary ( TextStream t)
static

在文件 htmlgen.cpp1586 行定义.

1587 {
1588  //t << "<!-- endSectionSummary -->";
1589  bool dynamicSections = Config_getBool(HTML_DYNAMIC_SECTIONS);
1590  if (dynamicSections)
1591  {
1592  t << "</div>\n";
1593  }
1594 }

引用了 Config_getBool.

被这些函数引用 HtmlGenerator::endCallGraph(), HtmlGenerator::endClassDiagram(), HtmlGenerator::endDirDepGraph(), HtmlGenerator::endDotGraph(), HtmlGenerator::endGroupCollaboration() , 以及 HtmlGenerator::endInclDepGraph().

◆ getConvertLatexMacro()

static QCString getConvertLatexMacro ( )
static

Convert a set of LaTeX commands \(re)newcommand to a form readable by MathJax LaTeX syntax:

\newcommand{\cmd}{replacement}
or
\renewcommand{\cmd}{replacement}

MathJax syntax:

cmd: "{replacement}"

LaTeX syntax:

\newcommand{\cmd}[nr]{replacement}
or
\renewcommand{\cmd}[nr]{replacement}

MathJax syntax:

cmd: ["{replacement}",nr]

在文件 htmlgen.cpp141 行定义.

142 {
143  QCString macrofile = Config_getString(FORMULA_MACROFILE);
144  if (macrofile.isEmpty()) return "";
145  QCString s = fileToString(macrofile);
146  macrofile = FileInfo(macrofile.str()).absFilePath();
147  int size = s.length();
148  GrowBuf out(size);
149  const char *data = s.data();
150  int line = 1;
151  int cnt = 0;
152  int i = 0;
153  QCString nr;
154  while (i < size)
155  {
156  nr = "";
157  // skip initial white space, but count lines
158  while (i < size && (data[i] == ' ' || data[i] == '\t' || data[i] == '\n'))
159  {
160  if (data[i] == '\n') line++;
161  i++;
162  }
163  if (i >= size) break;
164  // check for \newcommand or \renewcommand
165  if (data[i] != '\\')
166  {
167  warn(macrofile,line, "file contains non valid code, expected '\\' got '%c'\n",data[i]);
168  return "";
169  }
170  i++;
171  if (!qstrncmp(data + i, "newcommand", (uint)strlen("newcommand")))
172  {
173  i += (int)strlen("newcommand");
174  }
175  else if (!qstrncmp(data + i, "renewcommand", (uint)strlen("renewcommand")))
176  {
177  i += (int)strlen("renewcommand");
178  }
179  else
180  {
181  warn(macrofile,line, "file contains non valid code, expected 'newcommand' or 'renewcommand'");
182  return "";
183  }
184  // handle {cmd}
185  if (data[i] != '{')
186  {
187  warn(macrofile,line, "file contains non valid code, expected '{' got '%c'\n",data[i]);
188  return "";
189  }
190  i++;
191  if (data[i] != '\\')
192  {
193  warn(macrofile,line, "file contains non valid code, expected '\\' got '%c'\n",data[i]);
194  return "";
195  }
196  i++;
197  // run till }, i.e. cmd
198  out.addStr(" ");
199  while (i < size && (data[i] != '}')) out.addChar(data[i++]);
200  if (i >= size)
201  {
202  warn(macrofile,line, "file contains non valid code, no closing '}' for command");
203  return "";
204  }
205  out.addChar(':');
206  out.addChar(' ');
207  i++;
208 
209  if (data[i] == '[')
210  {
211  // handle [nr]
212  // run till ]
213  out.addChar('[');
214  i++;
215  while (i < size && (data[i] != ']')) nr += data[i++];
216  if (i >= size)
217  {
218  warn(macrofile,line, "file contains non valid code, no closing ']'");
219  return "";
220  }
221  i++;
222  }
223  else if (data[i] != '{')
224  {
225  warn(macrofile,line, "file contains non valid code, expected '[' or '{' got '%c'\n",data[i]);
226  return "";
227  }
228  // handle {replacement}
229  // retest as the '[' part might have advanced so we can have a new '{'
230  if (data[i] != '{')
231  {
232  warn(macrofile,line, "file contains non valid code, expected '{' got '%c'\n",data[i]);
233  return "";
234  }
235  out.addChar('"');
236  out.addChar('{');
237  i++;
238  // run till }
239  cnt = 1;
240  while (i < size && cnt)
241  {
242  switch(data[i])
243  {
244  case '\\':
245  out.addChar('\\'); // need to escape it for MathJax js code
246  out.addChar('\\');
247  i++;
248  if (data[i] == '\\') // we have an escaped backslash
249  {
250  out.addChar('\\');
251  out.addChar('\\');
252  i++;
253  }
254  else if (data[i] != '"') out.addChar(data[i++]); // double quote handled separately
255  break;
256  case '{':
257  cnt++;
258  out.addChar(data[i++]);
259  break;
260  case '}':
261  cnt--;
262  if (cnt) out.addChar(data[i]);
263  i++;
264  break;
265  case '"':
266  out.addChar('\\'); // need to escape it for MathJax js code
267  out.addChar(data[i++]);
268  break;
269  case '\n':
270  line++;
271  out.addChar(data[i++]);
272  break;
273  default:
274  out.addChar(data[i++]);
275  break;
276  }
277  }
278  if (i > size)
279  {
280  warn(macrofile,line, "file contains non valid code, no closing '}' for replacement");
281  return "";
282  }
283  out.addChar('}');
284  out.addChar('"');
285  if (!nr.isEmpty())
286  {
287  out.addChar(',');
288  out.addStr(nr);
289  }
290  if (!nr.isEmpty())
291  {
292  out.addChar(']');
293  }
294  out.addChar(',');
295  out.addChar('\n');
296  }
297  out.addChar(0);
298  return out.get();
299 }

引用了 FileInfo::absFilePath(), GrowBuf::addChar(), GrowBuf::addStr(), Config_getString, QCString::data(), fileToString(), GrowBuf::get(), QCString::isEmpty(), QCString::length(), qstrncmp(), QCString::str() , 以及 warn().

被这些函数引用 HtmlGenerator::getMathJaxMacros() , 以及 HtmlGenerator::init().

◆ getSearchBox()

static QCString getSearchBox ( bool  serverSide,
QCString  relPath,
bool  highlightSearch 
)
static

在文件 htmlgen.cpp301 行定义.

302 {
303  TextStream t;
304  if (serverSide)
305  {
306  writeServerSearchBox(t, relPath, highlightSearch);
307  }
308  else
309  {
310  writeClientSearchBox(t, relPath);
311  }
312  return t.str();
313 }

引用了 TextStream::str(), writeClientSearchBox() , 以及 writeServerSearchBox().

被这些函数引用 substituteHtmlKeywords().

◆ quickLinkVisible()

static bool quickLinkVisible ( LayoutNavEntry::Kind  kind)
static

在文件 htmlgen.cpp2295 行定义.

2296 {
2297  bool showNamespaces = Config_getBool(SHOW_NAMESPACES);
2298  switch (kind)
2299  {
2300  case LayoutNavEntry::MainPage: return TRUE;
2301  case LayoutNavEntry::User: return TRUE;
2302  case LayoutNavEntry::UserGroup: return TRUE;
2303  case LayoutNavEntry::Pages: return indexedPages>0;
2305  case LayoutNavEntry::Namespaces: return documentedNamespaces>0 && showNamespaces;
2306  case LayoutNavEntry::NamespaceList: return documentedNamespaces>0 && showNamespaces;
2314  case LayoutNavEntry::Files: return documentedFiles>0;
2329  case LayoutNavEntry::None: // should never happen, means not properly initialized
2330  assert(kind != LayoutNavEntry::None);
2331  return FALSE;
2332  }
2333  return FALSE;
2334 }

引用了 annotatedClasses, annotatedExceptions, annotatedInterfaces, annotatedStructs, LayoutNavEntry::Classes, LayoutNavEntry::ClassHierarchy, LayoutNavEntry::ClassIndex, LayoutNavEntry::ClassList, LayoutNavEntry::ClassMembers, CMHL_All, LayoutNavEntry::Concepts, Config_getBool, documentedClassMembers, documentedConcepts, documentedFileMembers, documentedFiles, documentedGroups, documentedNamespaceMembers, documentedNamespaces, LinkedMap< T, Hash, KeyEqual, Map >::empty(), Doxygen::exampleLinkedMap, LayoutNavEntry::Examples, LayoutNavEntry::ExceptionHierarchy, LayoutNavEntry::ExceptionIndex, LayoutNavEntry::ExceptionList, LayoutNavEntry::Exceptions, FALSE, LayoutNavEntry::FileGlobals, LayoutNavEntry::FileList, LayoutNavEntry::Files, FMHL_All, hierarchyClasses, hierarchyExceptions, hierarchyInterfaces, indexedPages, LayoutNavEntry::InterfaceHierarchy, LayoutNavEntry::InterfaceIndex, LayoutNavEntry::InterfaceList, LayoutNavEntry::Interfaces, LayoutNavEntry::MainPage, LayoutNavEntry::Modules, LayoutNavEntry::NamespaceList, LayoutNavEntry::NamespaceMembers, LayoutNavEntry::Namespaces, NMHL_All, LayoutNavEntry::None, LayoutNavEntry::Pages, LayoutNavEntry::StructIndex, LayoutNavEntry::StructList, LayoutNavEntry::Structs, TRUE, LayoutNavEntry::User , 以及 LayoutNavEntry::UserGroup.

被这些函数引用 renderQuickLinksAsTabs() , 以及 renderQuickLinksAsTree().

◆ renderQuickLinksAsTabs()

static void renderQuickLinksAsTabs ( TextStream t,
const QCString relPath,
LayoutNavEntry hlEntry,
LayoutNavEntry::Kind  kind,
bool  highlightParent,
bool  highlightSearch 
)
static

在文件 htmlgen.cpp2365 行定义.

2368 {
2369  if (hlEntry->parent()) // first draw the tabs for the parent of hlEntry
2370  {
2371  renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch);
2372  }
2373  if (hlEntry->parent() && !hlEntry->parent()->children().empty()) // draw tabs for row containing hlEntry
2374  {
2375  bool topLevel = hlEntry->parent()->parent()==0;
2376  int count=0;
2377  for (const auto &entry : hlEntry->parent()->children())
2378  {
2379  if (entry->visible() && quickLinkVisible(entry->kind())) count++;
2380  }
2381  if (count>0) // at least one item is visible
2382  {
2383  startQuickIndexList(t,TRUE,topLevel);
2384  for (const auto &entry : hlEntry->parent()->children())
2385  {
2386  if (entry->visible() && quickLinkVisible(entry->kind()))
2387  {
2388  QCString url = entry->url();
2389  startQuickIndexItem(t,url,
2390  entry.get()==hlEntry &&
2391  (!entry->children().empty() ||
2392  (entry->kind()==kind && !highlightParent)
2393  ),
2394  TRUE,relPath);
2395  t << fixSpaces(entry->title());
2396  endQuickIndexItem(t,url);
2397  }
2398  }
2399  if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry()) // first row is special as it contains the search box
2400  {
2401  bool searchEngine = Config_getBool(SEARCHENGINE);
2402  bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH);
2403  if (searchEngine)
2404  {
2405  t << " <li>\n";
2406  if (!serverBasedSearch) // pure client side search
2407  {
2408  writeClientSearchBox(t,relPath);
2409  t << " </li>\n";
2410  }
2411  else // server based search
2412  {
2413  writeServerSearchBox(t,relPath,highlightSearch);
2414  if (!highlightSearch)
2415  {
2416  t << " </li>\n";
2417  }
2418  }
2419  }
2420  if (!highlightSearch) // on the search page the index will be ended by the
2421  // page itself
2422  {
2424  }
2425  }
2426  else // normal case for other rows than first one
2427  {
2429  }
2430  }
2431  }
2432 }

引用了 LayoutNavEntry::children(), Config_getBool, endQuickIndexItem(), endQuickIndexList(), fixSpaces(), LayoutDocManager::instance(), LayoutNavEntry::parent(), quickLinkVisible(), LayoutDocManager::rootNavEntry(), startQuickIndexItem(), startQuickIndexList(), TRUE, writeClientSearchBox() , 以及 writeServerSearchBox().

被这些函数引用 writeDefaultQuickLinks().

◆ renderQuickLinksAsTree()

static void renderQuickLinksAsTree ( TextStream t,
const QCString relPath,
LayoutNavEntry root 
)
static

在文件 htmlgen.cpp2336 行定义.

2338 {
2339  int count=0;
2340  for (const auto &entry : root->children())
2341  {
2342  if (entry->visible() && quickLinkVisible(entry->kind())) count++;
2343  }
2344  if (count>0) // at least one item is visible
2345  {
2347  for (const auto &entry : root->children())
2348  {
2349  if (entry->visible() && quickLinkVisible(entry->kind()))
2350  {
2351  QCString url = entry->url();
2352  t << "<li><a href=\"" << relPath << url << "\"><span>";
2353  t << fixSpaces(entry->title());
2354  t << "</span></a>\n";
2355  // recursive into child list
2356  renderQuickLinksAsTree(t,relPath,entry.get());
2357  t << "</li>";
2358  }
2359  }
2361  }
2362 }

引用了 LayoutNavEntry::children(), endQuickIndexList(), FALSE, fixSpaces(), quickLinkVisible() , 以及 startQuickIndexList().

被这些函数引用 writeDefaultQuickLinks().

◆ startQuickIndexItem()

static void startQuickIndexItem ( TextStream t,
const QCString l,
bool  hl,
bool  ,
const QCString relPath 
)
static

在文件 htmlgen.cpp2274 行定义.

2277 {
2278  t << " <li";
2279  if (hl)
2280  {
2281  t << " class=\"current\"";
2282  }
2283  t << ">";
2284  if (!l.isEmpty()) t << "<a href=\"" << correctURL(l,relPath) << "\">";
2285  t << "<span>";
2286 }

引用了 correctURL() , 以及 QCString::isEmpty().

被这些函数引用 renderQuickLinksAsTabs().

◆ startQuickIndexList()

static void startQuickIndexList ( TextStream t,
bool  compact,
bool  topLevel = TRUE 
)
static

在文件 htmlgen.cpp2241 行定义.

2242 {
2243  if (compact)
2244  {
2245  if (topLevel)
2246  {
2247  t << " <div id=\"navrow1\" class=\"tabs\">\n";
2248  }
2249  else
2250  {
2251  t << " <div id=\"navrow2\" class=\"tabs2\">\n";
2252  }
2253  t << " <ul class=\"tablist\">\n";
2254  }
2255  else
2256  {
2257  t << "<ul>";
2258  }
2259 }

被这些函数引用 renderQuickLinksAsTabs() , 以及 renderQuickLinksAsTree().

◆ startSectionContent()

static void startSectionContent ( TextStream t,
int  sectionCount 
)
static

在文件 htmlgen.cpp1596 行定义.

1597 {
1598  //t << "<!-- startSectionContent -->";
1599  bool dynamicSections = Config_getBool(HTML_DYNAMIC_SECTIONS);
1600  if (dynamicSections)
1601  {
1602  t << "<div id=\"dynsection-" << sectionCount << "-content\" "
1603  "class=\"dyncontent\" "
1604  "style=\"display:none;\">\n";
1605  }
1606  else
1607  {
1608  t << "<div class=\"dyncontent\">\n";
1609  }
1610 }

引用了 Config_getBool.

被这些函数引用 HtmlGenerator::endCallGraph(), HtmlGenerator::endClassDiagram(), HtmlGenerator::endDirDepGraph(), HtmlGenerator::endDotGraph(), HtmlGenerator::endGroupCollaboration() , 以及 HtmlGenerator::endInclDepGraph().

◆ startSectionHeader()

static void startSectionHeader ( TextStream t,
const QCString relPath,
int  sectionCount 
)
static

在文件 htmlgen.cpp1548 行定义.

1550 {
1551  //t << "<!-- startSectionHeader -->";
1552  bool dynamicSections = Config_getBool(HTML_DYNAMIC_SECTIONS);
1553  if (dynamicSections)
1554  {
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=\"+\"/> ";
1561  }
1562  else
1563  {
1564  t << "<div class=\"dynheader\">\n";
1565  }
1566 }

引用了 Config_getBool.

被这些函数引用 HtmlGenerator::startCallGraph(), HtmlGenerator::startClassDiagram(), HtmlGenerator::startDirDepGraph(), HtmlGenerator::startDotGraph(), HtmlGenerator::startGroupCollaboration() , 以及 HtmlGenerator::startInclDepGraph().

◆ startSectionSummary()

static void startSectionSummary ( TextStream t,
int  sectionCount 
)
static

在文件 htmlgen.cpp1574 行定义.

1575 {
1576  //t << "<!-- startSectionSummary -->";
1577  bool dynamicSections = Config_getBool(HTML_DYNAMIC_SECTIONS);
1578  if (dynamicSections)
1579  {
1580  t << "<div id=\"dynsection-" << sectionCount << "-summary\" "
1581  "class=\"dynsummary\" "
1582  "style=\"display:block;\">\n";
1583  }
1584 }

引用了 Config_getBool.

被这些函数引用 HtmlGenerator::endCallGraph(), HtmlGenerator::endClassDiagram(), HtmlGenerator::endDirDepGraph(), HtmlGenerator::endDotGraph(), HtmlGenerator::endGroupCollaboration() , 以及 HtmlGenerator::endInclDepGraph().

◆ substituteHtmlKeywords()

static QCString substituteHtmlKeywords ( const QCString str,
const QCString title,
const QCString relPath,
const QCString navPath = QCString() 
)
static

在文件 htmlgen.cpp315 行定义.

319 {
320  // Build CSS/JavaScript tags depending on treeview, search engine settings
321  QCString cssFile;
322  QCString generatedBy;
323  QCString treeViewCssJs;
324  QCString searchCssJs;
325  QCString searchBox;
326  QCString mathJaxJs;
327  QCString extraCssText;
328 
329  QCString projectName = Config_getString(PROJECT_NAME);
330  bool timeStamp = Config_getBool(HTML_TIMESTAMP);
331  bool treeView = Config_getBool(GENERATE_TREEVIEW);
332  bool searchEngine = Config_getBool(SEARCHENGINE);
333  bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH);
334  bool mathJax = Config_getBool(USE_MATHJAX);
335  QCString mathJaxFormat = Config_getEnumAsString(MATHJAX_FORMAT);
336  bool disableIndex = Config_getBool(DISABLE_INDEX);
337  bool hasProjectName = !projectName.isEmpty();
338  bool hasProjectNumber = !Config_getString(PROJECT_NUMBER).isEmpty();
339  bool hasProjectBrief = !Config_getString(PROJECT_BRIEF).isEmpty();
340  bool hasProjectLogo = !Config_getString(PROJECT_LOGO).isEmpty();
341  bool hasFullSideBar = Config_getBool(FULL_SIDEBAR) && disableIndex && treeView;
342  static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
343 
344  cssFile = Config_getString(HTML_STYLESHEET);
345  if (cssFile.isEmpty())
346  {
347  cssFile = "doxygen.css";
348  }
349  else
350  {
351  FileInfo cssfi(cssFile.str());
352  if (cssfi.exists())
353  {
354  cssFile = cssfi.fileName();
355  }
356  else
357  {
358  cssFile = "doxygen.css";
359  }
360  }
361 
362  extraCssText = "";
363  const StringVector &extraCssFile = Config_getList(HTML_EXTRA_STYLESHEET);
364  for (const auto &fileName : extraCssFile)
365  {
366  if (!fileName.empty())
367  {
368  FileInfo fi(fileName);
369  if (fi.exists())
370  {
371  extraCssText += "<link href=\"$relpath^"+stripPath(fileName.c_str())+"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
372  }
373  }
374  }
375 
376  if (timeStamp)
377  {
379  convertToHtml(Config_getString(PROJECT_NAME)));
380  }
381  else
382  {
383  generatedBy = theTranslator->trGeneratedBy();
384  }
385 
386  if (treeView)
387  {
388  treeViewCssJs = "<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
389  // "<script type=\"text/javascript\">var page_layout=";
390  //treeViewCssJs += Config_getBool(DISABLE_INDEX) ? "1" : "0";
391  //treeViewCssJs += ";</script>\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";
395  }
396 
397  if (searchEngine)
398  {
399  searchCssJs = "<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
400  if (!serverBasedSearch)
401  {
402  searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/searchdata.js\"></script>\n";
403  }
404  searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
405 
406  if (!serverBasedSearch)
407  {
408  if (disableIndex || !Config_getBool(HTML_DYNAMIC_MENUS))
409  {
410  searchCssJs += "<script type=\"text/javascript\">\n"
411  "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */\n"
412  " $(document).ready(function() { init_search(); });\n"
413  "/* @license-end */\n"
414  "</script>";
415  }
416  }
417  else
418  {
419  if (disableIndex || !Config_getBool(HTML_DYNAMIC_MENUS))
420  {
421  searchCssJs += "<script type=\"text/javascript\">\n"
422  "/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */\n"
423  " $(document).ready(function() {\n"
424  " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
425  " });\n"
426  " /* @license-end */\n"
427  "</script>\n";
428  }
429 
430  // OPENSEARCH_PROVIDER {
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")) +
435  "\"/>";
436  // OPENSEARCH_PROVIDER }
437  }
438  searchBox = getSearchBox(serverBasedSearch, relPath, FALSE);
439  }
440 
441  if (mathJax)
442  {
443  auto mathJaxVersion = Config_getEnum(MATHJAX_VERSION);
444  QCString path = Config_getString(MATHJAX_RELPATH);
445  if (path.isEmpty() || path.left(2)=="..") // relative path
446  {
447  path.prepend(relPath);
448  }
449 
450  switch (mathJaxVersion)
451  {
452  case MATHJAX_VERSION_t::MathJax_3:
453  {
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"
457  " options: {\n"
458  " ignoreHtmlClass: 'tex2jax_ignore',\n"
459  " processHtmlClass: 'tex2jax_process'\n"
460  " }";
461  const StringVector &mathJaxExtensions = Config_getList(MATHJAX_EXTENSIONS);
462  if (!mathJaxExtensions.empty() || !g_latex_macro.isEmpty())
463  {
464  mathJaxJs+= ",\n"
465  " tex: {\n"
466  " macros: {";
467  if (!g_latex_macro.isEmpty())
468  {
469  mathJaxJs += g_latex_macro+" ";
470  }
471  mathJaxJs+="},\n"
472  " packages: ['base','configmacros'";
473  if (!g_latex_macro.isEmpty())
474  {
475  mathJaxJs+= ",'newcommand'";
476  }
477  for (const auto &s : mathJaxExtensions)
478  {
479  mathJaxJs+= ",'"+QCString(s.c_str())+"'";
480  }
481  mathJaxJs += "]\n"
482  " }\n";
483  }
484  else
485  {
486  mathJaxJs += "\n";
487  }
488  mathJaxJs += "};\n";
489  // MATHJAX_CODEFILE
490  if (!g_mathjax_code.isEmpty())
491  {
492  mathJaxJs += g_mathjax_code;
493  mathJaxJs += "\n";
494  }
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";
499  }
500  break;
501  case MATHJAX_VERSION_t::MathJax_2:
502  {
503  mathJaxJs = "<script type=\"text/x-mathjax-config\">\n"
504  "MathJax.Hub.Config({\n"
505  " extensions: [\"tex2jax.js\"";
506  const StringVector &mathJaxExtensions = Config_getList(MATHJAX_EXTENSIONS);
507  for (const auto &s : mathJaxExtensions)
508  {
509  mathJaxJs+= ", \""+QCString(s.c_str())+".js\"";
510  }
511  if (mathJaxFormat.isEmpty())
512  {
513  mathJaxFormat = "HTML-CSS";
514  }
515  mathJaxJs += "],\n"
516  " jax: [\"input/TeX\",\"output/"+mathJaxFormat+"\"],\n";
517  if (!g_latex_macro.isEmpty())
518  {
519  mathJaxJs += " TeX: { Macros: {\n";
520  mathJaxJs += g_latex_macro;
521  mathJaxJs += "\n"
522  " } }\n";
523  }
524  mathJaxJs += "});\n";
525  if (!g_mathjax_code.isEmpty())
526  {
527  mathJaxJs += g_mathjax_code;
528  mathJaxJs += "\n";
529  }
530  mathJaxJs += "</script>\n";
531  mathJaxJs += "<script type=\"text/javascript\" async=\"async\" src=\"" + path + "MathJax.js\"></script>\n";
532  }
533  break;
534  }
535  }
536 
537  // first substitute generic keywords
538  QCString result = substituteKeywords(str,title,
539  convertToHtml(Config_getString(PROJECT_NAME)),
540  convertToHtml(Config_getString(PROJECT_NUMBER)),
541  convertToHtml(Config_getString(PROJECT_BRIEF)));
542 
543  // additional HTML only keywords
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); //<-- obsolete: for backwards compatibility only
553  result = substitute(result,"$relpath^",relPath); //<-- must be last
554 
555  // additional HTML only conditional blocks
556  result = selectBlock(result,"FULL_SIDEBAR",hasFullSideBar,OutputGenerator::Html);
557  result = selectBlock(result,"DISABLE_INDEX",disableIndex,OutputGenerator::Html);
558  result = selectBlock(result,"GENERATE_TREEVIEW",treeView,OutputGenerator::Html);
559  result = selectBlock(result,"SEARCHENGINE",searchEngine,OutputGenerator::Html);
560  result = selectBlock(result,"TITLEAREA",titleArea,OutputGenerator::Html);
561  result = selectBlock(result,"PROJECT_NAME",hasProjectName,OutputGenerator::Html);
562  result = selectBlock(result,"PROJECT_NUMBER",hasProjectNumber,OutputGenerator::Html);
563  result = selectBlock(result,"PROJECT_BRIEF",hasProjectBrief,OutputGenerator::Html);
564  result = selectBlock(result,"PROJECT_LOGO",hasProjectLogo,OutputGenerator::Html);
565 
566  result = removeEmptyLines(result);
567 
568  return result;
569 }

引用了 Config_getBool, Config_getEnum, Config_getEnumAsString, Config_getList, Config_getString, convertToHtml(), dateToString(), FileInfo::exists(), FALSE, FileInfo::fileName(), g_latex_macro, g_mathjax_code, getSearchBox(), OutputGenerator::Html, QCString::isEmpty(), QCString::left(), QCString::lower(), QCString::prepend(), removeEmptyLines(), selectBlock(), QCString::str(), stripPath(), substitute(), substituteKeywords(), theTranslator, Translator::trGeneratedAt(), Translator::trGeneratedBy() , 以及 TRUE.

被这些函数引用 HtmlGenerator::startFile(), HtmlGenerator::writeExternalSearchPage(), HtmlGenerator::writePageFooter() , 以及 HtmlGenerator::writeSearchPage().

◆ writeClientSearchBox()

static void writeClientSearchBox ( TextStream t,
const QCString relPath 
)
static

在文件 htmlgen.cpp68 行定义.

69 {
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";
75  t << " alt=\"\"/>\n";
76  t << " <input type=\"text\" id=\"MSearchField\" value=\""
77  << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
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";
84  t << " </span>\n";
85  t << " </div>\n";
86 }

引用了 theTranslator , 以及 Translator::trSearch().

被这些函数引用 getSearchBox() , 以及 renderQuickLinksAsTabs().

◆ writeDefaultQuickLinks()

static void writeDefaultQuickLinks ( TextStream t,
bool  compact,
HighlightedItem  hli,
const QCString file,
const QCString relPath 
)
static

在文件 htmlgen.cpp2434 行定义.

2438 {
2439  bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH);
2440  bool searchEngine = Config_getBool(SEARCHENGINE);
2441  bool externalSearch = Config_getBool(EXTERNAL_SEARCH);
2444  LayoutNavEntry::Kind altKind = (LayoutNavEntry::Kind)-1; // fall back for the old layout file
2445  bool highlightParent=FALSE;
2446  switch (hli) // map HLI enums to LayoutNavEntry::Kind enums
2447  {
2448  case HLI_Main: kind = LayoutNavEntry::MainPage; break;
2449  case HLI_Modules: kind = LayoutNavEntry::Modules; break;
2450  //case HLI_Directories: kind = LayoutNavEntry::Dirs; break;
2455  case HLI_Classes: kind = LayoutNavEntry::ClassIndex; altKind = LayoutNavEntry::Classes; break;
2456  case HLI_Concepts: kind = LayoutNavEntry::Concepts; break;
2458  case HLI_Structs: kind = LayoutNavEntry::StructIndex; altKind = LayoutNavEntry::Structs; break;
2464  case HLI_Files: kind = LayoutNavEntry::FileList; altKind = LayoutNavEntry::Files; break;
2466  case HLI_Functions: kind = LayoutNavEntry::ClassMembers; break;
2467  case HLI_Globals: kind = LayoutNavEntry::FileGlobals; break;
2468  case HLI_Pages: kind = LayoutNavEntry::Pages; break;
2469  case HLI_Examples: kind = LayoutNavEntry::Examples; break;
2470  case HLI_UserGroup: kind = LayoutNavEntry::UserGroup; break;
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;
2485  case HLI_None: break;
2486  case HLI_Search: break;
2487  }
2488 
2489  if (compact && Config_getBool(HTML_DYNAMIC_MENUS))
2490  {
2491  QCString searchPage;
2492  if (externalSearch)
2493  {
2494  searchPage = "search" + Doxygen::htmlFileExtension;
2495  }
2496  else
2497  {
2498  searchPage = "search.php";
2499  }
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&amp;dn=expat.txt MIT */\n";
2504  t << "$(function() {\n";
2505  t << " initMenu('" << relPath << "',"
2506  << (searchEngine?"true":"false") << ","
2507  << (serverBasedSearch?"true":"false") << ",'"
2508  << searchPage << "','"
2509  << theTranslator->trSearch() << "');\n";
2510  if (Config_getBool(SEARCHENGINE))
2511  {
2512  if (!serverBasedSearch)
2513  {
2514  t << " $(document).ready(function() { init_search(); });\n";
2515  }
2516  else
2517  {
2518  t << " $(document).ready(function() {\n"
2519  << " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
2520  << " });\n";
2521  }
2522  }
2523  t << "});\n";
2524  t << "/* @license-end */\n";
2525  t << "</script>\n";
2526  t << "<div id=\"main-nav\"></div>\n";
2527  }
2528  else if (compact) // && !Config_getBool(HTML_DYNAMIC_MENUS)
2529  {
2530  // find highlighted index item
2531  LayoutNavEntry *hlEntry = root->find(kind,kind==LayoutNavEntry::UserGroup ? file : QCString());
2532  if (!hlEntry && altKind!=(LayoutNavEntry::Kind)-1) { hlEntry=root->find(altKind); kind=altKind; }
2533  if (!hlEntry) // highlighted item not found in the index! -> just show the level 1 index...
2534  {
2535  highlightParent=TRUE;
2536  hlEntry = root->children().front().get();
2537  if (hlEntry==0)
2538  {
2539  return; // argl, empty index!
2540  }
2541  }
2542  if (kind==LayoutNavEntry::UserGroup)
2543  {
2544  LayoutNavEntry *e = hlEntry->children().front().get();
2545  if (e)
2546  {
2547  hlEntry = e;
2548  }
2549  }
2550  renderQuickLinksAsTabs(t,relPath,hlEntry,kind,highlightParent,hli==HLI_Search);
2551  }
2552  else
2553  {
2554  renderQuickLinksAsTree(t,relPath,root);
2555  }
2556 }

引用了 LayoutNavEntry::children(), LayoutNavEntry::Classes, LayoutNavEntry::ClassHierarchy, LayoutNavEntry::ClassIndex, LayoutNavEntry::ClassList, LayoutNavEntry::ClassMembers, LayoutNavEntry::Concepts, Config_getBool, LayoutNavEntry::Examples, LayoutNavEntry::ExceptionHierarchy, LayoutNavEntry::ExceptionIndex, LayoutNavEntry::ExceptionList, LayoutNavEntry::Exceptions, FALSE, LayoutNavEntry::FileGlobals, LayoutNavEntry::FileList, LayoutNavEntry::Files, LayoutNavEntry::find(), HLI_AnnotatedClasses, HLI_AnnotatedExceptions, HLI_AnnotatedInterfaces, HLI_AnnotatedStructs, HLI_Classes, HLI_ClassHierarchy, HLI_ClassVisible, HLI_Concepts, HLI_ConceptVisible, HLI_Examples, HLI_ExceptionHierarchy, HLI_Exceptions, HLI_ExceptionVisible, HLI_Files, HLI_FileVisible, HLI_Functions, HLI_Globals, HLI_InterfaceHierarchy, HLI_Interfaces, HLI_InterfaceVisible, HLI_Main, HLI_Modules, HLI_NamespaceMembers, HLI_Namespaces, HLI_NamespaceVisible, HLI_None, HLI_Pages, HLI_Search, HLI_Structs, HLI_StructVisible, HLI_UserGroup, Doxygen::htmlFileExtension, LayoutDocManager::instance(), LayoutNavEntry::InterfaceHierarchy, LayoutNavEntry::InterfaceIndex, LayoutNavEntry::InterfaceList, LayoutNavEntry::Interfaces, LayoutNavEntry::MainPage, LayoutNavEntry::Modules, LayoutNavEntry::NamespaceList, LayoutNavEntry::NamespaceMembers, LayoutNavEntry::Namespaces, LayoutNavEntry::Pages, renderQuickLinksAsTabs(), renderQuickLinksAsTree(), LayoutDocManager::rootNavEntry(), LayoutNavEntry::StructIndex, LayoutNavEntry::StructList, LayoutNavEntry::Structs, theTranslator, Translator::trSearch(), TRUE , 以及 LayoutNavEntry::UserGroup.

被这些函数引用 HtmlGenerator::writeExternalSearchPage(), HtmlGenerator::writeQuickLinks() , 以及 HtmlGenerator::writeSearchPage().

◆ writeServerSearchBox()

static void writeServerSearchBox ( TextStream t,
const QCString relPath,
bool  highlightSearch 
)
static

在文件 htmlgen.cpp90 行定义.

91 {
92  bool externalSearch = Config_getBool(EXTERNAL_SEARCH);
93  t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
94  t << " <div class=\"left\">\n";
95  t << " <form id=\"FSearchBox\" action=\"" << relPath;
96  if (externalSearch)
97  {
98  t << "search" << Doxygen::htmlFileExtension;
99  }
100  else
101  {
102  t << "search.php";
103  }
104  t << "\" method=\"get\">\n";
105  t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag.svg\" alt=\"\"/>\n";
106  if (!highlightSearch)
107  {
108  t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
109  << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
110  t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
111  t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
112  t << " </form>\n";
113  t << " </div><div class=\"right\"></div>\n";
114  t << " </div>\n";
115  }
116 }

引用了 Config_getBool, Doxygen::htmlFileExtension, theTranslator , 以及 Translator::trSearch().

被这些函数引用 getSearchBox() , 以及 renderQuickLinksAsTabs().

变量说明

◆ g_footer

QCString g_footer
static

在文件 htmlgen.cpp61 行定义.

被这些函数引用 HtmlGenerator::init() , 以及 HtmlGenerator::writePageFooter().

◆ g_header

◆ g_indexLock

std::mutex g_indexLock
static

在文件 htmlgen.cpp1118 行定义.

被这些函数引用 HtmlGenerator::startFile().

◆ g_latex_macro

QCString g_latex_macro
static

在文件 htmlgen.cpp63 行定义.

被这些函数引用 HtmlGenerator::init() , 以及 substituteHtmlKeywords().

◆ g_mathjax_code

QCString g_mathjax_code
static

在文件 htmlgen.cpp62 行定义.

被这些函数引用 HtmlGenerator::init() , 以及 substituteHtmlKeywords().

◆ hex

const char* hex ="0123456789ABCDEF"
static

在文件 htmlgen.cpp64 行定义.

被这些函数引用 HtmlCodeGenerator::codify() , 以及 HtmlCodeGenerator::docify().

selectBlock
QCString selectBlock(const QCString &s, const QCString &name, bool enable, OutputGenerator::OutputType o)
Definition: util.cpp:7209
StringVector
std::vector< std::string > StringVector
Definition: containers.h:32
LayoutNavEntry::Interfaces
@ Interfaces
Definition: layout.h:142
LayoutNavEntry
Base class for the layout of a navigation item at the top of the HTML pages.
Definition: layout.h:125
HLI_Functions
@ HLI_Functions
Definition: index.h:161
HLI_Classes
@ HLI_Classes
Definition: index.h:150
Translator::trGeneratedBy
virtual QCString trGeneratedBy()=0
LayoutDocManager::rootNavEntry
LayoutNavEntry * rootNavEntry() const
returns the (invisible) root of the navigation tree.
Definition: layout.cpp:1585
Config_getEnum
#define Config_getEnum(name)
Definition: config.h:35
LayoutNavEntry::ExceptionList
@ ExceptionList
Definition: layout.h:150
writeServerSearchBox
static void writeServerSearchBox(TextStream &t, const QCString &relPath, bool highlightSearch)
Definition: htmlgen.cpp:90
hierarchyInterfaces
int hierarchyInterfaces
Definition: index.cpp:61
documentedClassMembers
int documentedClassMembers[CMHL_Total]
Definition: index.cpp:71
LayoutNavEntry::Kind
Kind
Definition: layout.h:128
HLI_Modules
@ HLI_Modules
Definition: index.h:144
HLI_AnnotatedStructs
@ HLI_AnnotatedStructs
Definition: index.h:157
QCString::length
uint length() const
Returns the length of the string, not counting the 0-terminator.
Definition: qcstring.h:147
HLI_InterfaceHierarchy
@ HLI_InterfaceHierarchy
Definition: index.h:148
annotatedInterfaces
int annotatedInterfaces
Definition: index.cpp:59
QCString::isEmpty
bool isEmpty() const
Returns TRUE iff the string is empty
Definition: qcstring.h:144
LayoutNavEntry::find
LayoutNavEntry * find(LayoutNavEntry::Kind k, const QCString &file=QCString()) const
Definition: layout.cpp:107
LayoutNavEntry::FileList
@ FileList
Definition: layout.h:154
HLI_InterfaceVisible
@ HLI_InterfaceVisible
Definition: index.h:170
LayoutNavEntry::User
@ User
Definition: layout.h:157
documentedFileMembers
int documentedFileMembers[FMHL_Total]
Definition: index.cpp:72
LinkedMap::empty
bool empty() const
Definition: linkedmap.h:222
LayoutNavEntry::StructList
@ StructList
Definition: layout.h:147
HLI_UserGroup
@ HLI_UserGroup
Definition: index.h:166
HLI_Globals
@ HLI_Globals
Definition: index.h:162
QCString::str
std::string str() const
Definition: qcstring.h:442
LayoutNavEntry::UserGroup
@ UserGroup
Definition: layout.h:158
annotatedExceptions
int annotatedExceptions
Definition: index.cpp:64
HLI_Examples
@ HLI_Examples
Definition: index.h:164
correctURL
QCString correctURL(const QCString &url, const QCString &relPath)
Corrects URL url according to the relative path relPath.
Definition: util.cpp:6573
TextStream
Text streaming class that buffers data.
Definition: textstream.h:33
LayoutNavEntry::Exceptions
@ Exceptions
Definition: layout.h:149
FMHL_All
@ FMHL_All
Definition: index.h:193
qstrncmp
int qstrncmp(const char *str1, const char *str2, size_t len)
Definition: qcstring.h:91
warn
void warn(const QCString &file, int line, const char *fmt,...)
Definition: message.cpp:151
HLI_AnnotatedExceptions
@ HLI_AnnotatedExceptions
Definition: index.h:158
HLI_AnnotatedClasses
@ HLI_AnnotatedClasses
Definition: index.h:155
HLI_ClassHierarchy
@ HLI_ClassHierarchy
Definition: index.h:147
LayoutNavEntry::StructIndex
@ StructIndex
Definition: layout.h:148
GrowBuf
Class representing a string buffer optimised for growing.
Definition: growbuf.h:12
renderQuickLinksAsTree
static void renderQuickLinksAsTree(TextStream &t, const QCString &relPath, LayoutNavEntry *root)
Definition: htmlgen.cpp:2336
HLI_Files
@ HLI_Files
Definition: index.h:159
LayoutNavEntry::None
@ None
Definition: layout.h:129
LayoutNavEntry::ExceptionHierarchy
@ ExceptionHierarchy
Definition: layout.h:152
HLI_Concepts
@ HLI_Concepts
Definition: index.h:151
Translator::trGeneratedAt
virtual QCString trGeneratedAt(const QCString &date, const QCString &projName)=0
uint
unsigned uint
Definition: qcstring.h:40
LayoutNavEntry::NamespaceMembers
@ NamespaceMembers
Definition: layout.h:135
LayoutNavEntry::Files
@ Files
Definition: layout.h:153
HLI_Search
@ HLI_Search
Definition: index.h:165
dateToString
QCString dateToString(bool includeTime)
Definition: util.cpp:1470
removeEmptyLines
QCString removeEmptyLines(const QCString &s)
Definition: util.cpp:7251
startQuickIndexList
static void startQuickIndexList(TextStream &t, bool compact, bool topLevel=TRUE)
Definition: htmlgen.cpp:2241
QCString::left
QCString left(size_t len) const
Definition: qcstring.h:212
LayoutNavEntry::Modules
@ Modules
Definition: layout.h:132
writeClientSearchBox
static void writeClientSearchBox(TextStream &t, const QCString &relPath)
Definition: htmlgen.cpp:68
startQuickIndexItem
static void startQuickIndexItem(TextStream &t, const QCString &l, bool hl, bool, const QCString &relPath)
Definition: htmlgen.cpp:2274
hierarchyClasses
int hierarchyClasses
Definition: index.cpp:58
HLI_Namespaces
@ HLI_Namespaces
Definition: index.h:146
endQuickIndexList
static void endQuickIndexList(TextStream &t, bool compact)
Definition: htmlgen.cpp:2261
theTranslator
Translator * theTranslator
Definition: language.cpp:156
Config_getEnumAsString
#define Config_getEnumAsString(name)
Definition: config.h:36
LayoutNavEntry::Pages
@ Pages
Definition: layout.h:131
HLI_ConceptVisible
@ HLI_ConceptVisible
Definition: index.h:169
documentedConcepts
int documentedConcepts
Definition: index.cpp:69
QCString::lower
QCString lower() const
Definition: qcstring.h:232
stripPath
QCString stripPath(const QCString &s)
Definition: util.cpp:5318
LayoutNavEntry::Examples
@ Examples
Definition: layout.h:156
LayoutNavEntry::FileGlobals
@ FileGlobals
Definition: layout.h:155
fileToString
QCString fileToString(const QCString &name, bool filter, bool isSourceCode)
Definition: util.cpp:1394
TRUE
#define TRUE
Definition: qcstring.h:36
quickLinkVisible
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
Definition: htmlgen.cpp:2295
LayoutNavEntry::InterfaceList
@ InterfaceList
Definition: layout.h:143
HLI_AnnotatedInterfaces
@ HLI_AnnotatedInterfaces
Definition: index.h:156
HLI_ExceptionVisible
@ HLI_ExceptionVisible
Definition: index.h:172
HLI_Exceptions
@ HLI_Exceptions
Definition: index.h:154
OutputGenerator::Html
@ Html
Definition: outputgen.h:333
TextStream::str
std::string str() const
Return the contents of the buffer as a std::string object
Definition: textstream.h:208
Translator::trSearch
virtual QCString trSearch()=0
indexedPages
int indexedPages
Definition: index.cpp:70
renderQuickLinksAsTabs
static void renderQuickLinksAsTabs(TextStream &t, const QCString &relPath, LayoutNavEntry *hlEntry, LayoutNavEntry::Kind kind, bool highlightParent, bool highlightSearch)
Definition: htmlgen.cpp:2365
g_mathjax_code
static QCString g_mathjax_code
Definition: htmlgen.cpp:62
documentedNamespaces
int documentedNamespaces
Definition: index.cpp:68
LayoutNavEntry::Structs
@ Structs
Definition: layout.h:146
documentedFiles
int documentedFiles
Definition: index.cpp:74
HLI_FileVisible
@ HLI_FileVisible
Definition: index.h:174
HLI_NamespaceVisible
@ HLI_NamespaceVisible
Definition: index.h:173
getSearchBox
static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSearch)
Definition: htmlgen.cpp:301
fixSpaces
QCString fixSpaces(const QCString &s)
Definition: index.cpp:214
documentedGroups
int documentedGroups
Definition: index.cpp:67
substitute
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition: qcstring.cpp:465
NMHL_All
@ NMHL_All
Definition: index.h:207
LayoutNavEntry::ClassIndex
@ ClassIndex
Definition: layout.h:139
LayoutNavEntry::Concepts
@ Concepts
Definition: layout.h:136
g_latex_macro
static QCString g_latex_macro
Definition: htmlgen.cpp:63
endQuickIndexItem
static void endQuickIndexItem(TextStream &t, const QCString &l)
Definition: htmlgen.cpp:2288
substituteKeywords
QCString substituteKeywords(const QCString &s, const QCString &title, const QCString &projName, const QCString &projNum, const QCString &projBrief)
Definition: util.cpp:3335
Config_getBool
#define Config_getBool(name)
Definition: config.h:33
Doxygen::htmlFileExtension
static QCString htmlFileExtension
Definition: doxygen.h:103
LayoutDocManager::instance
static LayoutDocManager & instance()
Returns a reference to this singleton.
Definition: layout.cpp:1574
FileInfo
Minimal replacement for QFileInfo.
Definition: fileinfo.h:22
FileInfo::absFilePath
std::string absFilePath() const
Definition: fileinfo.cpp:101
LayoutNavEntry::ClassList
@ ClassList
Definition: layout.h:138
LayoutNavEntry::Classes
@ Classes
Definition: layout.h:137
Config_getString
#define Config_getString(name)
Definition: config.h:32
documentedNamespaceMembers
int documentedNamespaceMembers[NMHL_Total]
Definition: index.cpp:73
annotatedStructs
int annotatedStructs
Definition: index.cpp:62
LayoutNavEntry::NamespaceList
@ NamespaceList
Definition: layout.h:134
LayoutNavEntry::Namespaces
@ Namespaces
Definition: layout.h:133
HLI_ClassVisible
@ HLI_ClassVisible
Definition: index.h:168
QCString::data
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string
Definition: qcstring.h:153
HLI_Main
@ HLI_Main
Definition: index.h:143
HLI_NamespaceMembers
@ HLI_NamespaceMembers
Definition: index.h:160
HLI_Structs
@ HLI_Structs
Definition: index.h:153
HLI_Interfaces
@ HLI_Interfaces
Definition: index.h:152
hierarchyExceptions
int hierarchyExceptions
Definition: index.cpp:66
LayoutNavEntry::ClassHierarchy
@ ClassHierarchy
Definition: layout.h:140
HLI_ExceptionHierarchy
@ HLI_ExceptionHierarchy
Definition: index.h:149
LayoutNavEntry::InterfaceIndex
@ InterfaceIndex
Definition: layout.h:144
LayoutNavEntry::ClassMembers
@ ClassMembers
Definition: layout.h:141
LayoutNavEntry::children
const LayoutNavEntryList & children() const
Definition: layout.h:179
HLI_None
@ HLI_None
Definition: index.h:142
LayoutNavEntry::ExceptionIndex
@ ExceptionIndex
Definition: layout.h:151
LayoutNavEntry::MainPage
@ MainPage
Definition: layout.h:130
LayoutNavEntry::InterfaceHierarchy
@ InterfaceHierarchy
Definition: layout.h:145
HLI_StructVisible
@ HLI_StructVisible
Definition: index.h:171
HLI_Pages
@ HLI_Pages
Definition: index.h:163
QCString::prepend
QCString & prepend(const char *s)
Definition: qcstring.h:339
convertToHtml
QCString convertToHtml(const QCString &s, bool keepEntities)
Definition: util.cpp:4063
CMHL_All
@ CMHL_All
Definition: index.h:179
LayoutNavEntry::parent
LayoutNavEntry * parent() const
Definition: layout.h:169
Config_getList
#define Config_getList(name)
Definition: config.h:37
FALSE
#define FALSE
Definition: qcstring.h:33
Doxygen::exampleLinkedMap
static PageLinkedMap * exampleLinkedMap
Definition: doxygen.h:81
annotatedClasses
int annotatedClasses
Definition: index.cpp:56
QCString
This is an alternative implementation of QCString.
Definition: qcstring.h:108