41 typedef std::vector<std::string> Words_t;
42 typedef Words_t::const_iterator SectionStart_t;
46 TSectionInfo(SectionStart_t
start,
size_t chars,
size_t size):
47 fStart(start), fChars(chars), fSize(size) {};
49 SectionStart_t fStart;
53 typedef std::list<TSectionInfo> SectionStarts_t;
55 static void Sections_BuildIndex(SectionStarts_t& sectionStarts,
56 SectionStart_t begin, SectionStart_t end,
62 SectionStart_t cursor = begin;
63 if (sectionStarts.empty() || sectionStarts.back().fStart != cursor)
64 sectionStarts.push_back(TSectionInfo(cursor, 1, 0));
66 SectionStarts_t::iterator prevSection = sectionStarts.end();
69 while (cursor != end) {
70 size_t numLeft = end - cursor;
71 size_t assumedNumSections = (numLeft + maxPerSection - 1 ) / maxPerSection;
72 size_t step = ((numLeft + assumedNumSections - 1) / assumedNumSections);
73 if (!step || step >= numLeft)
return;
75 if (cursor == end)
break;
77 SectionStart_t addWhichOne = prevSection->fStart;
79 size_t selectionChar=1;
80 for (; selectionChar <= cursor->length() && addWhichOne == prevSection->fStart;
82 SectionStart_t checkPrev = cursor;
83 while (--checkPrev != prevSection->fStart
84 && !strncasecmp(checkPrev->c_str(), cursor->c_str(), selectionChar)) { }
86 SectionStart_t checkNext = cursor;
87 while (++checkNext != end
88 && !strncasecmp(checkNext->c_str(), cursor->c_str(), selectionChar)) { }
91 if (checkPrev != prevSection->fStart) {
92 if ((cursor - checkPrev) <= (checkNext - cursor))
93 addWhichOne = ++checkPrev;
94 else if (checkNext != end
95 && (
size_t)(checkNext - cursor) < maxPerSection) {
96 addWhichOne = checkNext;
100 if (addWhichOne == prevSection->fStart)
101 addWhichOne = cursor;
104 while (selectionChar <= prevSection->fStart->length()
105 && selectionChar <= addWhichOne->length()
106 && !strncasecmp(prevSection->fStart->c_str(), addWhichOne->c_str(), selectionChar))
109 sectionStarts.push_back(TSectionInfo(addWhichOne, selectionChar, 0));
110 cursor = addWhichOne;
115 static void Sections_SetSize(SectionStarts_t& sectionStarts,
const Words_t &words)
118 for (SectionStarts_t::iterator iSectionStart = sectionStarts.begin();
119 iSectionStart != sectionStarts.end(); ++iSectionStart) {
120 SectionStarts_t::iterator next = iSectionStart;
122 if (next == sectionStarts.end()) {
123 iSectionStart->
fSize = (words.end() - iSectionStart->fStart);
126 iSectionStart->fSize = (next->fStart - iSectionStart->fStart);
130 static void Sections_PostMerge(SectionStarts_t& sectionStarts,
const size_t maxPerSection)
133 for (SectionStarts_t::iterator iSectionStart = sectionStarts.begin();
134 iSectionStart != sectionStarts.end();) {
135 SectionStarts_t::iterator iNextSectionStart = iSectionStart;
137 if (iNextSectionStart == sectionStarts.end())
break;
138 if (iNextSectionStart->fSize + iSectionStart->fSize < maxPerSection) {
139 iSectionStart->fSize += iNextSectionStart->fSize;
140 sectionStarts.erase(iNextSectionStart);
141 }
else ++iSectionStart;
145 static void GetIndexChars(
const Words_t& words,
UInt_t numSectionsIn,
146 std::vector<std::string> §ionMarkersOut)
153 const size_t maxPerSection = (words.size() + numSectionsIn - 1)/ numSectionsIn;
154 SectionStarts_t sectionStarts;
155 Sections_BuildIndex(sectionStarts, words.begin(), words.end(), maxPerSection);
156 Sections_SetSize(sectionStarts, words);
157 Sections_PostMerge(sectionStarts, maxPerSection);
160 sectionMarkersOut.clear();
161 sectionMarkersOut.resize(sectionStarts.size());
163 for (SectionStarts_t::iterator iSectionStart = sectionStarts.begin();
164 iSectionStart != sectionStarts.end(); ++iSectionStart)
165 sectionMarkersOut[idx++] =
166 iSectionStart->fStart->substr(0, iSectionStart->fChars);
169 static void GetIndexChars(
const std::list<std::string>& wordsIn,
UInt_t numSectionsIn,
170 std::vector<std::string> §ionMarkersOut)
173 Words_t
words(wordsIn.size());
175 for (std::list<std::string>::const_iterator iWord = wordsIn.begin(); iWord != wordsIn.end(); ++iWord)
176 words[idx++] = *iWord;
177 GetIndexChars(words, numSectionsIn, sectionMarkersOut);
200 return (strcasecmp(*((
char **) name1), *((
char **) name2)));
207 static void sort_strlist_stricmp(std::vector<std::string>& l)
214 posList* carr =
new posList[l.size()];
216 for (
size_t iS = 0, iSE = l.size(); iS < iSE; ++iS) {
218 carr[idx++].str = l[iS].c_str();
221 std::vector<std::string> lsort(l.size());
222 for (
size_t iS = 0, iSE = l.size(); iS < iSE; ++iS) {
223 lsort[iS].swap(l[carr[iS].pos]);
275 if (comment && strlen(comment)) {
299 TString replWithRelPath(
"=\"@!@");
300 line.
ReplaceAll(
"=\"../", replWithRelPath +
"../" + relpath);
301 line.
ReplaceAll(
"=\"./", replWithRelPath + relpath);
312 const char* outfilename,
const char *
title,
313 const char *relpath ,
Int_t includeOutput ,
314 const char* context ,
317 TString htmlFilename(outfilename);
318 htmlFilename +=
".html";
320 std::ofstream
out(htmlFilename);
323 Error(
"Convert",
"Can't open file '%s' !", htmlFilename.
Data());
330 if (context && context[0])
331 out << context << std::endl;
332 else if (title && title[0])
333 out <<
"<h1 class=\"convert\">" << title <<
"</h1>" << std::endl;
335 Int_t numReuseCanvases = 0;
344 firstCanvasFileBase +=
"_0.png";
346 Bool_t haveFirstCanvasFile =
false;
348 if (firstCanvasFileBase == outfile) {
349 haveFirstCanvasFile =
true;
356 TString firstCanvasFile = outfilename;
357 firstCanvasFile +=
"_0.png";
368 if (strncmp(outfile, stem, stem.Length()))
370 const char* posext = strrchr(outfile,
'.');
371 if (!posext || strcmp(posext,
".png"))
383 TString idxStr(outfile + stem.Length());
384 idxStr.
Remove(idxStr.Length() - 4);
391 if (maxIdx + 1 != numReuseCanvases)
394 numReuseCanvases = 0;
400 if (numReuseCanvases)
401 Printf(
"Convert: %s (reusing %d saved canvas%s)", htmlFilename.
Data(), numReuseCanvases, (numReuseCanvases > 1 ?
"es" :
""));
405 UInt_t nCanvases = numReuseCanvases;
407 if (!numReuseCanvases) {
411 TPMERegexp reOutFile(baseInFileName +
"_[[:digit:]]+\\.png");
417 const char* outdirE = 0;
419 if (reOutFile.
Match(outdirE)) {
426 gSystem->
Exec(
TString::Format(
"ROOT_HIST=0 root.exe -l -q %s $ROOTSYS/etc/html/saveScriptOutput.C\\(\\\"%s\\\",\\\"%s\\\",%d\\)",
427 gROOT->IsBatch() ?
"-b" :
"",
436 const char* outdirE = 0;
438 if (reOutFile.
Match(outdirE)) {
449 TList* gClientGetListOfWindows = 0;
450 TObject* gClientGetDefaultRoot = 0;
451 std::set<TObject*> previousWindows;
453 gROOT->ProcessLine(
TString::Format(
"*((TList**)0x%lx) = ((TGClient*)0x%lx)->GetListOfWindows();",
455 gROOT->ProcessLine(
TString::Format(
"*((TObject**)0x%lx) = ((TGClient*)0x%lx)->GetDefaultRoot();",
458 TIter iWin(gClientGetListOfWindows);
459 while((win = iWin())) {
463 if (winGetParent == gClientGetDefaultRoot)
464 previousWindows.insert(win);
467 if (
gROOT->GetListOfCanvases()->GetSize())
468 previousWindows.insert(
gROOT->GetListOfCanvases()->Last());
471 std::set<TObject*> timersBefore;
473 while ((timerOld = iTimer()))
474 timersBefore.insert(timerOld);
483 gROOT->ProcessLine(cmd, &err);
492 TIter iWin(gClientGetListOfWindows);
493 while((win = iWin())) {
498 if (winGetParent == gClientGetDefaultRoot)
501 if (winIsMapped && previousWindows.find(win) == previousWindows.end()
502 && win->InheritsFrom(clGMainFrame)) {
504 Bool_t isRootCanvas = win->InheritsFrom(clRootCanvas);
510 if (isRootCanvas && !hasEditor) {
512 gROOT->ProcessLine(
TString::Format(
"*((TVirtualPad**)0x%lx) = ((TRootCanvas*)0x%lx)->Canvas();",
514 if (!pad->HasViewer3D() || pad->GetViewer3D()->InheritsFrom(
"TViewer3DPad")) {
519 (
ULong_t)win, outfilename, nCanvases++));
526 if (!previousWindows.empty())
531 if (last == pad) last = 0;
541 while ((timer = (
TTimer*) iTimerRemove()))
542 if (timersBefore.find(timer) == timersBefore.end())
547 out <<
"<table><tr><td style=\"vertical-align:top;padding-right:2em;\">" << std::endl;
549 out <<
"<div class=\"listing\"><pre class=\"listing\">" << std::endl;
552 parser.
Convert(out, in, relpath, (includeOutput) ,
555 out <<
"</pre></div>" << std::endl;
560 out <<
"</td><td style=\"vertical-align:top;\">" << std::endl;
561 out <<
"<table>" << std::endl;
562 for (
UInt_t i = 0; i < nCanvases; ++i) {
564 out <<
"<tr><td><a href=\"" << pngname <<
"\">" << std::endl
565 <<
"<img src=\"" << pngname <<
"\" id=\"canv" << i <<
"\" alt=\"thumb\" style=\"border:none;width:22em;\" "
566 "onmouseover=\"javascript:canv" << i <<
".style.width='auto';\" />" << std::endl
567 <<
"</a></td></tr>" << std::endl;
569 out <<
"</table>" << std::endl;
570 out <<
"</td></tr></table>" << std::endl;
597 TString sourceFile(sourceName);
599 if (!sourceFile.
Length()) {
600 Error(
"Copy",
"Can't copy file '%s' to '%s' directory - source file name invalid!", sourceName,
607 if (!destName || !*destName)
616 Long_t id, flags, sModtime, dModtime;
621 || sModtime > dModtime)
623 Error(
"Copy",
"Can't copy file '%s' to '%s'!",
624 sourceFile.
Data(), destFile.
Data());
648 std::ofstream
out(filename);
651 Error(
"CreateHierarchy",
"Can't open file '%s' !", filename.
Data());
662 out <<
"<h1>Class Hierarchy</h1>" << std::endl;
677 Warning(
"THtml::CreateHierarchy",
"skipping class %s\n", cdi->
GetName());
702 std::ofstream indexFile(filename.
Data());
704 if (!indexFile.good()) {
705 Error(
"CreateClassIndex",
"Can't open file '%s' !", filename.
Data());
716 indexFile <<
"<h1>Class Index</h1>" << std::endl;
720 std::vector<std::string> indexChars;
722 std::vector<std::string> classNames;
727 if (cdi->IsSelected() && cdi->HaveSource())
728 classNames.push_back(cdi->GetName());
731 if (classNames.size() > 10) {
732 indexFile <<
"<div id=\"indxShortX\"><h4>Jump to</h4>" << std::endl;
734 GetIndexChars(classNames, 50 , indexChars);
735 for (
UInt_t iIdxEntry = 0; iIdxEntry < indexChars.size(); ++iIdxEntry) {
736 indexFile <<
"<a href=\"#idx" << iIdxEntry <<
"\">";
738 indexFile <<
"</a>" << std::endl;
740 indexFile <<
"</div><br />" << std::endl;
744 indexFile <<
"<ul id=\"indx\">" << std::endl;
747 UInt_t currentIndexEntry = 0;
752 if (!cdi->IsSelected() || !cdi->HaveSource())
757 TClass* currentClass =
dynamic_cast<TClass*
>(currentDict);
760 Warning(
"THtml::CreateClassIndex",
"skipping class %s\n", cdi->GetName());
764 indexFile <<
"<li class=\"idxl" << (i++)%2 <<
"\">";
765 if (currentIndexEntry < indexChars.size()
766 && !strncmp(indexChars[currentIndexEntry].c_str(), cdi->GetName(),
767 indexChars[currentIndexEntry].length()))
768 indexFile <<
"<a name=\"idx" << currentIndexEntry++ <<
"\"></a>";
770 TString htmlFile(cdi->GetHtmlFileName());
771 if (htmlFile.Length()) {
772 indexFile <<
"<a href=\"";
773 indexFile << htmlFile;
774 indexFile <<
"\"><span class=\"typename\">";
776 indexFile <<
"</span></a> ";
778 indexFile <<
"<span class=\"typename\">";
780 indexFile <<
"</span> ";
785 indexFile <<
"</li>" << std::endl;
788 indexFile <<
"</ul>" << std::endl;
803 const char*
title =
"LibraryDependencies";
807 std::ofstream libDepDotFile(dotfilename +
".dot");
808 libDepDotFile <<
"digraph G {" << std::endl
809 <<
"ratio=compress;" << std::endl
810 <<
"node [fontsize=22,labeldistance=0.1];" << std::endl
811 <<
"edge [len=0.01];" << std::endl
812 <<
"fontsize=22;" << std::endl
813 <<
"size=\"16,16\";" << std::endl
814 <<
"overlap=false;" << std::endl
815 <<
"splines=true;" << std::endl
816 <<
"K=0.1;" << std::endl;
821 std::stringstream sstrCluster;
822 std::stringstream sstrDeps;
827 std::vector<std::string> indexChars;
833 std::ofstream outputFile(
filename.Data());
834 if (!outputFile.good()) {
835 Error(
"CreateModuleIndex",
"Can't open file '%s' !",
filename.Data());
840 TString htmltitle(
"Index of ");
843 htmltitle += moduletitle;
848 outputFile <<
"<h2>" << htmltitle <<
"</h2>" << std::endl;
851 if (
GetHtml()->GetModuleDocPath().Length()) {
862 std::list<std::string> classNames;
867 if (!cdi->IsSelected() || !cdi->HaveSource())
869 classNames.push_back(cdi->GetName());
871 if (classNames.size() > 1)
continue;
873 TClass* cdiClass =
dynamic_cast<TClass*
>(cdi->GetClass());
880 if (posDepLibs !=
kNPOS)
900 if (posDepLibs !=
kNPOS) {
902 for(
Ssiz_t pos = posDepLibs + 1; libs[pos]; ++pos) {
903 if (libs[pos] ==
' ') {
904 if (thisLib.
Length() && lib.length()) {
905 size_t posExt = lib.find(
'.');
906 if (posExt != std::string::npos)
914 if (lib.length() && thisLib.
Length()) {
915 size_t posExt = lib.find(
'.');
916 if (posExt != std::string::npos)
927 UInt_t currentIndexEntry = 0;
929 if (!cdi->IsSelected() || !cdi->HaveSource())
934 Error(
"CreateModuleIndex",
"Unknown class '%s' !", cdi->GetName());
939 outputFile <<
"<h2>Class Index</h2>" << std::endl;
941 if (classNames.size() > 10) {
942 outputFile <<
"<div id=\"indxShortX\"><h4>Jump to</h4>" << std::endl;
943 UInt_t numSections = classNames.size() / 10;
944 if (numSections < 10) numSections = 10;
945 if (numSections > 50) numSections = 50;
947 GetIndexChars(classNames, numSections, indexChars);
948 for (
UInt_t iIdxEntry = 0; iIdxEntry < indexChars.size(); ++iIdxEntry) {
949 outputFile <<
"<a href=\"#idx" << iIdxEntry <<
"\">";
951 outputFile <<
"</a>" << std::endl;
953 outputFile <<
"</div><br />" << std::endl;
956 outputFile <<
"<ul id=\"indx\">" << std::endl;
960 outputFile <<
"<li class=\"idxl" << (count++)%2 <<
"\">";
961 if (currentIndexEntry < indexChars.size()
962 && !strncmp(indexChars[currentIndexEntry].c_str(), cdi->GetName(),
963 indexChars[currentIndexEntry].length()))
964 outputFile <<
"<a name=\"idx" << currentIndexEntry++ <<
"\"></a>";
966 TString htmlFile(cdi->GetHtmlFileName());
967 if (htmlFile.Length()) {
968 outputFile <<
"<a href=\"";
969 outputFile << htmlFile;
970 outputFile <<
"\"><span class=\"typename\">";
972 outputFile <<
"</span></a> ";
974 outputFile <<
"<span class=\"typename\">";
976 outputFile <<
"</span> ";
981 outputFile <<
"</li>" << std::endl;
986 outputFile <<
"</ul>" << std::endl;
1010 if (!libinfo->GetName() || !libinfo->GetName()[0])
continue;
1013 for (std::set<std::string>::iterator iDep = deps.begin();
1014 iDep != deps.end(); ) {
1016 for (std::set<std::string>::const_iterator iDep2 = deps.begin();
1017 !already_indirect && iDep2 != deps.end(); ++iDep2) {
1018 if (iDep == iDep2)
continue;
1021 if (!libinfo2)
continue;
1023 already_indirect |= deps2.find(*iDep) != deps2.end();
1025 if (already_indirect) {
1026 std::set<std::string>::iterator iRemove = iDep;
1029 deps.erase(iRemove);
1038 if (!libinfo->GetName() || !libinfo->GetName()[0])
continue;
1040 const std::set<std::string>& modules = libinfo->GetModules();
1041 if (modules.size() > 1) {
1042 sstrCluster <<
"subgraph cluster" << libinfo->GetName() <<
" {" << std::endl
1043 <<
"style=filled;" << std::endl
1044 <<
"color=lightgray;" << std::endl
1046 if (!strcmp(libinfo->GetName(),
"libCore"))
1047 sstrCluster <<
"Everything depends on ";
1048 sstrCluster << libinfo->GetName() <<
"\";" << std::endl;
1050 for (std::set<std::string>::const_iterator iModule = modules.begin();
1051 iModule != modules.end(); ++iModule) {
1055 sstrCluster <<
"\"" << *iModule <<
"\" [style=filled,color=white,URL=\""
1056 << modURL <<
"_Index.html\"];" << std::endl;
1058 sstrCluster << std::endl
1059 <<
"}" << std::endl;
1062 TString modURL(*modules.begin());
1065 sstrCluster <<
"\"" << *modules.begin()
1066 <<
"\" [label=\"" << libinfo->GetName()
1067 <<
"\",style=filled,color=lightgray,shape=box,URL=\""
1068 << modURL <<
"_Index.html\"];" << std::endl;
1078 const std::string& mod = *(modules.begin());
1079 const std::set<std::string>& deps = libinfo->GetDependencies();
1080 for (std::set<std::string>::const_iterator iDep = deps.begin();
1081 iDep != deps.end(); ++iDep) {
1085 if (!depLibInfo || depLibInfo->
GetModules().empty())
1088 const std::string& moddep = *(depLibInfo->
GetModules().begin());
1089 sstrDeps <<
"\"" << mod <<
"\" -> \"" << moddep <<
"\";" << std::endl;
1092 sstrDeps <<
"\"" << mod <<
"\" -> \"CONT\" [style=invis];" << std::endl;
1095 libDepDotFile << sstrCluster.str() << std::endl
1097 libDepDotFile <<
"}" << std::endl;
1098 libDepDotFile.close();
1100 std::ofstream
out(dotfilename +
".html");
1102 Error(
"CreateModuleIndex",
"Can't open file '%s.html' !",
1103 dotfilename.
Data());
1113 out <<
"<h1>Library Dependencies</h1>" << std::endl;
1117 out <<
"<img alt=\"Library Dependencies\" class=\"classcharts\" usemap=\"#Map" << title <<
"\" src=\"" << title <<
".png\"/>" << std::endl;
1131 TString outFile(
"index.html");
1133 std::ofstream
out(outFile);
1136 Error(
"CreateProductIndex",
"Can't open file '%s' !", outFile.
Data());
1149 if (
GetHtml()->GetPathDefinition().GetDocDir(
"", prodDoc))
1154 out <<
"<h2>Chapters</h2>" << std::endl
1155 <<
"<h3><a href=\"./ClassIndex.html\">Class Index</a></h3>" << std::endl
1156 <<
"<p>A complete list of all classes defined in " <<
GetHtml()->
GetProductName() <<
"</p>" << std::endl
1157 <<
"<h3><a href=\"./ClassHierarchy.html\">Class Hierarchy</a></h3>" << std::endl
1158 <<
"<p>A hierarchy graph of all classes, showing each class's base and derived classes</p>" << std::endl
1159 <<
"<h3><a href=\"./ListOfTypes.html\">Type Index</a></h3>" << std::endl
1160 <<
"<p>A complete list of all types</p>" << std::endl
1161 <<
"<h3><a href=\"./LibraryDependencies.html\">Library Dependency</a></h3>" << std::endl
1162 <<
"<p>A diagram showing all of " <<
GetHtml()->
GetProductName() <<
"'s libraries and their dependencies</p>" << std::endl;
1181 while ((dt = (
TDataType*) iTypedefs())) {
1183 Info(
"CreateClassTypeDefs",
"Creating typedef %s to class %s",
1184 dt->GetName(), cdi->
GetName());
1196 if (!outfile.good()) {
1197 Error(
"CreateClassTypeDefs",
"Can't open file '%s' !",
filename.Data());
1203 outfile <<
"<a name=\"TopOfPage\"></a>" << std::endl;
1205 TString dtName(dt->GetName());
1219 char* libDup=
StrDup(lib);
1220 char* libDupSpace=strchr(libDup,
' ');
1221 if (libDupSpace) *libDupSpace = 0;
1222 char* libDupEnd=libDup+strlen(libDup);
1223 while (libDupEnd!=libDup)
1224 if (*(--libDupEnd)==
'.') {
1231 outfile <<
"<script type=\"text/javascript\">WriteFollowPageBox('"
1232 << sTitle <<
"','" << sLib <<
"','" << sInclude <<
"');</script>" << std::endl;
1240 outfile <<
"<div class=\"dropshadow\"><div class=\"withshadow\">";
1241 outfile <<
"<h1>" << sTitle <<
"</h1>" << std::endl
1242 <<
"<div class=\"classdescr\">" << std::endl;
1244 outfile << dtName <<
" is a typedef to ";
1247 outfile << std::endl
1248 <<
"</div>" << std::endl
1249 <<
"</div></div><div style=\"clear:both;\"></div>" << std::endl;
1252 outfile << std::endl <<
"<div id=\"datamembers\">" << std::endl
1253 <<
"<table class=\"data\" cellspacing=\"0\">" << std::endl;
1254 outfile <<
"<tr class=\"data";
1255 outfile <<
"\"><td class=\"datatype\">typedef ";
1257 outfile <<
"</td><td class=\"dataname\">";
1259 if (dt->GetTitle() && dt->GetTitle()[0]) {
1260 outfile <<
"</td><td class=\"datadesc\">";
1262 }
else outfile <<
"</td><td>";
1263 outfile <<
"</td></tr>" << std::endl
1264 <<
"</table></div>" << std::endl;
1279 TString outFile(
"ListOfTypes.html");
1281 std::ofstream typesList(outFile);
1283 if (!typesList.good()) {
1284 Error(
"CreateTypeIndex",
"Can't open file '%s' !", outFile.
Data());
1292 typesList <<
"<h2> List of data types </h2>" << std::endl;
1294 typesList <<
"<dl><dd>" << std::endl;
1297 std::vector<std::string> typeNames(
gROOT->GetListOfTypes()->GetSize());
1304 while ((type = (
TDataType *) nextType()))
1307 && !( strchr(type->
GetName(),
'<') && strchr(type->
GetName(),
'>'))
1309 typeNames[tnIdx++] = type->
GetName();
1310 typeNames.resize(tnIdx);
1313 sort_strlist_stricmp(typeNames);
1315 std::vector<std::string> indexChars;
1316 if (typeNames.size() > 10) {
1317 typesList <<
"<div id=\"indxShortX\"><h4>Jump to</h4>" << std::endl;
1319 GetIndexChars(typeNames, 10 , indexChars);
1320 for (
UInt_t iIdxEntry = 0; iIdxEntry < indexChars.size(); ++iIdxEntry) {
1321 typesList <<
"<a href=\"#idx" << iIdxEntry <<
"\">";
1323 typesList <<
"</a>" << std::endl;
1325 typesList <<
"</div><br />" << std::endl;
1328 typesList <<
"<ul id=\"indx\">" << std::endl;
1331 UInt_t currentIndexEntry = 0;
1333 for (std::vector<std::string>::iterator iTypeName = typeNames.begin();
1334 iTypeName != typeNames.end(); ++iTypeName) {
1336 typesList <<
"<li class=\"idxl" << idx%2 <<
"\">";
1337 if (currentIndexEntry < indexChars.size()
1338 && !strncmp(indexChars[currentIndexEntry].c_str(), iTypeName->c_str(),
1339 indexChars[currentIndexEntry].length()))
1340 typesList <<
"<a name=\"idx" << currentIndexEntry++ <<
"\"></a>" << std::endl;
1341 typesList <<
"<a name=\"";
1343 typesList <<
"\"><span class=\"typename\">";
1345 typesList <<
"</span></a> ";
1347 typesList <<
"</li>" << std::endl;
1350 typesList <<
"</ul>" << std::endl;
1375 str.
Insert(pos,
"<span class=\"comment\">");
1380 str.
Insert(pos,
"<span class=\"string\">");
1383 str.
Insert(pos,
"<span class=\"keyword\">");
1386 str.
Insert(pos,
"<span class=\"cpp\">");
1389 str.
Insert(pos,
"<pre>");
1392 Error(
"DecorateEntityBegin",
"Unhandled / invalid entity type %d!", (
Int_t)type);
1415 str.
Insert(pos,
"</span>");
1420 str.
Insert(pos,
"</span>");
1423 str.
Insert(pos,
"</span>");
1426 str.
Insert(pos,
"</span>");
1429 str.
Insert(pos,
"</pre>");
1432 Error(
"DecorateEntityBegin",
"Unhandled / invalid entity type %d!", (
Int_t)type);
1457 while (original.
Tokenize(author, pos,
",")) {
1466 if (cLink !=
kNPOS) {
1470 if(endLink ==
kNPOS)
1471 endLink = author.
Length();
1472 authors +=
"<a href=\"";
1473 authors += author(cLink + 1, endLink - (cLink + 1));
1475 authors += author(0, cLink);
1477 if (endLink != author.
Length())
1478 authors += author(endLink + 1, author.
Length());
1480 authors +=
"<a href=\"";
1487 while (author.
Tokenize(namePart, posNamePart,
" ")) {
1491 if (isdigit(namePart[0]))
continue;
1495 authors += namePart;
1532 Long_t id, flags, iModtime, dModtime;
1535 if (iModtime < dModtime) {
1537 sourceFile = declFile;
1543 filename = classname;
1547 filename +=
".cxx.html";
1549 filename +=
".h.html";
1564 filename = classname;
1565 filename +=
"_Tree.pdf";
1576 Long_t id, flags, iModtime, dModtime;
1579 if (iModtime < dModtime) {
1581 sourceFile = declFile;
1585 filename = classname;
1588 filename +=
".html";
1593 Error(
"IsModified",
"Unknown file type !");
1600 Long_t id, flags, sModtime, dModtime;
1604 return (sModtime > dModtime);
1622 if (posTemplate !=
kNPOS) {
1625 TString templateArgs = encScope(posTemplate, encScope.
Length());
1633 if (posName !=
kNPOS) {
1635 while (numDblColumn > 1) {
1640 posName = encScope.
Last(
':');
1641 if (posName ==
kNPOS)
1648 if (name.
Length() > 240) {
1658 if (posDot !=
kNPOS)
1661 name =
name(0, namelen) + hash + ext;
1664 const char* replaceWhat =
":<> ,~=";
1666 if (strchr(replaceWhat, name[i]))
1678 const char* outdir,
const char* linkdir)
1683 if (!dirHandle)
return;
1685 const char*
entry = 0;
1686 std::list<std::string> files;
1699 std::ifstream in(filename);
1707 std::ifstream in(filename);
1711 out << line << std::endl;
1714 files.push_back(filename.
Data());
1716 files.push_back(filename.
Data());
1719 std::stringstream furtherReading;
1721 for (std::list<std::string>::const_iterator iFile = files.begin();
1722 iFile != files.end(); ++iFile) {
1727 Error(
"CreateModuleIndex",
"Cannot create output directory %s", outdir);
1736 Error(
"CreateModuleIndex",
"Cannot copy file %s to %s",
1749 std::ofstream outFurther(
outfile);
1750 if (inFurther && outFurther) {
1751 outFurther <<
"<pre>";
1754 outFurther <<
"</pre>";
1761 furtherReading <<
"<a class=\"linkeddoc\" href=\"" << linkdir <<
"/" << showname <<
"\">";
1762 showname.
Remove(showname.Length() - 5, 5);
1765 furtherReading <<
"</a> " << std::endl;
1769 if (furtherReading.str().length())
1770 out <<
"<h3>Further Reading</h3><div id=\"furtherreading\">" << std::endl
1771 << furtherReading.str() <<
"</div><h3>List of Classes</h3>" << std::endl;
1794 if (comment && !strcmp(comment, entity->
GetName()))
1824 mangledName = scope->
GetName();
1826 link += mangledName;
1830 mangledName = entity->
GetName();
1832 link += mangledName;
1839 description += scope->
GetName();
1840 description +=
"::";
1842 description += entity->
GetName();
1843 comment = description.
Data();
1846 if (comment && !strcmp(comment, entity->
GetName()))
1874 bool isClassTypedef = entity->
GetType() == -1;
1877 isClassTypedef = isClassTypedef && (entity->
Property() & 7);
1878 if (isClassTypedef) {
1883 link = mangledEntity +
".html";
1885 link =
"ListOfTypes.html#";
1886 link += mangledEntity;
1889 if (comment && !strcmp(comment, entity->
GetName()))
1919 link += mangledName;
1922 mangledName = entity->
GetName();
1924 link += mangledName;
1927 if (!comment && entity->
GetClass()) {
1930 while ((mCand = (
TMethod*)iMeth()))
1931 if (!strcmp(mCand->GetName(), entity->
GetName())) {
1932 if (description.
Length()) {
1933 description +=
" or overloads";
1936 description = mCand->GetPrototype();
1938 comment = description.
Data();
1941 if (comment && !strcmp(comment, entity->
GetName()))
1954 return !reference ||
1955 strncmp(reference,
"http", 4) ||
1956 (strncmp(reference + 4,
"://", 3) && strncmp(reference + 4,
"s://", 4));
1977 case '<':
return "<";
1978 case '&':
return "&";
1979 case '>':
return ">";
1995 const char c = text[pos];
1998 text.
Replace(pos, 1, replaced);
1999 pos += strlen(replaced) - 1;
2013 while (pos < text.
Length())
2027 while (
string && *
string) {
2048 case kNeato: runDot =
"neato";
break;
2049 case kFdp: runDot =
"fdp";
break;
2050 case kCirco: runDot =
"circo";
break;
2051 default: runDot =
"dot";
2055 runDot +=
" -q1 -Tpng -o";
2059 runDot +=
"-Tcmap -o";
2067 Info(
"RunDot",
"Running: %s", runDot.
Data());
2069 if (
gDebug < 4 && !retDot)
2072 if (!retDot && outMap) {
2073 std::ifstream inmap(
Form(
"%s.map", filename));
2075 std::getline(inmap, line);
2076 if (inmap && !inmap.eof()) {
2078 <<
"\" id=\"Map" <<
gSystem->
BaseName(filename) <<
"\">" << std::endl;
2079 while (inmap && !inmap.eof()) {
2080 if (line.compare(0, 6,
"<area ") == 0) {
2081 size_t posEndTag = line.find(
'>');
2082 if (posEndTag != std::string::npos)
2083 line.replace(posEndTag, 1,
"/>");
2085 *outMap << line << std::endl;
2086 std::getline(inmap, line);
2088 *outMap <<
"</map>" << std::endl;
2096 Error(
"RunDot",
"Error running %s!", runDot.
Data());
2114 std::ifstream addHeaderFile(header);
2116 if (!addHeaderFile.good()) {
2117 Warning(
"THtml::WriteHtmlHeader",
2118 "Can't open html header file %s\n", header);
2132 while (!addHeaderFile.eof()) {
2134 line.ReadLine(addHeaderFile,
kFALSE);
2135 if (addHeaderFile.eof())
2141 line.Index(
"%CLASS%") !=
kNPOS ||
2142 line.Index(
"%INCFILE%") !=
kNPOS ||
2143 line.Index(
"%SRCFILE%") !=
kNPOS))
2159 out << txt << std::endl;
2194 TString noSpecialCharTitle(title);
2199 Bool_t bothHeaders = lenUserHeader > 0 && userHeader[lenUserHeader - 1] ==
'+';
2200 if (lenUserHeader == 0 || bothHeaders) {
2201 TString header(
"header.html");
2206 if (lenUserHeader != 0) {
2208 userHeader.Remove(lenUserHeader - 1);
2219 const char* lastUpdate,
const char* author,
2220 const char* copyright,
const char* footer)
2222 static const char* templateSITags[
TDocParser::kNumSourceInfos] = {
"%UPDATE%",
"%AUTHOR%",
"%COPYRIGHT%",
"%CHANGED%",
"%GENERATED%"};
2229 if (!lastUpdate || !lastUpdate[0]) {
2234 std::ifstream addFooterFile(footer);
2236 if (!addFooterFile.good()) {
2237 Warning(
"THtml::WriteHtmlFooter",
2238 "Can't open html footer file %s\n", footer);
2243 while (!addFooterFile.eof()) {
2246 if (addFooterFile.eof())
2254 if (siPos !=
kNPOS) {
2255 if (siValues[siTag] && siValues[siTag][0])
2256 line.
Replace(siPos, strlen(templateSITags[siTag]), siValues[siTag]);
2262 out << line << std::endl;
2289 const char *lastUpdate,
const char *author,
2290 const char *copyright)
2296 if (userFooter.
Length() != 0) {
2304 TString footer(
"footer.html");
2316 out <<
"<div id=\"indxModules\"><h4>Modules</h4>" << std::endl;
2322 if (!module->GetName() || strchr(module->GetName(),
'/'))
2324 if (module->IsSelected()) {
2327 out <<
"<a href=\"" <<
name <<
"_Index.html\">"
2328 <<
name <<
"</a>" << std::endl;
2331 out<<
"</div><br />" << std::endl;
2343 out <<
"<div id=\"linenums\">";
2344 for (
Long_t i = 0; i < nLines; ++i) {
2346 out <<
"<div class=\"ln\"> <span class=\"lnfile\">" << infileBase
2347 <<
":</span><a name=\"" << i + 1 <<
"\" href=\"#" << i + 1
2348 <<
"\" class=\"ln\">" << i + 1 <<
"</a></div>";
2350 out <<
"</div>" << std::endl;
2362 out <<
"<div id=\"indxModules\"><h4>" << superName <<
" Modules</h4>" << std::endl;
2368 if (module->IsSelected()) {
2374 if (posSlash !=
kNPOS)
2375 name.Remove(0, posSlash + 1);
2376 out <<
"<a href=\"" << link <<
"_Index.html\">" <<
name <<
"</a>" << std::endl;
2379 out<<
"</div><br />" << std::endl;
2396 if (searchCmd.
Length()) {
2397 TUrl url(searchCmd);
2399 if (serverName.Length()) {
2400 serverName.
Prepend(
" title=\"");
2401 serverName +=
"\" ";
2404 out <<
"<script type=\"text/javascript\">" << std::endl
2405 <<
"function onSearch() {" << std::endl
2406 <<
"var s='" << searchCmd <<
"';" << std::endl
2407 <<
"var ref=String(document.location.href).replace(/https?:\\/\\//,'').replace(/\\/[^\\/]*$/,'').replace(/\\//g,'%2F');" << std::endl
2408 <<
"window.location.href=s.replace(/%u/ig,ref).replace(/%s/ig,escape(document.searchform.t.value));" << std::endl
2409 <<
"return false;}" << std::endl
2410 <<
"</script>" << std::endl
2411 <<
"<form id=\"searchform\" name=\"searchform\" onsubmit=\"return onSearch()\" action=\"javascript:onSearch();\" method=\"post\">" << std::endl
2412 <<
"<input name=\"t\" size=\"30\" value=\"Search documentation...\" onfocus=\"if (document.searchform.t.value=='Search documentation...') document.searchform.t.value='';\"></input>" << std::endl
2413 <<
"<a id=\"searchlink\" " << serverName <<
" href=\"javascript:onSearch();\" onclick=\"return onSearch()\">Search</a></form>" << std::endl;
2414 }
else if (searchEngine.
Length())
2416 out <<
"<a class=\"descrheadentry\" href=\"" << searchEngine
2417 <<
"\">Search the Class Reference Guide</a>" << std::endl;
2426 out <<
"<div class=\"location\">" << std::endl;
2428 out <<
"<a class=\"locationlevel\" href=\"index.html\">" << productName <<
"</a>" << std::endl;
2436 while (modulename.Tokenize(modulePart, pos,
"/")) {
2437 if (pos ==
kNPOS && !classname)
2440 if (modulePath.
Length()) modulePath +=
"_";
2441 modulePath += modulePart;
2442 out <<
" » <a class=\"locationlevel\" href=\"./" << modulePath <<
"_Index.html\">" << modulePart <<
"</a>" << std::endl;
2447 if (classname) entityName = classname;
2449 entityName = module->
GetName();
2451 if (posSlash !=
kNPOS)
2452 entityName.
Remove(0, posSlash + 1);
2455 if (entityName.
Length()) {
2456 out <<
" » <a class=\"locationlevel\" href=\"#TopOfPage\">";
2458 out <<
"</a>" << std::endl;
2460 out <<
"</div>" << std::endl;
2472 out <<
"<div id=\"toplinks\">" << std::endl;
2474 out <<
"<div class=\"descrhead\"><div class=\"descrheadcontent\">" << std::endl
2475 <<
"<span class=\"descrtitle\">Quick Links:</span>" << std::endl;
2482 }
else if (!strcmp(productName,
"ROOT")) {
2485 if (userHomePage && *userHomePage)
2486 out <<
"<a class=\"descrheadentry\" href=\"" << userHomePage <<
"\">" << productName <<
"</a>" << std::endl;
2487 out <<
"<a class=\"descrheadentry\" href=\"http://root.cern.ch\">ROOT Homepage</a>" << std::endl
2488 <<
"<a class=\"descrheadentry\" href=\"./ClassIndex.html\">Class Index</a>" << std::endl
2489 <<
"<a class=\"descrheadentry\" href=\"./ClassHierarchy.html\">Class Hierarchy</a></div>" << std::endl;
2491 out <<
"</div>" << std::endl;
2494 out <<
"</div>" << std::endl;
const char * GetHost() const
A zero length substring is legal.
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual const char * GetTitle() const
Returns title of object.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
Ssiz_t Last(char c) const
Find last occurrence of a character c.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
virtual void CreateProductIndex()
Fetch documentation from THtml::GetProductDocDir() and put it into the product index page...
Bool_t HaveDot()
Check whether dot is available in $PATH or in the directory set by SetDotPath()
virtual void CreateTypeIndex()
Create index of all data types.
void CreateClassHierarchy(std::ostream &out, const char *docFileName)
Create the hierarchical class list part for the current class's base classes.
ClassImp(TSeqCollection) Int_t TSeqCollection TIter next(this)
Return index of object in collection.
virtual void CreateAuxiliaryFiles() const
copy CSS, javascript file, etc to the output dir
All ROOT classes may have RTTI (run time type identification) support added.
This class represents a WWW compatible URL.
TString & ReplaceAll(const TString &s1, const TString &s2)
int GetPathInfo(const char *path, Long_t *id, Long_t *size, Long_t *flags, Long_t *modtime)
Get info about a file: id, size, flags, modification time.
std::istream & ReadLine(std::istream &str, Bool_t skipWhite=kTRUE)
Read a line from stream upto newline skipping any whitespace.
const char * GetFullTypeName() const
Get full type description of typedef, e,g.: "class TDirectory*".
void AddDependency(const std::string &lib)
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
void ToUpper()
Change string to upper case.
static const char * filename()
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
Bool_t cd(const char *path)
const TPathDefinition & GetPathDefinition() const
Return the TModuleDefinition (or derived) object as set by SetModuleDefinition(); create and return a...
virtual void CreateModuleIndex()
Create the class index for each module, picking up documentation from the module's TModuleDocInfo::Ge...
virtual const char * DirName(const char *pathname)
Return the directory name in pathname.
virtual TTimer * RemoveTimer(TTimer *t)
Remove timer from list of system timers.
void ProcessDocInDir(std::ostream &out, const char *indir, const char *outdir, const char *linkdir)
Write links to files indir/*.txt, indir/*.html (non-recursive) to out.
Bool_t CopyHtmlFile(const char *sourceName, const char *destName="")
Copy file to HTML directory.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
std::set< std::string > & GetDependencies()
TString & Prepend(const char *cs)
const char * ShortType(const char *name) const
Get short type name, i.e. with default templates removed.
void WriteModuleLinks(std::ostream &out)
Create a div containing links to all topmost modules.
virtual const char * GetName() const
Returns name of object.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Insert(Ssiz_t pos, const char *s)
virtual void DecorateEntityBegin(TString &str, Ssiz_t &pos, TDocParser::EParseContext type)
Add some colors etc to a source entity, contained in str.
const char * GetCounterFormat() const
const char * GetFullTypeName() const
Get full type description of data member, e,g.: "class TDirectory*".
virtual bool GetDocDir(const TString &module, TString &doc_dir) const
Determine the module's documentation directory.
Bool_t R_ISREG(Int_t mode)
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
Make a file system directory.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
virtual void Sort(Bool_t order=kSortAscending)
Sort linked list.
virtual void SaveAs(const char *filename="", Option_t *option="") const =0
Save this object in the file specified by filename.
virtual void DecorateEntityEnd(TString &str, Ssiz_t &pos, TDocParser::EParseContext type)
Add some colors etc to a source entity, contained in str.
const char * Data() const
virtual const char * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries.
ClassImp(RooList) TObjOptLink *RooList TObjLink * link
Find the link corresponding to the named object in this list.
virtual int Unlink(const char *name)
Unlink, i.e. remove, a file.
virtual void GetModuleNameForClass(TString &module, TClass *cl) const
Return the module name for a given class.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
std::set< std::string > & GetModules()
virtual TSeqCollection * GetListOfTimers() const
TDictionary * GetClass() const
TList * GetLibraryDependencies()
virtual void CreateHierarchy()
Create a hierarchical class list The algorithm descends from the base classes and branches into all d...
static int CaseInsensitiveSort(const void *name1, const void *name2)
Friend function for sorting strings, case insensitive.
virtual Bool_t IsEmpty() const
void Convert(std::ostream &out, std::istream &in, const char *relpath, Bool_t isCode, Bool_t interpretDirectives)
Parse text file "in", add links etc, and write output to "out".
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...
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
std::vector< std::vector< double > > Data
Int_t Atoi() const
Return integer value of string.
void WriteHtmlFooter(std::ostream &out, const char *dir, const char *lastUpdate, const char *author, const char *copyright, const char *footer)
Write HTML footer.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
const char * GetCounter() const
void WriteLocation(std::ostream &out, TModuleDocInfo *module, const char *classname=0)
make a link to the description
TVirtualPad is an abstract base class for the Pad and Canvas classes.
const TList * GetListOfClasses() const
Long_t Property() const
Get property description word. For meaning of bits see EProperty.
const TString & GetXwho() const
virtual void AdjustSourcePath(TString &line, const char *relpath="../")
adjust the path of links for source files, which are in src/, but need to point to relpath (usually "...
TList & GetListOfTypedefs()
Bool_t IsSelected() const
const TString & GetHomepage() const
virtual void ReferenceEntity(TSubString &str, TClass *entity, const char *comment=0)
Create a reference to a class documentation page.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
R__EXTERN TSystem * gSystem
TPaveLabel title(3, 27.1, 15, 28.7,"ROOT Environment and Tools")
TClass * GetClass() const
Basic data type descriptor (datatype information is obtained from CINT).
virtual const char * ReplaceSpecialChars(char c)
Replace ampersand, less-than and greater-than character, writing to out.
This class defines an abstract interface that must be implemented by all classes that contain diction...
static void AnchorFromLine(const TString &line, TString &anchor)
Create an anchor from the given line, by hashing it and convertig the hash into a custom base64 strin...
const TString & GetFooter() const
virtual void NameSpace2FileName(TString &name)
Replace "::" in name by "__" Replace "<", ">", " ", ",", "~", "=" in name by "_" Replace "A::X<A::Y>"...
virtual Bool_t ReferenceIsRelative(const char *reference) const
Check whether reference is a relative reference, and can (or should) be prependen by relative paths...
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
virtual void CreateClassTypeDefs()
Create a forwarding page for each typedef pointing to a class.
char * Form(const char *fmt,...)
Handles synchronous and a-synchronous timer events.
Long_t GetLineNumber() const
virtual const char * GetName() const
Returns name of object.
TSubString Strip(EStripType s=kTrailing, char c= ' ') const
Return a substring of self stripped at beginning and/or end.
The ROOT global object gROOT contains a list of all defined classes.
virtual Int_t Exec(const char *shellcmd)
Execute a command.
Int_t CountChar(Int_t c) const
Return number of times character c occurs in the string.
virtual void WriteSearch(std::ostream &out)
Write a search link or a search box, based on THtml::GetSearchStemURL() and THtml::GetSearchEngine()...
virtual void FreeDirectory(void *dirp)
Free a directory.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
void WriteHtmlHeader(std::ostream &out, const char *titleNoSpecial, const char *dir, TClass *cls, const char *header)
Write HTML header.
virtual Bool_t IsModified(TClass *classPtr, EFileType type)
Check if file is modified.
char * StrDup(const char *str)
Duplicate the string str.
virtual void FixupAuthorSourceInfo(TString &authors)
Special author treatment; called when TDocParser::fSourceInfo[kInfoAuthor] is set.
TString & Remove(Ssiz_t pos)
Short_t GetImplFileLine() const
virtual bool GetDeclFileName(TClass *cl, Bool_t filesys, TString &out_name) const
Return declaration file name; return the full path if filesys is true.
TClass * GetClass() const
virtual Int_t GetSize() const
void Convert(std::istream &in, const char *infilename, const char *outfilename, const char *title, const char *relpath="../", Int_t includeOutput=0, const char *context="", TGClient *gclient=0)
Convert a text file into a html file.
void AddLink(TSubString &str, TString &link, const char *comment)
Add a link around str, with title comment.
const TList * GetListOfModules() const
virtual void DecorateKeywords(std::ostream &out, const char *text)
Expand keywords in text, writing to out.
const TString & GetHeader() const
#define R__LOCKGUARD(mutex)
void AddModule(const std::string &module)
virtual void CreateClassIndex()
Create index of all classes.
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
virtual const char * GetEtcDir() const
Get the directory containing THtml's auxiliary files ($ROOTSYS/etc/html)
void WriteLineNumbers(std::ostream &out, Long_t nLines, const TString &infileBase) const
Create a div containing the line numbers (for a source listing) 1 to nLines.
const TString & GetSearchEngine() const
void SetFoundDot(Bool_t found=kTRUE)
Set whether "dot" (a GraphViz utility) is available.
Int_t Match(const TString &s, UInt_t start=0)
Runs a match on s against the regex 'this' was created with.
const TString & GetProductName() const
Mother of all ROOT objects.
const TString & GetCharset() const
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 has to be closed by caller so ad...
virtual void Add(TObject *obj)
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", which gets then included literally into outMap.
Wrapper for PCRE library (Perl Compatible Regular Expressions).
Each ROOT class (see TClass) has a linked list of methods.
const char * GetHtmlFileName() const
const TString & GetOutputDir(Bool_t createDir=kTRUE) const
Return the output directory as set by SetOutputDir().
virtual int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file.
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist.
const TString & GetSearchStemURL() const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
const char * AsString() const
Return the date & time as a string (ctime() format).
virtual bool GetImplFileName(TClass *cl, Bool_t filesys, TString &out_name) const
Return implementation file name.
TList * GetListOfMethods(Bool_t load=kTRUE)
Return list containing the TMethods of a class.
Bool_t HaveSource() const
const TString & GetDotDir() const
Ssiz_t First(char c) const
Find first occurrence of a character c.
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
virtual void GetHtmlFileName(TClass *classPtr, TString &filename) const
Return real HTML filename.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.