13 #include "RConfigure.h" 43 class THtmlThreadInfo {
45 THtmlThreadInfo(
THtml* html,
bool force): fHtml(html), fForce(force) {}
46 Bool_t GetForce()
const {
return fForce;}
47 THtml* GetHtml()
const {
return fHtml;}
63 fHtml->HelperDeleted(
this);
74 if (fHtml && html && html != fHtml) {
75 Error(
"SetOwner()",
"Object already owned by an THtml instance!");
76 fHtml->HelperDeleted(
this);
106 out_modulename =
"USER";
107 if (!cl)
return false;
113 if (!GetOwner()->GetImplFileName(cl,
kFALSE, filename))
114 if (!GetOwner()->GetDeclFileName(cl,
kFALSE, filename))
117 TString inputdir = GetOwner()->GetInputPath();
136 while (out_modulename[0] ==
'.')
137 out_modulename.
Remove(0, 1);
139 while (out_modulename[0] ==
'/')
140 out_modulename.
Remove(0, 1);
141 while (out_modulename.
EndsWith(
"/"))
144 if (!out_modulename[0])
145 out_modulename = trailingInclude;
147 if (!out_modulename[0])
148 out_modulename = trailingInclude;
158 pos = out_modulename.
Index(
"/inc/");
160 out_modulename.
Remove(pos);
163 while (out_modulename.
EndsWith(
"/"))
167 if (out_modulename ==
"MATH/GENVECTOR")
168 out_modulename =
"MATHCORE";
169 else if (out_modulename ==
"MATH/MATRIX")
170 out_modulename =
"SMATRIX";
171 else if (!out_modulename.
Length()) {
172 const char* cname= cl->
GetName();
173 if (strstr(cname,
"::SMatrix<") || strstr(cname,
"::SVector<"))
174 out_modulename =
"SMATRIX";
175 else if (strstr(cname,
"::TArrayProxy<") || strstr(cname,
"::TClaArrayProxy<")
176 || strstr(cname,
"::TImpProxy<") || strstr(cname,
"::TClaImpProxy<"))
177 out_modulename =
"TREEPLAYER";
185 out_modulename.
Remove(0,3);
186 pos = out_modulename.
Index(
'.');
190 if (!out_modulename.
Length()) {
191 out_modulename =
"USER";
207 THtml* owner = GetOwner();
216 pathext += GetDirDelimiter();
221 pathext += GetDirDelimiter() + path;
223 pathext += GetDirDelimiter() + tok +
"/" + path;
240 while (clname.
Tokenize(token, from,
"::") ) {
264 return GetFileName(cl,
true, out_filename, out_fsys, fse);
281 return GetFileName(cl,
false, out_filename, out_fsys, fse);
290 static const char* delim[] = {
"/",
"\\\\"};
291 for (
int i = 0; i < 2; ++i) {
292 const char* d = delim[i];
318 filename = filesysname;
319 if (!filename.
EndsWith(filesysname)) {
326 if (fse) *fse = fsentry;
353 NormalizePath(clfile);
355 out_filename = clfile;
362 if (clfile ==
"include/TMathBase.h") {
363 clfile =
"math/mathcore/inc/TMath.h";
364 out_filename = clfile;
368 TString inclPath(GetOwner()->GetPathInfo().fIncludePath);
371 while (inclPath.
Tokenize(inclDir, pos, GetOwner()->GetDirDelimiter())) {
373 longestMatch = inclDir.
Length();
375 if (longestMatch !=
kNPOS) {
376 clfile.
Remove(0, longestMatch);
380 GetOwner()->GetPathDefinition().GetFileNameFromInclude(asincl, clfile);
381 out_filename = clfile;
384 filesysname = MatchFileSysName(out_filename, fse);
385 if (filesysname[0]) {
386 clfile = out_filename;
392 int templateLevel = 0;
395 for (; start >= 0 && (templateLevel || filesysname[start] !=
':'); --start) {
396 if (filesysname[start] ==
'>')
398 else if (filesysname[start] ==
'<') {
404 filesysname = filesysname(start + 1, end - start - 1);
408 filesysname +=
".cxx";
409 out_filename = filesysname;
410 filesysname = MatchFileSysName(out_filename, fse);
411 if (filesysname[0]) {
412 clfile = out_filename;
416 if (!decl && !clfile.
Length()) {
421 if (
GetFileName(cl,
true, filesysname, declSysFileName)) {
425 filesysname.
Remove(posExt);
426 filesysname +=
".cxx";
427 out_filename = filesysname;
428 filesysname = MatchFileSysName(out_filename, fse);
429 if (filesysname[0]) {
430 clfile = out_filename;
435 if (clfile.
Length() && !decl) {
441 static const char* vetoClasses[] = {
"math/mathcore/",
"math/mathmore/",
"math/genvector/",
442 "math/minuit2/",
"math/smatrix/"};
443 for (
unsigned int i = 0; i <
sizeof(vetoClasses) /
sizeof(
char*); ++i) {
444 if (clfile.
Contains(vetoClasses[i])) {
447 if (strcmp(cl->
GetName(),
"TComplex")
448 && strcmp(cl->
GetName(),
"TMath")
449 && strncmp(cl->
GetName(),
"TKDTree", 7)
450 && strcmp(cl->
GetName(),
"TVirtualFitter")
451 && strncmp(cl->
GetName(),
"TRandom", 7)) {
469 SplitClassIntoDirFile(out_filename, possiblePath, possibleFileName);
472 if (possibleFileName.
Length()) {
474 possibleFileName +=
".h";
476 possibleFileName +=
".cxx";
478 if (possiblePath.
Length())
481 possiblePath +=
"inc/";
483 possiblePath +=
"src/";
484 out_filename = possiblePath +
"/" + possibleFileName;
490 if (possiblePath.
Length())
491 ExpandSearchPath(possiblePath);
492 else possiblePath=
".";
496 NormalizePath(out_fsys);
515 if (!GetDocDir(module, moduledoc))
524 while (macropath.
Tokenize(macrodirpart, pos,
":")) {
525 out_dir += moduledoc +
"/" + macrodirpart +
":";
544 if (GetOwner()->GetProductName() ==
"ROOT") {
545 doc_dir =
"$ROOTSYS";
551 doc_dir += module +
"/";
552 doc_dir += GetOwner()->GetPathInfo().fDocPath;
574 if (!cl || !GetOwner())
return false;
577 if (!GetOwner()->GetDeclFileName(cl,
kFALSE, hdr))
581 bool includePathMatches =
false;
584 while (!includePathMatches && GetOwner()->GetPathInfo().fIncludePath.Tokenize(tok, pos,
THtml::GetDirDelimiter()))
587 if (out_dir[0] ==
'/' || out_dir[0] ==
'\\')
589 includePathMatches =
true;
592 if (!includePathMatches) {
601 if (posInc ==
kNPOS)
return true;
602 hdr.
Remove(0, posInc + 5);
606 return (out_dir.
Length());
622 if (!included)
return false;
624 out_fsname = included;
627 const TList* bucket = GetOwner()->GetLocalFiles()->
GetEntries().GetListForObject(incBase);
628 if (!bucket)
return false;
631 TObjArray* arrSubDirs = alldir.Tokenize(
"/");
632 TIter iEntry(bucket);
635 if (incBase != entry->
GetName())
continue;
638 for (
int i = arrSubDirs->GetEntries() - 1; parent && i >= 0; --i) {
640 if (!subdir.
Length() || subdir ==
".")
642 if (subdir == parent->
GetName())
663 if (
gDebug > 0 || GetLevel() < 2)
664 Info(
"Recurse",
"scanning %s...", path);
668 const char* direntry = 0;
670 if (!direntry[0] || direntry[0] ==
'.' || regexp.Match(direntry))
continue;
671 TString entryPath(dir + direntry);
688 subdir->Recurse(db, entryPath);
690 int delen = strlen(direntry);
692 if (strcmp(direntry + delen - 4,
".cxx")
693 && strcmp(direntry + delen - 2,
".h")
694 && strcmp(direntry + delen - 4,
".hxx"))
717 Warning(
"Fill",
"Cannot read InputPath \"%s\"!", dir.
Data());
725 Warning(
"Fill",
"InputPath \"%s\" already present as \"%s\"!", dir.
Data(), prevroot->
GetName());
734 root->Recurse(
this, dir);
736 Warning(
"Fill",
"Cannot read InputPath \"%s\"!", dir.
Data());
999 // This is the description block. //
1003 <p>The environment variable Root.Html.Description
1004 (see: <a href="http://root.cern.ch/root/html/TEnv.html">TEnv</a>) contains
1005 the delimiter string (default value: <tt>//_________________</tt>). It means
1006 that you can also write your class description block like this:</p>
1008 //_____________________________________________________________
1009 // A description of the class starts with the line above, and
1010 // will take place here !
1013 <p>Note that <b><i>everything</i></b> until the first non-commented line is considered
1014 as a valid class description block.</p>
1016 <h4><a name="syntax:classidx">III.2 Class index</a></h4>
1018 <p>All classes to be documented will have an entry in the ClassIndex.html,
1019 showing their name with a link to their documentation page and a miniature
1020 description. This discription for e.g. the class MyClass has to be given
1021 in MyClass's header as a comment right after ClassDef(MyClass, n).</p>
1023 <h4><a name="syntax:meth">III.3 Method documentation</a></h4>
1024 <p>A member function description block starts immediately after '{'
1025 and looks like this:</p>
1027 void TWorld::HelloWorldFunc(string *text)
1029 // This is an example of description for the
1030 // TWorld member function
1032 helloWorld.Print( text );
1035 Like in a class description block, <b><i>everything</i></b> until the first
1036 non-commented line is considered as a valid member function
1039 If the rootrc variable <tt>Root.Html.DescriptionStyle</tt> is set to
1040 <tt>Doc++</tt> THtml will also look for method documentation in front of
1041 the function implementation. This feature is not recommended; source code
1042 making use of this does not comply to the ROOT documentation standards, which
1043 means future versions of THtml might not support it anymore.
1045 <h4><a name="syntax:datamem">III.4 Data member documentation</a></h4>
1047 <p>Data members are documented by putting a C++ comment behind their
1048 declaration in the header file, e.g.</p>
1050 int fIAmADataMember; // this is a data member
1054 <h3><a name="directive">IV. Documentation directives</a></h3>
1055 <em>NOTE that THtml does not yet support nested directives
1056 (i.e. latex inside html etc)!</em>
1058 <h4><a name="directive:html">IV.1 <tt>BEGIN<!-- -->_HTML</tt> <tt>END<!-- -->_HTML</tt>: include 'raw' HTML</a></h4>
1060 <p>You can insert pure html code into your documentation comments. During the
1061 generation of the documentation, this code will be inserted as is
1062 into the html file.</p>
1063 <p>Pure html code must be surrounded by the keywords
1064 <tt>BEGIN<!-- -->_HTML</tt> and <tt>END<!-- -->_HTML</tt>, where the
1066 An example of pure html code is this class description you are reading right now.
1068 <a href="http://root.cern.ch/root/html/TDocHtmlDirective.html">TDocHtmlDirective</a>
1069 object to process this directive.</p>
1071 <h4><a name="directive:macro">IV.2 <tt>BEGIN<!-- -->_MACRO</tt> <tt>END<!-- -->_MACRO</tt>: include a picture generated by a macro</a></h4>
1073 <p>THtml can create images from scripts. You can either call an external
1074 script by surrounding it by "begin_macro"/"end_macro", or include an unnamed
1075 macro within these keywords. The macro should return a pointer to an object;
1076 this object will then be saved as a GIF file.</p>
1077 <p>Objects deriving from
1078 <a href="http://root.cern.ch/root/html/TGObject.html">TGObject</a> (GUI elements)
1079 will need to run in graphics mode (non-batch). You must specify this as a parameter:
1080 "Begin_macro(GUI)...".
1081 To create a second tab that displays the source of the macro you can specify
1082 the argument "Begin_macro(source)...".
1083 Of course you can combine them,
1084 e.g. as "Begin_macro(source,gui)...".
1086 <a href="http://root.cern.ch/root/html/TDocMacroDirective.html">TDocMacroDirective</a>
1087 object to process this directive.</p>
1088 <p>This is an example:</p> END_HTML
1091 TCanvas* macro_example_canvas = new TCanvas("macro_example_canvas", "", 150, 150);
1092 macro_example_canvas->SetBorderSize(0);
1093 macro_example_canvas->SetFillStyle(1001);
1094 macro_example_canvas->SetFillColor(kWhite);
1095 macro_example_canvas->cd();
1096 TArc* macro_example_arc = new TArc(0.5,0.32,0.11,180,360);
1097 macro_example_arc->Draw();
1098 TEllipse* macro_example_ellipsis = new TEllipse(0.42,0.58,0.014,0.014,0,360,0);
1099 macro_example_ellipsis->SetFillStyle(0);
1100 macro_example_ellipsis->Draw();
1101 macro_example_ellipsis = new TEllipse(0.58,0.58,0.014,0.014,0,360,0);
1102 macro_example_ellipsis->SetFillStyle(0);
1103 macro_example_ellipsis->Draw();
1104 macro_example_ellipsis = new TEllipse(0.50,0.48,0.22,0.32,0,360,0);
1105 macro_example_ellipsis->SetFillStyle(0);
1106 macro_example_ellipsis->Draw();
1107 TLine* macro_example_line = new TLine(0.48,0.53,0.52,0.41);
1108 macro_example_line->Draw();
1109 return macro_example_canvas;
1114 <h4><a name="directive:latex">IV.3 <tt>BEGIN<!-- -->_LATEX</tt> <tt>END<!-- -->_LATEX</tt>: include a latex picture</a></h4>
1116 <p>You can specify <a href="http://root.cern.ch/root/html/TLatex.html">TLatex</a>
1117 style text and let THtml convert it into an image by surrounding it by "Begin_Latex", "End_Latex".
1118 You can have multiple lines, and e.g. align each line at the '=' sign by passing
1119 the argument <tt>separator='='</tt>. You can also specify how to align these parts;
1120 if you want the part left of the separator to be right aligned, and the right part
1121 to be left aligned, you could specify <tt>align='rl'</tt>.
1122 THtml uses a <a href="http://root.cern.ch/root/html/TDocLatexDirective.html">TDocLatexDirective</a>
1123 object to process the directive.
1124 This is an example output with arguments <tt>separator='=', align='rl'</tt>:</p>
1125 END_HTML BEGIN_LATEX(separator='=', align='rl')#kappa(x)^{2}=sin(x)^{x}
1126 x=#chi^{2} END_LATEX
1130 <h3><a name="index">V. Product and module index</a></h3>
1132 <p><a href="#THtml:MakeIndex">THtml::MakeIndex()</a> will generate index files for classes
1133 and types, all modules, and the product which you can set by
1134 <a href="#THtml:SetProductName">THtml::SetProductName()</a>.
1135 THtml will make use of external documentation in the module and product index,
1136 either by linking it or by including it.
1137 The files for modules are searched based on the source file directory of the
1138 module's classes.</p>
1140 <p>A filename starting with "index." will be included in the index page;
1141 all other files will be linked.
1142 Only files ending on <tt>.html</tt> or <tt>.txt</tt> will be taken into account;
1143 the text files will first be run through
1144 <a href="#THtml:Convert">THtml::Convert()</a>.
1145 You can see an example <a href="http://root.cern.ch/root/html/HIST_Index.html">here</a>;
1146 the part between "Index of HIST classes" and "Jump to" is created by parsing
1147 the module's doc directory.</p>
1149 <h3><a name="aux">VI. Auxiliary files: style sheet, JavaScript, help page</a></h3>
1151 <p>The documentation pages share a common set of javascript and CSS files. They
1152 are generated automatically when running <a href="#THtml:MakeAll">MakeAll()</a>;
1153 they can be generated on
1154 demand by calling <a href="#THtml:CreateAuxiliaryFiles">CreateAuxiliaryFiles()</a>.</p>
1157 <h3><a name="charts">VII. Class Charts</a></h3>
1158 THtml can generate a number of graphical representations for a class, which
1159 are displayed as a tabbed set of imaged ontop of the class description.
1160 It can show the inheritance, inherited and hidden members, directly and
1161 indirectly included files, and library dependencies.
1163 These graphs are generated using the <a href="http://www.graphviz.org/">Graphviz</a>
1164 package. You can install it from <a href="http://www.graphviz.org">http://www.graphviz.org</a>.
1165 You can either put it into your $PATH, or tell THtml where to find it by calling
1166 <a href="#THtml:SetDotDir">SetDotDir()</a>.
1169 <h3><a name="confvar">VIII. Configuration variables</a></h3>
1171 <p>Here is a list of all configuration variables that are known to THtml.
1172 You can set them in your .rootrc file, see
1173 <a href="http://root.cern.ch/root/html/TEnv.html">TEnv</a>.</p>
1176 Root.Html.OutputDir (default: htmldoc)
1177 Root.Html.SourceDir (default: .:src/:include/)
1178 Root.Html.Author (default: // Author:) - start tag for authors
1179 Root.Html.LastUpdate (default: // @(#)) - start tag for last update
1180 Root.Html.Copyright (default: * Copyright) - start tag for copyright notice
1181 Root.Html.Description (default: //____________________ ) - start tag for class descr
1182 Root.Html.HomePage (default: ) - URL to the user defined home page
1183 Root.Html.Header (default: ) - location of user defined header
1184 Root.Html.Footer (default: ) - location of user defined footer
1185 Root.Html.Root (default: ) - URL of Root's class documentation
1186 Root.Html.SearchEngine (default: ) - link to the search engine
1187 Root.Html.Search (defualt: ) - link to search by replacing "%s" with user input
1188 Root.Html.ViewCVS (default: ) - URL of ViewCVS base
1189 Root.Html.XWho (default: http://consult.cern.ch/xwho/people?) - URL of CERN's xWho
1190 Root.Html.Charset (default: ISO-8859-1) - HTML character set
1193 <h3><a name="how">IX. Behind the scene</a></h3>
1195 <p>Internally, THtml is just an API class that sets up the list of known
1196 classes, and forwards API invocations to the "work horses".
1197 <a href="http://root.cern.ch/root/html/TDocOutput.html">TDocOutput</a>
1198 generates the output by letting a
1199 <a href="http://root.cern.ch/root/html/TDocParser.html">TDocParser</a>
1200 object parse the sources, which in turn invokes objects deriving from
1201 <a href="http://root.cern.ch/root/html/TDocDirective.html">TDocDirective</a>
1202 to process directives.</p>
1214 fCounterFormat("%12s %5s %s"),
1215 fProductName("(
UNKNOWN PRODUCT)"),
1216 fThreadedClassIter(0), fThreadedClassCount(0), fMakeClassMutex(0),
1217 fGClient(0), fPathDef(0), fModuleDef(0), fFileDef(0),
1218 fLocalFiles(0), fBatch(
kFALSE)
1221 fPathInfo.fInputPath =
gEnv->
GetValue(
"Root.Html.SourceDir",
"./:src/:include/");
1224 SetOutputDir(
gEnv->
GetValue(
"Root.Html.OutputDir",
"htmldoc"));
1226 fLinkInfo.fXwho =
gEnv->
GetValue(
"Root.Html.XWho",
"http://consult.cern.ch/xwho/people?");
1227 fLinkInfo.fROOTURL =
gEnv->
GetValue(
"Root.Html.Root",
"http://root.cern.ch/root/html");
1228 fDocSyntax.fClassDocTag =
gEnv->
GetValue(
"Root.Html.Description",
"//____________________");
1229 fDocSyntax.fAuthorTag =
gEnv->
GetValue(
"Root.Html.Author",
"// Author:");
1230 fDocSyntax.fLastUpdateTag =
gEnv->
GetValue(
"Root.Html.LastUpdate",
"// @(#)");
1231 fDocSyntax.fCopyrightTag =
gEnv->
GetValue(
"Root.Html.Copyright",
"* Copyright");
1232 fOutputStyle.fHeader =
gEnv->
GetValue(
"Root.Html.Header",
"");
1233 fOutputStyle.fFooter =
gEnv->
GetValue(
"Root.Html.Footer",
"");
1234 fLinkInfo.fHomepage =
gEnv->
GetValue(
"Root.Html.Homepage",
"");
1235 fLinkInfo.fSearchStemURL =
gEnv->
GetValue(
"Root.Html.Search",
"");
1236 fLinkInfo.fSearchEngine =
gEnv->
GetValue(
"Root.Html.SearchEngine",
"");
1237 fLinkInfo.fViewCVS =
gEnv->
GetValue(
"Root.Html.ViewCVS",
"");
1238 fOutputStyle.fCharset =
gEnv->
GetValue(
"Root.Html.Charset",
"ISO-8859-1");
1239 fDocSyntax.fDocStyle =
gEnv->
GetValue(
"Root.Html.DescriptionStyle",
"");
1241 fDocEntityInfo.fClasses.SetOwner();
1242 fDocEntityInfo.fModules.SetOwner();
1246 gROOT->GetListOfSpecials()->Add(gHtml);
1257 fDocEntityInfo.fClasses.Clear();
1258 fDocEntityInfo.fModules.Clear();
1259 if (gHtml ==
this) {
1260 gROOT->GetListOfSpecials()->Remove(gHtml);
1277 const char pathDelimiter =
1283 fPathInfo.fMacroPath += pathDelimiter;
1284 fPathInfo.fMacroPath += path;
1295 CopyFileFromEtcDir(
"HELP.html");
1307 fModuleDef->SetOwner(const_cast<THtml*>(
this));
1321 fFileDef->SetOwner(const_cast<THtml*>(
this));
1335 fPathDef->SetOwner(const_cast<THtml*>(
this));
1346 if (fPathInfo.fEtcDir.Length())
1347 return fPathInfo.fEtcDir;
1351 fPathInfo.fEtcDir =
"html";
1360 if (getenv(
"ROOTSYS"))
1365 return fPathInfo.fEtcDir;
1374 if (!fThreadedClassIter)
return 0;
1379 while ((classinfo = (
TClassDocInfo*)(*fThreadedClassIter)())
1383 delete fThreadedClassIter;
1384 fThreadedClassIter = 0;
1387 fCounter.Form(
"%5d", fDocEntityInfo.fClasses.GetSize() - fThreadedClassCount++);
1402 if (lib && strlen(lib)) {
1403 std::map<std::string, TString>::const_iterator iUrl = fLinkInfo.fLibURLs.find(lib);
1404 if (iUrl != fLinkInfo.fLibURLs.end())
return iUrl->second;
1407 return fLinkInfo.fROOTURL;
1416 if (fPathInfo.fFoundDot != PathInfo_t::kDotUnknown)
1417 return (fPathInfo.fFoundDot == PathInfo_t::kDotFound);
1421 Info(
"HaveDot",
"Checking for Graphviz (dot)...");
1423 if (fPathInfo.fDotDir.Length())
1427 Info(
"HaveDot",
"Running: %s", runDot.
Data());
1429 fPathInfo.fFoundDot = PathInfo_t::kDotNotFound;
1432 fPathInfo.fFoundDot = PathInfo_t::kDotFound;
1443 THelperBase* helpers[3] = {fPathDef, fModuleDef, fFileDef};
1444 for (
int i = 0; who && i < 3; ++i)
1445 if (who == helpers[i])
1446 helpers[i] = who = 0;
1474 const char *dirname ,
const char *relpath ,
1475 Int_t includeOutput ,
1476 const char* context )
1479 CreateListOfClasses(
"*");
1495 char *cRealFilename =
1498 if (!cRealFilename) {
1499 Error(
"Convert",
"Can't find file '%s' !", filename);
1503 TString realFilename(cRealFilename);
1504 delete[] cRealFilename;
1508 std::ifstream sourceFile;
1509 sourceFile.open(realFilename, std::ios::in);
1511 if (!sourceFile.good()) {
1512 Error(
"Convert",
"Can't open file '%s' !", realFilename.
Data());
1518 "Directory '%s' doesn't exist, or it's write protected !", dir);
1528 if (includeOutput && !fGClient)
1529 Warning(
"Convert",
"Output requested but cannot initialize graphics: GUI and GL windows not be available");
1530 output.
Convert(sourceFile, realFilename, tmp1, title, relpath, includeOutput, context, fGClient);
1543 module =
"(UNKNOWN)";
1558 if (fDocEntityInfo.fClasses.GetSize() && fDocEntityInfo.fClassFilter == filter)
1561 Info(
"CreateListOfClasses",
"Initializing - this might take a while...");
1566 fDocEntityInfo.fClasses.Clear();
1567 fDocEntityInfo.fModules.Clear();
1569 fDocEntityInfo.fClassFilter = filter;
1573 if (filter && (!filter[0] || !strcmp(filter,
"*")))
1578 bool skipROOTClasses =
false;
1579 std::set<std::string> rootLibs;
1580 TList classesDeclFileNotFound;
1581 TList classesImplFileNotFound;
1584 for (
Int_t i = -1; i < totalNumberOfClasses; i++) {
1587 const char *cname = 0;
1588 if (i < 0) cname =
"TObject";
1593 if (i >= 0 && !strcmp(cname,
"TObject")) {
1599 if (strstr(cname,
"__gnu_cxx::"))
continue;
1601 if (!strcmp(cname,
"timespec"))
continue;
1606 if (!classPtr)
continue;
1608 std::string shortName(
ShortType(cname));
1609 cname = shortName.c_str();
1632 if (!GetFileDefinition().GetDeclFileName(classPtr, hdr, hdrFS, &fse)) {
1636 skipROOTClasses =
true;
1637 Info(
"CreateListOfClasses",
"Cannot find header file for TObject at %s given the input path %s.",
1639 Info(
"CreateListOfClasses",
"Assuming documentation is not for ROOT classes, or you need to pass " 1640 "the proper directory to THtml::SetInputDir() so I can find %s.", classPtr->
GetDeclFileName());
1665 if (skipROOTClasses) {
1668 size_t posSpace = lib.find(
' ');
1669 if (posSpace != std::string::npos)
1670 lib.erase(posSpace);
1671 if (rootLibs.find(lib) == rootLibs.end()) {
1673 TString rootlibdir = ROOTLIBDIR;
1679 if (sLib.
Index(
'.') == -1) {
1687 classesDeclFileNotFound.
AddLast(classPtr);
1688 else rootLibs.insert(lib);
1692 static const char* rootClassesToIgnore[] =
1693 {
"ColorStruct_t",
"CpuInfo_t",
"Event_t",
"FileStat_t",
"GCValues_t",
"MemInfo_t",
1694 "PictureAttributes_t",
"Point_t",
"ProcInfo_t",
"ROOT",
"ROOT::Fit",
1695 "Rectangle_t",
"RedirectHandle_t",
"Segment_t",
"SetWindowAttributes_t",
1696 "SysInfo_t",
"TCint",
"UserGroup_t",
"WindowAttributes_t",
"timespec", 0};
1697 static const char* rootClassStemsToIgnore[] =
1698 {
"ROOT::Math",
"TKDTree",
"TMatrixT",
"TParameter",
"vector", 0 };
1699 static size_t rootClassStemsToIgnoreLen[] = {0, 0, 0, 0, 0};
1700 static std::set<std::string> setRootClassesToIgnore;
1701 if (setRootClassesToIgnore.empty()) {
1702 for (
int ii = 0; rootClassesToIgnore[ii]; ++ii)
1703 setRootClassesToIgnore.insert(rootClassesToIgnore[ii]);
1704 for (
int ii = 0; rootClassStemsToIgnore[ii]; ++ii)
1705 rootClassStemsToIgnoreLen[ii] = strlen(rootClassStemsToIgnore[ii]);
1708 if (setRootClassesToIgnore.find(cname) == setRootClassesToIgnore.end()) {
1709 bool matched =
false;
1710 for (
int ii = 0; !matched && rootClassStemsToIgnore[ii]; ++ii)
1711 matched = !strncmp(cname, rootClassStemsToIgnore[ii], rootClassStemsToIgnoreLen[ii]);
1713 classesDeclFileNotFound.
AddLast(classPtr);
1722 classesDeclFileNotFound.
AddLast(classPtr);
1730 haveSource = GetFileDefinition().GetImplFileName(classPtr, src, srcFS, fse ? 0 : &fse);
1733 classesImplFileNotFound.
AddLast(classPtr);
1736 if (!htmlfilename.
Length())
1737 GetHtmlFileName(classPtr, htmlfilename);
1740 cdi =
new TClassDocInfo(classPtr, htmlfilename, hdrFS, srcFS, hdr, src);
1741 fDocEntityInfo.fClasses.Add(cdi);
1753 GetModuleDefinition().GetModule(classPtr, fse, modulename);
1754 if (!modulename.
Length() || modulename ==
"USER")
1755 GetModuleNameForClass(modulename, classPtr);
1763 if (parentModuleName.Length() && parentModuleName !=
".") {
1769 while (parentModuleName.Tokenize(token, pos,
"/")) {
1770 if (!token.
Length() || token ==
".")
continue;
1772 super->SetSelected(moduleSelected);
1773 fDocEntityInfo.fModules.Add(super);
1779 fDocEntityInfo.fModules.Add(module);
1793 Info(
"CreateListOfClasses",
"Adding class %s, module %s (%sselected)",
1800 bool cannotFind =
false;
1801 if (!classesDeclFileNotFound.
IsEmpty()) {
1802 Warning(
"CreateListOfClasses",
1803 "Cannot find the header for the following classes [reason]:");
1804 TIter iClassesDeclFileNotFound(&classesDeclFileNotFound);
1806 while ((iClass = (
TClass*)iClassesDeclFileNotFound())) {
1811 Warning(
"CreateListOfClasses",
" %s [header file is unknown]", iClass->
GetName());
1816 Warning(
"CreateListOfClasses",
1817 "Cannot find the source file for the following classes [reason]:");
1818 TIter iClassesDeclFileNotFound(&classesImplFileNotFound);
1820 while ((iClass = (
TClass*)iClassesDeclFileNotFound())) {
1825 Info(
"CreateListOfClasses",
" %s [source file is unknown, add \"ClassImpl(%s)\" to source file if it exists]",
1830 Warning(
"CreateListOfClasses",
"THtml cannot find all headers and sources. ");
1831 Warning(
"CreateListOfClasses",
1832 "You might need to adjust the input path (currently %s) by calling THtml::SetInputDir()",
1833 GetInputPath().
Data());
1840 while ((dt = (
TDataType*) iTypedef())) {
1841 if (dt->GetType() != -1)
continue;
1846 Info(
"CreateListOfClasses",
"Adding typedef %s to class %s",
1847 dt->GetName(), cdi->
GetName());
1849 bool inNamespace =
true;
1850 TString surroundingNamespace(dt->GetName());
1851 Ssiz_t posTemplate = surroundingNamespace.
Last(
'>');
1852 inNamespace = inNamespace && (posTemplate ==
kNPOS);
1854 Ssiz_t posColumn = surroundingNamespace.Last(
':');
1855 if (posColumn !=
kNPOS) {
1856 surroundingNamespace.Remove(posColumn - 1);
1858 inNamespace = inNamespace && (!clSurrounding ||
IsNamespace(clSurrounding));
1862 TString htmlfilename(dt->GetName());
1864 htmlfilename +=
".html";
1873 fDocEntityInfo.fClasses.Sort();
1874 fDocEntityInfo.fModules.Sort();
1875 TIter iterModule(&fDocEntityInfo.fModules);
1880 if (fProductName ==
"(UNKNOWN PRODUCT)" 1881 && fDocEntityInfo.fModules.FindObject(
"core/base")
1882 && fDocEntityInfo.fModules.FindObject(
"core/cont")
1883 && fDocEntityInfo.fModules.FindObject(
"core/rint")
1886 fProductName =
"ROOT";
1888 if (fProductName ==
"(UNKNOWN PRODUCT)") {
1889 Warning(
"CreateListOfClasses",
"Product not set. You should call gHtml->SetProduct(\"MyProductName\");");
1890 }
else if (fProductName !=
"ROOT") {
1891 if (GetViewCVS().Contains(
"http://root.cern.ch/"))
1895 if (fDocEntityInfo.fModules.GetEntries() == 1
1896 && fDocEntityInfo.fModules.At(0)->GetName()
1897 && !strcmp(fDocEntityInfo.fModules.At(0)->GetName(),
"(UNKNOWN)"))
1902 Info(
"CreateListOfClasses",
"Initializing - DONE.");
1930 Warning(
"CopyFileFromEtcDir",
"Could not copy %s to %s", inFile.
Data(), outFile.
Data());
1950 CopyFileFromEtcDir(
"ROOT.js");
1957 CopyFileFromEtcDir(
"ROOT.css");
1958 CopyFileFromEtcDir(
"shadowAlpha.png");
1959 CopyFileFromEtcDir(
"shadow.gif");
1970 TIter iClass(&fDocEntityInfo.fClasses);
1974 if (!candidate)
continue;
1977 TClass* currentBaseOfCandidate = candidate;
1978 while (currentBaseOfCandidate != cl) {
1980 if (!bases)
continue;
1987 currentBaseOfCandidate = clBase;
1991 derived[candidate] = level;
2008 if (!classPtr)
return;
2011 if (!GetImplFileName(classPtr,
kFALSE, cFilename))
2012 GetDeclFileName(classPtr,
kFALSE, cFilename);
2020 const char *colon = strchr(cFilename,
':');
2023 libName =
TString(cFilename, colon - cFilename);
2033 if (posSpace !=
kNPOS)
2034 libname.Remove(posSpace, libname.Length());
2037 libnameBase.
Remove(0, 3);
2041 if (libnameBase.
Length())
2042 libName = libnameBase;
2045 filename = cFilename;
2047 if (!filename.
Length() ||
2049 htmlFileName = GetURL(libName);
2051 htmlFileName =
"./";
2053 if (htmlFileName.
Length()) {
2054 filename = htmlFileName;
2057 output.NameSpace2FileName(className);
2059 filename = className;
2061 filename +=
".html";
2062 }
else filename.
Remove(0);
2083 if(!name1 || !name1[0])
return 0;
2085 if (strstr(name1,
"ROOT::")==name1) {
2087 if (!strncmp(name1 + 6,
"Math", 4)) ret =
kFALSE;
2088 if (!strncmp(name1 + 6,
"Reflex", 6)) ret =
kFALSE;
2089 if (!strncmp(name1 + 6,
"Cintex", 6)) ret =
kFALSE;
2104 if (cl && GetDeclFileName(cl,
kFALSE, declFileName))
2114 return GetDeclImplFileName(cl, filesys,
true, out_name);
2122 return GetDeclImplFileName(cl, filesys,
false, out_name);
2137 bool determine = (!cdi);
2139 if (!determine) determine |= decl && !filesys && !cdi->
GetDeclFileName()[0];
2141 if (!determine) determine |= !decl && !filesys && !cdi->
GetImplFileName()[0];
2146 if (!GetFileDefinition().GetDeclFileName(cl, name, sysname))
2149 if (!GetFileDefinition().GetImplFileName(cl, name, sysname))
2166 if (filesys) out_name = sysname;
2167 else out_name =
name;
2191 Long_t sId, sFlags, sModtime;
2192 if (fPathInfo.fOutputDir.EndsWith(
"/") || fPathInfo.fOutputDir.EndsWith(
"\\"))
2193 fPathInfo.fOutputDir.Remove(fPathInfo.fOutputDir.Length() - 1);
2195 if (st || !(sFlags & 2)) {
2197 Error(
"GetOutputDir",
"output directory %s is an existing file",
2198 fPathInfo.fOutputDir.Data());
2200 Error(
"GetOutputDir",
"output directory %s does not exist and can't create it", fPathInfo.fOutputDir.Data());
2203 return fPathInfo.fOutputDir;
2220 if (!mapfile || !mapfile->
GetTable())
return;
2222 std::set<std::string> loadedlibs;
2223 std::set<std::string> failedlibs;
2227 while ((rec = (
TEnvRec*) iEnvRec())) {
2233 if (failedlibs.find(lib.
Data()) != failedlibs.end()) {
2245 if (loadedlibs.find(lib.
Data()) == loadedlibs.end()) {
2248 loadedlibs.insert(lib.
Data());
2269 if (numthreads == 1) {
2272 TIter iClassInfo(&fDocEntityInfo.fClasses);
2278 fCounter.Form(
"%5d", fDocEntityInfo.fClasses.GetSize() - count++);
2279 MakeClass(classinfo, force);
2282 if (numthreads == -1) {
2285 numthreads = sysinfo.
fCpus;
2289 fThreadedClassCount = 0;
2290 fThreadedClassIter =
new TIter(&fDocEntityInfo.fClasses);
2291 THtmlThreadInfo hti(
this, force);
2300 while (--numthreads >= 0) {
2303 threads.
Add(thread);
2306 TIter iThread(&threads);
2310 while (wait && (thread = (
TThread*) iThread()))
2317 while ((thread = (
TThread*) iThread()))
2333 CreateListOfClasses(
"*");
2338 Error(
"MakeClass",
"Unknown class '%s'!", className);
2342 MakeClass(cdi, force);
2354 if (!fDocEntityInfo.fClasses.GetSize())
2355 CreateListOfClasses(
"*");
2360 if (!currentClass) {
2363 Error(
"MakeClass",
"Class '%s' is known, but I cannot find its TClass object!", cdi->
GetName());
2367 if (htmlFile.Length()
2368 && (htmlFile.BeginsWith(
"http://")
2369 || htmlFile.BeginsWith(
"https://")
2374 if (htmlFile.Length()) {
2377 cdo.MakeTree(force);
2380 what +=
" (sources not found)";
2381 Printf(fCounterFormat.Data(),
"-skipped-", fCounter.Data(), what.Data());
2393 const THtmlThreadInfo* hti = (
const THtmlThreadInfo*)info;
2396 while ((classinfo = hti->GetHtml()->GetNextClass()))
2397 hti->GetHtml()->MakeClass(classinfo, hti->GetForce());
2410 CreateListOfClasses(filter);
2438 Error(
"MakeTree",
"Unknown class '%s' !", className);
2450 if (found) fPathInfo.fFoundDot = PathInfo_t::kDotFound;
2451 else fPathInfo.fFoundDot = PathInfo_t::kDotNotFound;
2459 if (fLocalFiles)
delete fLocalFiles;
2460 fLocalFiles =
new TFileSysDB(fPathInfo.fInputPath, fPathInfo.fIgnorePath +
"|(\\b" + GetOutputDir(
kFALSE) +
"\\b)" , 6);
2471 fModuleDef->SetOwner(const_cast<THtml*>(
this));
2483 fFileDef->SetOwner(const_cast<THtml*>(
this));
2495 fPathDef->SetOwner(const_cast<THtml*>(
this));
2510 fPathInfo.fInputPath = dir;
2514 fDocEntityInfo.fClasses.Clear();
2515 fDocEntityInfo.fModules.Clear();
2524 fPathInfo.fOutputDir = dir;
2526 fPathInfo.fOutputDir.ReplaceAll(
"/",
"\\");
2538 fDocEntityInfo.fClasses.Add(cdi);
2551 fDocEntityInfo.fClasses.Add(cdi);
2561 const char* tmplt = strchr(name,
'<');
2562 if (!tmplt)
return name;
2563 tmplt = strrchr(tmplt,
':');
2564 if (tmplt > name && tmplt[-1] ==
':') {
2567 TString namesp(name, tmplt - name - 1);
2574 fDocEntityInfo.fShortClassNames.Add(scn);
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual const char * GetName() const
Returns name of object.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
static Bool_t IsNamespace(const TClass *cl)
Check whether cl is a namespace.
void MakeIndex(const char *filter="*")
Create the index files for the product, modules, all types, etc.
virtual bool GetDocDir(const TString &module, TString &doc_dir) const
Determine the module's documentation directory.
void Add(ULong64_t hash, Long64_t key, Long64_t value)
Add an (key,value) pair to the table. The key should be unique.
void SetSelected(Bool_t sel=kTRUE)
virtual Bool_t IsAbsoluteFileName(const char *dir)
Return true if dir is an absolute pathname.
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
static void * MakeClassThreaded(void *info)
Entry point of worker threads for multi-threaded MakeAll().
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
virtual TVirtualMutex * Factory(Bool_t=kFALSE)=0
virtual bool GetImplFileName(TClass *cl, Bool_t filesys, TString &out_name) const
Return implementation file name.
virtual void CreateProductIndex()
Fetch documentation from THtml::GetProductDocDir() and put it into the product index page...
Bool_t HaveDot()
Check whether dot is available in $PATH or in the directory set by SetDotPath()
virtual void CreateTypeIndex()
Create index of all data types.
const TString & GetInputPath() const
const char * GetDeclFileName() const
const TFileDefinition & GetFileDefinition() const
Return the TFileDefinition (or derived) object as set by SetFileDefinition(); create and return a TFi...
Bool_t IsNamespace(TCppScope_t scope)
const char * GetImplFileName() const
virtual void CreateJavascript() const
Write the default ROOT style sheet.
Collectable string class.
R__EXTERN TClassTable * gClassTable
TString & ReplaceAll(const TString &s1, const TString &s2)
TClass * GetClassPointer(Bool_t load=kTRUE)
Get pointer to the base class TClass.
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 bool GetImplFileName(const TClass *cl, TString &out_filename, TString &out_fsys, TFileSysEntry **fse=0) const
Determine cl's implementation file name.
static const char * GetDirDelimiter()
void AddClass(TClassDocInfo *cl)
virtual bool GetFileName(const TClass *cl, bool decl, TString &out_filename, TString &out_fsys, TFileSysEntry **fse=0) const
Common implementation for GetDeclFileName(), GetImplFileName()
virtual Int_t GetEntries() const
const char * GetImplFileSysName() const
Int_t GetMaxLevel() const
virtual int MakeDirectory(const char *name)
Make a directory.
void SetOwner(THtml *html)
Set the THtml object owning this object; if it's already set to a different THtml object than issue a...
static void LoadAllLibs()
Load all libraries known to ROOT via the rootmap system.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
void SplitClassIntoDirFile(const TString &clname, TString &dir, TString &filename) const
Given a class name with a scope, split the class name into directory part and file name: A::B::C beco...
virtual ~THtml()
Default destructor.
The TEnv class reads config files, by default named .rootrc.
const char * GetValue() const
virtual void CreateModuleIndex()
Create the class index for each module, picking up documentation from the module's TModuleDocInfo::Ge...
void ToLower()
Change string to lower-case.
virtual const char * DirName(const char *pathname)
Return the directory name in pathname.
Int_t Substitute(TString &s, const TString &replace, const TString &mods="", Int_t start=0, Int_t nMatchMax=10)
Substitute replaces the string s by a new string in which matching patterns are replaced by the repla...
Bool_t IsSelected() const
virtual const char * GetSoExt() const
Get the shared library extension.
const TString & GetIgnore() const
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual bool GetDeclImplFileName(TClass *cl, bool filesys, bool decl, TString &out_name) const
Combined implementation for GetDeclFileName(), GetImplFileName(): Return declaration / implementation...
void MakeAll(Bool_t force=kFALSE, const char *filter="*", int numthreads=1)
Produce documentation for all the classes specified in the filter (by default "*") To process all cla...
void MakeTree(const char *className, Bool_t force=kFALSE)
Make an inheritance tree.
virtual void GetFullName(TString &fullname, Bool_t asIncluded) const
void SetDeclFileName(TClass *cl, const char *filename)
Explicitly set a decl file name for TClass cl.
void SetOutputDir(const char *dir)
Set the directory where the HTML pages shuold be written to.
void GetDerivedClasses(TClass *cl, std::map< TClass *, Int_t > &derived) const
fill derived with all classes inheriting from cl and their inheritance distance to cl ...
virtual void AddLast(TObject *obj)
Add object at the end of the list.
virtual const char * FindFile(const char *search, TString &file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual void CreateStyleSheet() const
Write the default ROOT style sheet.
void MakeTree(Bool_t force=kFALSE)
Create an output file with a graphical representation of the class inheritance.
virtual void Sort(Bool_t order=kSortAscending)
Sort linked list.
void SetImplFileName(TClass *cl, const char *filename)
Explicitly set a impl file name for TClass cl.
void MakeClass(const char *className, Bool_t force=kFALSE)
Make HTML files for a single class.
virtual const char * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries.
Bool_t HaveSource() const
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
virtual int GetSysInfo(SysInfo_t *info) const
Returns static system info, like OS type, CPU type, number of CPUs RAM size, etc into the SysInfo_t s...
virtual const char * GetEtcDir() const
Get the directory containing THtml's auxiliary files ($ROOTSYS/etc/html)
virtual void CreateAuxiliaryFiles() const
copy CSS, javascript file, etc to the output dir
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
The TNamed class is the base class for all named ROOT classes.
virtual void CreateHierarchy()
Create a hierarchical class list The algorithm descends from the base classes and branches into all d...
TString MatchFileSysName(TString &filename, TFileSysEntry **fse=0) const
Find filename in the list of system files; return the system file name and change filename to the fil...
void CreateListOfClasses(const char *filter)
Create the list of all known classes.
TFileSysDir * GetParent() const
const char * GetImplFileName() const
void Info(const char *location, const char *msgfmt,...)
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
std::vector< std::vector< double > > Data
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
ClassInfo_t * GetClassInfo() const
virtual bool GetFileNameFromInclude(const char *included, TString &out_fsname) const
Set out_fsname to the full pathname corresponding to a file included as "included".
void SetLocalFiles() const
Fill the files available in the file system below fPathInfo.fInputPath.
Ssiz_t First(char c) const
Find first occurrence of a character c.
void HelperDeleted(THelperBase *who)
Inform the THtml object that one of its helper objects was deleted.
Int_t Run(void *arg=0)
Start the thread.
virtual void GetModuleNameForClass(TString &module, TClass *cl) const
Return the module name for a given class.
void Error(const char *location, const char *msgfmt,...)
TDictionary * GetClass() const
THashTable & GetEntries()
R__EXTERN TVirtualMutex * gGlobalMutex
void NormalizePath(TString &path) const
Remove "/./" and collapse "/subdir/../" to "/".
R__EXTERN const char * gProgName
TList & GetListOfTypedefs()
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 TObject * FindObject(const char *name) const
Must be redefined in derived classes.
Long64_t GetValue(ULong64_t hash, Long64_t key)
Return the value belonging to specified key and hash value.
virtual const char * GetName() const
Returns name of object.
R__EXTERN TSystem * gSystem
Basic data type descriptor (datatype information is obtained from CINT).
THashList * GetTable() const
virtual void NameSpace2FileName(TString &name)
Replace "::" in name by "__" Replace "<", ">", " ", ",", "~", "=" in name by "_" Replace "A::X<A::Y>"...
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource.
const TModuleDefinition & GetModuleDefinition() const
Return the TModuleDefinition (or derived) object as set by SetModuleDefinition(); create and return a...
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TModuleDocInfo * GetModule() const
virtual void CreateClassTypeDefs()
Create a forwarding page for each typedef pointing to a class.
const char * ShortType(const char *name) const
Get short type name, i.e. with default templates removed.
const char * GetURL(const char *lib=0) const
Get the documentation URL for library lib.
const TString & GetOutputDir(Bool_t createDir=kTRUE) const
Return the output directory as set by SetOutputDir().
void ExpandSearchPath(TString &path) const
Create all permutations of path and THtml's input path: path being PP/ and THtml's input being ...
The ROOT global object gROOT contains a list of all defined classes.
Long_t Join(void **ret=0)
Join this thread.
virtual Int_t Exec(const char *shellcmd)
Execute a command.
void Convert(const char *filename, const char *title, const char *dirname="", const char *relpath="../", Int_t includeOutput=kNoOutput, const char *context="")
It converts a single text file to HTML.
virtual bool GetModule(TClass *cl, TFileSysEntry *fse, TString &out_modulename) const
Set out_modulename to cl's module name; return true if it's valid.
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
void Warning(const char *location, const char *msgfmt,...)
virtual bool GetDeclFileName(TClass *cl, Bool_t filesys, TString &out_name) const
Return declaration file name; return the full path if filesys is true.
Long_t Property() const
Set TObject::fBits and fStreamerType to cache information about the class.
bool IsStdClass(const char *type)
return true if the class belongs to the std namespace
void SetFileDefinition(const TFileDefinition &fd)
Set the file defining object to be used; can also be a user derived object (a la traits).
virtual void FreeDirectory(void *dirp)
Free a directory.
Each class (see TClass) has a linked list of its base class(es).
void SetImplFileName(const char *name)
const char * GetHtmlFileName() const
TString & Remove(Ssiz_t pos)
void Class2Html(Bool_t force=kFALSE)
Create HTML files for a single class.
void CreateListOfTypes()
Create index of all data types and a page for each typedef-to-class.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
virtual Bool_t IsEmpty() const
void Convert(std::istream &in, const char *infilename, const char *outfilename, const char *title, const char *relpath="../", Int_t includeOutput=0, const char *context="", TGClient *gclient=0)
Convert a text file into a html file.
static char * Next()
Returns next class from sorted class table.
virtual bool GetMacroPath(const TString &module, TString &out_dir) const
Determine the path to look for macros (see TDocMacroDirective) for classes from a given module...
void CreateHierarchy()
Create the inheritance hierarchy diagram for all classes.
Ssiz_t Last(char c) const
Find last occurrence of a character c.
virtual ~THelperBase()
Helper's destructor.
void SetSelected(Bool_t sel=kTRUE)
void Add(TObject *obj)
Add object to the hash table.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
#define R__LOCKGUARD(mutex)
void SetImplFileSysName(const char *fsname)
Bool_t CopyFileFromEtcDir(const char *filename) const
Copy a file from $ROOTSYS/etc/html into GetOutputDir()
virtual void CreateClassIndex()
Create index of all classes.
virtual void GetHtmlFileName(TClass *classPtr, TString &filename) const
Return real HTML filename.
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 void Clear(Option_t *option="")
Remove all objects from the list.
void SetPathDefinition(const TPathDefinition &pd)
Set the path defining object to be used; can also be a user derived object (a la traits).
void SetFoundDot(Bool_t found=kTRUE)
Set whether "dot" (a GraphViz utility) is available.
Int_t Match(const TString &s, UInt_t start=0)
Runs a match on s against the regex 'this' was created with.
Mother of all ROOT objects.
virtual TObject * Clone(const char *newname="") const
Make a clone of an object using the Streamer facility.
virtual TClass * GetClass(const char *name) const
-*-*-*-*Return pointer to class with name-*-*-*-*-*-*-*-*-*-*-*-* *-* ===============================...
virtual const char * GetTitle() const
Returns title of object.
Bool_t R_ISDIR(Int_t mode)
void SetHtmlFileName(const char *name)
void Fill()
Recursively fill entries by parsing the path specified in GetName(); can be a THtml::GetDirDelimiter(...
void SetInputDir(const char *dir)
Set the directory containing the source files.
virtual void Add(TObject *obj)
Wrapper for PCRE library (Perl Compatible Regular Expressions).
R__EXTERN const char * gRootDir
void SetDeclFileSysName(const char *fsname)
std::string ShortType(const char *typeDesc, int mode)
Return the absolute type of typeDesc.
void Recurse(TFileSysDB *db, const char *path)
Recursively fill entries by parsing the contents of path.
virtual int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file.
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist.
void SetModuleDefinition(const TModuleDefinition &md)
Set the module defining object to be used; can also be a user derived object (a la traits)...
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
const char * GetName() const
Returns name of object.
const char * GetDeclFileSysName() const
const char * GetDeclFileName() const
const TPathDefinition & GetPathDefinition() const
Return the TModuleDefinition (or derived) object as set by SetModuleDefinition(); create and return a...
virtual bool GetDeclFileName(const TClass *cl, TString &out_filename, TString &out_fsys, TFileSysEntry **fse=0) const
Determine cl's declaration file name.
virtual char * ConcatFileName(const char *dir, const char *name)
Concatenate a directory and a file name. User must delete returned string.
void AddMacroPath(const char *path)
Add path to the directories to be searched for macro files that are to be executed via the TDocMacroD...
void SetDeclFileName(const char *name)
TClassDocInfo * GetNextClass()
Return the next class to be generated for MakeClassThreaded.
void SetModule(TModuleDocInfo *module)
const char * Data() const