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):
 
   46         fStart(start), fChars(chars), 
fSize(
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();
 
   69         size_t numLeft = end - 
cursor;
 
   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
 
virtual const char * GetName() const
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 full type description of data member, e,g.: "class TDirectory*".
 
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