ROOT  6.06/09
Reference Guide
TDocParser.h
Go to the documentation of this file.
1 // @(#)root/html:$Id$
2 // Author: Axel Naumann 2007-01-09
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TDocParser
13 #define ROOT_TDocParser
14 
15 ////////////////////////////////////////////////////////////////////////////
16 // //
17 // TDocParser //
18 // //
19 // Parses documentation in source files //
20 // //
21 ////////////////////////////////////////////////////////////////////////////
22 
23 #include <list>
24 #include <set>
25 #include <map>
26 
27 #ifndef ROOT_TObject
28 #include "TObject.h"
29 #endif
30 #ifndef ROOT_THashList
31 #include "THashList.h"
32 #endif
33 #ifndef ROOT_TString
34 #include "TString.h"
35 #endif
36 #ifndef ROOT_Riosfwd
37 #include "Riosfwd.h"
38 #endif
39 
40 class TBaseClass;
41 class TClass;
42 class TClassDocOutput;
43 class TDocOutput;
44 class THtml;
45 
46 class TDocMethodWrapper: public TObject {
47 public:
48  virtual TMethod* GetMethod() const = 0;
49  virtual Int_t GetOverloadIdx() const = 0;
50  enum { kDocumented = 14 };
51 };
52 
53 class TDocParser: public TObject {
54 protected:
55  enum EDocContext {
60  };
61 
62 public:
63  enum ESourceInfo {
70  };
71  enum EAccess {
75  };
87  };
89  kCXXComment = BIT(4), // kComment is a C++ comment, or macro/html/latex content is surrounded by /* */
91 
92  };
93 
94 protected:
95  THtml* fHtml; // THtml object using us
96  TDocOutput* fDocOutput; // TDocOutput invoking us
97  UInt_t fLineNo; // current line number
98  TString fLineRaw; // current line
99  TString fLineStripped; // current line without surrounding spaces
100  TString fLineComment; // current line with links and directives for doc
101  TString fLineSource; // current line with links
102  TString fComment; // current comment
103  TString fFirstClassDoc; // first class-doc found - per file, taken if fLastClassDoc is empty
104  TString fLastClassDoc; // last class-doc found - becomes class doc at ClassImp or first method
105  TClass* fCurrentClass; // current class context of sources being parsed
106  TClass* fRecentClass; // recently seen class context of sources being parsed, e.g. for Convert()
107  TString fCurrentModule; // current module context of sources being parsed
108  TString fCurrentMethodTag;// name_idx of the currently parsed method
109  Int_t fDirectiveCount; // index of directive for current method
110  Long_t fLineNumber; // source line number
111  TString fCurrentFile; // current source / header file name
112  std::map<std::string /*name*/, Int_t > fMethodCounts; // number of undocumented overloads
113  EDocContext fDocContext; // current context of parsed sources for documenting
114  std::list<UInt_t> fParseContext; // current context of parsed sources
115  Bool_t fCheckForMethod; // whether to check the current line for a method
116  enum {
123  } fClassDocState; // whether we found the class description
124  Bool_t fCommentAtBOL; // at the beginning of the current line, fParseContext contained kComment
125  TString fClassDescrTag; // tag for finding the class description
126  TString fSourceInfoTags[kNumSourceInfos]; // tags for source info elements (copyright, last changed, author)
127  TList fDirectiveHandlers;// handler for doc directives (TDocDirective objects)
128  Bool_t fAllowDirectives; // whether directives are to be interpreted
129  std::set<UInt_t> fExtraLinesWithAnchor; // lines that need an additional anchor
130  TString fSourceInfo[kNumSourceInfos];// author, last changed, ...
131  THashList fMethods[3]; // methods as TMethodWrapper objects (by access)
132  TList fDataMembers[6]; // data members (by access, plus enums)
133 
134  static std::set<std::string> fgKeywords; // C++ keywords
135 
138  EParseContext Context() const { return fParseContext.empty() ? kComment : (EParseContext)(fParseContext.back() & kParseContextMask); }
139  virtual void ExpandCPPLine(TString& line, Ssiz_t& pos);
140  virtual Bool_t HandleDirective(TString& keyword, Ssiz_t& pos,
141  TString& word, Ssiz_t& copiedToCommentUpTo);
142  virtual void InitKeywords() const;
143  virtual TClass* IsDirective(const TString& line, Ssiz_t pos, const TString& word, Bool_t& begin) const;
144  TMethod* LocateMethodInCurrentLine(Ssiz_t& posMethodName, TString& ret,
145  TString& name, TString& params, Bool_t& isconst,
146  std::ostream &srcOut, TString &anchor,
147  std::ifstream& sourcefile, Bool_t allowPureVirtual);
148  void LocateMethodsInSource(std::ostream& out);
149  void LocateMethodsInHeaderInline(std::ostream& out);
150  void LocateMethodsInHeaderClassDecl(std::ostream& out);
151  void LocateMethods(std::ostream& out, const char* filename,
152  Bool_t lookForSourceInfo = kTRUE,
153  Bool_t useDocxxStyle = kFALSE,
154  Bool_t allowPureVirtual = kFALSE,
155  const char* methodPattern = 0,
156  const char* sourceExt = 0);
157  virtual Bool_t ProcessComment();
158  void RemoveCommentContext(Bool_t cxxcomment);
159  void WriteClassDoc(std::ostream& out, Bool_t first = kTRUE);
160  void WriteMethod(std::ostream& out, TString& ret,
161  TString& name, TString& params,
162  Bool_t isconst,
163  const char* file, TString& anchor,
164  TString& codeOneLiner);
165  void WriteSourceLine(std::ostream& out);
166 
167 public:
168  TDocParser(TClassDocOutput& docOutput, TClass* cl);
169  TDocParser(TDocOutput& docOutput);
170  virtual ~TDocParser();
171 
172  static void AnchorFromLine(const TString& line, TString& anchor);
173  void Convert(std::ostream& out, std::istream& in, const char* relpath,
174  Bool_t isCode, Bool_t interpretDirectives);
175  void DecrementMethodCount(const char* name);
176  virtual void DecorateKeywords(std::ostream& out, const char* text);
177  virtual void DecorateKeywords(TString& text);
178  virtual void DeleteDirectiveOutput() const;
179  const TList* GetMethods(EAccess access) const { return &fMethods[access]; }
180  TClass* GetCurrentClass() const { return fCurrentClass; }
181  void GetCurrentModule(TString& out_module) const;
182  TDocOutput* GetDocOutput() const { return fDocOutput; }
183  Long_t GetLineNumber() const { return fLineNumber; }
184  const TList* GetDataMembers(EAccess access) const { return &fDataMembers[access]; }
185  const TList* GetEnums(EAccess access) const { return &fDataMembers[access+3]; }
186  const char* GetSourceInfo(ESourceInfo type) const { return fSourceInfo[type]; }
187  void SetCurrentModule(const char* module) { fCurrentModule = module; }
188 
189  UInt_t InContext(Int_t context) const;
190  static Bool_t IsName(UChar_t c);
191  static Bool_t IsWord(UChar_t c);
192 
193  virtual void Parse(std::ostream& out);
194  static Bool_t Strip(TString& s);
195 
196  ClassDef(TDocParser,0); // parser for reference documentation
197 };
198 
199 #endif // ROOT_TDocParser
TDocParser(TClassDocOutput &docOutput, TClass *cl)
Constructor called for parsing class sources.
Definition: TDocParser.cxx:150
THtml * fHtml
Definition: TDocParser.h:95
TLine * line
TMethod * LocateMethodInCurrentLine(Ssiz_t &posMethodName, TString &ret, TString &name, TString &params, Bool_t &isconst, std::ostream &srcOut, TString &anchor, std::ifstream &sourcefile, Bool_t allowPureVirtual)
Search for a method starting at posMethodName, and return its return type, its name, and its arguments.
#define BIT(n)
Definition: Rtypes.h:120
UInt_t fLineNo
Definition: TDocParser.h:97
enum TDocParser::@112 fClassDocState
TString fSourceInfoTags[kNumSourceInfos]
Definition: TDocParser.h:126
TString fComment
Definition: TDocParser.h:102
static const char * filename()
void AddClassDataMembersRecursively(TBaseClass *bc)
Add data members of fCurrentClass and of bc to datamembers, recursively.
Definition: TDocParser.cxx:306
Basic string class.
Definition: TString.h:137
void DecrementMethodCount(const char *name)
reduce method count for method called name, removing it from fMethodCounts once the count reaches 0...
Definition: TDocParser.cxx:869
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
THashList fMethods[3]
Definition: TDocParser.h:131
const TList * GetMethods(EAccess access) const
Definition: TDocParser.h:179
TDocOutput * GetDocOutput() const
Definition: TDocParser.h:182
void WriteClassDoc(std::ostream &out, Bool_t first=kTRUE)
Write the class description depending (among others) on fClassDocState.
virtual Int_t GetOverloadIdx() const =0
Long_t fLineNumber
Definition: TDocParser.h:110
TClass * GetCurrentClass() const
Definition: TDocParser.h:180
void RemoveCommentContext(Bool_t cxxcomment)
remove the top-most comment context that matches cxxcomment,
TString fLastClassDoc
Definition: TDocParser.h:104
virtual void InitKeywords() const
fill C++ keywords into fgKeywords
virtual Bool_t ProcessComment()
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
Definition: THashList.h:36
virtual void ExpandCPPLine(TString &line, Ssiz_t &pos)
Expand preprocessor statements.
Definition: TDocParser.cxx:911
void WriteSourceLine(std::ostream &out)
Write fLineSource to out.
void Convert(std::ostream &out, std::istream &in, const char *relpath, Bool_t isCode, Bool_t interpretDirectives)
Parse text file "in", add links etc, and write output to "out".
Definition: TDocParser.cxx:402
virtual ~TDocParser()
destructor, checking whether all methods have been found for gDebug > 3
Definition: TDocParser.cxx:211
static Bool_t Strip(TString &s)
strips ' ', tabs, and newlines from both sides of str
TList fDataMembers[6]
Definition: TDocParser.h:132
Bool_t fCheckForMethod
Definition: TDocParser.h:115
TList fDirectiveHandlers
Definition: TDocParser.h:127
TDocOutput * fDocOutput
Definition: TDocParser.h:96
static std::set< std::string > fgKeywords
Definition: TDocParser.h:134
char * out
Definition: TBase64.cxx:29
TString fClassDescrTag
Definition: TDocParser.h:125
virtual void Parse(std::ostream &out)
Locate methods, starting in the source file, then inline, then immediately inside the class declarati...
static Bool_t IsWord(UChar_t c)
Check if c is a valid first character for C++ name.
A doubly linked list.
Definition: TList.h:47
Bool_t fAllowDirectives
Definition: TDocParser.h:128
const TList * GetEnums(EAccess access) const
Definition: TDocParser.h:185
TClass * fCurrentClass
Definition: TDocParser.h:105
void WriteMethod(std::ostream &out, TString &ret, TString &name, TString &params, Bool_t isconst, const char *file, TString &anchor, TString &codeOneLiner)
Write a method, forwarding to TClassDocOutput.
TString fCurrentMethodTag
Definition: TDocParser.h:108
static void AnchorFromLine(const TString &line, TString &anchor)
Create an anchor from the given line, by hashing it and convertig the hash into a custom base64 strin...
Definition: TDocParser.cxx:381
virtual Bool_t HandleDirective(TString &keyword, Ssiz_t &pos, TString &word, Ssiz_t &copiedToCommentUpTo)
Definition: TDocParser_002.C:2
Bool_t fCommentAtBOL
Definition: TDocParser.h:124
static Bool_t IsName(UChar_t c)
Check if c is a valid C++ name character.
TClass * fRecentClass
Definition: TDocParser.h:106
unsigned int UInt_t
Definition: RtypesCore.h:42
TString fCurrentModule
Definition: TDocParser.h:107
std::map< std::string, Int_t > fMethodCounts
Definition: TDocParser.h:112
Int_t fDirectiveCount
Definition: TDocParser.h:109
Long_t GetLineNumber() const
Definition: TDocParser.h:183
The ROOT global object gROOT contains a list of all defined classes.
Definition: TClass.h:81
void LocateMethodsInHeaderInline(std::ostream &out)
Given fCurrentClass, look for methods in its header file, and extract documentation to out...
virtual TClass * IsDirective(const TString &line, Ssiz_t pos, const TString &word, Bool_t &begin) const
return whether word at line's pos is a valid directive, and returns its TDocDirective's TClass object...
virtual TMethod * GetMethod() const =0
virtual void DeleteDirectiveOutput() const
Delete output generated by prior runs of all known directives; the output file names might have chang...
Definition: TDocParser.cxx:884
Each class (see TClass) has a linked list of its base class(es).
Definition: TBaseClass.h:35
EParseContext Context() const
Definition: TDocParser.h:138
void LocateMethodsInHeaderClassDecl(std::ostream &out)
Given fCurrentClass, look for methods in its header file's class declaration block, and extract documentation to out, while beautifying the header file in parallel.
const TList * GetDataMembers(EAccess access) const
Definition: TDocParser.h:184
long Long_t
Definition: RtypesCore.h:50
int Ssiz_t
Definition: RtypesCore.h:63
TString fSourceInfo[kNumSourceInfos]
Definition: TDocParser.h:130
TString fLineRaw
Definition: TDocParser.h:98
std::set< UInt_t > fExtraLinesWithAnchor
Definition: TDocParser.h:129
TString fLineComment
Definition: TDocParser.h:100
TString fCurrentFile
Definition: TDocParser.h:111
TText * text
virtual void DecorateKeywords(std::ostream &out, const char *text)
Expand keywords in text, writing to out.
Definition: TDocParser.cxx:450
TString fFirstClassDoc
Definition: TDocParser.h:103
int type
Definition: TGX11.cxx:120
const char * GetSourceInfo(ESourceInfo type) const
Definition: TDocParser.h:186
void SetCurrentModule(const char *module)
Definition: TDocParser.h:187
std::list< UInt_t > fParseContext
Definition: TDocParser.h:114
#define name(a, b)
Definition: linkTestLib0.cpp:5
Mother of all ROOT objects.
Definition: TObject.h:58
TString fLineStripped
Definition: TDocParser.h:99
ClassDef(TDocParser, 0)
EDocContext fDocContext
Definition: TDocParser.h:113
Each ROOT class (see TClass) has a linked list of methods.
Definition: TMethod.h:40
void LocateMethods(std::ostream &out, const char *filename, Bool_t lookForSourceInfo=kTRUE, Bool_t useDocxxStyle=kFALSE, Bool_t allowPureVirtual=kFALSE, const char *methodPattern=0, const char *sourceExt=0)
Collect methods from the source or header file called filename.
void AddClassMethodsRecursively(TBaseClass *bc)
Add accessible (i.e.
Definition: TDocParser.cxx:235
unsigned char UChar_t
Definition: RtypesCore.h:34
UInt_t InContext(Int_t context) const
checks whether we are in a parse context, return the entry closest to the current context...
const Bool_t kTRUE
Definition: Rtypes.h:91
void GetCurrentModule(TString &out_module) const
Return the name of module for which sources are currently parsed.
Definition: TDocParser.cxx:967
Definition: THtml.h:44
void LocateMethodsInSource(std::ostream &out)
Given fCurrentClass, look for methods in its source file, and extract documentation to out...
TString fLineSource
Definition: TDocParser.h:101