53   TDocOutput(html), fHierarchyLines(0), fCurrentClass(cl),
 
   54   fCurrentClassesTypedefs(typedefs), fParser(0)
 
   90   std::ofstream classFile(filename);
 
   92   if (!classFile.good()) {
 
   93      Error(
"Make", 
"Can't open file '%s' !", filename.
Data());
 
  125   classFile << std::endl << 
"<div id=\"functions\">" << std::endl;
 
  128   classFile << 
"<h2><a id=\"" << mangled
 
  129      << 
":Function_Members\"></a>Function Members (Methods)</h2>" << std::endl;
 
  131   const char* tab4nbsp=
"    ";
 
  135      classFile << 
" <br /><b>" 
  136                << tab4nbsp << 
"This is an abstract class, constructors will not be documented.<br />" << std::endl
 
  137                << tab4nbsp << 
"Look at the <a href=\"" 
  139                << 
"\">header</a> to check for available constructors.</b><br />" << std::endl;
 
  150      classFile << 
"<div class=\"access\" ";
 
  151      const char* accessID [] = {
"priv", 
"prot", 
"publ"};
 
  152      const char* accesstxt[] = {
"private", 
"protected", 
"public"};
 
  154      classFile << 
"id=\"func" << accessID[access] << 
"\"><b>" 
  155         << accesstxt[access] << 
":</b>" << std::endl
 
  156         << 
"<table class=\"func\" id=\"tabfunc" << accessID[access] << 
"\" cellspacing=\"0\">" << std::endl;
 
  158      TIter iMethWrap(methods);
 
  168         classFile << 
"<tr class=\"func";
 
  171         classFile << 
"\"><td class=\"funcret\">";
 
  174               classFile << 
"virtual ";
 
  176               classFile << 
" virtual";
 
  180            classFile << 
"static ";
 
  182         if (!isctor && !isdtor)
 
  187         classFile << 
"</td><td class=\"funcname\"><a class=\"funcname\" href=\"";
 
  191            classFile << htmlFile;
 
  193         classFile << 
"#" << mangledM;
 
  200            mangledM += overloadIdx;
 
  202         classFile << mangledM << 
"\">";
 
  204            classFile << 
"<span class=\"baseclass\">";
 
  206            classFile << 
"::</span>";
 
  212         bool propSignal = 
false;
 
  213         bool propMenu   = 
false;
 
  214         bool propToggle = 
false;
 
  215         bool propGetter = 
false;
 
  217            propSignal = (strstr(method->
GetTitle(), 
"*SIGNAL*"));
 
  218            propMenu   = (strstr(method->
GetTitle(), 
"*MENU*"));
 
  219            propToggle = (strstr(method->
GetTitle(), 
"*TOGGLE*"));
 
  220            propGetter = (strstr(method->
GetTitle(), 
"*GETTER"));
 
  221            if (propSignal || propMenu || propToggle || propGetter) {
 
  222               classFile << 
"<span class=\"funcprop\">";
 
  223               if (propSignal) classFile << 
"<abbr title=\"emits a signal\">SIGNAL</abbr> ";
 
  224               if (propMenu) classFile << 
"<abbr title=\"has a popup menu entry\">MENU</abbr> ";
 
  225               if (propToggle) classFile << 
"<abbr title=\"toggles a state\">TOGGLE</abbr> ";
 
  229                  getter.
Remove(0, posGetter + 8);
 
  230                  classFile << 
"<abbr title=\"use " + getter + 
"() as getter\">GETTER</abbr> ";
 
  232               classFile << 
"</span>";
 
  235         classFile << 
"</td></tr>" << std::endl;
 
  237      classFile << std::endl << 
"</table></div>" << std::endl;
 
  240   classFile << 
"</div>" << std::endl; 
 
  256   if (!haveDataMembers) 
return;
 
  258   classFile << std::endl << 
"<div id=\"datamembers\">" << std::endl;
 
  261   classFile << 
"<h2><a name=\"" << mangled
 
  262      << 
":Data_Members\"></a>Data Members</h2>" << std::endl;
 
  265      const TList* datamembers = 0;
 
  271      classFile << 
"<div class=\"access\" ";
 
  272      const char* what = 
"data";
 
  273      if (access > 2) what = 
"enum";
 
  274      const char* accessID [] = {
"priv", 
"prot", 
"publ"};
 
  275      const char* accesstxt[] = {
"private", 
"protected", 
"public"};
 
  277      classFile << 
"id=\"" << what << accessID[access%3] << 
"\"><b>" 
  278         << accesstxt[access%3] << 
":</b>" << std::endl
 
  279         << 
"<table class=\"data\" id=\"tab" << what << accessID[access%3] << 
"\" cellspacing=\"0\">" << std::endl;
 
  281      TIter iDM(datamembers);
 
  289            if (prevEnumName.
Length()) {
 
  290               classFile << 
"<tr class=\"data";
 
  293               classFile << 
"\"><td class=\"datatype\">};</td><td></td><td></td></tr>" << std::endl;
 
  298         classFile << 
"<tr class=\"data";
 
  302         classFile << 
"\"><td class=\"datatype\">";
 
  309               enumName += 
"<i>[unnamed]</i>";
 
  310            Ssiz_t startClassName = 0;
 
  312               classFile << 
"enum ";
 
  317            if (endClassName != 
kNPOS && endClassName > 0 && enumName[endClassName - 1] == 
':') {
 
  319               TSubString substr(enumName(startClassName, endClassName - startClassName + 1));
 
  323               enumName.
Insert(substr.
Start(), 
"<span class=\"baseclass\">");
 
  325            classFile << enumName << 
" { ";
 
  329                  classFile << 
"static ";
 
  336         classFile << 
"</td><td class=\"dataname\"><a ";
 
  338            classFile << 
"href=\"";
 
  341            classFile << htmlFile << 
"#";
 
  343            classFile << 
"name=\"";
 
  344         classFile << mangledM;
 
  348         classFile << mangledM << 
"\">";
 
  352            classFile << 
"<span class=\"baseclass\">";
 
  354            classFile << 
"::</span>";
 
  363               classFile << 
"[" << member->
GetMaxIndex(indx) << 
"]";
 
  367         classFile << 
"</td>";
 
  369            classFile << 
"<td class=\"datadesc\">";
 
  371         } 
else classFile << 
"<td>";
 
  372         classFile << 
"</td></tr>" << std::endl;
 
  375      if (prevEnumName.
Length()) {
 
  376         classFile << 
"<tr class=\"data";
 
  379         classFile << 
"\"><td class=\"datatype\">};</td><td></td><td></td></tr>" << std::endl;
 
  381      classFile << std::endl << 
"</table></div>" << std::endl;
 
  384   classFile << 
"</div>" << std::endl; 
 
  421   filenameInh += 
"_Inh";
 
  428   filenameInhMem += 
"_InhMem";
 
  430      RunDot(filenameInhMem, &out);
 
  435   filenameIncl += 
"_Incl";
 
  437      RunDot(filenameIncl, &out);
 
  442   filenameLib += 
"_Lib";
 
  444      RunDot(filenameLib, &out);
 
  446   out << 
"<div class=\"tabs\">" << std::endl
 
  447       << 
"<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
 
  448       << 
"<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
 
  449       << 
"<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
 
  450       << 
"<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
 
  451       << 
"</div><div class=\"classcharts\"><div class=\"classchartswidth\"></div>" << std::endl
 
  452       << 
"<img id=\"Charts\" alt=\"Class Charts\" class=\"classcharts\" usemap=\"#Map" << title << 
"_Inh\" src=\"inh/" << title << 
"_Inh.png\"/></div>" << std::endl;
 
  471      out << 
"<!--INHERITANCE TREE-->" << std::endl;
 
  474      out << 
"<table><tr><td width=\"10%\"></td><td width=\"70%\">" 
  475          << 
"<a href=\"ClassHierarchy.html\">Inheritance Chart</a>:</td></tr>";
 
  476      out << 
"<tr class=\"inhtree\"><td width=\"10%\"></td><td width=\"70%\">";
 
  478      out << 
"<table class=\"inhtree\"><tr><td>" << std::endl;
 
  479      out << 
"<table width=\"100%\" border=\"0\" ";
 
  480      out << 
"cellpadding =\"0\" cellspacing=\"2\"><tr>" << std::endl;
 
  482      out << 
"<table><tr>";
 
  493      UInt_t bgcolor=255-depth*8;
 
  495      while ((inheritFrom = (
TBaseClass *) nextBase())) {
 
  498            out << 
"<td><table><tr>" << std::endl;
 
  501            out << 
"</tr><tr>" << std::endl;
 
  502         out << 
"<td bgcolor=\"" 
  503            << 
Form(
"#%02x%02x%02x", bgcolor, bgcolor, bgcolor)
 
  504            << 
"\" align=\"right\">" << std::endl;
 
  511                << (
const char *) inheritFrom->
GetName()
 
  513         out << 
"</td>"<< std::endl;
 
  516         out << 
"</tr></table></td>" << std::endl; 
 
  517         out << 
"<td>←</td>";
 
  521   out << 
"<td>" << std::endl; 
 
  525   const char *className = classPtr->
GetName();
 
  533         out << 
"<center><tt><a name=\"" << anchor;
 
  534         out << 
"\" href=\"" << htmlFile << 
"\">";
 
  536         out << 
"</a></tt></center>" << std::endl;
 
  543         out << 
"<center><big><b><tt><a name=\"" << anchor;
 
  544         out << 
"\" href=\"" << htmlFile << 
"\">";
 
  546         out << 
"</a></tt></b></big></center>" << std::endl;
 
  551   out << 
"</td>" << std::endl; 
 
  561      out << 
"<td><table><tr>" << std::endl;
 
  565      out << 
"</tr></table>";
 
  567         out << 
"</td><td align=\"left\"> <a href=\"ClassHierarchy.html\">[more...]</a>";
 
  568      out<<
"</td>" << std::endl;
 
  573   out << 
"</tr></table>" << std::endl;
 
  575      out << 
"</td></tr></table></td></tr></table>"<<std::endl;
 
  598   filename += 
"_Tree.pdf";
 
  606      psCanvas->
SaveAs(filename);
 
  620   std::ofstream outdot(filename);
 
  621   outdot << 
"strict digraph G {" << std::endl
 
  622      << 
"rankdir=RL;" << std::endl
 
  623      << 
"ranksep=2;" << std::endl
 
  624      << 
"nodesep=0;" << std::endl
 
  625      << 
"size=\"8,10\";" << std::endl
 
  626      << 
"ratio=auto;" << std::endl
 
  627      << 
"margin=0;" << std::endl
 
  628      << 
"node [shape=plaintext,fontsize=40,width=4,height=0.75];" << std::endl
 
  631   std::stringstream ssDep;
 
  632   std::list<TClass*> writeBasesFor;
 
  637      outdot << 
"{" << std::endl;
 
  638      while (!writeBasesFor.empty()) {
 
  639         TClass* cl = writeBasesFor.front();
 
  640         writeBasesFor.pop_front();
 
  642            outdot << 
"  \"" << cl->
GetName() << 
"\"";
 
  645               outdot << 
" [URL=\"" << htmlFileName << 
"\"]";
 
  646            outdot << 
";" << std::endl;
 
  649            ssDep << 
"  \"" << cl->
GetName() << 
"\" -> {";
 
  653               ssDep << 
" \"" << base->
GetName() << 
"\";";
 
  656            ssDep << 
"}" << std::endl;
 
  659      outdot << 
"}" << std::endl; 
 
  662   std::map<TClass*, Int_t> derivesFromMe;
 
  663   std::map<TClass*, unsigned int> entriesPerDerived;
 
  664   std::set<TClass*> wroteNode;
 
  666   static const unsigned int maxClassesPerDerived = 20;
 
  668   outdot << 
"{" << std::endl;
 
  671      for (std::map<TClass*, Int_t>::iterator iDerived = derivesFromMe.begin();
 
  672         iDerived != derivesFromMe.end(); ++iDerived) {
 
  673         if (iDerived->second != level) 
continue;
 
  675         TIter iBaseOfDerived(iDerived->first->GetListOfBases());
 
  678         TClass* writeAndMoreFor = 0;
 
  679         while ((baseDerived = (
TBaseClass*) iBaseOfDerived())) {
 
  682               && wroteNode.find(clBaseDerived) != wroteNode.end()) {
 
  683               unsigned int& count = entriesPerDerived[clBaseDerived];
 
  684               if (count < maxClassesPerDerived) {
 
  686                  ssDep << 
"\"" << iDerived->first->GetName() << 
"\" -> \"" 
  687                     << clBaseDerived->
GetName() << 
"\";" << std::endl;
 
  689               } 
else if (count == maxClassesPerDerived) {
 
  690                  writeAndMoreFor = clBaseDerived;
 
  691                  ssDep << 
"\"...andmore" << clBaseDerived->
GetName() << 
"\"-> \"" 
  692                     << clBaseDerived->
GetName() << 
"\";" << std::endl;
 
  699            wroteNode.insert(iDerived->first);
 
  700            outdot << 
"  \"" << iDerived->first->GetName() << 
"\"";
 
  703               outdot << 
" [URL=\"" << htmlFileName << 
"\"]";
 
  704            outdot << 
";" << std::endl;
 
  705         } 
else if (writeAndMoreFor) {
 
  706               outdot << 
"  \"...andmore" << writeAndMoreFor->
GetName()
 
  707                      << 
"\" [label=\"...and more\",fontname=\"Times-Italic\",fillcolor=lightgrey,style=filled];" << std::endl;
 
  710      if (!levelExists) 
break;
 
  712   outdot << 
"}" << std::endl; 
 
  714   outdot << ssDep.str();
 
  716   outdot << 
"}" << std::endl; 
 
  727   std::ofstream outdot(filename);
 
  728   outdot << 
"strict digraph G {" << std::endl
 
  729      << 
"ratio=auto;" << std::endl
 
  730      << 
"rankdir=RL;" << std::endl
 
  731      << 
"compound=true;" << std::endl
 
  732      << 
"constraint=false;" << std::endl
 
  733      << 
"ranksep=0.1;" << std::endl
 
  734      << 
"nodesep=0;" << std::endl
 
  735      << 
"margin=0;" << std::endl;
 
  736   outdot << 
"  node [style=filled,width=0.7,height=0.15,fixedsize=true,shape=plaintext,fontsize=10];" << std::endl;
 
  738   std::stringstream ssDep;
 
  739   const int numColumns = 3;
 
  741   std::list<TClass*> writeBasesFor;
 
  743   while (!writeBasesFor.empty()) {
 
  744      TClass* cl = writeBasesFor.front();
 
  745      writeBasesFor.pop_front();
 
  749      outdot << 
"subgraph \"cluster" << cl->
GetName() << 
"\" {" << std::endl
 
  750             << 
"  color=lightgray;" << std::endl
 
  751             << 
"  label=\"" << cl->
GetName() << 
"\";" << std::endl;
 
  753         outdot << 
"  URL=\"" << htmlFileName << 
"\"" << std::endl;
 
  762         std::map<std::string, TDataMember*> dmMap;
 
  771         outdot << 
"subgraph \"clusterData0" << cl->
GetName() << 
"\" {" << std::endl
 
  772                << 
"  color=white;" << std::endl
 
  773                << 
"  label=\"\";" << std::endl
 
  774                << 
"  \"clusterNode0" << cl->
GetName() << 
"\" [height=0,width=0,style=invis];" << std::endl;
 
  776         Int_t pos = dmMap.size();
 
  778         Int_t newColumnEvery = (pos + numColumns - 1) / numColumns;
 
  779         for (std::map<std::string, TDataMember*>::iterator iDM = dmMap.begin();
 
  780              iDM != dmMap.end(); ++iDM, --pos) {
 
  785            if (iDM == dmMap.begin())
 
  786               prevColumnNode = nodeName;
 
  788            outdot << 
"\"" << nodeName << 
"\" [label=\"" 
  791               outdot << 
",color=\"#FFCCCC\"";
 
  793               outdot << 
",color=\"#FFFF77\"";
 
  795               outdot << 
",color=\"#CCFFCC\"";
 
  796            outdot << 
"];" << std::endl;
 
  797            if (pos % newColumnEvery == 1) {
 
  799               outdot << 
"};" << std::endl 
 
  800                      << 
"subgraph \"clusterData" << column << cl->
GetName() << 
"\" {" << std::endl
 
  801                      << 
"  color=white;" << std::endl
 
  802                      << 
"  label=\"\";" << std::endl
 
  803                      << 
"  \"clusterNode" << column << cl->
GetName() << 
"\" [height=0,width=0,style=invis];" << std::endl;
 
  804            } 
else if (iDM != dmMap.begin() && pos % newColumnEvery == 0) {
 
  805               ssDep << 
"\"" << prevColumnNode
 
  806                     << 
"\" -> \"" << nodeName << 
"\""<< 
" [style=invis,weight=100];" << std::endl;
 
  807               prevColumnNode = nodeName;
 
  811         while (column < numColumns - 1) {
 
  813            outdot << 
"  \"clusterNode" << column << cl->
GetName() << 
"\" [height=0,width=0,style=invis];" << std::endl;
 
  816         outdot << 
"};" << std::endl; 
 
  822         std::map<std::string, TMethod*> methMap;
 
  827            while ((meth = (
TMethod*) iMeth()))
 
  828               methMap[meth->
GetName()] = meth;
 
  831         outdot << 
"subgraph \"clusterFunc0" << cl->
GetName() << 
"\" {" << std::endl
 
  832                << 
"  color=white;" << std::endl
 
  833                << 
"  label=\"\";" << std::endl
 
  834                << 
"  \"clusterNode0" << cl->
GetName() << 
"\" [height=0,width=0,style=invis];" << std::endl;
 
  837         Int_t pos = methMap.size();
 
  839         Int_t newColumnEvery = (pos + numColumns - 1) / numColumns;
 
  840         for (std::map<std::string, TMethod*>::iterator iMeth = methMap.begin();
 
  841            iMeth != methMap.end(); ++iMeth, --pos) {
 
  846            if (iMeth == methMap.begin())
 
  847               prevColumnNodeFunc = nodeName;
 
  849            outdot << 
"\"" << nodeName << 
"\" [label=\"" << meth->
GetName() << 
"\"";
 
  852               outdot << 
",color=\"#777777\"";
 
  854               outdot << 
",color=\"#FFCCCC\"";
 
  856               outdot << 
",color=\"#FFFF77\"";
 
  858               outdot << 
",color=\"#CCFFCC\"";
 
  859            outdot << 
"];" << std::endl;
 
  860            if (pos % newColumnEvery == 1) {
 
  862               outdot << 
"};" << std::endl 
 
  863                      << 
"subgraph \"clusterFunc" << column << cl->
GetName() << 
"\" {" << std::endl
 
  864                      << 
"  color=white;" << std::endl
 
  865                      << 
"  label=\"\";" << std::endl;
 
  866            } 
else if (iMeth != methMap.begin() && pos % newColumnEvery == 0) {
 
  867               ssDep << 
"\"" << prevColumnNodeFunc
 
  868                     << 
"\" -> \"" << nodeName << 
"\""<< 
" [style=invis,weight=100];" << std::endl;
 
  869               prevColumnNodeFunc = nodeName;
 
  872         outdot << 
"};" << std::endl; 
 
  875      outdot << 
"}" << std::endl; 
 
  877      for (
Int_t pos = 0; pos < numColumns - 1; ++pos)
 
  878         ssDep << 
"\"clusterNode" << pos << cl->
GetName() << 
"\" -> \"clusterNode" << pos + 1 << cl->
GetName() << 
"\" [style=invis];" << std::endl;
 
  884            ssDep << 
"  \"clusterNode" << numColumns - 1 << cl->
GetName() << 
"\" -> " 
  885                  << 
" \"clusterNode0" << base->
GetName() << 
"\" [ltail=\"cluster" << cl->
GetName()
 
  886                  << 
"\",lhead=\"cluster" << base->
GetName() << 
"\"";
 
  888               ssDep << 
",weight=0";
 
  889            ssDep << 
"];" << std::endl;
 
  895   outdot << ssDep.str();
 
  897   outdot << 
"}" << std::endl; 
 
  911   std::map<std::string, std::string> filesToParse;
 
  912   std::list<std::string> listFilesToParse;
 
  919         filesToParse[declFileName.
Data()] = real.
Data();
 
  920         listFilesToParse.push_back(declFileName.
Data());
 
  934   std::ofstream outdot(filename);
 
  935   outdot << 
"strict digraph G {" << std::endl
 
  936      << 
"ratio=compress;" << std::endl
 
  937      << 
"rankdir=TB;" << std::endl
 
  938      << 
"concentrate=true;" << std::endl
 
  939      << 
"ranksep=0;" << std::endl
 
  940      << 
"nodesep=0;" << std::endl
 
  941      << 
"size=\"8,10\";" << std::endl
 
  942      << 
"node [fontsize=20,shape=plaintext];" << std::endl;
 
  944   for (std::list<std::string>::iterator iFile = listFilesToParse.begin();
 
  945      iFile != listFilesToParse.end(); ++iFile) {
 
  946      std::ifstream in(filesToParse[*iFile].c_str());
 
  948      while (in && !in.eof()) {
 
  949         std::getline(in, 
line);
 
  951         while (
line[pos] == 
' ' || 
line[pos] == 
'\t') ++pos;
 
  952         if (
line[pos] != 
'#') 
continue;
 
  954         while (
line[pos] == 
' ' || 
line[pos] == 
'\t') ++pos;
 
  955         if (
line.compare(pos, 8, 
"include ") != 0) 
continue;
 
  957         while (
line[pos] == 
' ' || 
line[pos] == 
'\t') ++pos;
 
  958         if (
line[pos] != 
'"' && 
line[pos] != 
'<')
 
  960         char delim = 
line[pos];
 
  961         if (delim == 
'<') delim = 
'>';
 
  965         pos = 
line.find(delim);
 
  966         if (pos == std::string::npos) 
continue;
 
  968         if (filesToParse.find(
line) == filesToParse.end()) {
 
  970            if (!
GetHtml()->GetPathDefinition().GetFileNameFromInclude(
line.c_str(), sysfilename))
 
  972            listFilesToParse.push_back(
line);
 
  973            filesToParse[
line] = sysfilename;
 
  974            if (*iFile == implFileName.
Data() || *iFile == declFileName.
Data())
 
  975               outdot << 
"\"" << *iFile << 
"\" [style=filled,fillcolor=lightgray];" << std::endl;
 
  977         outdot << 
"\"" << *iFile << 
"\" -> \"" << 
line << 
"\";" << std::endl;
 
  981   outdot << 
"}" << std::endl; 
 
  993   std::ofstream outdot(filename);
 
  994   outdot << 
"strict digraph G {" << std::endl
 
  995      << 
"ratio=auto;" << std::endl
 
  996      << 
"rankdir=RL;" << std::endl
 
  997      << 
"compound=true;" << std::endl
 
  998      << 
"constraint=false;" << std::endl
 
  999      << 
"ranksep=0.7;" << std::endl
 
 1000      << 
"nodesep=0.3;" << std::endl
 
 1001      << 
"size=\"8,8\";" << std::endl
 
 1002      << 
"ratio=compress;" << std::endl;
 
 1005   outdot << 
"\"All Libraries\" [URL=\"LibraryDependencies.html\",shape=box,rank=max,fillcolor=lightgray,style=filled];" << std::endl;
 
 1017         if (posExt != 
kNPOS)
 
 1021      outdot << 
"\"All Libraries\" -> \"" << firstLib << 
"\" [style=invis];" << std::endl;
 
 1022      outdot << 
"\"" << firstLib << 
"\" -> {" << std::endl;
 
 1024      if (firstLib != 
"libCore")
 
 1026      if (firstLib != 
"libCint")
 
 1030         if (libs[pos] != 
' ')
 
 1031            thisLib += libs[pos];
 
 1032         else if (thisLib.
Length()) {
 
 1034            if (posExt != 
kNPOS)
 
 1036            outdot << 
" \"" << thisLib << 
"\";";
 
 1042         if (posExt != 
kNPOS)
 
 1044         outdot << 
" \"" << thisLib << 
"\";";
 
 1047      outdot << 
"}" << std::endl; 
 
 1049      outdot << 
"\"No rlibmap information available.\"" << std::endl;
 
 1051   outdot << 
"}" << std::endl; 
 
 1065   if (!bases || bases->
IsEmpty())
 
 1068   out << 
"<hr />" << std::endl;
 
 1070   out << 
"<table><tr><td><ul><li><tt>";
 
 1073          << docFileName << 
"\">";
 
 1081   out << 
"</tt></li></ul></td>";
 
 1085   out << 
"</tr></table>" << std::endl;
 
 1097   const char* title = 
"ClassHierarchy";
 
 1102   std::ofstream dotout(filename + 
".dot");
 
 1104   if (!dotout.good()) {
 
 1105      Error(
"CreateHierarchy", 
"Can't open file '%s.dot' !",
 
 1110   dotout << 
"digraph G {" << std::endl
 
 1111          << 
"ratio=auto;" << std::endl
 
 1112          << 
"rankdir=RL;" << std::endl;
 
 1123            Warning(
"THtml::CreateHierarchy", 
"skipping class %s\n", cdi->
GetName());
 
 1129      if (bases && !bases->
IsEmpty()) {
 
 1130         dotout << 
"\"" << cdi->
GetName() << 
"\" -> { ";
 
 1135            if (base != bases->
First())
 
 1137            dotout << 
"\"" << base->
GetName() << 
"\"";
 
 1139         dotout << 
"};" << std::endl;
 
 1142         dotout << 
"\"" << cdi->
GetName() << 
"\";" << std::endl;
 
 1149   std::ofstream out(filename + 
".html");
 
 1151      Error(
"CreateHierarchy", 
"Can't open file '%s.html' !",
 
 1159   out << 
"<h1>Class Hierarchy</h1>" << std::endl;
 
 1165   out << 
"<img usemap=\"#Map" << title << 
"\" src=\"" << title << 
".png\"/>" << std::endl;
 
 1191   dynamic_cast<std::ofstream&
>(out).
open(sourceHtmlFileName);
 
 1193      Warning(
"LocateMethodsInSource", 
"Can't open beautified source file '%s' for writing!",
 
 1194         sourceHtmlFileName.
Data());
 
 1195      sourceHtmlFileName.
Remove(0);
 
 1201   title += 
" - source file";
 
 1203   out << 
"<div id=\"codeAndLineNumbers\"><pre class=\"listing\">" << std::endl;
 
 1214         out << 
"<td></td>" << std::endl;
 
 1225      if (!classPtr) 
continue;
 
 1229      if (!bases) 
continue;
 
 1232      if (!inheritFrom) 
continue;
 
 1235         out << 
"<td>←</td><td><table><tr>" << std::endl;
 
 1237         out << 
"</tr><tr>"<<std::endl;
 
 1240      UInt_t bgcolor=255-depth*8;
 
 1241      out << 
"<td bgcolor=\"" 
 1242          << 
Form(
"#%02x%02x%02x", bgcolor, bgcolor, bgcolor)
 
 1244      out << 
"<table><tr><td>" << std::endl;
 
 1248         out << 
"<center><tt><a name=\"" << cdi->
GetName() << 
"\" href=\"" 
 1249             << htmlFile << 
"\">";
 
 1251         out << 
"</a></tt></center>";
 
 1270      out << 
"</td>" << std::endl;
 
 1272      out << 
"</tr></table></td>" << std::endl;
 
 1276      out << 
"</tr></table></td>" << std::endl;
 
 1278      out << 
"<td></td>" << std::endl;
 
 1303   if (!htmlFile.
Length()) {
 
 1305      what += 
" (source not found)";
 
 1321      Error(
"MakeTree", 
"Cannot create a TCanvas!");
 
 1343   out << 
"<div class=\"dropshadow\"><div class=\"withshadow\">";
 
 1346   out << 
"<h1><a name=\"" << anchor;
 
 1347   out << 
":description\"></a>";
 
 1350      out << 
"namespace ";
 
 1361   while ((inheritFrom = (
TBaseClass *) nextBase())) {
 
 1371         out << 
"protected ";
 
 1383         out << 
"<a href=\"" << htmlFile << 
"\">";
 
 1389   out << 
"</h1>" << std::endl;
 
 1391   out << 
"<div class=\"classdescr\">" << std::endl;
 
 1393   if (description.
Length())
 
 1394      out << 
"<pre>" << description << 
"</pre>";
 
 1398      out << 
"<h4>This class is also known as (typedefs to this class)</h4>";
 
 1400      bool firsttd = 
true;
 
 1405         else firsttd = 
false;
 
 1410   out << 
"</div>" << std::endl
 
 1411       << 
"</div></div>" << std::endl;
 
 1417   out << 
"<h2><a id=\"" << anchor
 
 1418      << 
":Class_Charts\"></a>Class Charts</h2>" << std::endl;
 
 1424   out << 
"<h2>Function documentation</h2>" << std::endl;
 
 1433   classFile << 
"<a name=\"TopOfPage\"></a>" << std::endl;
 
 1450      char* libDup=
StrDup(lib);
 
 1451      char* libDupSpace=strchr(libDup,
' ');
 
 1452      if (libDupSpace) *libDupSpace=0;
 
 1453      char* libDupEnd=libDup+strlen(libDup);
 
 1454      while (libDupEnd!=libDup)
 
 1455         if (*(--libDupEnd)==
'.') {
 
 1462   classFile << 
"<script type=\"text/javascript\">WriteFollowPageBox('" 
 1463             << sTitle << 
"','" << sLib << 
"','" << sInclude << 
"');</script>" << std::endl;
 
 1470   classFile << 
"<div class=\"descrhead\"><div class=\"descrheadcontent\">" << std::endl 
 
 1471      << 
"<span class=\"descrtitle\">Source:</span>" << std::endl;
 
 1481   if (headerFileName.
Length())
 
 1482      classFile << 
"<a class=\"descrheadentry\" href=\"src/" << classFileName
 
 1483                << 
".h.html\">header file</a>" << std::endl;
 
 1485      classFile << 
"<a class=\"descrheadentry\"> </a>" << std::endl;
 
 1487   if (sourceFileName.
Length())
 
 1488      classFile << 
"<a class=\"descrheadentry\" href=\"src/" << classFileName
 
 1489                << 
".cxx.html\">source file</a>" << std::endl;
 
 1491      classFile << 
"<a class=\"descrheadentry\"> </a>" << std::endl;
 
 1495      classFile << 
"<a class=\"descrheadentry\" href=\"" << classFileName << 
"_Tree.pdf\"";
 
 1496      classFile << 
">inheritance tree (.pdf)</a> ";
 
 1501   if (viewCVSLink.
Length()) {
 
 1502      if (headerFileName.
Length()) {
 
 1504         TString sHeader(headerFileName);
 
 1505         if (
GetHtml()->GetProductName() && !strcmp(
GetHtml()->GetProductName(), 
"ROOT")) {
 
 1507            if (posInclude != 
kNPOS) {
 
 1509               sHeader.
Remove(0, posInclude + 8);
 
 1512               posInclude = sHeader.
Index(
"/inc/");
 
 1513               if (posInclude != 
kNPOS) {
 
 1515                  sHeader += sInclude;
 
 1518            if (sourceFileName && strstr(sourceFileName, 
"src")) {
 
 1526               if (posEndLib != 
kNPOS)
 
 1530               posEndLib = src.
Index(
'.');
 
 1531               if (posEndLib != 
kNPOS)
 
 1540         if (mustReplace) link.
ReplaceAll(
"%f", sHeader);
 
 1541         else link += sHeader;
 
 1542         classFile << 
"<a class=\"descrheadentry\" href=\"" << link << 
"\">viewVC header</a> ";
 
 1544         classFile << 
"<a class=\"descrheadentry\"> </a> ";
 
 1545      if (sourceFileName.
Length()) {
 
 1547         if (mustReplace) link.
ReplaceAll(
"%f", sourceFileName);
 
 1548         else link += sourceFileName;
 
 1549         classFile << 
"<a class=\"descrheadentry\" href=\"" << link << 
"\">viewVC source</a> ";
 
 1551         classFile << 
"<a class=\"descrheadentry\"> </a> ";
 
 1560      else wikiLink += currClassNameMangled;
 
 1561      classFile << 
"<a class=\"descrheadentry\" href=\"" << wikiLink << 
"\">wiki</a> ";
 
 1564   classFile << std::endl << 
"</div></div>" << std::endl; 
 
 1566   classFile << 
"<div class=\"descrhead\"><div class=\"descrheadcontent\">" << std::endl 
 
 1567      << 
"<span class=\"descrtitle\">Sections:</span>" << std::endl
 
 1568      << 
"<a class=\"descrheadentry\" href=\"#" << currClassNameMangled;
 
 1570      classFile << 
":description\">namespace description</a> ";
 
 1572      classFile << 
":description\">class description</a> ";
 
 1573   classFile << std::endl
 
 1574      << 
"<a class=\"descrheadentry\" href=\"#" << currClassNameMangled << 
":Function_Members\">function members</a>" << std::endl
 
 1575      << 
"<a class=\"descrheadentry\" href=\"#" << currClassNameMangled << 
":Data_Members\">data members</a>" << std::endl
 
 1576      << 
"<a class=\"descrheadentry\" href=\"#" << currClassNameMangled << 
":Class_Charts\">class charts</a>" << std::endl
 
 1577      << 
"</div></div>" << std::endl 
 
 1578      << 
"</div>" << std::endl; 
 
 1593                                  const char* filename, 
TString& anchor,
 
 1598   out << 
"<div class=\"funcdoc\"><span class=\"funcname\">" 
 1599      << ret << 
" <a class=\"funcname\" name=\"";
 
 1602   out << mangled << 
":";
 
 1609   out << mangled << 
"\" href=\"src/" << filename;
 
 1611      out << 
"#" << anchor;
 
 1615   if (guessedMethod) {
 
 1621         if (!
first) out << 
", ";
 
 1624         paramGuessed += 
" ";
 
 1625         paramGuessed += arg->
GetName();
 
 1627            paramGuessed += 
" = ";
 
 1631         out << paramGuessed;
 
 1640   out << 
"</span><br />" << std::endl;
 
 1643      out << 
"<div class=\"funccomm\"><pre>" << comment << 
"</pre></div>" << std::endl;
 
 1645   if (codeOneLiner.
Length()) {
 
 1646      out << std::endl << 
"<div class=\"code\"><code class=\"inlinecode\">" 
 1647          << codeOneLiner << 
"</code></div>" << std::endl
 
 1648          << 
"<div style=\"clear:both;\"></div>" << std::endl;
 
 1651   out << 
"</div>" << std::endl;
 
R__EXTERN Int_t gErrorIgnoreLevel
 
char * Form(const char *fmt,...)
 
void Printf(const char *fmt,...)
 
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).
 
TClass * GetClassPointer(Bool_t load=kTRUE)
Get pointer to the base class TClass.
 
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
 
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.
 
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.
 
Long_t Property() const
Set TObject::fBits and fStreamerType to cache information about the class.
 
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
 
void Draw(Option_t *option="")
Draw detailed class inheritance structure.
 
TMethod * GetMethodAny(const char *method)
Return pointer to method without looking at parameters.
 
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
 
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".
 
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*".
 
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
 
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
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.
 
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...
 
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
 
virtual TObject * First() const
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();.
 
virtual const char * GetTitle() const
Returns title of object.
 
virtual const char * GetName() const
Returns name 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.
 
void ToLower()
Change string to lower-case.
 
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 SaveAs(const char *filename="", Option_t *option="") const =0
Save this object in the file specified by filename.
 
virtual void Close(Option_t *option="")=0