// @(#)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. * *************************************************************************/ #ifndef ROOT_TDocOutput #define ROOT_TDocOutput //////////////////////////////////////////////////////////////////////////// // // // ROOT_TDocOutput // // // // Generates documentation output using XHTML 1.0 transitional // // // //////////////////////////////////////////////////////////////////////////// #ifndef ROOT_TObject #include "TObject.h" #endif #ifndef ROOT_Riosfwd #include "Riosfwd.h" #endif #ifndef ROOT_TDocParser #include "TDocParser.h" #endif class TClass; class TDataMember; class TDataType; class TGClient; class THtml; class TModuleDocInfo; class TString; class TSubString; class TVirtualPad; class TDocOutput: public TObject { protected: enum EGraphvizTool { kDot, kNeato, kFdp, kCirco }; THtml* fHtml; // THtml object we belong to int CaseInsensitiveSort(const void *name1, const void *name2); void AddLink(TSubString& str, TString& link, const char* comment); void ProcessDocInDir(std::ostream& out, const char* indir, const char* outdir, const char* linkdir); Bool_t RunDot(const char* filename, std::ostream* outMap = 0, EGraphvizTool gvwhat = kDot); void WriteHtmlHeader(std::ostream& out, const char *titleNoSpecial, const char* dir /*=""*/, TClass *cls /*=0*/, const char* header); void WriteHtmlFooter(std::ostream& out, const char *dir, const char *lastUpdate, const char *author, const char *copyright, const char* footer); virtual void WriteSearch(std::ostream& out); void WriteLocation(std::ostream& out, TModuleDocInfo* module, const char* classname = 0); void WriteModuleLinks(std::ostream& out); void WriteModuleLinks(std::ostream& out, TModuleDocInfo* super); void WriteTopLinks(std::ostream& out, TModuleDocInfo* module, const char* classname = 0, Bool_t withLocation = kTRUE); public: enum EFileType { kSource, kInclude, kTree, kDoc }; TDocOutput(THtml& html); virtual ~TDocOutput(); virtual void AdjustSourcePath(TString& line, const char* relpath = "../"); 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); Bool_t CopyHtmlFile(const char *sourceName, const char *destName=""); virtual void CreateClassIndex(); virtual void CreateModuleIndex(); virtual void CreateProductIndex(); virtual void CreateTypeIndex(); virtual void CreateClassTypeDefs(); virtual void CreateHierarchy(); virtual void DecorateEntityBegin(TString& str, Ssiz_t& pos, TDocParser::EParseContext type); virtual void DecorateEntityEnd(TString& str, Ssiz_t& pos, TDocParser::EParseContext type); virtual void FixupAuthorSourceInfo(TString& authors); const char* GetExtension() const { return ".html"; } THtml* GetHtml() { return fHtml; } virtual Bool_t IsModified(TClass *classPtr, EFileType type); virtual void NameSpace2FileName(TString &name); virtual void ReferenceEntity(TSubString& str, TClass* entity, const char* comment = 0); virtual void ReferenceEntity(TSubString& str, TDataMember* entity, const char* comment = 0); virtual void ReferenceEntity(TSubString& str, TDataType* entity, const char* comment = 0); virtual void ReferenceEntity(TSubString& str, TMethod* entity, const char* comment = 0); virtual Bool_t ReferenceIsRelative(const char* reference) const; virtual const char* ReplaceSpecialChars(char c); void ReplaceSpecialChars(std::ostream &out, const char *string); void ReplaceSpecialChars(TString& text); void ReplaceSpecialChars(TString& text, Ssiz_t &pos); virtual void WriteHtmlHeader(std::ostream &out, const char *title, const char* dir="", TClass *cls=0); virtual void WriteHtmlFooter(std::ostream &out, const char *dir="", const char *lastUpdate="", const char *author="", const char *copyright=""); void WriteLineNumbers(std::ostream& out, Long_t nLines, const TString& infileBase) const; ClassDef(TDocOutput, 0); // generates documentation web pages }; #endif // ROOT_TDocOutput