// @(#)root/html:$Id$ // Author: Axel Naumann 2007-01-09 /************************************************************************* * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ #include "TDocParser.h" #include "Riostream.h" #include "TBaseClass.h" #include "TClass.h" #include "TClassDocOutput.h" #include "TDataMember.h" #include "TDataType.h" #include "TDatime.h" #include "TDocDirective.h" #include "TEnv.h" #include "TGlobal.h" #include "THtml.h" #include "TInterpreter.h" #include "TMethod.h" #include "TMethodArg.h" #include "TPRegexp.h" #include "TROOT.h" #include "TSystem.h" #include "TVirtualMutex.h" #include <string> namespace { class TMethodWrapperImpl: public TDocMethodWrapper { public: TMethodWrapperImpl(TMethod* m, int overloadIdx): fMeth(m), fOverloadIdx(overloadIdx) {} static void SetClass(const TClass* cl) { fgClass = cl; } const char* GetName() const { return fMeth->GetName(); } ULong_t Hash() const { return fMeth->Hash();} Int_t GetNargs() const { return fMeth->GetNargs(); } virtual TMethod* GetMethod() const { return fMeth; } Bool_t IsSortable() const { return kTRUE; } Int_t GetOverloadIdx() const { return fOverloadIdx; } Int_t Compare(const TObject *obj) const { const TMethodWrapperImpl* m = dynamic_cast<const TMethodWrapperImpl*>(obj); if (!m) return 1; Int_t ret = strcasecmp(GetName(), m->GetName()); if (ret == 0) { if (GetNargs() < m->GetNargs()) return -1; else if (GetNargs() > m->GetNargs()) return 1; if (GetMethod()->GetClass()->InheritsFrom(m->GetMethod()->GetClass())) return -1; else return 1; } const char* l(GetName()); const char* r(m->GetName()); if (l[0] == '~' && r[0] == '~') { ++l; ++r; } if (fgClass->InheritsFrom(l)) { if (fgClass->InheritsFrom(r)) { if (gROOT->GetClass(l)->InheritsFrom(r)) return -1; else return 1; } else return -1; } else if (fgClass->InheritsFrom(r)) return 1; if (l[0] == '~') return -1; if (r[0] == '~') return 1; return (ret < 0) ? -1 : 1; } private: static const TClass* fgClass; // current class, defining inheritance sort order TMethod* fMeth; // my method Int_t fOverloadIdx; // this is the n-th overload }; const TClass* TMethodWrapperImpl::fgClass = 0; } //______________________________________________________________________________ //////////////////////////////////////////////////////////////////////////////// // // Parse C++ source or header, and extract documentation. // // Also handles special macros like /* Begin_Macro(GUI, source) { TGMainFrame* f = new TGMainFrame(0, 100, 100); f->SetName("testMainFrame"); // that's part of the name of the image TGButton* b = new TGTextButton(f, "Test Button"); f->AddFrame(b); f->MapSubwindows(); f->Resize(f->GetDefaultSize()); f->MapWindow(); return f; // *HIDE* }