// @(#)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_TClassDocOutput
#define ROOT_TClassDocOutput

#ifndef ROOT_TDocOutput
#include "TDocOutput.h"
#endif

class TDocParser;
class TDocMethodWrapper;

class TClassDocOutput: public TDocOutput {
protected:
   enum ETraverse {
      kUp, kDown, kBoth        // direction to traverse class tree in ClassHtmlTree()
   };

   Int_t          fHierarchyLines; // counter for no. lines in hierarchy
   TClass*        fCurrentClass;   // class to generate output for
   TList*         fCurrentClassesTypedefs; // typedefs to the current class
   TDocParser*    fParser;         // parser we use

   void           ClassHtmlTree(std::ostream &out, TClass *classPtr, ETraverse dir=kBoth, int depth=1);
   void           ClassTree(TVirtualPad *canvas, Bool_t force=kFALSE);

   Bool_t         CreateDotClassChartIncl(const char* filename);
   Bool_t         CreateDotClassChartInh(const char* filename);
   Bool_t         CreateDotClassChartInhMem(const char* filename);
   Bool_t         CreateDotClassChartLib(const char* filename);

   Bool_t         CreateHierarchyDot();
   void           CreateSourceOutputStream(std::ostream& out, const char* extension, TString& filename);
   void           DescendHierarchy(std::ostream &out, TClass* basePtr, Int_t maxLines=0, Int_t depth=1);

   virtual void   ListFunctions(std::ostream& classFile);
   virtual void   ListDataMembers(std::ostream& classFile);

   virtual void   WriteClassDocHeader(std::ostream& classFile);
   virtual void   WriteMethod(std::ostream & out, TString& ret,
                              TString& name, TString& params,
                              const char* file, TString& anchor,
                              TString& comment, TString& codeOneLiner,
                              TDocMethodWrapper* guessedMethod);
   virtual void   WriteClassDescription(std::ostream& out, const TString& description);

public:
   TClassDocOutput(THtml& html, TClass* cl, TList* typedefs);
   virtual ~TClassDocOutput();

   void           Class2Html(Bool_t force=kFALSE);
   Bool_t         ClassDotCharts(std::ostream & out);
   void           CreateClassHierarchy(std::ostream& out, const char* docFileName);

   void           MakeTree(Bool_t force = kFALSE);

   friend class TDocParser;

   ClassDef(TClassDocOutput, 0); // generates documentation web pages for a class
};

#endif // ROOT_TClassDocOutput
 TClassDocOutput.h:1
 TClassDocOutput.h:2
 TClassDocOutput.h:3
 TClassDocOutput.h:4
 TClassDocOutput.h:5
 TClassDocOutput.h:6
 TClassDocOutput.h:7
 TClassDocOutput.h:8
 TClassDocOutput.h:9
 TClassDocOutput.h:10
 TClassDocOutput.h:11
 TClassDocOutput.h:12
 TClassDocOutput.h:13
 TClassDocOutput.h:14
 TClassDocOutput.h:15
 TClassDocOutput.h:16
 TClassDocOutput.h:17
 TClassDocOutput.h:18
 TClassDocOutput.h:19
 TClassDocOutput.h:20
 TClassDocOutput.h:21
 TClassDocOutput.h:22
 TClassDocOutput.h:23
 TClassDocOutput.h:24
 TClassDocOutput.h:25
 TClassDocOutput.h:26
 TClassDocOutput.h:27
 TClassDocOutput.h:28
 TClassDocOutput.h:29
 TClassDocOutput.h:30
 TClassDocOutput.h:31
 TClassDocOutput.h:32
 TClassDocOutput.h:33
 TClassDocOutput.h:34
 TClassDocOutput.h:35
 TClassDocOutput.h:36
 TClassDocOutput.h:37
 TClassDocOutput.h:38
 TClassDocOutput.h:39
 TClassDocOutput.h:40
 TClassDocOutput.h:41
 TClassDocOutput.h:42
 TClassDocOutput.h:43
 TClassDocOutput.h:44
 TClassDocOutput.h:45
 TClassDocOutput.h:46
 TClassDocOutput.h:47
 TClassDocOutput.h:48
 TClassDocOutput.h:49
 TClassDocOutput.h:50
 TClassDocOutput.h:51
 TClassDocOutput.h:52
 TClassDocOutput.h:53
 TClassDocOutput.h:54
 TClassDocOutput.h:55
 TClassDocOutput.h:56
 TClassDocOutput.h:57
 TClassDocOutput.h:58
 TClassDocOutput.h:59
 TClassDocOutput.h:60
 TClassDocOutput.h:61
 TClassDocOutput.h:62
 TClassDocOutput.h:63
 TClassDocOutput.h:64
 TClassDocOutput.h:65
 TClassDocOutput.h:66
 TClassDocOutput.h:67
 TClassDocOutput.h:68
 TClassDocOutput.h:69
 TClassDocOutput.h:70
 TClassDocOutput.h:71