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;
Int_t gErrorIgnoreLevel
Error handling routines.
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.
const char * GetName() const override
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.
~TClassDocOutput() override
Destructor, deletes fParser.
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.
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 the decayed type name of this data member, removing const and volatile qualifiers,...
const char * GetFullTypeName() const
Get the concrete type name of this data member, including const and volatile qualifiers.
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