40 typedef std::vector<std::string> Words_t;
41 typedef Words_t::const_iterator SectionStart_t;
45 TSectionInfo(SectionStart_t start,
size_t chars,
size_t size):
48 SectionStart_t fStart;
52 typedef std::list<TSectionInfo> SectionStarts_t;
54 static void Sections_BuildIndex(SectionStarts_t& sectionStarts,
55 SectionStart_t begin, SectionStart_t end,
61 SectionStart_t
cursor = begin;
62 if (sectionStarts.empty() || sectionStarts.back().fStart !=
cursor)
63 sectionStarts.push_back(TSectionInfo(
cursor, 1, 0));
65 SectionStarts_t::iterator prevSection = sectionStarts.end();
70 size_t assumedNumSections = (numLeft + maxPerSection - 1 ) / maxPerSection;
71 size_t step = ((numLeft + assumedNumSections - 1) / assumedNumSections);
72 if (!step || step >= numLeft)
return;
76 SectionStart_t addWhichOne = prevSection->fStart;
78 size_t selectionChar=1;
79 for (; selectionChar <=
cursor->length() && addWhichOne == prevSection->fStart;
81 SectionStart_t checkPrev =
cursor;
82 while (--checkPrev != prevSection->fStart
83 && !strncasecmp(checkPrev->c_str(),
cursor->c_str(), selectionChar)) { }
85 SectionStart_t checkNext =
cursor;
86 while (++checkNext != end
87 && !strncasecmp(checkNext->c_str(),
cursor->c_str(), selectionChar)) { }
90 if (checkPrev != prevSection->fStart) {
92 addWhichOne = ++checkPrev;
93 else if (checkNext != end
94 && (
size_t)(checkNext -
cursor) < maxPerSection) {
95 addWhichOne = checkNext;
99 if (addWhichOne == prevSection->fStart)
103 while (selectionChar <= prevSection->fStart->length()
104 && selectionChar <= addWhichOne->length()
105 && !strncasecmp(prevSection->fStart->c_str(), addWhichOne->c_str(), selectionChar))
108 sectionStarts.push_back(TSectionInfo(addWhichOne, selectionChar, 0));
114 static void Sections_SetSize(SectionStarts_t& sectionStarts,
const Words_t &words)
117 for (SectionStarts_t::iterator iSectionStart = sectionStarts.begin();
118 iSectionStart != sectionStarts.end(); ++iSectionStart) {
119 SectionStarts_t::iterator next = iSectionStart;
121 if (next == sectionStarts.end()) {
122 iSectionStart->fSize = (words.end() - iSectionStart->fStart);
125 iSectionStart->fSize = (next->fStart - iSectionStart->fStart);
129 static void Sections_PostMerge(SectionStarts_t& sectionStarts,
const size_t maxPerSection)
132 for (SectionStarts_t::iterator iSectionStart = sectionStarts.begin();
133 iSectionStart != sectionStarts.end();) {
134 SectionStarts_t::iterator iNextSectionStart = iSectionStart;
136 if (iNextSectionStart == sectionStarts.end())
break;
137 if (iNextSectionStart->fSize + iSectionStart->fSize < maxPerSection) {
138 iSectionStart->fSize += iNextSectionStart->fSize;
139 sectionStarts.erase(iNextSectionStart);
140 }
else ++iSectionStart;
144 static void GetIndexChars(
const Words_t& words,
UInt_t numSectionsIn,
145 std::vector<std::string> §ionMarkersOut)
152 const size_t maxPerSection = (words.size() + numSectionsIn - 1)/ numSectionsIn;
153 SectionStarts_t sectionStarts;
154 Sections_BuildIndex(sectionStarts, words.begin(), words.end(), maxPerSection);
155 Sections_SetSize(sectionStarts, words);
156 Sections_PostMerge(sectionStarts, maxPerSection);
159 sectionMarkersOut.clear();
160 sectionMarkersOut.resize(sectionStarts.size());
162 for (SectionStarts_t::iterator iSectionStart = sectionStarts.begin();
163 iSectionStart != sectionStarts.end(); ++iSectionStart)
164 sectionMarkersOut[idx++] =
165 iSectionStart->fStart->substr(0, iSectionStart->fChars);
168 static void GetIndexChars(
const std::list<std::string>& wordsIn,
UInt_t numSectionsIn,
169 std::vector<std::string> §ionMarkersOut)
172 Words_t words(wordsIn.size());
174 for (std::list<std::string>::const_iterator iWord = wordsIn.begin(); iWord != wordsIn.end(); ++iWord)
175 words[idx++] = *iWord;
176 GetIndexChars(words, numSectionsIn, sectionMarkersOut);
199 return (strcasecmp(*((
char **) name1), *((
char **) name2)));
206 static void sort_strlist_stricmp(std::vector<std::string>&
l)
213 posList* carr =
new posList[
l.size()];
215 for (
size_t iS = 0, iSE =
l.size(); iS < iSE; ++iS) {
217 carr[idx++].str =
l[iS].c_str();
220 std::vector<std::string> lsort(
l.size());
221 for (
size_t iS = 0, iSE =
l.size(); iS < iSE; ++iS) {
222 lsort[iS].swap(
l[carr[iS].pos]);
274 if (comment && strlen(comment)) {
298 TString replWithRelPath(
"=\"@!@");
299 line.ReplaceAll(
"=\"../", replWithRelPath +
"../" + relpath);
300 line.ReplaceAll(
"=\"./", replWithRelPath + relpath);
301 line.ReplaceAll(
"=\"@!@",
"=\"");
311 const char* outfilename,
const char *title,
312 const char *relpath ,
Int_t includeOutput ,
313 const char* context ,
316 TString htmlFilename(outfilename);
317 htmlFilename +=
".html";
319 std::ofstream out(htmlFilename);
322 Error(
"Convert",
"Can't open file '%s' !", htmlFilename.
Data());
329 if (context && context[0])
330 out << context << std::endl;
331 else if (title && title[0])
332 out <<
"<h1 class=\"convert\">" << title <<
"</h1>" << std::endl;
334 Int_t numReuseCanvases = 0;
341 const char* outfile = 0;
343 firstCanvasFileBase +=
"_0.png";
345 Bool_t haveFirstCanvasFile =
false;
347 if (firstCanvasFileBase == outfile) {
348 haveFirstCanvasFile =
true;
355 TString firstCanvasFile = outfilename;
356 firstCanvasFile +=
"_0.png";
367 if (strncmp(outfile, stem, stem.
Length()))
369 const char* posext = strrchr(outfile,
'.');
370 if (!posext || strcmp(posext,
".png"))
390 if (maxIdx + 1 != numReuseCanvases)
393 numReuseCanvases = 0;
399 if (numReuseCanvases)
400 Printf(
"Convert: %s (reusing %d saved canvas%s)", htmlFilename.
Data(), numReuseCanvases, (numReuseCanvases > 1 ?
"es" :
""));
404 UInt_t nCanvases = numReuseCanvases;
406 if (!numReuseCanvases) {
410 TPMERegexp reOutFile(baseInFileName +
"_[[:digit:]]+\\.png");
416 const char* outdirE = 0;
418 if (reOutFile.
Match(outdirE)) {
425 gSystem->
Exec(
TString::Format(
"ROOT_HIST=0 root.exe -l -q %s $ROOTSYS/etc/html/saveScriptOutput.C\\(\\\"%s\\\",\\\"%s\\\",%d\\)",
426 gROOT->IsBatch() ?
"-b" :
"",
435 const char* outdirE = 0;
437 if (reOutFile.
Match(outdirE)) {
448 TList* gClientGetListOfWindows =
nullptr;
449 TObject* gClientGetDefaultRoot =
nullptr;
450 std::set<TObject*> previousWindows;
452 gROOT->ProcessLine(
TString::Format(
"*((TList**)0x%zx) = ((TGClient*)0x%zx)->GetListOfWindows();",
453 (
size_t)&gClientGetListOfWindows, (
size_t)gclient));
454 gROOT->ProcessLine(
TString::Format(
"*((TObject**)0x%zx) = ((TGClient*)0x%zx)->GetDefaultRoot();",
455 (
size_t)&gClientGetDefaultRoot, (
size_t)gclient));
457 TIter iWin(gClientGetListOfWindows);
458 while((
win = iWin())) {
459 TObject *winGetParent =
nullptr;
461 (
size_t)&winGetParent, (
size_t)
win));
462 if (winGetParent == gClientGetDefaultRoot)
463 previousWindows.insert(
win);
466 if (
gROOT->GetListOfCanvases()->GetSize())
467 previousWindows.insert(
gROOT->GetListOfCanvases()->Last());
470 std::set<TObject*> timersBefore;
472 while ((timerOld = iTimer()))
473 timersBefore.insert(timerOld);
482 gROOT->ProcessLine(cmd, &err);
491 TIter iWin(gClientGetListOfWindows);
492 while((
win = iWin())) {
495 (
size_t)&winGetParent, (
size_t)
win));
497 if (winGetParent == gClientGetDefaultRoot)
499 (
size_t)&winIsMapped, (
size_t)
win));
500 if (winIsMapped && previousWindows.find(
win) == previousWindows.end()
501 &&
win->InheritsFrom(clGMainFrame)) {
503 Bool_t isRootCanvas =
win->InheritsFrom(clRootCanvas);
507 (
size_t)&hasEditor, (
size_t)
win));
509 if (isRootCanvas && !hasEditor) {
511 gROOT->ProcessLine(
TString::Format(
"*((TVirtualPad**)0x%zx) = ((TRootCanvas*)0x%zx)->Canvas();",
512 (
size_t)&pad, (
size_t)
win));
518 (
size_t)
win, outfilename, nCanvases++));
525 if (!previousWindows.empty())
530 if (last == pad) last = 0;
540 while ((timer = (
TTimer*) iTimerRemove()))
541 if (timersBefore.find(timer) == timersBefore.end())
546 out <<
"<table><tr><td style=\"vertical-align:top;padding-right:2em;\">" << std::endl;
548 out <<
"<div class=\"listing\"><pre class=\"listing\">" << std::endl;
551 parser.
Convert(out, in, relpath, (includeOutput) ,
554 out <<
"</pre></div>" << std::endl;
559 out <<
"</td><td style=\"vertical-align:top;\">" << std::endl;
560 out <<
"<table>" << std::endl;
561 for (
UInt_t i = 0; i < nCanvases; ++i) {
563 out <<
"<tr><td><a href=\"" << pngname <<
"\">" << std::endl
564 <<
"<img src=\"" << pngname <<
"\" id=\"canv" << i <<
"\" alt=\"thumb\" style=\"border:none;width:22em;\" "
565 "onmouseover=\"javascript:canv" << i <<
".style.width='auto';\" />" << std::endl
566 <<
"</a></td></tr>" << std::endl;
568 out <<
"</table>" << std::endl;
569 out <<
"</td></tr></table>" << std::endl;
596 TString sourceFile(sourceName);
598 if (!sourceFile.
Length()) {
599 Error(
"Copy",
"Can't copy file '%s' to '%s' directory - source file name invalid!", sourceName,
606 if (!destName || !*destName)
615 Long_t id, flags, sModtime, dModtime;
620 || sModtime > dModtime)
622 Error(
"Copy",
"Can't copy file '%s' to '%s'!",
623 sourceFile.
Data(), destFile.
Data());
650 Error(
"CreateHierarchy",
"Can't open file '%s' !",
filename.Data());
661 out <<
"<h1>Class Hierarchy</h1>" << std::endl;
676 Warning(
"THtml::CreateHierarchy",
"skipping class %s\n", cdi->
GetName());
701 std::ofstream indexFile(
filename.Data());
703 if (!indexFile.good()) {
704 Error(
"CreateClassIndex",
"Can't open file '%s' !",
filename.Data());
715 indexFile <<
"<h1>Class Index</h1>" << std::endl;
719 std::vector<std::string> indexChars;
721 std::vector<std::string> classNames;
727 classNames.push_back(cdi->
GetName());
730 if (classNames.size() > 10) {
731 indexFile <<
"<div id=\"indxShortX\"><h4>Jump to</h4>" << std::endl;
733 GetIndexChars(classNames, 50 , indexChars);
734 for (
UInt_t iIdxEntry = 0; iIdxEntry < indexChars.size(); ++iIdxEntry) {
735 indexFile <<
"<a href=\"#idx" << iIdxEntry <<
"\">";
737 indexFile <<
"</a>" << std::endl;
739 indexFile <<
"</div><br />" << std::endl;
743 indexFile <<
"<ul id=\"indx\">" << std::endl;
746 UInt_t currentIndexEntry = 0;
756 TClass* currentClass =
dynamic_cast<TClass*
>(currentDict);
759 Warning(
"THtml::CreateClassIndex",
"skipping class %s\n", cdi->
GetName());
763 indexFile <<
"<li class=\"idxl" << (i++)%2 <<
"\">";
764 if (currentIndexEntry < indexChars.size()
765 && !strncmp(indexChars[currentIndexEntry].c_str(), cdi->
GetName(),
766 indexChars[currentIndexEntry].length()))
767 indexFile <<
"<a name=\"idx" << currentIndexEntry++ <<
"\"></a>";
771 indexFile <<
"<a href=\"";
772 indexFile << htmlFile;
773 indexFile <<
"\"><span class=\"typename\">";
775 indexFile <<
"</span></a> ";
777 indexFile <<
"<span class=\"typename\">";
779 indexFile <<
"</span> ";
784 indexFile <<
"</li>" << std::endl;
787 indexFile <<
"</ul>" << std::endl;
802 const char* title =
"LibraryDependencies";
806 std::ofstream libDepDotFile(dotfilename +
".dot");
807 libDepDotFile <<
"digraph G {" << std::endl
808 <<
"ratio=compress;" << std::endl
809 <<
"node [fontsize=22,labeldistance=0.1];" << std::endl
810 <<
"edge [len=0.01];" << std::endl
811 <<
"fontsize=22;" << std::endl
812 <<
"size=\"16,16\";" << std::endl
813 <<
"overlap=false;" << std::endl
814 <<
"splines=true;" << std::endl
815 <<
"K=0.1;" << std::endl;
820 std::stringstream sstrCluster;
821 std::stringstream sstrDeps;
826 std::vector<std::string> indexChars;
832 std::ofstream outputFile(
filename.Data());
833 if (!outputFile.good()) {
834 Error(
"CreateModuleIndex",
"Can't open file '%s' !",
filename.Data());
839 TString htmltitle(
"Index of ");
842 htmltitle += moduletitle;
847 outputFile <<
"<h2>" << htmltitle <<
"</h2>" << std::endl;
850 if (
GetHtml()->GetModuleDocPath().Length()) {
861 std::list<std::string> classNames;
868 classNames.push_back(cdi->
GetName());
870 if (classNames.size() > 1)
continue;
879 if (posDepLibs !=
kNPOS)
899 if (posDepLibs !=
kNPOS) {
901 for(
Ssiz_t pos = posDepLibs + 1; libs[pos]; ++pos) {
902 if (libs[pos] ==
' ') {
903 if (thisLib.
Length() && lib.length()) {
904 size_t posExt = lib.find(
'.');
905 if (posExt != std::string::npos)
913 if (lib.length() && thisLib.
Length()) {
914 size_t posExt = lib.find(
'.');
915 if (posExt != std::string::npos)
926 UInt_t currentIndexEntry = 0;
933 Error(
"CreateModuleIndex",
"Unknown class '%s' !", cdi->
GetName());
938 outputFile <<
"<h2>Class Index</h2>" << std::endl;
940 if (classNames.size() > 10) {
941 outputFile <<
"<div id=\"indxShortX\"><h4>Jump to</h4>" << std::endl;
942 UInt_t numSections = classNames.size() / 10;
943 if (numSections < 10) numSections = 10;
944 if (numSections > 50) numSections = 50;
946 GetIndexChars(classNames, numSections, indexChars);
947 for (
UInt_t iIdxEntry = 0; iIdxEntry < indexChars.size(); ++iIdxEntry) {
948 outputFile <<
"<a href=\"#idx" << iIdxEntry <<
"\">";
950 outputFile <<
"</a>" << std::endl;
952 outputFile <<
"</div><br />" << std::endl;
955 outputFile <<
"<ul id=\"indx\">" << std::endl;
959 outputFile <<
"<li class=\"idxl" << (count++)%2 <<
"\">";
960 if (currentIndexEntry < indexChars.size()
961 && !strncmp(indexChars[currentIndexEntry].c_str(), cdi->
GetName(),
962 indexChars[currentIndexEntry].length()))
963 outputFile <<
"<a name=\"idx" << currentIndexEntry++ <<
"\"></a>";
967 outputFile <<
"<a href=\"";
968 outputFile << htmlFile;
969 outputFile <<
"\"><span class=\"typename\">";
971 outputFile <<
"</span></a> ";
973 outputFile <<
"<span class=\"typename\">";
975 outputFile <<
"</span> ";
980 outputFile <<
"</li>" << std::endl;
985 outputFile <<
"</ul>" << std::endl;
1012 for (std::set<std::string>::iterator iDep = deps.begin();
1013 iDep != deps.end(); ) {
1015 for (std::set<std::string>::const_iterator iDep2 = deps.begin();
1016 !already_indirect && iDep2 != deps.end(); ++iDep2) {
1017 if (iDep == iDep2)
continue;
1020 if (!libinfo2)
continue;
1022 already_indirect |= deps2.find(*iDep) != deps2.end();
1024 if (already_indirect) {
1025 std::set<std::string>::iterator iRemove = iDep;
1028 deps.erase(iRemove);
1039 const std::set<std::string>& modules = libinfo->
GetModules();
1040 if (modules.size() > 1) {
1041 sstrCluster <<
"subgraph cluster" << libinfo->
GetName() <<
" {" << std::endl
1042 <<
"style=filled;" << std::endl
1043 <<
"color=lightgray;" << std::endl
1045 if (!strcmp(libinfo->
GetName(),
"libCore"))
1046 sstrCluster <<
"Everything depends on ";
1047 sstrCluster << libinfo->
GetName() <<
"\";" << std::endl;
1049 for (std::set<std::string>::const_iterator iModule = modules.begin();
1050 iModule != modules.end(); ++iModule) {
1054 sstrCluster <<
"\"" << *iModule <<
"\" [style=filled,color=white,URL=\""
1055 << modURL <<
"_Index.html\"];" << std::endl;
1057 sstrCluster << std::endl
1058 <<
"}" << std::endl;
1061 TString modURL(*modules.begin());
1064 sstrCluster <<
"\"" << *modules.begin()
1065 <<
"\" [label=\"" << libinfo->
GetName()
1066 <<
"\",style=filled,color=lightgray,shape=box,URL=\""
1067 << modURL <<
"_Index.html\"];" << std::endl;
1077 const std::string& mod = *(modules.begin());
1079 for (std::set<std::string>::const_iterator iDep = deps.begin();
1080 iDep != deps.end(); ++iDep) {
1084 if (!depLibInfo || depLibInfo->
GetModules().empty())
1087 const std::string& moddep = *(depLibInfo->
GetModules().begin());
1088 sstrDeps <<
"\"" << mod <<
"\" -> \"" << moddep <<
"\";" << std::endl;
1091 sstrDeps <<
"\"" << mod <<
"\" -> \"CONT\" [style=invis];" << std::endl;
1094 libDepDotFile << sstrCluster.str() << std::endl
1096 libDepDotFile <<
"}" << std::endl;
1097 libDepDotFile.close();
1099 std::ofstream out(dotfilename +
".html");
1101 Error(
"CreateModuleIndex",
"Can't open file '%s.html' !",
1102 dotfilename.
Data());
1112 out <<
"<h1>Library Dependencies</h1>" << std::endl;
1116 out <<
"<img alt=\"Library Dependencies\" class=\"classcharts\" usemap=\"#Map" << title <<
"\" src=\"" << title <<
".png\"/>" << std::endl;
1130 TString outFile(
"index.html");
1132 std::ofstream out(outFile);
1135 Error(
"CreateProductIndex",
"Can't open file '%s' !", outFile.
Data());
1148 if (
GetHtml()->GetPathDefinition().GetDocDir(
"", prodDoc))
1153 out <<
"<h2>Chapters</h2>" << std::endl
1154 <<
"<h3><a href=\"./ClassIndex.html\">Class Index</a></h3>" << std::endl
1155 <<
"<p>A complete list of all classes defined in " <<
GetHtml()->
GetProductName() <<
"</p>" << std::endl
1156 <<
"<h3><a href=\"./ClassHierarchy.html\">Class Hierarchy</a></h3>" << std::endl
1157 <<
"<p>A hierarchy graph of all classes, showing each class's base and derived classes</p>" << std::endl
1158 <<
"<h3><a href=\"./ListOfTypes.html\">Type Index</a></h3>" << std::endl
1159 <<
"<p>A complete list of all types</p>" << std::endl
1160 <<
"<h3><a href=\"./LibraryDependencies.html\">Library Dependency</a></h3>" << std::endl
1161 <<
"<p>A diagram showing all of " <<
GetHtml()->
GetProductName() <<
"'s libraries and their dependencies</p>" << std::endl;
1180 while ((dt = (
TDataType*) iTypedefs())) {
1182 Info(
"CreateClassTypeDefs",
"Creating typedef %s to class %s",
1195 if (!outfile.good()) {
1196 Error(
"CreateClassTypeDefs",
"Can't open file '%s' !",
filename.Data());
1202 outfile <<
"<a name=\"TopOfPage\"></a>" << std::endl;
1218 char* libDup=
StrDup(lib);
1219 char* libDupSpace=strchr(libDup,
' ');
1220 if (libDupSpace) *libDupSpace = 0;
1221 char* libDupEnd=libDup+strlen(libDup);
1222 while (libDupEnd!=libDup)
1223 if (*(--libDupEnd)==
'.') {
1230 outfile <<
"<script type=\"text/javascript\">WriteFollowPageBox('"
1231 << sTitle <<
"','" << sLib <<
"','" << sInclude <<
"');</script>" << std::endl;
1239 outfile <<
"<div class=\"dropshadow\"><div class=\"withshadow\">";
1240 outfile <<
"<h1>" << sTitle <<
"</h1>" << std::endl
1241 <<
"<div class=\"classdescr\">" << std::endl;
1243 outfile << dtName <<
" is a typedef to ";
1246 outfile << std::endl
1247 <<
"</div>" << std::endl
1248 <<
"</div></div><div style=\"clear:both;\"></div>" << std::endl;
1251 outfile << std::endl <<
"<div id=\"datamembers\">" << std::endl
1252 <<
"<table class=\"data\" cellspacing=\"0\">" << std::endl;
1253 outfile <<
"<tr class=\"data";
1254 outfile <<
"\"><td class=\"datatype\">typedef ";
1256 outfile <<
"</td><td class=\"dataname\">";
1259 outfile <<
"</td><td class=\"datadesc\">";
1261 }
else outfile <<
"</td><td>";
1262 outfile <<
"</td></tr>" << std::endl
1263 <<
"</table></div>" << std::endl;
1278 TString outFile(
"ListOfTypes.html");
1280 std::ofstream typesList(outFile);
1282 if (!typesList.good()) {
1283 Error(
"CreateTypeIndex",
"Can't open file '%s' !", outFile.
Data());
1291 typesList <<
"<h2> List of data types </h2>" << std::endl;
1293 typesList <<
"<dl><dd>" << std::endl;
1296 std::vector<std::string> typeNames(
gROOT->GetListOfTypes()->GetSize());
1305 if (*
type->GetTitle() && !strchr(
type->GetName(),
'(')
1306 && !( strchr(
type->GetName(),
'<') && strchr(
type->GetName(),
'>'))
1308 typeNames[tnIdx++] =
type->GetName();
1309 typeNames.resize(tnIdx);
1312 sort_strlist_stricmp(typeNames);
1314 std::vector<std::string> indexChars;
1315 if (typeNames.size() > 10) {
1316 typesList <<
"<div id=\"indxShortX\"><h4>Jump to</h4>" << std::endl;
1318 GetIndexChars(typeNames, 10 , indexChars);
1319 for (
UInt_t iIdxEntry = 0; iIdxEntry < indexChars.size(); ++iIdxEntry) {
1320 typesList <<
"<a href=\"#idx" << iIdxEntry <<
"\">";
1322 typesList <<
"</a>" << std::endl;
1324 typesList <<
"</div><br />" << std::endl;
1327 typesList <<
"<ul id=\"indx\">" << std::endl;
1330 UInt_t currentIndexEntry = 0;
1332 for (std::vector<std::string>::iterator iTypeName = typeNames.begin();
1333 iTypeName != typeNames.end(); ++iTypeName) {
1335 typesList <<
"<li class=\"idxl" << idx%2 <<
"\">";
1336 if (currentIndexEntry < indexChars.size()
1337 && !strncmp(indexChars[currentIndexEntry].c_str(), iTypeName->c_str(),
1338 indexChars[currentIndexEntry].length()))
1339 typesList <<
"<a name=\"idx" << currentIndexEntry++ <<
"\"></a>" << std::endl;
1340 typesList <<
"<a name=\"";
1342 typesList <<
"\"><span class=\"typename\">";
1344 typesList <<
"</span></a> ";
1346 typesList <<
"</li>" << std::endl;
1349 typesList <<
"</ul>" << std::endl;
1374 str.
Insert(pos,
"<span class=\"comment\">");
1379 str.
Insert(pos,
"<span class=\"string\">");
1382 str.
Insert(pos,
"<span class=\"keyword\">");
1385 str.
Insert(pos,
"<span class=\"cpp\">");
1388 str.
Insert(pos,
"<pre>");
1391 Error(
"DecorateEntityBegin",
"Unhandled / invalid entity type %d!", (
Int_t)
type);
1414 str.
Insert(pos,
"</span>");
1419 str.
Insert(pos,
"</span>");
1422 str.
Insert(pos,
"</span>");
1425 str.
Insert(pos,
"</span>");
1428 str.
Insert(pos,
"</pre>");
1431 Error(
"DecorateEntityBegin",
"Unhandled / invalid entity type %d!", (
Int_t)
type);
1456 while (original.
Tokenize(author, pos,
",")) {
1465 if (cLink !=
kNPOS) {
1469 if(endLink ==
kNPOS)
1470 endLink = author.
Length();
1471 authors +=
"<a href=\"";
1472 authors += author(cLink + 1, endLink - (cLink + 1));
1474 authors += author(0, cLink);
1476 if (endLink != author.
Length())
1477 authors += author(endLink + 1, author.
Length());
1479 authors +=
"<a href=\"";
1486 while (author.
Tokenize(namePart, posNamePart,
" ")) {
1490 if (isdigit(namePart[0]))
continue;
1494 authors += namePart;
1531 Long_t id, flags, iModtime, dModtime;
1534 if (iModtime < dModtime) {
1536 sourceFile = declFile;
1575 Long_t id, flags, iModtime, dModtime;
1578 if (iModtime < dModtime) {
1580 sourceFile = declFile;
1592 Error(
"IsModified",
"Unknown file type !");
1599 Long_t id, flags, sModtime, dModtime;
1603 return (sModtime > dModtime);
1621 if (posTemplate !=
kNPOS) {
1624 TString templateArgs = encScope(posTemplate, encScope.
Length());
1632 if (posName !=
kNPOS) {
1634 while (numDblColumn > 1) {
1639 posName = encScope.
Last(
':');
1640 if (posName ==
kNPOS)
1643 name.Replace(posTemplate,
name.Length(), templateArgs);
1647 if (
name.Length() > 240) {
1657 if (posDot !=
kNPOS)
1660 name =
name(0, namelen) + hash + ext;
1663 const char* replaceWhat =
":<> ,~=";
1665 if (strchr(replaceWhat,
name[i]))
1677 const char* outdir,
const char* linkdir)
1682 if (!dirHandle)
return;
1684 const char* entry = 0;
1685 std::list<std::string> files;
1709 if (!
line.ReadLine(in))
break;
1710 out <<
line << std::endl;
1718 std::stringstream furtherReading;
1720 for (std::list<std::string>::const_iterator iFile = files.begin();
1721 iFile != files.end(); ++iFile) {
1726 Error(
"CreateModuleIndex",
"Cannot create output directory %s", outdir);
1735 Error(
"CreateModuleIndex",
"Cannot copy file %s to %s",
1748 std::ofstream outFurther(outfile);
1749 if (inFurther && outFurther) {
1750 outFurther <<
"<pre>";
1753 outFurther <<
"</pre>";
1760 furtherReading <<
"<a class=\"linkeddoc\" href=\"" << linkdir <<
"/" << showname <<
"\">";
1764 furtherReading <<
"</a> " << std::endl;
1768 if (furtherReading.str().length())
1769 out <<
"<h3>Further Reading</h3><div id=\"furtherreading\">" << std::endl
1770 << furtherReading.str() <<
"</div><h3>List of Classes</h3>" << std::endl;
1793 if (comment && !strcmp(comment, entity->
GetName()))
1823 mangledName = scope->
GetName();
1825 link += mangledName;
1829 mangledName = entity->
GetName();
1831 link += mangledName;
1838 description += scope->
GetName();
1839 description +=
"::";
1841 description += entity->
GetName();
1842 comment = description.
Data();
1845 if (comment && !strcmp(comment, entity->
GetName()))
1873 bool isClassTypedef = entity->
GetType() == -1;
1876 isClassTypedef = isClassTypedef && (entity->
Property() & 7);
1877 if (isClassTypedef) {
1882 link = mangledEntity +
".html";
1884 link =
"ListOfTypes.html#";
1885 link += mangledEntity;
1888 if (comment && !strcmp(comment, entity->
GetName()))
1918 link += mangledName;
1921 mangledName = entity->
GetName();
1923 link += mangledName;
1926 if (!comment && entity->
GetClass()) {
1929 while ((mCand = (
TMethod*)iMeth()))
1931 if (description.
Length()) {
1932 description +=
" or overloads";
1937 comment = description.
Data();
1940 if (comment && !strcmp(comment, entity->
GetName()))
1953 return !reference ||
1954 strncmp(reference,
"http", 4) ||
1955 (strncmp(reference + 4,
"://", 3) && strncmp(reference + 4,
"s://", 4));
1976 case '<':
return "<";
1977 case '&':
return "&";
1978 case '>':
return ">";
1994 const char c =
text[pos];
1997 text.Replace(pos, 1, replaced);
1998 pos += strlen(replaced) - 1;
2012 while (pos <
text.Length())
2026 while (
string && *
string) {
2047 case kNeato: runDot =
"neato";
break;
2048 case kFdp: runDot =
"fdp";
break;
2049 case kCirco: runDot =
"circo";
break;
2050 default: runDot =
"dot";
2054 runDot +=
" -q1 -Tpng -o";
2058 runDot +=
"-Tcmap -o";
2066 Info(
"RunDot",
"Running: %s", runDot.
Data());
2068 if (
gDebug < 4 && !retDot)
2071 if (!retDot && outMap) {
2074 std::getline(inmap,
line);
2075 if (inmap && !inmap.eof()) {
2078 while (inmap && !inmap.eof()) {
2079 if (
line.compare(0, 6,
"<area ") == 0) {
2080 size_t posEndTag =
line.find(
'>');
2081 if (posEndTag != std::string::npos)
2082 line.replace(posEndTag, 1,
"/>");
2084 *outMap <<
line << std::endl;
2085 std::getline(inmap,
line);
2087 *outMap <<
"</map>" << std::endl;
2095 Error(
"RunDot",
"Error running %s!", runDot.
Data());
2110 const char* dir ,
TClass *cls ,
2113 std::ifstream addHeaderFile(header);
2115 if (!addHeaderFile.good()) {
2116 Warning(
"THtml::WriteHtmlHeader",
2117 "Can't open html header file %s\n", header);
2131 while (!addHeaderFile.eof()) {
2134 if (addHeaderFile.eof())
2158 out << txt << std::endl;
2190 const char* dir ,
TClass *cls)
2193 TString noSpecialCharTitle(title);
2198 Bool_t bothHeaders = lenUserHeader > 0 && userHeader[lenUserHeader - 1] ==
'+';
2199 if (lenUserHeader == 0 || bothHeaders) {
2200 TString header(
"header.html");
2205 if (lenUserHeader != 0) {
2207 userHeader.
Remove(lenUserHeader - 1);
2218 const char* lastUpdate,
const char* author,
2219 const char* copyright,
const char* footer)
2221 static const char* templateSITags[
TDocParser::kNumSourceInfos] = {
"%UPDATE%",
"%AUTHOR%",
"%COPYRIGHT%",
"%CHANGED%",
"%GENERATED%"};
2228 if (!lastUpdate || !lastUpdate[0]) {
2233 std::ifstream addFooterFile(footer);
2235 if (!addFooterFile.good()) {
2236 Warning(
"THtml::WriteHtmlFooter",
2237 "Can't open html footer file %s\n", footer);
2242 while (!addFooterFile.eof()) {
2245 if (addFooterFile.eof())
2252 Ssiz_t siPos =
line.Index(templateSITags[siTag]);
2253 if (siPos !=
kNPOS) {
2254 if (siValues[siTag] && siValues[siTag][0])
2255 line.Replace(siPos, strlen(templateSITags[siTag]), siValues[siTag]);
2261 out <<
line << std::endl;
2288 const char *lastUpdate,
const char *author,
2289 const char *copyright)
2295 if (userFooter.
Length() != 0) {
2303 TString footer(
"footer.html");
2315 out <<
"<div id=\"indxModules\"><h4>Modules</h4>" << std::endl;
2326 out <<
"<a href=\"" <<
name <<
"_Index.html\">"
2327 <<
name <<
"</a>" << std::endl;
2330 out<<
"</div><br />" << std::endl;
2342 out <<
"<div id=\"linenums\">";
2343 for (
Long_t i = 0; i < nLines; ++i) {
2345 out <<
"<div class=\"ln\"> <span class=\"lnfile\">" << infileBase
2346 <<
":</span><a name=\"" << i + 1 <<
"\" href=\"#" << i + 1
2347 <<
"\" class=\"ln\">" << i + 1 <<
"</a></div>";
2349 out <<
"</div>" << std::endl;
2361 out <<
"<div id=\"indxModules\"><h4>" << superName <<
" Modules</h4>" << std::endl;
2373 if (posSlash !=
kNPOS)
2374 name.Remove(0, posSlash + 1);
2375 out <<
"<a href=\"" << link <<
"_Index.html\">" <<
name <<
"</a>" << std::endl;
2378 out<<
"</div><br />" << std::endl;
2395 if (searchCmd.
Length()) {
2396 TUrl url(searchCmd);
2398 if (serverName.
Length()) {
2399 serverName.
Prepend(
" title=\"");
2400 serverName +=
"\" ";
2403 out <<
"<script type=\"text/javascript\">" << std::endl
2404 <<
"function onSearch() {" << std::endl
2405 <<
"var s='" << searchCmd <<
"';" << std::endl
2406 <<
"var ref=String(document.location.href).replace(/https?:\\/\\//,'').replace(/\\/[^\\/]*$/,'').replace(/\\//g,'%2F');" << std::endl
2407 <<
"window.location.href=s.replace(/%u/ig,ref).replace(/%s/ig,escape(document.searchform.t.value));" << std::endl
2408 <<
"return false;}" << std::endl
2409 <<
"</script>" << std::endl
2410 <<
"<form id=\"searchform\" name=\"searchform\" onsubmit=\"return onSearch()\" action=\"javascript:onSearch();\" method=\"post\">" << std::endl
2411 <<
"<input name=\"t\" size=\"30\" value=\"Search documentation...\" onfocus=\"if (document.searchform.t.value=='Search documentation...') document.searchform.t.value='';\"></input>" << std::endl
2412 <<
"<a id=\"searchlink\" " << serverName <<
" href=\"javascript:onSearch();\" onclick=\"return onSearch()\">Search</a></form>" << std::endl;
2413 }
else if (searchEngine.
Length())
2415 out <<
"<a class=\"descrheadentry\" href=\"" << searchEngine
2416 <<
"\">Search the Class Reference Guide</a>" << std::endl;
2425 out <<
"<div class=\"location\">" << std::endl;
2427 out <<
"<a class=\"locationlevel\" href=\"index.html\">" << productName <<
"</a>" << std::endl;
2435 while (modulename.
Tokenize(modulePart, pos,
"/")) {
2436 if (pos ==
kNPOS && !classname)
2439 if (modulePath.
Length()) modulePath +=
"_";
2440 modulePath += modulePart;
2441 out <<
" » <a class=\"locationlevel\" href=\"./" << modulePath <<
"_Index.html\">" << modulePart <<
"</a>" << std::endl;
2446 if (classname) entityName = classname;
2448 entityName = module->
GetName();
2450 if (posSlash !=
kNPOS)
2451 entityName.
Remove(0, posSlash + 1);
2454 if (entityName.
Length()) {
2455 out <<
" » <a class=\"locationlevel\" href=\"#TopOfPage\">";
2457 out <<
"</a>" << std::endl;
2459 out <<
"</div>" << std::endl;
2471 out <<
"<div id=\"toplinks\">" << std::endl;
2473 out <<
"<div class=\"descrhead\"><div class=\"descrheadcontent\">" << std::endl
2474 <<
"<span class=\"descrtitle\">Quick Links:</span>" << std::endl;
2481 }
else if (!strcmp(productName,
"ROOT")) {
2484 if (userHomePage && *userHomePage)
2485 out <<
"<a class=\"descrheadentry\" href=\"" << userHomePage <<
"\">" << productName <<
"</a>" << std::endl;
2486 out <<
"<a class=\"descrheadentry\" href=\"http://root.cern.ch\">ROOT Homepage</a>" << std::endl
2487 <<
"<a class=\"descrheadentry\" href=\"./ClassIndex.html\">Class Index</a>" << std::endl
2488 <<
"<a class=\"descrheadentry\" href=\"./ClassHierarchy.html\">Class Hierarchy</a></div>" << std::endl;
2490 out <<
"</div>" << std::endl;
2493 out <<
"</div>" << std::endl;
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
static int CaseInsensitiveSort(const void *name1, const void *name2)
Friend function for sorting strings, case insensitive.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t cursor
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 id
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 win
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 type
Option_t Option_t TPoint TPoint const char text
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.
Bool_t R_ISREG(Int_t mode)
R__EXTERN TSystem * gSystem
#define R__LOCKGUARD(mutex)
Bool_t HaveSource() const
const char * GetName() const override
Returns name of object.
const char * GetHtmlFileName() const
Bool_t IsSelected() const
TList & GetListOfTypedefs()
TDictionary * GetClass() const
void CreateClassHierarchy(std::ostream &out, const char *docFileName)
Create the hierarchical class list part for the current class's base classes.
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.
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
Short_t GetImplFileLine() const
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 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.
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).
const char * GetFullTypeName() const
Get full type description of typedef, e,g.: "class TDirectory*".
Long_t Property() const override
Get property description word. For meaning of bits see EProperty.
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
const char * AsString() const
Return the date & time as a string (ctime() format).
This class defines an abstract interface that must be implemented by all classes that contain diction...
virtual Bool_t IsModified(TClass *classPtr, EFileType type)
Check if file is modified.
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.
virtual void DecorateEntityBegin(TString &str, Ssiz_t &pos, TDocParser::EParseContext type)
Add some colors etc to a source entity, contained in str.
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 ...
virtual void CreateProductIndex()
Fetch documentation from THtml::GetProductDocDir() and put it into the product index page.
virtual void CreateClassTypeDefs()
Create a forwarding page for each typedef pointing to a class.
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.
virtual void ReferenceEntity(TSubString &str, TClass *entity, const char *comment=0)
Create a reference to a class documentation page.
Bool_t CopyHtmlFile(const char *sourceName, const char *destName="")
Copy file to HTML directory.
virtual void CreateHierarchy()
Create a hierarchical class list The algorithm descends from the base classes and branches into all d...
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.
virtual Bool_t ReferenceIsRelative(const char *reference) const
Check whether reference is a relative reference, and can (or should) be prependen by relative paths.
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",...
virtual void CreateClassIndex()
Create index of all classes.
virtual void CreateTypeIndex()
Create index of all data types.
virtual void DecorateEntityEnd(TString &str, Ssiz_t &pos, TDocParser::EParseContext type)
Add some colors etc to a source entity, contained in str.
virtual void FixupAuthorSourceInfo(TString &authors)
Special author treatment; called when TDocParser::fSourceInfo[kInfoAuthor] is set.
virtual void CreateModuleIndex()
Create the class index for each module, picking up documentation from the module's TModuleDocInfo::Ge...
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 "...
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.
void WriteModuleLinks(std::ostream &out)
Create a div containing links to all topmost modules.
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
void AddLink(TSubString &str, TString &link, const char *comment)
Add a link around str, with title comment.
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...
Long_t GetLineNumber() 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 void DecorateKeywords(std::ostream &out, const char *text)
Expand keywords in text, writing to out.
virtual const char * GetPrototype() const
Returns the prototype of a function as defined by CINT, or 0 in case of error.
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 bool GetDocDir(const TString &module, TString &doc_dir) const
Determine the module's documentation directory.
Legacy ROOT documentation system.
const char * GetCounter() const
const TString & GetFooter() const
const TString & GetSearchStemURL() const
const TString & GetCharset() const
const char * ShortType(const char *name) const
Get short type name, i.e. with default templates removed.
const TString & GetHomepage() const
const TString & GetProductName() const
const char * GetCounterFormat() const
TList * GetLibraryDependencies()
const TList * GetListOfModules() const
const TString & GetDotDir() const
const TString & GetSearchEngine() const
Bool_t HaveDot()
Check whether dot is available in $PATH or in the directory set by SetDotPath()
virtual void CreateAuxiliaryFiles() const
copy CSS, javascript file, etc to the output dir
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 & GetHeader() const
void SetFoundDot(Bool_t found=kTRUE)
Set whether "dot" (a GraphViz utility) is available.
virtual const char * GetEtcDir() const
Get the directory containing THtml's auxiliary files ($ROOTSYS/etc/html)
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...
const TString & GetXwho() const
void AddDependency(const std::string &lib)
std::set< std::string > & GetDependencies()
std::set< std::string > & GetModules()
void AddModule(const std::string &module)
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
void Add(TObject *obj) override
virtual void Sort(Bool_t order=kSortAscending)
Sort linked list.
Each ROOT class (see TClass) has a linked list of methods.
TClass * GetClass() const
Bool_t IsSelected() const
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
Mother of all ROOT objects.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Wrapper for PCRE library (Perl Compatible Regular Expressions).
Int_t Match(const TString &s, UInt_t start=0)
Runs a match on s against the regex 'this' was created with.
TString & Insert(Ssiz_t pos, const char *s)
Int_t Atoi() const
Return integer value of string.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
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.
void ToUpper()
Change string to upper case.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Prepend(const char *cs)
Int_t CountChar(Int_t c) const
Return number of times character c occurs in the string.
TString & Remove(Ssiz_t pos)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
A zero length substring is legal.
Bool_t cd(const char *path)
virtual void FreeDirectory(void *dirp)
Free a directory.
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist.
virtual int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file.
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
Make a file system directory.
virtual TList * GetListOfTimers() const
virtual Int_t Exec(const char *shellcmd)
Execute a command.
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.
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 * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries.
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
virtual TTimer * RemoveTimer(TTimer *t)
Remove timer from list of system timers.
virtual TString GetDirName(const char *pathname)
Return the directory name in pathname.
virtual int Unlink(const char *name)
Unlink, i.e.
Handles synchronous and a-synchronous timer events.
This class represents a WWW compatible URL.
const char * GetHost() const
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual TVirtualViewer3D * GetViewer3D(Option_t *type="")=0
void SaveAs(const char *filename="", Option_t *option="") const override=0
Save this object in the file specified by filename.
virtual Bool_t HasViewer3D() const =0