text: // @(#)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            //
  //                                                                        //
  ////////////////////////////////////////////////////////////////////////////
  
  #include "TObject.h"
  #include "TDocParser.h"
  
  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
  