128#include "RConfigure.h"
153#define IfDebug(x) if(gDebug==TTabCom::kDebug) x
179 fPrevInterpMarker(0),
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)"))
512 if (path &&
fpFiles && strcmp(path, previousPath) == 0) {
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)
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 != 0);
772 if (fileName ==
"." || fileName ==
"..")
814 assert(varName != 0);
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 *) 0);
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");
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);
1179 assert(pListOfCandidates != 0);
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();
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, 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();
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 int i = strlen(
fBuf);
1368 int l = strlen(match) - (loc - start);
1372 Error(
"TTabCom::Complete",
"buffer overflow");
1377 IfDebug(std::cerr <<
" i=" << i << std::endl);
1378 IfDebug(std::cerr <<
" L=" <<
l << std::endl);
1379 IfDebug(std::cerr <<
"loc=" << loc << std::endl);
1382 for (; i >= loc; i -= 1) {
1415 const char appendage[],
1416 const char fullName[])
const
1428 assert(localName != 0);
1431 strcpy(
dest, localName);
1433 const char *key =
"filename";
1434 const int key_len = strlen(key);
1436 IfDebug(std::cerr <<
"CopyMatch()." << std::endl);
1437 IfDebug(std::cerr <<
"localName: " << (localName ? localName :
"0") <<
1439 IfDebug(std::cerr <<
"appendage: " << (appendage ? appendage :
"0") <<
1441 IfDebug(std::cerr <<
" fullName: " << (fullName ? fullName :
"0") <<
1446 if (appendage && strncmp(appendage, key, key_len) == 0) {
1448 appendage += key_len;
1449 IfDebug(std::cerr <<
"new appendage: " << appendage << std::endl);
1452 strcpy(
dest + strlen(localName),
"/");
1455 strcpy(
dest + strlen(localName), appendage);
1459 strcpy(
dest + strlen(localName), appendage);
1473 for (
int context = 0; context <
kNUM_PAT; ++context) {
1476 IfDebug(std::cerr << std::endl
1477 <<
"context=" << context <<
" "
1478 <<
"RegExp=" <<
fRegExp[context]
1491 const char defaultPath[])
const
1497 if (end>0 && path[end]!=
'/' && path[end]!=
'\\') {
1502 TString newBase, extendedPath;
1505 if (fileName[end] !=
'/' && fileName[end] !=
'\\') {
1510 extendedPath =
ExtendPath(defaultPath, newBase);
1513 extendedPath = defaultPath;
1515 IfDebug(std::cerr << std::endl);
1516 IfDebug(std::cerr <<
" fileName: " << fileName << std::endl);
1517 IfDebug(std::cerr <<
" pathBase: " << newBase << std::endl);
1519 IfDebug(std::cerr <<
" defaultPath: " << defaultPath << std::endl);
1521 IfDebug(std::cerr <<
" defaultPath: " << std::endl);
1523 IfDebug(std::cerr <<
"extendedPath: " << extendedPath << std::endl);
1524 IfDebug(std::cerr << std::endl);
1526 return extendedPath;
1538 std::stringstream str;
1544 if (originalPath) str << originalPath;
1581 const char dummy[] =
".";
1589 std::cerr << std::endl <<
"tab completion not implemented for this context" <<
1598 pos =
Complete(
"[^~]*$", pListOfUsers,
"/", out);
1605 pos =
Complete(
"[^$]*$", pEnv,
"", out);
1613 const TString fileName = s3(
"[^ ><]*$");
1619 pos =
Complete(
"[^ /]*$", pListOfFiles,
"filename ", out);
1628 const TString fileName = s3(
"[^ ]*$");
1635 pos =
Complete(
"[^ /]*$", pListOfFiles,
"filename ", out);
1646 TString fileName = s3(
"[^<]*$");
1664 const TString fileName = s3(
"[^\"]*$");
1670 pos =
Complete(
"[^\"/]*$", pListOfFiles,
"filename\" ", out);
1682 const TString fileName = s3(
"[^\"]*$");
1687 pos =
Complete(
"[^\"/]*$", pListOfFiles,
"filename\");", out);
1693 const TString fileName = s3(
"[^ \"]*$");
1697 pos =
Complete(
"[^\" /]*$", pListOfFiles,
"filename\"", out);
1709 IfDebug(std::cerr << std::endl);
1710 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1715 TString partname = s3(
"[_a-zA-Z][_a-zA-Z0-9]*$");
1726 TString sym = str(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1727 if (
sym.Length() == 0)
1730 prefix =
sym + prefix;
1736 TString sym = prefix(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1739 IfDebug(std::cerr <<
"prefix: " <<
'"' << prefix <<
'"' << std::endl);
1740 IfDebug(std::cerr <<
"preprefix: " <<
'"' << preprefix <<
'"' << std::endl);
1743 if (namesp.
Length() >= 2)
1745 IfDebug(std::cerr <<
"namesp: " <<
'"' << namesp <<
'"' << std::endl);
1757 for (i = 0; i < tmp->
GetSize(); i++) {
1781 pos =
Complete(
"[^: ]*$", pList,
"", out);
1785 if (context != original_context)
1805 IfDebug(std::cerr << std::endl);
1806 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1816 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
1832 int* store_fpLoc =
fpLoc;
1833 char* store_fBuf =
fBuf;
1834 pos =
Complete(
"[^. ]*$", pList,
"(", out);
1836 fpLoc = store_fpLoc;
1843 pos =
Complete(
"[^> ]*$", pList,
"(", out);
1846 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
1852 if (context != original_context)
1866 IfDebug(std::cerr << std::endl);
1867 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1872 TString partname = s3(
"[_a-zA-Z][_a-zA-Z0-9]* *($");
1883 TString sym = str(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1884 if (
sym.Length() == 0)
1887 prefix =
sym + prefix;
1893 TString sym = prefix(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1896 IfDebug(std::cerr <<
"prefix: " <<
'"' << prefix <<
'"' << std::endl);
1897 IfDebug(std::cerr <<
"preprefix: " <<
'"' << preprefix <<
'"' << std::endl);
1908 methodName = s3(
"[^:>\\.(]*($");
1912 IfDebug(std::cerr << methodName << std::endl);
1920 TIter nextMethod(pList);
1922 while ((pMethod = (
TMethod *) nextMethod())) {
1923 if (methodName == pMethod->
GetName()) {
1929 if (comment && comment[0] !=
'\0') {
1930 out <<
" \t// " << comment;
1947 if (context != original_context)
1963 name = s3(
"[_a-zA-Z][_a-zA-Z0-9:]* *($", 3);
1968 name = s3(
"^[_a-zA-Z][_a-zA-Z0-9:]*");
1971 IfDebug(std::cerr << std::endl);
1972 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1994 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
2005 methodName =
name(
"[_a-zA-Z][_a-zA-Z0-9]*$");
2008 methodName = s3(
"[^:>\\.(]*($");
2012 IfDebug(std::cerr << methodName << std::endl);
2020 TIter nextMethod(pList);
2022 while ((pMethod = (
TMethod *) nextMethod())) {
2023 if (methodName == pMethod->
GetName()) {
2029 if (comment && comment[0] !=
'\0') {
2030 out <<
" \t// " << comment;
2047 if (context != original_context)
2058 if (l2 > l3 && s2[l2 - l3 - 1] ==
'.') {
2059 std::cerr << std::endl <<
2060 "tab completion not implemented for this context" << std::endl;
2064 if (l2 > l3 + 1 && s2(l2 - l3 - 2, 2) ==
"->") {
2065 std::cerr << std::endl <<
2066 "tab completion not implemented for this context" << std::endl;
2073 if (pL2) pList->
AddAll(pL2);
2077 if (pC1) pList->
AddAll(pC1);
2080 if (pC3) pList->
AddAll(pC3);
2082 pos =
Complete(
"[_a-zA-Z][_a-zA-Z0-9]*$", pList,
"", out);
2091 TString functionName = s3(
"[_a-zA-Z][_a-zA-Z0-9]*");
2092 IfDebug(std::cerr << functionName << std::endl);
2097 while ((pObj = nextGlobalFunc())) {
2098 if (strcmp(pObj->
GetName(), functionName) == 0) {
2099 listOfMatchingGlobalFuncs.
Add(pObj);
2103 if (listOfMatchingGlobalFuncs.
IsEmpty()) {
2104 std::cerr << std::endl <<
"no such function: " <<
dblquote(functionName)
2107 TIter next(&listOfMatchingGlobalFuncs);
2109 while ((pFunction = (
TFunction *) next())) {
2111 <<
" " << pFunction->
GetName()
2127 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
2176 "[_a-zA-Z][_a-zA-Z0-9:]* +[_a-zA-Z][_a-zA-Z0-9]* *($");
2178 "[_a-zA-Z][_a-zA-Z0-9]* *:: *[_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]* *($");
2185 "[_a-zA-Z][_a-zA-Z0-9]* *:: *[_a-zA-Z0-9]*$");
2187 "[_a-zA-Z][_a-zA-Z0-9()]* *\\. *[_a-zA-Z0-9()]*$");
2190 "[_a-zA-Z][_a-zA-Z0-9()]* *-> *[_a-zA-Z0-9()]*$");
2213 Error(
"TTabCom::MakeClassFromClassName",
"Unknown class \"%s\"", className);
2223 Error(
"TTabCom::MakeClassFromClassName",
"class \"%s\" is not defined.", className);
2271 (
gROOT->FindObject(varName) != 0);
2277 if (0) printf(
"varName is [%s] with iteration [%i]\n", varName, iter);
2283 if (!varName_exists && cut != 0)
2291 parentName[cut] = 0;
2292 if (0) printf(
"Parent string is [%s]\n", parentName.
Data());
2298 for(
Int_t i = cut-1; i>=0; --i) {
2299 switch (parentName[i]) {
2303 parentName = parentName(i+1,cut-i-1);
2315 if (varName[cut] ==
'.') {
2316 memberName = varName+cut+1;
2317 if (0) printf(
"Member/method is [%s]\n", memberName.
Data());
2321 memberName = varName+cut+2;
2322 if (0) printf(
"Member/method is [%s]\n", memberName.
Data());
2327 if (0) printf(
"I got [%s] from MakeClassFromVarName()\n", pclass->
GetName());
2331 if (0) printf(
"Variable [%s] exists!\n", parentName.
Data());
2334 if (iter == 0)
return pclass;
2336 if (0) printf(
"Trying data member [%s] of class [%s] ...\n",
2343 if (memberName == dmptr->
GetName())
break;
2347 if (0) printf(
"It's a member!\n");
2360 char *parentesis_ptr = (
char*)strrchr(memberName.
Data(),
'(');
2361 if (parentesis_ptr) *parentesis_ptr = 0;
2364 if (0) printf(
"Trying method [%s] of class [%s] ...\n",
2371 while ((mptr = (
TMethod *) next())) {
2372 if (strcmp(memberName.
Data(),mptr->
GetName())==0)
break;
2378 if (0) printf(
"It's a method called [%s] with return type [%s]\n",
2379 memberName.
Data(), returnName.
Data());
2382 if (returnName[returnName.
Length()-1] ==
'*')
2384 returnName[returnName.
Length()-1] = 0;
2404 if (!varName_exists) {
2405 std::cerr << std::endl <<
"variable " <<
dblquote(varName) <<
" not defined."
2421 if (className.
IsNull() || className ==
"*") {
2425 std::cerr << std::endl <<
"problem determining class of " <<
dblquote(varName)
2435 className[className.
Length()-1] = 0;
2464 Fatal(
"TTabCom::MakeClassFromVarName",
"Conext case %d not handled",context);
2470 for (i = *
fpLoc;
fBuf[i] !=
'.'; i -= 1) {
2473 for (i = strlen(
fBuf); i >= loc; i -= 1) {
2477 fBuf[loc + 1] =
'>';
2481 std::cerr << std::endl <<
dblquote(varName) <<
2482 " is of pointer type. Use this operator: ->" << std::endl;
2491 if (className[className.
Length() - 1] ==
'*') {
2492 std::cerr << std::endl <<
"can't handle pointers to pointers." << std::endl;
2511 Fatal(
"TTabCom::MakeClassFromVarName",
"Conext case %d not handled",context);
2517 for (i = *
fpLoc;
fBuf[i - 1] !=
'-' &&
fBuf[i] !=
'>'; i -= 1) {
2520 int len = strlen(
fBuf);
2521 for (; i < len; i += 1) {
2527 std::cerr << std::endl <<
dblquote(varName) <<
2528 " is not of pointer type. Use this operator: ." << std::endl;
2545 std::cerr << std::endl
2547 << (
int) handle <<
" >= kNUM_PAT=" << (
int)
kNUM_PAT << std::endl;
2566 if (start > (
int)strlen(var_str)) start = strlen(var_str);
2568 for (
int i = start; i > 0; i--)
2570 if (var_str[i] ==
'.')
return i;
2571 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.
R__EXTERN Int_t gErrorIgnoreLevel
void Fatal(const char *location, const char *msgfmt,...)
Use this function in case of a fatal error. It will abort the program.
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 TObject * FindObject(const char *name) const
Find an object in this collection using its name.
virtual void AddAll(const TCollection *col)
Add all objects from collection col to this collection.
virtual void Delete(Option_t *option="")=0
Delete this object.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual Bool_t IsEmpty() const
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 type of data member, e,g.: "class TDirectory*" -> "TDirectory".
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
virtual void Add(TObject *obj)
Each ROOT class (see TClass) has a linked list of methods.
virtual const char * GetCommentString()
Returns a comment string from the class declaration.
virtual const char * GetName() const
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.
virtual void Add(TObject *obj)
virtual TObject * At(Int_t idx) const =0
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
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 FILE * TempFileName(TString &base, const char *dir=nullptr)
Create a secure temporary file by appending a unique 6 letter string to base.
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 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.
Pattern_t fPat[kNUM_PAT][MAX_LEN_PAT]
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.
void CopyMatch(char dest[], const char localName[], const char appendage[]=nullptr, const char fullName[]=nullptr) const
[private]
void RehashClasses()
Do the class rehash.
static Char_t AllAgreeOnChar(int i, const TSeqCollection *pList, Int_t &nGoodStrings)
[static utility function]///////////////////////////////////////////
#define dest(otri, vertexptr)
#define sym(otri1, otri2)