128#include "RConfigure.h"
153#define IfDebug(x) if(gDebug==TTabCom::kDebug) x
179 fPrevInterpMarker(0),
180 fpDirectives(nullptr),
185 fpSysIncFiles(nullptr),
438 while (
const auto key = next()) {
440 const char* className = key->GetName();
441 if (!strncmp(className,
"Library.", 8))
444 if (!strstr(className,
".h"))
466 const char* className =
gInterpreter->ClassInfo_FullName(ci);
467 if (strstr(className,
"(anonymous)") || strstr(className,
"(unnamed)"))
512 if (path &&
fpFiles && strcmp(path, previousPath) == 0) {
532 if (!fout)
return nullptr;
551 std::ifstream file1(outf);
553 Error(
"TTabCom::GetListOfEnvVars",
"could not open file \"%s\"",
565 line.ReadToDelim(file1,
'=');
566 file1.ignore(32000,
'\n');
590 return gROOT->GetListOfGlobalFunctions(
true);
647 passwd.open(
"/etc/passwd");
651 passwd.ignore(32000,
'\n');
686 Int_t & nGoodStrings)
688 assert(pList !=
nullptr);
695 Bool_t atLeast1GoodString;
699 atLeast1GoodString =
kFALSE;
703 if ((pObj = next())) {
707 atLeast1GoodString =
kTRUE;
726 if ((pObj = next())) {
734 while (((
int) strlen(s) >= i && s[i] == ch0) ||
735 (atLeast1GoodString && !isGood));
753 assert(dirName !=
nullptr);
754 assert(pList !=
nullptr);
772 if (fileName ==
"." || fileName ==
"..")
814 assert(varName !=
nullptr);
815 IfDebug(std::cerr <<
"DetermineClass(\"" << varName <<
"\");" << std::endl);
819 if (!fout)
return "";
827 cmd =
"gROOT->ProcessLine(\"";
835 gROOT->ProcessLineSync(
".>");
841 std::ifstream file1(outf);
843 Error(
"TTabCom::DetermineClass",
"could not open file \"%s\"",
849 if (!file1 ||
c <= 0 ||
c !=
'(') {
850 Error(
"TTabCom::DetermineClass",
"variable \"%s\" not defined?",
854 IfDebug(std::cerr << (
char)
c << std::flush);
860 if (
type ==
"const" ||
type ==
"class") {
864 IfDebug(std::cerr << (
char)
c << std::flush);
868 type.ReadToDelim(file1,
')');
873 if (
type.EndsWith(
"const"))
894 const char *fignore =
gEnv->
GetValue(
"TabCom.FileIgnore", (
char *)
nullptr);
900 std::istringstream endings((
char *) fignore);
902 std::istrstream endings((
char *) fignore);
908 while (!ending.
IsNull()) {
971 if (!fout)
return "";
976 std::ifstream file1(outf);
978 Error(
"TTabCom::GetSysIncludePath",
"could not open file \"%s\"",
990 if (!token.IsNull()) {
993 path.
Append(token.Data() + 2);
1005 TString sCINTSYSDIR(
"$ROOTSYS/cint");
1007 TString sCINTSYSDIR(CINTINCDIR);
1009 path.
Append(
":" + sCINTSYSDIR +
"/include");
1013 path.
Append(
":/usr/include");
1051 assert(path1 !=
nullptr);
1052 if (!path1[0]) path1 =
".";
1056 std::istringstream path((
char *) path1);
1058 std::istrstream path((
char *) path1);
1068 IfDebug(std::cerr <<
"NewListOfFilesInPath(): dirName = " << dirName <<
1090 char c1 = (fileName.
Length() > 0) ? fileName[0] : 0;
1123 const Int_t kNotDefined = -2;
1124 static Int_t old_level = kNotDefined;
1128 if (old_level == kNotDefined) {
1129 std::cerr <<
"NoMsg(): ERROR 1. old_level==" << old_level << std::endl;
1134 old_level = kNotDefined;
1137 if (old_level != kNotDefined) {
1138 std::cerr <<
"NoMsg(): ERROR 2. old_level==" << old_level << std::endl;
1165 const char appendage[],
1177 IfDebug(std::cerr <<
"TTabCom::Complete() ..." << std::endl);
1178 assert(
fpLoc !=
nullptr);
1179 assert(pListOfCandidates !=
nullptr);
1182 const int loc = *
fpLoc;
1198 int start = s2.
Index(re);
1200 IfDebug(std::cerr <<
" s1: " <<
s1 << std::endl);
1201 IfDebug(std::cerr <<
" s2: " << s2 << std::endl);
1202 IfDebug(std::cerr <<
" s3: " << s3 << std::endl);
1203 IfDebug(std::cerr <<
"start: " << start << std::endl);
1204 IfDebug(std::cerr << std::endl);
1210 TList listOfMatches;
1211 TList listOfFullPaths;
1217 TIter next_candidate(pListOfCandidates);
1218 TIter next_match(&listOfMatches);
1219 TIter next_fullpath(&listOfFullPaths);
1222 while ((pObj = next_candidate())) {
1224 const char *s4 = pObj->
GetName();
1226 assert(s4 !=
nullptr);
1229 const char *s5 = strrchr(s4,
'/');
1241 IfDebug(std::cerr <<
"adding " << s5 <<
'\t' << s4 << std::endl);
1249 IfDebug(std::cerr <<
"adding " << s5 <<
'\t' << s4 << std::endl);
1265 if (nMatches == 0) {
1274 if (nMatches == 1) {
1276 const char *short_name = next_match()->GetName();
1277 const char *full_name = next_fullpath()->GetName();
1279 pObj = pListOfCandidates->
FindObject(short_name);
1281 IfDebug(std::cerr << std::endl <<
"class: " << pObj->
ClassName() << std::endl);
1284 else if (className ==
"TMethod" || className ==
"TFunction") {
1290 }
else if (className ==
"TDataMember") {
1295 CopyMatch(match,
sizeof(match), short_name, appendage, full_name);
1304 IfDebug(std::cerr <<
" i=" << i <<
" ch=" << ch << std::endl);
1312 if (nGoodStrings == 1) {
1316 s = next_match()->GetName();
1317 s0 = next_fullpath()->GetName();
1322 CopyMatch(match,
sizeof(match), s, appendage,
s0);
1324 IfDebug(std::cerr <<
"more than 1 GoodString" << std::endl);
1335 IfDebug(std::cerr <<
"printing ambiguous matches" << std::endl);
1336 std::set<std::string> alreadyPrinted;
1337 while ((pObj = next_match())) {
1339 if (alreadyPrinted.insert(s).second) {
1341 s0 = next_fullpath()->GetName();
1344 out << s <<
"/" << std::endl;
1346 out << s << std::endl;
1367 const int old_len = strlen(
fBuf);
1368 const int match_len = strlen(match);
1369 const int added_len = match_len - (loc - start);
1372 if (old_len + added_len + 1 >
BUF_SIZE || start > loc || start + match_len + 1 >
BUF_SIZE) {
1373 Error(
"TTabCom::Complete",
"buffer overflow");
1378 IfDebug(std::cerr <<
" i=" << old_len << std::endl);
1379 IfDebug(std::cerr <<
" L=" << added_len << std::endl);
1380 IfDebug(std::cerr <<
"loc=" << loc << std::endl);
1383 for (
int i = old_len; i >= loc; i -= 1) {
1388 memcpy(
fBuf + start, match, match_len);
1401 *
fpLoc = loc + added_len;
1416 const char *localName,
1417 const char *appendage,
1418 const char *fullName)
const
1429 assert(
dest !=
nullptr);
1430 assert(localName !=
nullptr);
1433 strlcpy(
dest, localName, dest_len);
1435 const char *key =
"filename";
1436 const int key_len = strlen(key);
1438 IfDebug(std::cerr <<
"CopyMatch()." << std::endl);
1439 IfDebug(std::cerr <<
"localName: " << (localName ? localName :
"0") <<
1441 IfDebug(std::cerr <<
"appendage: " << (appendage ? appendage :
"0") <<
1443 IfDebug(std::cerr <<
" fullName: " << (fullName ? fullName :
"0") <<
1448 if (appendage && strncmp(appendage, key, key_len) == 0) {
1450 appendage += key_len;
1451 IfDebug(std::cerr <<
"new appendage: " << appendage << std::endl);
1454 strlcat(
dest,
"/", dest_len);
1457 strlcat(
dest, appendage, dest_len);
1461 strlcat(
dest, appendage, dest_len);
1470 assert(
fBuf !=
nullptr);
1475 for (
int context = 0; context <
kNUM_PAT; ++context) {
1478 IfDebug(std::cerr << std::endl
1479 <<
"context=" << context <<
" "
1480 <<
"RegExp=" <<
fRegExp[context]
1493 const char defaultPath[])
const
1499 if (end>0 && path[end]!=
'/' && path[end]!=
'\\') {
1504 TString newBase, extendedPath;
1507 if (fileName[end] !=
'/' && fileName[end] !=
'\\') {
1512 extendedPath =
ExtendPath(defaultPath, newBase);
1515 extendedPath = defaultPath;
1517 IfDebug(std::cerr << std::endl);
1518 IfDebug(std::cerr <<
" fileName: " << fileName << std::endl);
1519 IfDebug(std::cerr <<
" pathBase: " << newBase << std::endl);
1521 IfDebug(std::cerr <<
" defaultPath: " << defaultPath << std::endl);
1523 IfDebug(std::cerr <<
" defaultPath: " << std::endl);
1525 IfDebug(std::cerr <<
"extendedPath: " << extendedPath << std::endl);
1526 IfDebug(std::cerr << std::endl);
1528 return extendedPath;
1540 std::stringstream str;
1546 if (originalPath) str << originalPath;
1583 const char dummy[] =
".";
1591 std::cerr << std::endl <<
"tab completion not implemented for this context" <<
1600 pos =
Complete(
"[^~]*$", pListOfUsers,
"/", out);
1607 pos =
Complete(
"[^$]*$", pEnv,
"", out);
1615 const TString fileName = s3(
"[^ ><]*$");
1621 pos =
Complete(
"[^ /]*$", pListOfFiles,
"filename ", out);
1630 const TString fileName = s3(
"[^ ]*$");
1637 pos =
Complete(
"[^ /]*$", pListOfFiles,
"filename ", out);
1648 TString fileName = s3(
"[^<]*$");
1666 const TString fileName = s3(
"[^\"]*$");
1672 pos =
Complete(
"[^\"/]*$", pListOfFiles,
"filename\" ", out);
1684 const TString fileName = s3(
"[^\"]*$");
1689 pos =
Complete(
"[^\"/]*$", pListOfFiles,
"filename\");", out);
1695 const TString fileName = s3(
"[^ \"]*$");
1699 pos =
Complete(
"[^\" /]*$", pListOfFiles,
"filename\"", out);
1711 IfDebug(std::cerr << std::endl);
1712 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1717 TString partname = s3(
"[_a-zA-Z][_a-zA-Z0-9]*$");
1728 TString sym = str(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1732 prefix = sym + prefix;
1738 TString sym = prefix(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1741 IfDebug(std::cerr <<
"prefix: " <<
'"' << prefix <<
'"' << std::endl);
1742 IfDebug(std::cerr <<
"preprefix: " <<
'"' << preprefix <<
'"' << std::endl);
1745 if (namesp.
Length() >= 2)
1747 IfDebug(std::cerr <<
"namesp: " <<
'"' << namesp <<
'"' << std::endl);
1759 for (i = 0; i < tmp->GetSize(); i++) {
1783 pos =
Complete(
"[^: ]*$", pList,
"", out);
1787 if (context != original_context)
1807 IfDebug(std::cerr << std::endl);
1808 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1818 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
1834 int* store_fpLoc =
fpLoc;
1835 char* store_fBuf =
fBuf;
1836 pos =
Complete(
"[^. ]*$", pList,
"(", out);
1838 fpLoc = store_fpLoc;
1845 pos =
Complete(
"[^> ]*$", pList,
"(", out);
1848 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
1854 if (context != original_context)
1868 IfDebug(std::cerr << std::endl);
1869 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1874 TString partname = s3(
"[_a-zA-Z][_a-zA-Z0-9]* *($");
1885 TString sym = str(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1889 prefix = sym + prefix;
1895 TString sym = prefix(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1898 IfDebug(std::cerr <<
"prefix: " <<
'"' << prefix <<
'"' << std::endl);
1899 IfDebug(std::cerr <<
"preprefix: " <<
'"' << preprefix <<
'"' << std::endl);
1910 methodName = s3(
"[^:>\\.(]*($");
1914 IfDebug(std::cerr << methodName << std::endl);
1922 TIter nextMethod(pList);
1924 while ((pMethod = (
TMethod *) nextMethod())) {
1925 if (methodName == pMethod->
GetName()) {
1931 if (comment && comment[0] !=
'\0') {
1932 out <<
" \t// " << comment;
1949 if (context != original_context)
1965 name = s3(
"[_a-zA-Z][_a-zA-Z0-9:]* *($", 3);
1970 name = s3(
"^[_a-zA-Z][_a-zA-Z0-9:]*");
1973 IfDebug(std::cerr << std::endl);
1974 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1996 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
2007 methodName =
name(
"[_a-zA-Z][_a-zA-Z0-9]*$");
2010 methodName = s3(
"[^:>\\.(]*($");
2014 IfDebug(std::cerr << methodName << std::endl);
2022 TIter nextMethod(pList);
2024 while ((pMethod = (
TMethod *) nextMethod())) {
2025 if (methodName == pMethod->
GetName()) {
2031 if (comment && comment[0] !=
'\0') {
2032 out <<
" \t// " << comment;
2049 if (context != original_context)
2060 if (l2 > l3 && s2[l2 - l3 - 1] ==
'.') {
2061 std::cerr << std::endl <<
2062 "tab completion not implemented for this context" << std::endl;
2066 if (l2 > l3 + 1 && s2(l2 - l3 - 2, 2) ==
"->") {
2067 std::cerr << std::endl <<
2068 "tab completion not implemented for this context" << std::endl;
2075 if (pL2) pList->
AddAll(pL2);
2079 if (pC1) pList->
AddAll(pC1);
2082 if (pC3) pList->
AddAll(pC3);
2084 pos =
Complete(
"[_a-zA-Z][_a-zA-Z0-9]*$", pList,
"", out);
2093 TString functionName = s3(
"[_a-zA-Z][_a-zA-Z0-9]*");
2094 IfDebug(std::cerr << functionName << std::endl);
2099 while ((pObj = nextGlobalFunc())) {
2100 if (strcmp(pObj->
GetName(), functionName) == 0) {
2101 listOfMatchingGlobalFuncs.
Add(pObj);
2105 if (listOfMatchingGlobalFuncs.
IsEmpty()) {
2106 std::cerr << std::endl <<
"no such function: " <<
dblquote(functionName)
2109 TIter next(&listOfMatchingGlobalFuncs);
2111 while ((pFunction = (
TFunction *) next())) {
2113 <<
" " << pFunction->
GetName()
2129 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
2178 "[_a-zA-Z][_a-zA-Z0-9:]* +[_a-zA-Z][_a-zA-Z0-9]* *($");
2180 "[_a-zA-Z][_a-zA-Z0-9]* *:: *[_a-zA-Z0-9]* *($");
2182 "[_a-zA-Z][_a-zA-Z0-9()]* *\\. *[_a-zA-Z0-9]* *($");
2184 "[_a-zA-Z][_a-zA-Z0-9()]* *-> *[_a-zA-Z0-9]* *($");
2187 "[_a-zA-Z][_a-zA-Z0-9]* *:: *[_a-zA-Z0-9]*$");
2189 "[_a-zA-Z][_a-zA-Z0-9()]* *\\. *[_a-zA-Z0-9()]*$");
2192 "[_a-zA-Z][_a-zA-Z0-9()]* *-> *[_a-zA-Z0-9()]*$");
2215 Error(
"TTabCom::MakeClassFromClassName",
"Unknown class \"%s\"", className);
2225 Error(
"TTabCom::MakeClassFromClassName",
"class \"%s\" is not defined.", className);
2273 (
gROOT->FindObject(varName) !=
nullptr);
2279 if (0) printf(
"varName is [%s] with iteration [%i]\n", varName, iter);
2285 if (!varName_exists && cut != 0)
2293 parentName[cut] = 0;
2294 if (0) printf(
"Parent string is [%s]\n", parentName.
Data());
2300 for(
Int_t i = cut-1; i>=0; --i) {
2301 switch (parentName[i]) {
2305 parentName = parentName(i+1,cut-i-1);
2317 if (varName[cut] ==
'.') {
2318 memberName = varName+cut+1;
2319 if (0) printf(
"Member/method is [%s]\n", memberName.
Data());
2323 memberName = varName+cut+2;
2324 if (0) printf(
"Member/method is [%s]\n", memberName.
Data());
2329 if (0) printf(
"I got [%s] from MakeClassFromVarName()\n", pclass->
GetName());
2333 if (0) printf(
"Variable [%s] exists!\n", parentName.
Data());
2336 if (iter == 0)
return pclass;
2338 if (0) printf(
"Trying data member [%s] of class [%s] ...\n",
2345 if (memberName == dmptr->
GetName())
break;
2349 if (0) printf(
"It's a member!\n");
2362 char *parentesis_ptr = (
char*)strrchr(memberName.
Data(),
'(');
2363 if (parentesis_ptr) *parentesis_ptr = 0;
2366 if (0) printf(
"Trying method [%s] of class [%s] ...\n",
2373 while ((mptr = (
TMethod *) next())) {
2374 if (strcmp(memberName.
Data(),mptr->
GetName())==0)
break;
2380 if (0) printf(
"It's a method called [%s] with return type [%s]\n",
2381 memberName.
Data(), returnName.
Data());
2384 if (returnName[returnName.
Length()-1] ==
'*')
2386 returnName[returnName.
Length()-1] = 0;
2406 if (!varName_exists) {
2407 std::cerr << std::endl <<
"variable " <<
dblquote(varName) <<
" not defined."
2423 if (className.
IsNull() || className ==
"*") {
2427 std::cerr << std::endl <<
"problem determining class of " <<
dblquote(varName)
2437 className[className.
Length()-1] = 0;
2466 Fatal(
"TTabCom::MakeClassFromVarName",
"Conext case %d not handled",context);
2472 for (i = *
fpLoc;
fBuf[i] !=
'.'; i -= 1) {
2475 for (i = strlen(
fBuf); i >= loc; i -= 1) {
2479 fBuf[loc + 1] =
'>';
2483 std::cerr << std::endl <<
dblquote(varName) <<
2484 " is of pointer type. Use this operator: ->" << std::endl;
2493 if (className[className.
Length() - 1] ==
'*') {
2494 std::cerr << std::endl <<
"can't handle pointers to pointers." << std::endl;
2513 Fatal(
"TTabCom::MakeClassFromVarName",
"Conext case %d not handled",context);
2519 for (i = *
fpLoc;
fBuf[i - 1] !=
'-' &&
fBuf[i] !=
'>'; i -= 1) {
2523 for (; i <
len; i += 1) {
2529 std::cerr << std::endl <<
dblquote(varName) <<
2530 " is not of pointer type. Use this operator: ." << std::endl;
2547 std::cerr << std::endl
2549 << (
int) handle <<
" >= kNUM_PAT=" << (
int)
kNUM_PAT << std::endl;
2568 if (start > (
int)strlen(var_str)) start = strlen(var_str);
2570 for (
int i = start; i > 0; i--)
2572 if (var_str[i] ==
'.')
return i;
2573 if (var_str[i] ==
'>' && i > 0 && var_str[i-1] ==
'-')
return i-1;
int Makepat(const char *, Pattern_t *, int)
Make a pattern template from the string pointed to by exp.
const char * Matchs(const char *, size_t len, const Pattern_t *, const char **)
Match a string with a pattern.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
Int_t gErrorIgnoreLevel
Error handling routines.
void Fatal(const char *location, const char *msgfmt,...)
Use this function in case of a fatal error. It will abort the program.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t dest
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 UChar_t len
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
R__EXTERN TInterpreter * gCling
Bool_t R_ISDIR(Int_t mode)
R__EXTERN TSystem * gSystem
static char * Next()
Returns next class from sorted class table.
TClass instances represent classes, structs and namespaces in the ROOT type system.
const TList * GetListOfAllPublicMethods(Bool_t load=kTRUE)
Returns a list of all public methods of this class and its base classes.
TList * GetListOfAllPublicDataMembers(Bool_t load=kTRUE)
Returns a list of all public data members of this class and its base classes.
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
Collection abstract base class.
virtual void AddAll(const TCollection *col)
Add all objects from collection col to this collection.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
virtual Bool_t IsEmpty() const
void Delete(Option_t *option="") override=0
Delete this object.
Bool_t Contains(const char *name) 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 * GetTypeName() const
Get the decayed type name of this data member, removing const and volatile qualifiers,...
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Global functions class (global functions are obtained from CINT).
const char * GetSignature()
Return signature of function.
Int_t GetNargs() const
Number of function arguments.
const char * GetReturnTypeName() const
Get full type description of function return type, e,g.: "class TDirectory*".
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
virtual int DisplayIncludePath(FILE *) const
void Add(TObject *obj) override
Each ROOT class (see TClass) has a linked list of methods.
virtual const char * GetCommentString()
Returns a comment string from the class declaration.
const char * GetName() const override
Returns name of object.
Collectable string class.
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
static const char * GetMacroPath()
Get macro search path. Static utility function.
Regular expression class.
Sequenceable collection abstract base class.
void Add(TObject *obj) override
std::istream & ReadToDelim(std::istream &str, char delim='\n')
Read up to an EOF, or a delimiting character, whichever comes first.
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.
const char * Data() const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Prepend(const char *cs)
TString & Remove(Ssiz_t pos)
TString & Append(const char *cs)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual FILE * TempFileName(TString &base, const char *dir=nullptr, const char *suffix=nullptr)
Create a secure temporary file by appending a unique 6 letter string to base.
void Beep(Int_t freq=-1, Int_t duration=-1, Bool_t setDefault=kFALSE)
Beep for duration milliseconds with a tone of frequency freq.
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
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 const char * Getenv(const char *env)
Get environment variable.
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 * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries.
virtual const char * GetDynamicPath()
Return the dynamic path (used to find shared libraries).
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual TString GetDirName(const char *pathname)
Return the directory name in pathname.
virtual int Unlink(const char *name)
Unlink, i.e.
static void NoMsg(Int_t errorLevel)
[static utility function]/////////////////////////////
const TSeqCollection * GetListOfCppDirectives()
Return the list of CPP directives.
Int_t Hook(char *buf, int *pLoc, std::ostream &out)
[private]
ULong64_t fPrevInterpMarker
void ClearFiles()
Close all files.
static TString DetermineClass(const char varName[])
[static utility function]/////////////////////////////
static Bool_t ExcludedByFignore(TString s)
[static utility function]/////////////////////////////
void InitPatterns()
[private]
void CopyMatch(char *dest, int dest_len, const char *localName, const char *appendage=nullptr, const char *fullName=nullptr) const
[private]
void RehashEnvVars()
Environemnt variables rehashing.
const TSeqCollection * GetListOfSysIncFiles()
Return the list of system include files.
void ClearAll()
clears all lists except for user names and system include files.
TSeqCollection * fpDirectives
const TSeqCollection * GetListOfFilesInPath(const char path[])
"path" should be initialized with a colon separated list of system directories
TSeqCollection * fpClasses
TSeqCollection * fpEnvVars
void ClearSysIncFiles()
Close system files.
const TSeqCollection * GetListOfEnvVars()
Uses "env" (Unix) or "set" (Windows) to get list of environment variables.
TString DeterminePath(const TString &fileName, const char defaultPath[]) const
[private]
const TSeqCollection * GetListOfPragmas()
Return the list of pragmas.
static TSeqCollection * NewListOfFilesInPath(const char path[])
[static utility function]/////////////////////////////
TClass * MakeClassFromVarName(const char varName[], EContext_t &context, int iter=0)
[private] (does some specific error handling that makes the function unsuitable for general use....
const TSeqCollection * GetListOfGlobals()
Return the list of globals.
void SetPattern(EContext_t handle, const char regexp[])
[private]
TSeqCollection * fpSysIncFiles
void RehashGlobals()
Reload globals.
TClass * MakeClassFromClassName(const char className[]) const
[private] (does some specific error handling that makes the function unsuitable for general use....
void RehashGlobalFunctions()
Reload global functions.
void ClearGlobalFunctions()
Forget all global functions seen so far.
void ClearPragmas()
Forget all pragmas seen so far.
static Bool_t PathIsSpecifiedInFileName(const TString &fileName)
[static utility function]/////////////////////////////
TString ExtendPath(const char originalPath[], TString newBase) const
[private]
TTabCom()
Default constructor.
void RehashPragmas()
Reload pragmas.
const TSeqCollection * GetListOfClasses()
Return the list of classes.
void RehashCppDirectives()
Cpp rehashing.
void RehashUsers()
Reload users.
const TSeqCollection * GetListOfUsers()
reads from "/etc/passwd"
static void AppendListOfFilesInDirectory(const char dirName[], TSeqCollection *pList)
[static utility function]/////////////////////////////
void ClearClasses()
Clear classes and namespace collections.
TSeqCollection * fpPragmas
Int_t Complete(const TRegexp &re, const TSeqCollection *pListOfCandidates, const char appendage[], std::ostream &out, TString::ECaseCompare cmp=TString::kExact)
[private]
const char * fRegExp[kNUM_PAT]
int ParseReverse(const char *var_str, int start)
Returns the place in the string where to put the \0, starting the search from "start".
TCollection * GetListOfGlobalFunctions()
Return the list of global functions.
void RehashSysIncFiles()
Reload system include files.
static Bool_t IsDirectory(const char fileName[])
[static utility function]/////////////////////////////
EContext_t DetermineContext() const
[private]
static TString GetSysIncludePath()
[static utility function]/////////////////////////////
void ClearEnvVars()
Forget all environment variables seen so far.
void ClearCppDirectives()
Forget all Cpp directives seen so far.
void ClearGlobals()
Forget all global variables seen so far.
void ClearUsers()
Forget all user seen so far.
void RehashAll()
clears and then rebuilds all lists except for user names and system include files.
void RehashFiles()
Close files.
TClass * TryMakeClassFromClassName(const char className[]) const
Same as above but does not print the error message.
Pattern_t fPat[kNUM_PAT][1024]
void RehashClasses()
Do the class rehash.
static Char_t AllAgreeOnChar(int i, const TSeqCollection *pList, Int_t &nGoodStrings)
[static utility function]///////////////////////////////////////////