ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/Utils/interface/TDocParser.h
Revision: 1.1
Committed: Tue Aug 11 23:09:27 2009 UTC (15 years, 8 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_032, Mit_031, Mit_025c_branch2, Mit_025c_branch1, Mit_030, Mit_029c, Mit_029b, Mit_030_pre1, Mit_029a, Mit_029, Mit_029_pre1, Mit_028a, Mit_025c_branch0, Mit_028, Mit_027a, Mit_027, Mit_026, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, Mit_017, Mit_017pre3, Mit_017pre2, Mit_017pre1, Mit_016, Mit_015b, Mit_015a, Mit_015, Mit_014e, Mit_014d, Mit_014c, Mit_014b, Mit_014a, Mit_014, Mit_014pre3, Mit_014pre2, Mit_014pre1, Mit_013d, Mit_013c, Mit_013b, Mit_013a, Mit_013, Mit_013pre1, Mit_012i, Mit_012h, Mit_012g, Mit_012f, Mit_012e, Mit_012d, Mit_012c, Mit_012b, Mit_012a, Mit_012, Mit_011a, Mit_011, Mit_010a, HEAD
Branch point for: Mit_025c_branch
Log Message:
Added THtml from ROOT

File Contents

# Content
1 // @(#)root/html:$Id: TDocParser.h 26807 2008-12-10 17:47:42Z axel $
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_TList
31 #include "TList.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 TDocParser: public TObject {
47 protected:
48 enum EDocContext {
49 kIgnore,
50 kDocFunc,
51 kDocClass,
52 kNumDocContexts
53 };
54
55 public:
56 enum ESourceInfo {
57 kInfoLastUpdate,
58 kInfoAuthor,
59 kInfoCopyright,
60 kInfoLastChanged,
61 kInfoLastGenerated,
62 kNumSourceInfos
63 };
64 enum EAccess {
65 kPrivate,
66 kProtected,
67 kPublic
68 };
69 enum EParseContext {
70 kNoContext,
71 kCode,
72 kComment,
73 kDirective,
74 kString,
75 kKeyword,
76 kCPP,
77 kVerbatim,
78 kNumParseContexts,
79 kParseContextMask = BIT(4) - 1
80 };
81 enum EParseContextFlag {
82 kCXXComment = BIT(4), // kComment is a C++ comment, or macro/html/latex content is surrounded by /* */
83 kParseContextFlagMask = ~(BIT(4) - 1)
84
85 };
86
87 class TMethodWrapper: public TObject {
88 public:
89 virtual const TMethod* GetMethod() const = 0;
90 };
91
92 protected:
93 THtml* fHtml; // THtml object using us
94 TDocOutput* fDocOutput; // TDocOutput invoking us
95 UInt_t fLineNo; // current line number
96 TString fLineRaw; // current line
97 TString fLineStripped; // current line without surrounding spaces
98 TString fLineComment; // current line with links and directives for doc
99 TString fLineSource; // current line with links
100 TString fComment; // current comment
101 TString fFirstClassDoc; // first class-doc found - per file, taken if fLastClassDoc is empty
102 TString fLastClassDoc; // last class-doc found - becomes class doc at ClassImp or first method
103 TClass* fCurrentClass; // current class context of sources being parsed
104 TClass* fRecentClass; // recently seen class context of sources being parsed, e.g. for Convert()
105 TString fCurrentModule; // current module context of sources being parsed
106 TString fCurrentMethodTag;// name_idx of the currently parsed method
107 Int_t fDirectiveCount; // index of directive for current method
108 TString fCurrentFile; // current source / header file name
109 std::map<std::string /*name*/, Int_t > fMethodCounts; // current class's method names
110 EDocContext fDocContext; // current context of parsed sources for documenting
111 std::list<UInt_t> fParseContext; // current context of parsed sources
112 Bool_t fCheckForMethod; // whether to check the current line for a method
113 enum {
114 kClassDoc_Uninitialized,
115 kClassDoc_LookingNothingFound,
116 kClassDoc_LookingHaveSomething,
117 kClassDoc_Written,
118 kClassDoc_Ignore,
119 kClassDoc_NumStates
120 } fClassDocState; // whether we found the class description
121 Bool_t fCommentAtBOL; // at the beginning of the current line, fParseContext contained kComment
122 TString fClassDescrTag; // tag for finding the class description
123 TString fSourceInfoTags[kNumSourceInfos]; // tags for source info elements (copyright, last changed, author)
124 TList fDirectiveHandlers;// handler for doc directives (TDocDirective objects)
125 std::set<UInt_t> fExtraLinesWithAnchor; // lines that need an additional anchor
126 TString fSourceInfo[kNumSourceInfos];// author, last changed, ...
127 TList fMethods[3]; // methods as TMethodWrapper objects (by access)
128 TList fDataMembers[6]; // data members (by access, plus enums)
129
130 static std::set<std::string> fgKeywords; // C++ keywords
131
132 void AddClassMethodsRecursively(TBaseClass* bc);
133 void AddClassDataMembersRecursively(TBaseClass* bc);
134 EParseContext Context() const { return fParseContext.empty() ? kComment : (EParseContext)(fParseContext.back() & kParseContextMask); }
135 virtual void ExpandCPPLine(TString& line, Ssiz_t& pos);
136 virtual Bool_t HandleDirective(TString& keyword, Ssiz_t& pos,
137 TString& word, Ssiz_t& copiedToCommentUpTo);
138 virtual void InitKeywords() const;
139 virtual TClass* IsDirective(const TString& line, Ssiz_t pos, const TString& word, Bool_t& begin) const;
140 TMethod* LocateMethodInCurrentLine(Ssiz_t& posMethodName, TString& ret,
141 TString& name, TString& params, std::ostream &srcOut, TString &anchor,
142 std::ifstream& sourcefile, Bool_t allowPureVirtual);
143 void LocateMethodsInSource(std::ostream& out);
144 void LocateMethodsInHeaderInline(std::ostream& out);
145 void LocateMethodsInHeaderClassDecl(std::ostream& out);
146 void LocateMethods(std::ostream& out, const char* filename,
147 Bool_t lookForSourceInfo = kTRUE,
148 Bool_t useDocxxStyle = kFALSE,
149 Bool_t allowPureVirtual = kFALSE,
150 const char* methodPattern = 0,
151 const char* sourceExt = 0);
152 virtual Bool_t ProcessComment();
153 void RemoveCommentContext(Bool_t cxxcomment);
154 void WriteClassDoc(std::ostream& out, Bool_t first = kTRUE);
155 void WriteMethod(std::ostream& out, TString& ret,
156 TString& name, TString& params,
157 const char* file, TString& anchor,
158 TString& codeOneLiner);
159 void WriteSourceLine(std::ostream& out);
160
161 public:
162 TDocParser(TClassDocOutput& docOutput, TClass* cl);
163 TDocParser(TDocOutput& docOutput);
164 virtual ~TDocParser();
165
166 static void AnchorFromLine(const TString& line, TString& anchor);
167 void Convert(std::ostream& out, std::istream& in, const char* relpath,
168 Bool_t isCode);
169 void DecrementMethodCount(const char* name);
170 virtual void DecorateKeywords(std::ostream& out, const char* text);
171 virtual void DecorateKeywords(TString& text);
172 virtual void DeleteDirectiveOutput() const;
173 const TList* GetMethods(EAccess access) const { return &fMethods[access]; }
174 TClass* GetCurrentClass() const { return fCurrentClass; }
175 void GetCurrentModule(TString& out_module) const;
176 TDocOutput* GetDocOutput() const { return fDocOutput; }
177 const TList* GetDataMembers(EAccess access) const { return &fDataMembers[access]; }
178 const TList* GetEnums(EAccess access) const { return &fDataMembers[access+3]; }
179 const char* GetSourceInfo(ESourceInfo type) const { return fSourceInfo[type]; }
180 void SetCurrentModule(const char* module) { fCurrentModule = module; }
181
182 UInt_t InContext(Int_t context) const;
183 static Bool_t IsName(UChar_t c);
184 static Bool_t IsWord(UChar_t c);
185
186 virtual void Parse(std::ostream& out);
187 static Bool_t Strip(TString& s);
188
189 ClassDef(TDocParser,0); // parser for reference documentation
190 };
191
192 #endif // ROOT_TDocParser