52   TDocOutput(html), fHierarchyLines(0), fCurrentClass(cl),
 
   53   fCurrentClassesTypedefs(typedefs), fParser(0)
 
   91   if (!classFile.good()) {
 
  124   classFile << std::endl << 
"<div id=\"functions\">" << std::endl;
 
  127   classFile << 
"<h2><a id=\"" << mangled
 
  128      << 
":Function_Members\"></a>Function Members (Methods)</h2>" << std::endl;
 
  130   const char* tab4nbsp=
"    ";
 
  134      classFile << 
" <br /><b>" 
  135                << tab4nbsp << 
"This is an abstract class, constructors will not be documented.<br />" << std::endl
 
  136                << tab4nbsp << 
"Look at the <a href=\"" 
  138                << 
"\">header</a> to check for available constructors.</b><br />" << std::endl;
 
  149      classFile << 
"<div class=\"access\" ";
 
  150      const char* accessID [] = {
"priv", 
"prot", 
"publ"};
 
  151      const char* accesstxt[] = {
"private", 
"protected", 
"public"};
 
  153      classFile << 
"id=\"func" << accessID[access] << 
"\"><b>" 
  154         << accesstxt[access] << 
":</b>" << std::endl
 
  155         << 
"<table class=\"func\" id=\"tabfunc" << accessID[access] << 
"\" cellspacing=\"0\">" << std::endl;
 
  157      TIter iMethWrap(methods);
 
  167         classFile << 
"<tr class=\"func";
 
  170         classFile << 
"\"><td class=\"funcret\">";
 
  173               classFile << 
"virtual ";
 
  175               classFile << 
" virtual";
 
  179            classFile << 
"static ";
 
  181         if (!isctor && !isdtor)
 
  186         classFile << 
"</td><td class=\"funcname\"><a class=\"funcname\" href=\"";
 
  190            classFile << htmlFile;
 
  192         classFile << 
"#" << mangledM;
 
  199            mangledM += overloadIdx;
 
  201         classFile << mangledM << 
"\">";
 
  203            classFile << 
"<span class=\"baseclass\">";
 
  205            classFile << 
"::</span>";
 
  211         bool propSignal = 
false;
 
  212         bool propMenu   = 
false;
 
  213         bool propToggle = 
false;
 
  214         bool propGetter = 
false;
 
  216            propSignal = (strstr(method->
GetTitle(), 
"*SIGNAL*"));
 
  217            propMenu   = (strstr(method->
GetTitle(), 
"*MENU*"));
 
  218            propToggle = (strstr(method->
GetTitle(), 
"*TOGGLE*"));
 
  219            propGetter = (strstr(method->
GetTitle(), 
"*GETTER"));
 
  220            if (propSignal || propMenu || propToggle || propGetter) {
 
  221               classFile << 
"<span class=\"funcprop\">";
 
  222               if (propSignal) classFile << 
"<abbr title=\"emits a signal\">SIGNAL</abbr> ";
 
  223               if (propMenu) classFile << 
"<abbr title=\"has a popup menu entry\">MENU</abbr> ";
 
  224               if (propToggle) classFile << 
"<abbr title=\"toggles a state\">TOGGLE</abbr> ";
 
  228                  getter.
Remove(0, posGetter + 8);
 
  229                  classFile << 
"<abbr title=\"use " + getter + 
"() as getter\">GETTER</abbr> ";
 
  231               classFile << 
"</span>";
 
  234         classFile << 
"</td></tr>" << std::endl;
 
  236      classFile << std::endl << 
"</table></div>" << std::endl;
 
  239   classFile << 
"</div>" << std::endl; 
 
  255   if (!haveDataMembers) 
return;
 
  257   classFile << std::endl << 
"<div id=\"datamembers\">" << std::endl;
 
  260   classFile << 
"<h2><a name=\"" << mangled
 
  261      << 
":Data_Members\"></a>Data Members</h2>" << std::endl;
 
  264      const TList* datamembers = 0;
 
  270      classFile << 
"<div class=\"access\" ";
 
  271      const char* 
what = 
"data";
 
  272      if (access > 2) 
what = 
"enum";
 
  273      const char* accessID [] = {
"priv", 
"prot", 
"publ"};
 
  274      const char* accesstxt[] = {
"private", 
"protected", 
"public"};
 
  276      classFile << 
"id=\"" << 
what << accessID[access%3] << 
"\"><b>" 
  277         << accesstxt[access%3] << 
":</b>" << std::endl
 
  278         << 
"<table class=\"data\" id=\"tab" << 
what << accessID[access%3] << 
"\" cellspacing=\"0\">" << std::endl;
 
  280      TIter iDM(datamembers);
 
  288            if (prevEnumName.
Length()) {
 
  289               classFile << 
"<tr class=\"data";
 
  292               classFile << 
"\"><td class=\"datatype\">};</td><td></td><td></td></tr>" << std::endl;
 
  297         classFile << 
"<tr class=\"data";
 
  301         classFile << 
"\"><td class=\"datatype\">";
 
  308               enumName += 
"<i>[unnamed]</i>";
 
  309            Ssiz_t startClassName = 0;
 
  311               classFile << 
"enum ";
 
  316            if (endClassName != 
kNPOS && endClassName > 0 && enumName[endClassName - 1] == 
':') {
 
  318               TSubString substr(enumName(startClassName, endClassName - startClassName + 1));
 
  322               enumName.
Insert(substr.
Start(), 
"<span class=\"baseclass\">");
 
  324            classFile << enumName << 
" { ";
 
  328                  classFile << 
"static ";
 
  335         classFile << 
"</td><td class=\"dataname\"><a ";
 
  337            classFile << 
"href=\"";
 
  340            classFile << htmlFile << 
"#";
 
  342            classFile << 
"name=\"";
 
  343         classFile << mangledM;
 
  347         classFile << mangledM << 
"\">";
 
  351            classFile << 
"<span class=\"baseclass\">";
 
  353            classFile << 
"::</span>";
 
  362               classFile << 
"[" << member->
GetMaxIndex(indx) << 
"]";
 
  366         classFile << 
"</td>";
 
  368            classFile << 
"<td class=\"datadesc\">";
 
  370         } 
else classFile << 
"<td>";
 
  371         classFile << 
"</td></tr>" << std::endl;
 
  374      if (prevEnumName.
Length()) {
 
  375         classFile << 
"<tr class=\"data";
 
  378         classFile << 
"\"><td class=\"datatype\">};</td><td></td><td></td></tr>" << std::endl;
 
  380      classFile << std::endl << 
"</table></div>" << std::endl;
 
  383   classFile << 
"</div>" << std::endl; 
 
  420   filenameInh += 
"_Inh";
 
  427   filenameInhMem += 
"_InhMem";
 
  429      RunDot(filenameInhMem, &out);
 
  434   filenameIncl += 
"_Incl";
 
  436      RunDot(filenameIncl, &out);
 
  441   filenameLib += 
"_Lib";
 
  443      RunDot(filenameLib, &out);
 
  445   out << 
"<div class=\"tabs\">" << std::endl
 
  446       << 
"<a id=\"img" << title << 
"_Inh\" class=\"tabsel\" href=\"inh/" << title << 
"_Inh.png\" onclick=\"javascript:return SetImg('Charts','inh/" << title << 
"_Inh.png');\">Inheritance</a>" << std::endl
 
  447       << 
"<a id=\"img" << title << 
"_InhMem\" class=\"tab\" href=\"inhmem/" << title << 
"_InhMem.png\" onclick=\"javascript:return SetImg('Charts','inhmem/" << title << 
"_InhMem.png');\">Inherited Members</a>" << std::endl
 
  448       << 
"<a id=\"img" << title << 
"_Incl\" class=\"tab\" href=\"incl/" << title << 
"_Incl.png\" onclick=\"javascript:return SetImg('Charts','incl/" << title << 
"_Incl.png');\">Includes</a>" << std::endl
 
  449       << 
"<a id=\"img" << title << 
"_Lib\" class=\"tab\" href=\"lib/" << title << 
"_Lib.png\" onclick=\"javascript:return SetImg('Charts','lib/" << title << 
"_Lib.png');\">Libraries</a><br/>" << std::endl
 
  450       << 
"</div><div class=\"classcharts\"><div class=\"classchartswidth\"></div>" << std::endl
 
  451       << 
"<img id=\"Charts\" alt=\"Class Charts\" class=\"classcharts\" usemap=\"#Map" << title << 
"_Inh\" src=\"inh/" << title << 
"_Inh.png\"/></div>" << std::endl;
 
  470      out << 
"<!--INHERITANCE TREE-->" << std::endl;
 
  473      out << 
"<table><tr><td width=\"10%\"></td><td width=\"70%\">" 
  474          << 
"<a href=\"ClassHierarchy.html\">Inheritance Chart</a>:</td></tr>";
 
  475      out << 
"<tr class=\"inhtree\"><td width=\"10%\"></td><td width=\"70%\">";
 
  477      out << 
"<table class=\"inhtree\"><tr><td>" << std::endl;
 
  478      out << 
"<table width=\"100%\" border=\"0\" ";
 
  479      out << 
"cellpadding =\"0\" cellspacing=\"2\"><tr>" << std::endl;
 
  481      out << 
"<table><tr>";
 
  492      UInt_t bgcolor=255-depth*8;
 
  494      while ((inheritFrom = (
TBaseClass *) nextBase())) {
 
  497            out << 
"<td><table><tr>" << std::endl;
 
  500            out << 
"</tr><tr>" << std::endl;
 
  501         out << 
"<td bgcolor=\"" 
  502            << 
Form(
"#%02x%02x%02x", bgcolor, bgcolor, bgcolor)
 
  503            << 
"\" align=\"right\">" << std::endl;
 
  510                << (
const char *) inheritFrom->
GetName()
 
  512         out << 
"</td>"<< std::endl;
 
  515         out << 
"</tr></table></td>" << std::endl; 
 
  516         out << 
"<td>←</td>";
 
  520   out << 
"<td>" << std::endl; 
 
  524   const char *className = classPtr->
GetName();
 
  532         out << 
"<center><tt><a name=\"" << anchor;
 
  533         out << 
"\" href=\"" << htmlFile << 
"\">";
 
  535         out << 
"</a></tt></center>" << std::endl;
 
  542         out << 
"<center><big><b><tt><a name=\"" << anchor;
 
  543         out << 
"\" href=\"" << htmlFile << 
"\">";
 
  545         out << 
"</a></tt></b></big></center>" << std::endl;
 
  550   out << 
"</td>" << std::endl; 
 
  560      out << 
"<td><table><tr>" << std::endl;
 
  564      out << 
"</tr></table>";
 
  566         out << 
"</td><td align=\"left\"> <a href=\"ClassHierarchy.html\">[more...]</a>";
 
  567      out<<
"</td>" << std::endl;
 
  572   out << 
"</tr></table>" << std::endl;
 
  574      out << 
"</td></tr></table></td></tr></table>"<<std::endl;
 
  620   outdot << 
"strict digraph G {" << std::endl
 
  621      << 
"rankdir=RL;" << std::endl
 
  622      << 
"ranksep=2;" << std::endl
 
  623      << 
"nodesep=0;" << std::endl
 
  624      << 
"size=\"8,10\";" << std::endl
 
  625      << 
"ratio=auto;" << std::endl
 
  626      << 
"margin=0;" << std::endl
 
  627      << 
"node [shape=plaintext,fontsize=40,width=4,height=0.75];" << std::endl
 
  630   std::stringstream ssDep;
 
  631   std::list<TClass*> writeBasesFor;
 
  636      outdot << 
"{" << std::endl;
 
  637      while (!writeBasesFor.empty()) {
 
  638         TClass* cl = writeBasesFor.front();
 
  639         writeBasesFor.pop_front();
 
  641            outdot << 
"  \"" << cl->
GetName() << 
"\"";
 
  644               outdot << 
" [URL=\"" << htmlFileName << 
"\"]";
 
  645            outdot << 
";" << std::endl;
 
  648            ssDep << 
"  \"" << cl->
GetName() << 
"\" -> {";
 
  652               ssDep << 
" \"" << base->
GetName() << 
"\";";
 
  655            ssDep << 
"}" << std::endl;
 
  658      outdot << 
"}" << std::endl; 
 
  661   std::map<TClass*, Int_t> derivesFromMe;
 
  662   std::map<TClass*, unsigned int> entriesPerDerived;
 
  663   std::set<TClass*> wroteNode;
 
  665   static const unsigned int maxClassesPerDerived = 20;
 
  667   outdot << 
"{" << std::endl;
 
  670      for (std::map<TClass*, Int_t>::iterator iDerived = derivesFromMe.begin();
 
  671         iDerived != derivesFromMe.end(); ++iDerived) {
 
  672         if (iDerived->second != level) 
continue;
 
  674         TIter iBaseOfDerived(iDerived->first->GetListOfBases());
 
  677         TClass* writeAndMoreFor = 0;
 
  678         while ((baseDerived = (
TBaseClass*) iBaseOfDerived())) {
 
  681               && wroteNode.find(clBaseDerived) != wroteNode.end()) {
 
  682               unsigned int& count = entriesPerDerived[clBaseDerived];
 
  683               if (count < maxClassesPerDerived) {
 
  685                  ssDep << 
"\"" << iDerived->first->GetName() << 
"\" -> \"" 
  686                     << clBaseDerived->
GetName() << 
"\";" << std::endl;
 
  688               } 
else if (count == maxClassesPerDerived) {
 
  689                  writeAndMoreFor = clBaseDerived;
 
  690                  ssDep << 
"\"...andmore" << clBaseDerived->
GetName() << 
"\"-> \"" 
  691                     << clBaseDerived->
GetName() << 
"\";" << std::endl;
 
  698            wroteNode.insert(iDerived->first);
 
  699            outdot << 
"  \"" << iDerived->first->GetName() << 
"\"";
 
  702               outdot << 
" [URL=\"" << htmlFileName << 
"\"]";
 
  703            outdot << 
";" << std::endl;
 
  704         } 
else if (writeAndMoreFor) {
 
  705               outdot << 
"  \"...andmore" << writeAndMoreFor->
GetName()
 
  706                      << 
"\" [label=\"...and more\",fontname=\"Times-Italic\",fillcolor=lightgrey,style=filled];" << std::endl;
 
  709      if (!levelExists) 
break;
 
  711   outdot << 
"}" << std::endl; 
 
  713   outdot << ssDep.str();
 
  715   outdot << 
"}" << std::endl; 
 
  727   outdot << 
"strict digraph G {" << std::endl
 
  728      << 
"ratio=auto;" << std::endl
 
  729      << 
"rankdir=RL;" << std::endl
 
  730      << 
"compound=true;" << std::endl
 
  731      << 
"constraint=false;" << std::endl
 
  732      << 
"ranksep=0.1;" << std::endl
 
  733      << 
"nodesep=0;" << std::endl
 
  734      << 
"margin=0;" << std::endl;
 
  735   outdot << 
"  node [style=filled,width=0.7,height=0.15,fixedsize=true,shape=plaintext,fontsize=10];" << std::endl;
 
  737   std::stringstream ssDep;
 
  738   const int numColumns = 3;
 
  740   std::list<TClass*> writeBasesFor;
 
  742   while (!writeBasesFor.empty()) {
 
  743      TClass* cl = writeBasesFor.front();
 
  744      writeBasesFor.pop_front();
 
  748      outdot << 
"subgraph \"cluster" << cl->
GetName() << 
"\" {" << std::endl
 
  749             << 
"  color=lightgray;" << std::endl
 
  750             << 
"  label=\"" << cl->
GetName() << 
"\";" << std::endl;
 
  752         outdot << 
"  URL=\"" << htmlFileName << 
"\"" << std::endl;
 
  761         std::map<std::string, TDataMember*> dmMap;
 
  770         outdot << 
"subgraph \"clusterData0" << cl->
GetName() << 
"\" {" << std::endl
 
  771                << 
"  color=white;" << std::endl
 
  772                << 
"  label=\"\";" << std::endl
 
  773                << 
"  \"clusterNode0" << cl->
GetName() << 
"\" [height=0,width=0,style=invis];" << std::endl;
 
  775         Int_t pos = dmMap.size();
 
  777         Int_t newColumnEvery = (pos + numColumns - 1) / numColumns;
 
  778         for (std::map<std::string, TDataMember*>::iterator iDM = dmMap.begin();
 
  779              iDM != dmMap.end(); ++iDM, --pos) {
 
  784            if (iDM == dmMap.begin())
 
  785               prevColumnNode = nodeName;
 
  787            outdot << 
"\"" << nodeName << 
"\" [label=\"" 
  790               outdot << 
",color=\"#FFCCCC\"";
 
  792               outdot << 
",color=\"#FFFF77\"";
 
  794               outdot << 
",color=\"#CCFFCC\"";
 
  795            outdot << 
"];" << std::endl;
 
  796            if (pos % newColumnEvery == 1) {
 
  798               outdot << 
"};" << std::endl 
 
  799                      << 
"subgraph \"clusterData" << column << cl->
GetName() << 
"\" {" << std::endl
 
  800                      << 
"  color=white;" << std::endl
 
  801                      << 
"  label=\"\";" << std::endl
 
  802                      << 
"  \"clusterNode" << column << cl->
GetName() << 
"\" [height=0,width=0,style=invis];" << std::endl;
 
  803            } 
else if (iDM != dmMap.begin() && pos % newColumnEvery == 0) {
 
  804               ssDep << 
"\"" << prevColumnNode
 
  805                     << 
"\" -> \"" << nodeName << 
"\""<< 
" [style=invis,weight=100];" << std::endl;
 
  806               prevColumnNode = nodeName;
 
  810         while (column < numColumns - 1) {
 
  812            outdot << 
"  \"clusterNode" << column << cl->
GetName() << 
"\" [height=0,width=0,style=invis];" << std::endl;
 
  815         outdot << 
"};" << std::endl; 
 
  821         std::map<std::string, TMethod*> methMap;
 
  826            while ((meth = (
TMethod*) iMeth()))
 
  827               methMap[meth->
GetName()] = meth;
 
  830         outdot << 
"subgraph \"clusterFunc0" << cl->
GetName() << 
"\" {" << std::endl
 
  831                << 
"  color=white;" << std::endl
 
  832                << 
"  label=\"\";" << std::endl
 
  833                << 
"  \"clusterNode0" << cl->
GetName() << 
"\" [height=0,width=0,style=invis];" << std::endl;
 
  836         Int_t pos = methMap.size();
 
  838         Int_t newColumnEvery = (pos + numColumns - 1) / numColumns;
 
  839         for (std::map<std::string, TMethod*>::iterator iMeth = methMap.begin();
 
  840            iMeth != methMap.end(); ++iMeth, --pos) {
 
  845            if (iMeth == methMap.begin())
 
  846               prevColumnNodeFunc = nodeName;
 
  848            outdot << 
"\"" << nodeName << 
"\" [label=\"" << meth->
GetName() << 
"\"";
 
  851               outdot << 
",color=\"#777777\"";
 
  853               outdot << 
",color=\"#FFCCCC\"";
 
  855               outdot << 
",color=\"#FFFF77\"";
 
  857               outdot << 
",color=\"#CCFFCC\"";
 
  858            outdot << 
"];" << std::endl;
 
  859            if (pos % newColumnEvery == 1) {
 
  861               outdot << 
"};" << std::endl 
 
  862                      << 
"subgraph \"clusterFunc" << column << cl->
GetName() << 
"\" {" << std::endl
 
  863                      << 
"  color=white;" << std::endl
 
  864                      << 
"  label=\"\";" << std::endl;
 
  865            } 
else if (iMeth != methMap.begin() && pos % newColumnEvery == 0) {
 
  866               ssDep << 
"\"" << prevColumnNodeFunc
 
  867                     << 
"\" -> \"" << nodeName << 
"\""<< 
" [style=invis,weight=100];" << std::endl;
 
  868               prevColumnNodeFunc = nodeName;
 
  871         outdot << 
"};" << std::endl; 
 
  874      outdot << 
"}" << std::endl; 
 
  876      for (
Int_t pos = 0; pos < numColumns - 1; ++pos)
 
  877         ssDep << 
"\"clusterNode" << pos << cl->
GetName() << 
"\" -> \"clusterNode" << pos + 1 << cl->
GetName() << 
"\" [style=invis];" << std::endl;
 
  883            ssDep << 
"  \"clusterNode" << numColumns - 1 << cl->
GetName() << 
"\" -> " 
  884                  << 
" \"clusterNode0" << base->
GetName() << 
"\" [ltail=\"cluster" << cl->
GetName()
 
  885                  << 
"\",lhead=\"cluster" << base->
GetName() << 
"\"";
 
  887               ssDep << 
",weight=0";
 
  888            ssDep << 
"];" << std::endl;
 
  894   outdot << ssDep.str();
 
  896   outdot << 
"}" << std::endl; 
 
  910   std::map<std::string, std::string> filesToParse;
 
  911   std::list<std::string> listFilesToParse;
 
  918         filesToParse[declFileName.
Data()] = real.
Data();
 
  919         listFilesToParse.push_back(declFileName.
Data());
 
  934   outdot << 
"strict digraph G {" << std::endl
 
  935      << 
"ratio=compress;" << std::endl
 
  936      << 
"rankdir=TB;" << std::endl
 
  937      << 
"concentrate=true;" << std::endl
 
  938      << 
"ranksep=0;" << std::endl
 
  939      << 
"nodesep=0;" << std::endl
 
  940      << 
"size=\"8,10\";" << std::endl
 
  941      << 
"node [fontsize=20,shape=plaintext];" << std::endl;
 
  943   for (std::list<std::string>::iterator iFile = listFilesToParse.begin();
 
  944      iFile != listFilesToParse.end(); ++iFile) {
 
  945      std::ifstream in(filesToParse[*iFile].c_str());
 
  947      while (in && !in.eof()) {
 
  948         std::getline(in, 
line);
 
  950         while (
line[pos] == 
' ' || 
line[pos] == 
'\t') ++pos;
 
  951         if (
line[pos] != 
'#') 
continue;
 
  953         while (
line[pos] == 
' ' || 
line[pos] == 
'\t') ++pos;
 
  954         if (
line.compare(pos, 8, 
"include ") != 0) 
continue;
 
  956         while (
line[pos] == 
' ' || 
line[pos] == 
'\t') ++pos;
 
  957         if (
line[pos] != 
'"' && 
line[pos] != 
'<')
 
  959         char delim = 
line[pos];
 
  960         if (delim == 
'<') delim = 
'>';
 
  963         pos = 
line.find(delim);
 
  964         if (pos == std::string::npos) 
continue;
 
  966         if (filesToParse.find(
line) == filesToParse.end()) {
 
  968            if (!
GetHtml()->GetPathDefinition().GetFileNameFromInclude(
line.c_str(), sysfilename))
 
  970            listFilesToParse.push_back(
line);
 
  971            filesToParse[
line] = sysfilename;
 
  972            if (*iFile == implFileName.
Data() || *iFile == declFileName.
Data())
 
  973               outdot << 
"\"" << *iFile << 
"\" [style=filled,fillcolor=lightgray];" << std::endl;
 
  975         outdot << 
"\"" << *iFile << 
"\" -> \"" << 
line << 
"\";" << std::endl;
 
  979   outdot << 
"}" << std::endl; 
 
  992   outdot << 
"strict digraph G {" << std::endl
 
  993      << 
"ratio=auto;" << std::endl
 
  994      << 
"rankdir=RL;" << std::endl
 
  995      << 
"compound=true;" << std::endl
 
  996      << 
"constraint=false;" << std::endl
 
  997      << 
"ranksep=0.7;" << std::endl
 
  998      << 
"nodesep=0.3;" << std::endl
 
  999      << 
"size=\"8,8\";" << std::endl
 
 1000      << 
"ratio=compress;" << std::endl;
 
 1003   outdot << 
"\"All Libraries\" [URL=\"LibraryDependencies.html\",shape=box,rank=max,fillcolor=lightgray,style=filled];" << std::endl;
 
 1015         if (posExt != 
kNPOS)
 
 1019      outdot << 
"\"All Libraries\" -> \"" << firstLib << 
"\" [style=invis];" << std::endl;
 
 1020      outdot << 
"\"" << firstLib << 
"\" -> {" << std::endl;
 
 1022      if (firstLib != 
"libCore")
 
 1024      if (firstLib != 
"libCint")
 
 1028         if (libs[pos] != 
' ')
 
 1029            thisLib += libs[pos];
 
 1030         else if (thisLib.
Length()) {
 
 1032            if (posExt != 
kNPOS)
 
 1034            outdot << 
" \"" << thisLib << 
"\";";
 
 1040         if (posExt != 
kNPOS)
 
 1042         outdot << 
" \"" << thisLib << 
"\";";
 
 1045      outdot << 
"}" << std::endl; 
 
 1047      outdot << 
"\"No rlibmap information available.\"" << std::endl;
 
 1049   outdot << 
"}" << std::endl; 
 
 1063   if (!bases || bases->
IsEmpty())
 
 1066   out << 
"<hr />" << std::endl;
 
 1068   out << 
"<table><tr><td><ul><li><tt>";
 
 1071          << docFileName << 
"\">";
 
 1079   out << 
"</tt></li></ul></td>";
 
 1083   out << 
"</tr></table>" << std::endl;
 
 1095   const char* title = 
"ClassHierarchy";
 
 1100   std::ofstream dotout(
filename + 
".dot");
 
 1102   if (!dotout.good()) {
 
 1103      Error(
"CreateHierarchy", 
"Can't open file '%s.dot' !",
 
 1108   dotout << 
"digraph G {" << std::endl
 
 1109          << 
"ratio=auto;" << std::endl
 
 1110          << 
"rankdir=RL;" << std::endl;
 
 1121            Warning(
"THtml::CreateHierarchy", 
"skipping class %s\n", cdi->
GetName());
 
 1127      if (bases && !bases->
IsEmpty()) {
 
 1128         dotout << 
"\"" << cdi->
GetName() << 
"\" -> { ";
 
 1133            if (base != bases->
First())
 
 1135            dotout << 
"\"" << base->
GetName() << 
"\"";
 
 1137         dotout << 
"};" << std::endl;
 
 1140         dotout << 
"\"" << cdi->
GetName() << 
"\";" << std::endl;
 
 1147   std::ofstream out(
filename + 
".html");
 
 1149      Error(
"CreateHierarchy", 
"Can't open file '%s.html' !",
 
 1157   out << 
"<h1>Class Hierarchy</h1>" << std::endl;
 
 1163   out << 
"<img usemap=\"#Map" << title << 
"\" src=\"" << title << 
".png\"/>" << std::endl;
 
 1189   dynamic_cast<std::ofstream&
>(out).open(sourceHtmlFileName);
 
 1191      Warning(
"LocateMethodsInSource", 
"Can't open beautified source file '%s' for writing!",
 
 1192         sourceHtmlFileName.
Data());
 
 1193      sourceHtmlFileName.
Remove(0);
 
 1199   title += 
" - source file";
 
 1201   out << 
"<div id=\"codeAndLineNumbers\"><pre class=\"listing\">" << std::endl;
 
 1212         out << 
"<td></td>" << std::endl;
 
 1223      if (!classPtr) 
continue;
 
 1227      if (!bases) 
continue;
 
 1230      if (!inheritFrom) 
continue;
 
 1233         out << 
"<td>←</td><td><table><tr>" << std::endl;
 
 1235         out << 
"</tr><tr>"<<std::endl;
 
 1238      UInt_t bgcolor=255-depth*8;
 
 1239      out << 
"<td bgcolor=\"" 
 1240          << 
Form(
"#%02x%02x%02x", bgcolor, bgcolor, bgcolor)
 
 1242      out << 
"<table><tr><td>" << std::endl;
 
 1246         out << 
"<center><tt><a name=\"" << cdi->
GetName() << 
"\" href=\"" 
 1247             << htmlFile << 
"\">";
 
 1249         out << 
"</a></tt></center>";
 
 1268      out << 
"</td>" << std::endl;
 
 1270      out << 
"</tr></table></td>" << std::endl;
 
 1274      out << 
"</tr></table></td>" << std::endl;
 
 1276      out << 
"<td></td>" << std::endl;
 
 1301   if (!htmlFile.
Length()) {
 
 1303      what += 
" (source not found)";
 
 1319      Error(
"MakeTree", 
"Cannot create a TCanvas!");
 
 1341   out << 
"<div class=\"dropshadow\"><div class=\"withshadow\">";
 
 1344   out << 
"<h1><a name=\"" << anchor;
 
 1345   out << 
":description\"></a>";
 
 1348      out << 
"namespace ";
 
 1359   while ((inheritFrom = (
TBaseClass *) nextBase())) {
 
 1369         out << 
"protected ";
 
 1381         out << 
"<a href=\"" << htmlFile << 
"\">";
 
 1387   out << 
"</h1>" << std::endl;
 
 1389   out << 
"<div class=\"classdescr\">" << std::endl;
 
 1391   if (description.
Length())
 
 1392      out << 
"<pre>" << description << 
"</pre>";
 
 1396      out << 
"<h4>This class is also known as (typedefs to this class)</h4>";
 
 1398      bool firsttd = 
true;
 
 1403         else firsttd = 
false;
 
 1408   out << 
"</div>" << std::endl
 
 1409       << 
"</div></div>" << std::endl;
 
 1415   out << 
"<h2><a id=\"" << anchor
 
 1416      << 
":Class_Charts\"></a>Class Charts</h2>" << std::endl;
 
 1422   out << 
"<h2>Function documentation</h2>" << std::endl;
 
 1431   classFile << 
"<a name=\"TopOfPage\"></a>" << std::endl;
 
 1448      char* libDup=
StrDup(lib);
 
 1449      char* libDupSpace=strchr(libDup,
' ');
 
 1450      if (libDupSpace) *libDupSpace=0;
 
 1451      char* libDupEnd=libDup+strlen(libDup);
 
 1452      while (libDupEnd!=libDup)
 
 1453         if (*(--libDupEnd)==
'.') {
 
 1460   classFile << 
"<script type=\"text/javascript\">WriteFollowPageBox('" 
 1461             << sTitle << 
"','" << sLib << 
"','" << sInclude << 
"');</script>" << std::endl;
 
 1468   classFile << 
"<div class=\"descrhead\"><div class=\"descrheadcontent\">" << std::endl 
 
 1469      << 
"<span class=\"descrtitle\">Source:</span>" << std::endl;
 
 1479   if (headerFileName.
Length())
 
 1480      classFile << 
"<a class=\"descrheadentry\" href=\"src/" << classFileName
 
 1481                << 
".h.html\">header file</a>" << std::endl;
 
 1483      classFile << 
"<a class=\"descrheadentry\"> </a>" << std::endl;
 
 1485   if (sourceFileName.
Length())
 
 1486      classFile << 
"<a class=\"descrheadentry\" href=\"src/" << classFileName
 
 1487                << 
".cxx.html\">source file</a>" << std::endl;
 
 1489      classFile << 
"<a class=\"descrheadentry\"> </a>" << std::endl;
 
 1493      classFile << 
"<a class=\"descrheadentry\" href=\"" << classFileName << 
"_Tree.pdf\"";
 
 1494      classFile << 
">inheritance tree (.pdf)</a> ";
 
 1499   if (viewCVSLink.
Length()) {
 
 1500      if (headerFileName.
Length()) {
 
 1502         TString sHeader(headerFileName);
 
 1503         if (
GetHtml()->GetProductName() && !strcmp(
GetHtml()->GetProductName(), 
"ROOT")) {
 
 1505            if (posInclude != 
kNPOS) {
 
 1507               sHeader.
Remove(0, posInclude + 8);
 
 1510               posInclude = sHeader.
Index(
"/inc/");
 
 1511               if (posInclude != 
kNPOS) {
 
 1513                  sHeader += sInclude;
 
 1516            if (sourceFileName && strstr(sourceFileName, 
"src")) {
 
 1518               src.Remove(
src.Index(
"src"), 
src.Length());
 
 1524               if (posEndLib != 
kNPOS)
 
 1525                  src.Remove(posEndLib, 
src.Length());
 
 1526               if (
src.BeginsWith(
"lib"))
 
 1528               posEndLib = 
src.Index(
'.');
 
 1529               if (posEndLib != 
kNPOS)
 
 1530                  src.Remove(posEndLib, 
src.Length());
 
 1538         if (mustReplace) link.
ReplaceAll(
"%f", sHeader);
 
 1539         else link += sHeader;
 
 1540         classFile << 
"<a class=\"descrheadentry\" href=\"" << link << 
"\">viewVC header</a> ";
 
 1542         classFile << 
"<a class=\"descrheadentry\"> </a> ";
 
 1543      if (sourceFileName.
Length()) {
 
 1545         if (mustReplace) link.
ReplaceAll(
"%f", sourceFileName);
 
 1546         else link += sourceFileName;
 
 1547         classFile << 
"<a class=\"descrheadentry\" href=\"" << link << 
"\">viewVC source</a> ";
 
 1549         classFile << 
"<a class=\"descrheadentry\"> </a> ";
 
 1558      else wikiLink += currClassNameMangled;
 
 1559      classFile << 
"<a class=\"descrheadentry\" href=\"" << wikiLink << 
"\">wiki</a> ";
 
 1562   classFile << std::endl << 
"</div></div>" << std::endl; 
 
 1564   classFile << 
"<div class=\"descrhead\"><div class=\"descrheadcontent\">" << std::endl 
 
 1565      << 
"<span class=\"descrtitle\">Sections:</span>" << std::endl
 
 1566      << 
"<a class=\"descrheadentry\" href=\"#" << currClassNameMangled;
 
 1568      classFile << 
":description\">namespace description</a> ";
 
 1570      classFile << 
":description\">class description</a> ";
 
 1571   classFile << std::endl
 
 1572      << 
"<a class=\"descrheadentry\" href=\"#" << currClassNameMangled << 
":Function_Members\">function members</a>" << std::endl
 
 1573      << 
"<a class=\"descrheadentry\" href=\"#" << currClassNameMangled << 
":Data_Members\">data members</a>" << std::endl
 
 1574      << 
"<a class=\"descrheadentry\" href=\"#" << currClassNameMangled << 
":Class_Charts\">class charts</a>" << std::endl
 
 1575      << 
"</div></div>" << std::endl 
 
 1576      << 
"</div>" << std::endl; 
 
 1596   out << 
"<div class=\"funcdoc\"><span class=\"funcname\">" 
 1597      << ret << 
" <a class=\"funcname\" name=\"";
 
 1600   out << mangled << 
":";
 
 1607   out << mangled << 
"\" href=\"src/" << 
filename;
 
 1609      out << 
"#" << anchor;
 
 1613   if (guessedMethod) {
 
 1619         if (!
first) out << 
", ";
 
 1622         paramGuessed += 
" ";
 
 1623         paramGuessed += arg->
GetName();
 
 1625            paramGuessed += 
" = ";
 
 1629         out << paramGuessed;
 
 1638   out << 
"</span><br />" << std::endl;
 
 1641      out << 
"<div class=\"funccomm\"><pre>" << comment << 
"</pre></div>" << std::endl;
 
 1643   if (codeOneLiner.
Length()) {
 
 1644      out << std::endl << 
"<div class=\"code\"><code class=\"inlinecode\">" 
 1645          << codeOneLiner << 
"</code></div>" << std::endl
 
 1646          << 
"<div style=\"clear:both;\"></div>" << std::endl;
 
 1649   out << 
"</div>" << std::endl;
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t property
 
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
 
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
 
char * StrDup(const char *str)
Duplicate the string str.
 
R__EXTERN TSystem * gSystem
 
#define R__LOCKGUARD(mutex)
 
Each class (see TClass) has a linked list of its base class(es).
 
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
 
TClass * GetClassPointer(Bool_t load=kTRUE)
Get pointer to the base class TClass.
 
virtual const char * GetName() const
Returns name of object.
 
const char * GetHtmlFileName() const
 
TDictionary * GetClass() const
 
virtual void WriteMethod(std::ostream &out, TString &ret, TString &name, TString ¶ms, const char *file, TString &anchor, TString &comment, TString &codeOneLiner, TDocMethodWrapper *guessedMethod)
Write method name with return type ret and parameters param to out.
 
void DescendHierarchy(std::ostream &out, TClass *basePtr, Int_t maxLines=0, Int_t depth=1)
Descend hierarchy recursively loop over all classes and look for classes with base class basePtr.
 
TList * fCurrentClassesTypedefs
 
void MakeTree(Bool_t force=kFALSE)
Create an output file with a graphical representation of the class inheritance.
 
virtual void WriteClassDescription(std::ostream &out, const TString &description)
Called by TDocParser::LocateMethods(), this hook writes out the class description found by TDocParser...
 
Bool_t CreateDotClassChartLib(const char *filename)
Build the library dependency graph for one class in GraphViz/Dot format.
 
Bool_t CreateDotClassChartInh(const char *filename)
Build the class tree for one class in GraphViz/Dot format.
 
void ClassTree(TVirtualPad *canvas, Bool_t force=kFALSE)
It makes a graphical class tree.
 
Bool_t CreateDotClassChartIncl(const char *filename)
Build the include dependency graph for one class in GraphViz/Dot format.
 
virtual void ListDataMembers(std::ostream &classFile)
Write the list of data members and enums.
 
void CreateSourceOutputStream(std::ostream &out, const char *extension, TString &filename)
Open a Class.cxx.html file, where Class is defined by classPtr, and .cxx.html by extension It's creat...
 
virtual void WriteClassDocHeader(std::ostream &classFile)
Write out the introduction of a class description (shortcuts and links)
 
void Class2Html(Bool_t force=kFALSE)
Create HTML files for a single class.
 
void CreateClassHierarchy(std::ostream &out, const char *docFileName)
Create the hierarchical class list part for the current class's base classes.
 
virtual ~TClassDocOutput()
Destructor, deletes fParser.
 
Bool_t CreateDotClassChartInhMem(const char *filename)
Build the class tree of inherited members for one class in GraphViz/Dot format.
 
void ClassHtmlTree(std::ostream &out, TClass *classPtr, ETraverse dir=kBoth, int depth=1)
This function builds the class tree for one class in HTML (inherited and succeeding classes,...
 
TClassDocOutput(THtml &html, TClass *cl, TList *typedefs)
Create an object given the invoking THtml object, and the TClass object that we will generate output ...
 
Bool_t CreateHierarchyDot()
Create a hierarchical class list The algorithm descends from the base classes and branches into all d...
 
virtual void ListFunctions(std::ostream &classFile)
Write the list of functions.
 
Bool_t ClassDotCharts(std::ostream &out)
This function builds the class charts for one class in GraphViz/Dot format, i.e.
 
TClass instances represent classes, structs and namespaces in the ROOT type system.
 
void Draw(Option_t *option="") override
Draw detailed class inheritance structure.
 
TList * GetListOfMethods(Bool_t load=kTRUE)
Return list containing the TMethods of a class.
 
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
 
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
 
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
 
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
 
Long_t Property() const override
Returns the properties of the TClass as a bit field stored as a Long_t value.
 
TMethod * GetMethodAny(const char *method)
Return pointer to method without looking at parameters.
 
virtual Int_t GetEntries() const
 
virtual Bool_t IsEmpty() const
 
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
 
All ROOT classes may have RTTI (run time type identification) support added.
 
Int_t GetMaxIndex(Int_t dim) const
Return maximum index for array dimension "dim".
 
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
 
Int_t GetArrayDim() const
Return number of array dimensions.
 
const char * GetTypeName() const
Get type of data member, e,g.: "class TDirectory*" -> "TDirectory".
 
const char * GetFullTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
 
TClass * GetClass() const
 
Basic data type descriptor (datatype information is obtained from CINT).
 
This class defines an abstract interface that must be implemented by all classes that contain diction...
 
virtual Int_t GetOverloadIdx() const =0
 
virtual TMethod * GetMethod() const =0
 
virtual Bool_t IsModified(TClass *classPtr, EFileType type)
Check if file is modified.
 
virtual void NameSpace2FileName(TString &name)
Replace "::" in name by "__" Replace "<", ">", " ", ",", "~", "=" in name by "_" Replace "A::X<A::Y>"...
 
void WriteTopLinks(std::ostream &out, TModuleDocInfo *module, const char *classname=0, Bool_t withLocation=kTRUE)
Write the first part of the links shown ontop of each doc page; one <div> has to be closed by caller ...
 
Bool_t CopyHtmlFile(const char *sourceName, const char *destName="")
Copy file to HTML directory.
 
void WriteHtmlFooter(std::ostream &out, const char *dir, const char *lastUpdate, const char *author, const char *copyright, const char *footer)
Write HTML footer.
 
virtual const char * ReplaceSpecialChars(char c)
Replace ampersand, less-than and greater-than character, writing to out.
 
Bool_t RunDot(const char *filename, std::ostream *outMap=0, EGraphvizTool gvwhat=kDot)
Run filename".dot", creating filename".png", and - if outMap is !=0, filename".map",...
 
void WriteHtmlHeader(std::ostream &out, const char *titleNoSpecial, const char *dir, TClass *cls, const char *header)
Write HTML header.
 
virtual void WriteSearch(std::ostream &out)
Write a search link or a search box, based on THtml::GetSearchStemURL() and THtml::GetSearchEngine().
 
void WriteLocation(std::ostream &out, TModuleDocInfo *module, const char *classname=0)
make a link to the description
 
const TList * GetMethods(EAccess access) const
 
const char * GetSourceInfo(ESourceInfo type) const
 
const TList * GetDataMembers(EAccess access) const
 
const TList * GetEnums(EAccess access) const
 
virtual void DecorateKeywords(std::ostream &out, const char *text)
Expand keywords in text, writing to out.
 
virtual void Parse(std::ostream &out)
Locate methods, starting in the source file, then inline, then immediately inside the class declarati...
 
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
 
const char * GetReturnTypeName() const
Get full type description of function return type, e,g.: "class TDirectory*".
 
virtual bool GetIncludeAs(TClass *cl, TString &out_include_as) const
Determine the path and filename used in an include statement for the header file of the given class.
 
Legacy ROOT documentation system.
 
const char * GetCounter() const
 
const TString & GetViewCVS() const
 
const char * ShortType(const char *name) const
Get short type name, i.e. with default templates removed.
 
virtual TClass * GetClass(const char *name) const
Return pointer to class with name.
 
static Bool_t IsNamespace(const TClass *cl)
Check whether cl is a namespace.
 
const char * GetCounterFormat() const
 
const TList * GetListOfModules() const
 
Bool_t HaveDot()
Check whether dot is available in $PATH or in the directory set by SetDotPath()
 
void GetDerivedClasses(TClass *cl, std::map< TClass *, Int_t > &derived) const
fill derived with all classes inheriting from cl and their inheritance distance to cl
 
virtual bool GetDeclFileName(TClass *cl, Bool_t filesys, TString &out_name) const
Return declaration file name; return the full path if filesys is true.
 
const TString & GetWikiURL() const
 
virtual void GetHtmlFileName(TClass *classPtr, TString &filename) const
Return real HTML filename.
 
virtual void GetModuleNameForClass(TString &module, TClass *cl) const
Return the module name for a given class.
 
const TString & GetOutputDir(Bool_t createDir=kTRUE) const
Return the output directory as set by SetOutputDir().
 
virtual bool GetImplFileName(TClass *cl, Bool_t filesys, TString &out_name) const
Return implementation file name.
 
const TList * GetListOfClasses() const
 
const TPathDefinition & GetPathDefinition() const
Return the TModuleDefinition (or derived) object as set by SetModuleDefinition(); create and return a...
 
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
 
TObject * First() const override
Return the first object in the list. Returns 0 when list is empty.
 
Each ROOT method (see TMethod) has a linked list of its arguments.
 
const char * GetFullTypeName() const
Get full type description of method argument, e.g.: "class TDirectory*".
 
const char * GetDefault() const
Get default value of method argument.
 
Each ROOT class (see TClass) has a linked list of methods.
 
TClass * GetClass() const
 
virtual TList * GetListOfMethodArgs()
Returns methodarg list and additionally updates fDataMember in TMethod by calling FindDataMember();.
 
const char * GetName() const override
Returns name of object.
 
const char * GetTitle() const override
Returns title of object.
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
 
TString & Insert(Ssiz_t pos, const char *s)
 
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
 
Ssiz_t First(char c) const
Find first occurrence of a character c.
 
const char * Data() const
 
TString & ReplaceAll(const TString &s1, const TString &s2)
 
Ssiz_t Last(char c) const
Find last occurrence of a character c.
 
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
 
TString & Prepend(const char *cs)
 
TString & Remove(Ssiz_t pos)
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
 
A zero length substring is legal.
 
virtual int MakeDirectory(const char *name)
Make a directory.
 
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
 
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
 
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
 
virtual Bool_t IsAbsoluteFileName(const char *dir)
Return true if dir is an absolute pathname.
 
TVirtualPad is an abstract base class for the Pad and Canvas classes.
 
virtual void SetBatch(Bool_t batch=kTRUE)=0
 
void SaveAs(const char *filename="", Option_t *option="") const override=0
Save this object in the file specified by filename.
 
virtual void Close(Option_t *option="")=0