127#include "RConfigure.h"
149#define IfDebug(x) if(gDebug==TTabCom::kDebug) x
175 fPrevInterpMarker(0),
434 while (
const auto key = next()) {
436 const char* className = key->GetName();
437 if (!strncmp(className,
"Library.", 8))
440 if (!strstr(className,
".h"))
457 const char* className =
gInterpreter->ClassInfo_FullName(ci);
458 if (strstr(className,
"(anonymous)"))
503 if (path &&
fpFiles && strcmp(path, previousPath) == 0) {
542 std::ifstream file1(outf);
544 Error(
"TTabCom::GetListOfEnvVars",
"could not open file \"%s\"",
556 line.ReadToDelim(file1,
'=');
557 file1.ignore(32000,
'\n');
581 return gROOT->GetListOfGlobalFunctions(
true);
638 passwd.open(
"/etc/passwd");
642 passwd.ignore(32000,
'\n');
677 Int_t & nGoodStrings)
686 Bool_t atLeast1GoodString;
690 atLeast1GoodString =
kFALSE;
694 if ((pObj = next())) {
698 atLeast1GoodString =
kTRUE;
717 if ((pObj = next())) {
725 while (((
int) strlen(
s) >= i &&
s[i] == ch0) ||
726 (atLeast1GoodString && !isGood));
744 assert(dirName != 0);
763 if (fileName ==
"." || fileName ==
"..")
805 assert(varName != 0);
806 IfDebug(std::cerr <<
"DetermineClass(\"" << varName <<
"\");" << std::endl);
810 if (!fout)
return "";
818 cmd =
"gROOT->ProcessLine(\"";
826 gROOT->ProcessLineSync(
".>");
832 std::ifstream file1(outf);
834 Error(
"TTabCom::DetermineClass",
"could not open file \"%s\"",
840 if (!file1 ||
c <= 0 ||
c ==
'*' ||
c !=
'(') {
841 Error(
"TTabCom::DetermineClass",
"variable \"%s\" not defined?",
845 IfDebug(std::cerr << (
char)
c << std::flush);
851 if (
type ==
"const" ||
type ==
"class") {
855 IfDebug(std::cerr << (
char)
c << std::flush);
859 type.ReadToDelim(file1,
')');
864 if (
type.EndsWith(
"const"))
885 const char *fignore =
gEnv->
GetValue(
"TabCom.FileIgnore", (
char *) 0);
891 std::istringstream endings((
char *) fignore);
893 std::istrstream endings((
char *) fignore);
899 while (!ending.
IsNull()) {
900 if (
s.EndsWith(ending))
962 if (!fout)
return "";
967 std::ifstream file1(outf);
969 Error(
"TTabCom::GetSysIncludePath",
"could not open file \"%s\"",
981 if (!token.IsNull()) {
984 path.
Append(token.Data() + 2);
996 TString sCINTSYSDIR(
"$ROOTSYS/cint");
998 TString sCINTSYSDIR(CINTINCDIR);
1000 path.
Append(
":" + sCINTSYSDIR +
"/include");
1004 path.
Append(
":/usr/include");
1043 if (!path1[0]) path1 =
".";
1047 std::istringstream path((
char *) path1);
1049 std::istrstream path((
char *) path1);
1059 IfDebug(std::cerr <<
"NewListOfFilesInPath(): dirName = " << dirName <<
1081 char c1 = (fileName.
Length() > 0) ? fileName[0] : 0;
1114 const Int_t kNotDefined = -2;
1115 static Int_t old_level = kNotDefined;
1119 if (old_level == kNotDefined) {
1120 std::cerr <<
"NoMsg(): ERROR 1. old_level==" << old_level << std::endl;
1125 old_level = kNotDefined;
1128 if (old_level != kNotDefined) {
1129 std::cerr <<
"NoMsg(): ERROR 2. old_level==" << old_level << std::endl;
1156 const char appendage[],
1168 IfDebug(std::cerr <<
"TTabCom::Complete() ..." << std::endl);
1170 assert(pListOfCandidates != 0);
1173 const int loc = *
fpLoc;
1189 int start = s2.
Index(re);
1191 IfDebug(std::cerr <<
" s1: " <<
s1 << std::endl);
1192 IfDebug(std::cerr <<
" s2: " << s2 << std::endl);
1193 IfDebug(std::cerr <<
" s3: " << s3 << std::endl);
1194 IfDebug(std::cerr <<
"start: " << start << std::endl);
1195 IfDebug(std::cerr << std::endl);
1201 TList listOfMatches;
1202 TList listOfFullPaths;
1208 TIter next_candidate(pListOfCandidates);
1209 TIter next_match(&listOfMatches);
1210 TIter next_fullpath(&listOfFullPaths);
1213 while ((pObj = next_candidate())) {
1215 const char *s4 = pObj->
GetName();
1220 const char *s5 = strrchr(s4,
'/');
1232 IfDebug(std::cerr <<
"adding " << s5 <<
'\t' << s4 << std::endl);
1240 IfDebug(std::cerr <<
"adding " << s5 <<
'\t' << s4 << std::endl);
1256 if (nMatches == 0) {
1265 if (nMatches == 1) {
1267 const char *short_name = next_match()->GetName();
1268 const char *full_name = next_fullpath()->GetName();
1270 pObj = pListOfCandidates->
FindObject(short_name);
1272 IfDebug(std::cerr << std::endl <<
"class: " << pObj->
ClassName() << std::endl);
1275 else if (className ==
"TMethod" || className ==
"TFunction") {
1281 }
else if (className ==
"TDataMember") {
1286 CopyMatch(match, short_name, appendage, full_name);
1295 IfDebug(std::cerr <<
" i=" << i <<
" ch=" << ch << std::endl);
1303 if (nGoodStrings == 1) {
1307 s = next_match()->GetName();
1308 s0 = next_fullpath()->GetName();
1315 IfDebug(std::cerr <<
"more than 1 GoodString" << std::endl);
1326 IfDebug(std::cerr <<
"printing ambiguous matches" << std::endl);
1327 std::set<std::string> alreadyPrinted;
1328 while ((pObj = next_match())) {
1330 if (alreadyPrinted.insert(
s).second) {
1332 s0 = next_fullpath()->GetName();
1335 out <<
s <<
"/" << std::endl;
1337 out <<
s << std::endl;
1358 int i = strlen(
fBuf);
1359 int l = strlen(match) - (loc - start);
1363 Error(
"TTabCom::Complete",
"buffer overflow");
1368 IfDebug(std::cerr <<
" i=" << i << std::endl);
1369 IfDebug(std::cerr <<
" L=" <<
l << std::endl);
1370 IfDebug(std::cerr <<
"loc=" << loc << std::endl);
1373 for (; i >= loc; i -= 1) {
1406 const char appendage[],
1407 const char fullName[])
const
1419 assert(localName != 0);
1422 strcpy(
dest, localName);
1424 const char *key =
"filename";
1425 const int key_len = strlen(key);
1427 IfDebug(std::cerr <<
"CopyMatch()." << std::endl);
1428 IfDebug(std::cerr <<
"localName: " << (localName ? localName :
"0") <<
1430 IfDebug(std::cerr <<
"appendage: " << (appendage ? appendage :
"0") <<
1432 IfDebug(std::cerr <<
" fullName: " << (fullName ? fullName :
"0") <<
1437 if (appendage && strncmp(appendage, key, key_len) == 0) {
1439 appendage += key_len;
1440 IfDebug(std::cerr <<
"new appendage: " << appendage << std::endl);
1443 strcpy(
dest + strlen(localName),
"/");
1446 strcpy(
dest + strlen(localName), appendage);
1450 strcpy(
dest + strlen(localName), appendage);
1464 for (
int context = 0; context <
kNUM_PAT; ++context) {
1467 IfDebug(std::cerr << std::endl
1468 <<
"context=" << context <<
" "
1469 <<
"RegExp=" <<
fRegExp[context]
1482 const char defaultPath[])
const
1488 if (end>0 && path[end]!=
'/' && path[end]!=
'\\') {
1497 if (fileName[end] !=
'/' && fileName[end] !=
'\\') {
1502 extendedPath =
ExtendPath(defaultPath, newBase);
1505 extendedPath = defaultPath;
1507 IfDebug(std::cerr << std::endl);
1508 IfDebug(std::cerr <<
" fileName: " << fileName << std::endl);
1509 IfDebug(std::cerr <<
" pathBase: " << newBase << std::endl);
1511 IfDebug(std::cerr <<
" defaultPath: " << defaultPath << std::endl);
1513 IfDebug(std::cerr <<
" defaultPath: " << std::endl);
1515 IfDebug(std::cerr <<
"extendedPath: " << extendedPath << std::endl);
1516 IfDebug(std::cerr << std::endl);
1518 return extendedPath;
1530 std::stringstream str;
1536 if (originalPath) str << originalPath;
1573 const char dummy[] =
".";
1581 std::cerr << std::endl <<
"tab completion not implemented for this context" <<
1590 pos =
Complete(
"[^~]*$", pListOfUsers,
"/", out);
1597 pos =
Complete(
"[^$]*$", pEnv,
"", out);
1605 const TString fileName = s3(
"[^ ><]*$");
1611 pos =
Complete(
"[^ /]*$", pListOfFiles,
"filename ", out);
1620 const TString fileName = s3(
"[^ ]*$");
1627 pos =
Complete(
"[^ /]*$", pListOfFiles,
"filename ", out);
1638 TString fileName = s3(
"[^<]*$");
1656 const TString fileName = s3(
"[^\"]*$");
1662 pos =
Complete(
"[^\"/]*$", pListOfFiles,
"filename\" ", out);
1674 const TString fileName = s3(
"[^\"]*$");
1679 pos =
Complete(
"[^\"/]*$", pListOfFiles,
"filename\");", out);
1685 const TString fileName = s3(
"[^ \"]*$");
1689 pos =
Complete(
"[^\" /]*$", pListOfFiles,
"filename\"", out);
1701 IfDebug(std::cerr << std::endl);
1702 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1707 TString partname = s3(
"[_a-zA-Z][_a-zA-Z0-9]*$");
1718 TString sym = str(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1719 if (
sym.Length() == 0)
1722 prefix =
sym + prefix;
1728 TString sym = prefix(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1731 IfDebug(std::cerr <<
"prefix: " <<
'"' << prefix <<
'"' << std::endl);
1732 IfDebug(std::cerr <<
"preprefix: " <<
'"' << preprefix <<
'"' << std::endl);
1735 if (namesp.
Length() >= 2)
1737 IfDebug(std::cerr <<
"namesp: " <<
'"' << namesp <<
'"' << std::endl);
1749 for (i = 0; i < tmp->
GetSize(); i++) {
1773 pos =
Complete(
"[^: ]*$", pList,
"", out);
1777 if (context != original_context)
1797 IfDebug(std::cerr << std::endl);
1798 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1808 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
1824 int* store_fpLoc =
fpLoc;
1825 char* store_fBuf =
fBuf;
1826 pos =
Complete(
"[^. ]*$", pList,
"(", out);
1828 fpLoc = store_fpLoc;
1835 pos =
Complete(
"[^> ]*$", pList,
"(", out);
1838 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
1844 if (context != original_context)
1858 IfDebug(std::cerr << std::endl);
1859 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1864 TString partname = s3(
"[_a-zA-Z][_a-zA-Z0-9]* *($");
1875 TString sym = str(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1876 if (
sym.Length() == 0)
1879 prefix =
sym + prefix;
1885 TString sym = prefix(
"[_a-zA-Z][_a-zA-Z0-9]*::$");
1888 IfDebug(std::cerr <<
"prefix: " <<
'"' << prefix <<
'"' << std::endl);
1889 IfDebug(std::cerr <<
"preprefix: " <<
'"' << preprefix <<
'"' << std::endl);
1900 methodName = s3(
"[^:>\\.(]*($");
1904 IfDebug(std::cerr << methodName << std::endl);
1912 TIter nextMethod(pList);
1914 while ((pMethod = (
TMethod *) nextMethod())) {
1915 if (methodName == pMethod->
GetName()) {
1921 if (comment && comment[0] !=
'\0') {
1922 out <<
" \t// " << comment;
1939 if (context != original_context)
1955 name = s3(
"[_a-zA-Z][_a-zA-Z0-9:]* *($", 3);
1960 name = s3(
"^[_a-zA-Z][_a-zA-Z0-9:]*");
1963 IfDebug(std::cerr << std::endl);
1964 IfDebug(std::cerr <<
"name: " <<
'"' <<
name <<
'"' << std::endl);
1986 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
1997 methodName =
name(
"[_a-zA-Z][_a-zA-Z0-9]*$");
2000 methodName = s3(
"[^:>\\.(]*($");
2004 IfDebug(std::cerr << methodName << std::endl);
2012 TIter nextMethod(pList);
2014 while ((pMethod = (
TMethod *) nextMethod())) {
2015 if (methodName == pMethod->
GetName()) {
2021 if (comment && comment[0] !=
'\0') {
2022 out <<
" \t// " << comment;
2039 if (context != original_context)
2050 if (l2 > l3 && s2[l2 - l3 - 1] ==
'.') {
2051 std::cerr << std::endl <<
2052 "tab completion not implemented for this context" << std::endl;
2056 if (l2 > l3 + 1 && s2(l2 - l3 - 2, 2) ==
"->") {
2057 std::cerr << std::endl <<
2058 "tab completion not implemented for this context" << std::endl;
2065 if (pL2) pList->
AddAll(pL2);
2069 if (pC1) pList->
AddAll(pC1);
2072 if (pC3) pList->
AddAll(pC3);
2074 pos =
Complete(
"[_a-zA-Z][_a-zA-Z0-9]*$", pList,
"", out);
2083 TString functionName = s3(
"[_a-zA-Z][_a-zA-Z0-9]*");
2084 IfDebug(std::cerr << functionName << std::endl);
2089 while ((pObj = nextGlobalFunc())) {
2090 if (strcmp(pObj->
GetName(), functionName) == 0) {
2091 listOfMatchingGlobalFuncs.
Add(pObj);
2095 if (listOfMatchingGlobalFuncs.
IsEmpty()) {
2096 std::cerr << std::endl <<
"no such function: " <<
dblquote(functionName)
2099 TIter next(&listOfMatchingGlobalFuncs);
2101 while ((pFunction = (
TFunction *) next())) {
2103 <<
" " << pFunction->
GetName()
2119 Fatal(
"TTabCom::Hook",
"Conext case %d not handled",context);
2168 "[_a-zA-Z][_a-zA-Z0-9:]* +[_a-zA-Z][_a-zA-Z0-9]* *($");
2170 "[_a-zA-Z][_a-zA-Z0-9]* *:: *[_a-zA-Z0-9]* *($");
2172 "[_a-zA-Z][_a-zA-Z0-9()]* *\\. *[_a-zA-Z0-9]* *($");
2174 "[_a-zA-Z][_a-zA-Z0-9()]* *-> *[_a-zA-Z0-9]* *($");
2177 "[_a-zA-Z][_a-zA-Z0-9]* *:: *[_a-zA-Z0-9]*$");
2179 "[_a-zA-Z][_a-zA-Z0-9()]* *\\. *[_a-zA-Z0-9()]*$");
2182 "[_a-zA-Z][_a-zA-Z0-9()]* *-> *[_a-zA-Z0-9()]*$");
2205 Error(
"TTabCom::MakeClassFromClassName",
"Unknown class \"%s\"", className);
2215 Error(
"TTabCom::MakeClassFromClassName",
"class \"%s\" is not defined.", className);
2263 (
gROOT->FindObject(varName) != 0);
2269 if (0) printf(
"varName is [%s] with iteration [%i]\n", varName, iter);
2275 if (!varName_exists && cut != 0)
2283 parentName[cut] = 0;
2284 if (0) printf(
"Parent string is [%s]\n", parentName.
Data());
2290 for(
Int_t i = cut-1; i>=0; --i) {
2291 switch (parentName[i]) {
2295 parentName = parentName(i+1,cut-i-1);
2307 if (varName[cut] ==
'.') {
2308 memberName = varName+cut+1;
2309 if (0) printf(
"Member/method is [%s]\n", memberName.
Data());
2313 memberName = varName+cut+2;
2314 if (0) printf(
"Member/method is [%s]\n", memberName.
Data());
2319 if (0) printf(
"I got [%s] from MakeClassFromVarName()\n", pclass->
GetName());
2323 if (0) printf(
"Variable [%s] exists!\n", parentName.
Data());
2326 if (iter == 0)
return pclass;
2328 if (0) printf(
"Trying data member [%s] of class [%s] ...\n",
2335 if (memberName == dmptr->
GetName())
break;
2339 if (0) printf(
"It's a member!\n");
2352 char *parentesis_ptr = (
char*)strrchr(memberName.
Data(),
'(');
2353 if (parentesis_ptr) *parentesis_ptr = 0;
2356 if (0) printf(
"Trying method [%s] of class [%s] ...\n",
2363 while ((mptr = (
TMethod *) next())) {
2364 if (strcmp(memberName.
Data(),mptr->
GetName())==0)
break;
2370 if (0) printf(
"It's a method called [%s] with return type [%s]\n",
2371 memberName.
Data(), returnName.
Data());
2374 if (returnName[returnName.
Length()-1] ==
'*')
2376 returnName[returnName.
Length()-1] = 0;
2396 if (!varName_exists) {
2397 std::cerr << std::endl <<
"variable " <<
dblquote(varName) <<
" not defined."
2413 if (className.
IsNull() || className ==
"*") {
2417 std::cerr << std::endl <<
"problem determining class of " <<
dblquote(varName)
2427 className[className.
Length()-1] = 0;
2456 Fatal(
"TTabCom::MakeClassFromVarName",
"Conext case %d not handled",context);
2462 for (i = *
fpLoc;
fBuf[i] !=
'.'; i -= 1) {
2465 for (i = strlen(
fBuf); i >= loc; i -= 1) {
2469 fBuf[loc + 1] =
'>';
2473 std::cerr << std::endl <<
dblquote(varName) <<
2474 " is of pointer type. Use this operator: ->" << std::endl;
2483 if (className[className.
Length() - 1] ==
'*') {
2484 std::cerr << std::endl <<
"can't handle pointers to pointers." << std::endl;
2503 Fatal(
"TTabCom::MakeClassFromVarName",
"Conext case %d not handled",context);
2509 for (i = *
fpLoc;
fBuf[i - 1] !=
'-' &&
fBuf[i] !=
'>'; i -= 1) {
2512 int len = strlen(
fBuf);
2513 for (; i < len; i += 1) {
2519 std::cerr << std::endl <<
dblquote(varName) <<
2520 " is not of pointer type. Use this operator: ." << std::endl;
2537 std::cerr << std::endl
2539 << (int) handle <<
" >= kNUM_PAT=" << (
int)
kNUM_PAT << std::endl;
2558 if (start > (
int)strlen(var_str)) start = strlen(var_str);
2560 for (
int i = start; i > 0; i--)
2562 if (var_str[i] ==
'.')
return i;
2563 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.
static RooMathCoreReg dummy
void Error(const char *location, const char *msgfmt,...)
R__EXTERN Int_t gErrorIgnoreLevel
void Fatal(const char *location, const char *msgfmt,...)
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 const char * DirName(const char *pathname)
Return the directory name in pathname.
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 FILE * TempFileName(TString &base, const char *dir=0)
Create a secure temporary file by appending a unique 6 letter string to base.
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 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]
void CopyMatch(char dest[], const char localName[], const char appendage[]=0, const char fullName[]=0) 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 RehashClasses()
Do the class rehash.
static Char_t AllAgreeOnChar(int i, const TSeqCollection *pList, Int_t &nGoodStrings)
[static utility function]///////////////////////////////////////////
static constexpr double s
#define dest(otri, vertexptr)
#define sym(otri1, otri2)