12 #ifndef ROOT_TDocParser
13 #define ROOT_TDocParser
33 class TClassDocOutput;
37 class TDocMethodWrapper:
public TObject {
39 virtual TMethod* GetMethod()
const = 0;
40 virtual Int_t GetOverloadIdx()
const = 0;
41 enum { kDocumented = 14 };
44 class TDocParser:
public TObject {
77 kParseContextMask = BIT(4) - 1
79 enum EParseContextFlag {
81 kParseContextFlagMask = (UInt_t)(~(BIT(4) - 1))
87 TDocOutput* fDocOutput;
90 TString fLineStripped;
94 TString fFirstClassDoc;
95 TString fLastClassDoc;
96 TClass* fCurrentClass;
98 TString fCurrentModule;
99 TString fCurrentMethodTag;
100 Int_t fDirectiveCount;
102 TString fCurrentFile;
103 std::map<std::string , Int_t > fMethodCounts;
104 EDocContext fDocContext;
105 std::list<UInt_t> fParseContext;
106 Bool_t fCheckForMethod;
108 kClassDoc_Uninitialized,
109 kClassDoc_LookingNothingFound,
110 kClassDoc_LookingHaveSomething,
115 Bool_t fCommentAtBOL;
116 TString fClassDescrTag;
117 TString fSourceInfoTags[kNumSourceInfos];
118 TList fDirectiveHandlers;
119 Bool_t fAllowDirectives;
120 std::set<UInt_t> fExtraLinesWithAnchor;
121 TString fSourceInfo[kNumSourceInfos];
122 THashList fMethods[3];
123 TList fDataMembers[6];
125 static std::set<std::string> fgKeywords;
127 void AddClassMethodsRecursively(TBaseClass* bc);
128 void AddClassDataMembersRecursively(TBaseClass* bc);
129 EParseContext Context()
const {
return fParseContext.empty() ? kComment : (EParseContext)(fParseContext.back() & kParseContextMask); }
130 virtual void ExpandCPPLine(TString& line, Ssiz_t& pos);
131 virtual Bool_t HandleDirective(TString& keyword, Ssiz_t& pos,
132 TString& word, Ssiz_t& copiedToCommentUpTo);
133 virtual void InitKeywords()
const;
134 virtual TClass* IsDirective(
const TString& line, Ssiz_t pos,
const TString& word, Bool_t& begin)
const;
135 TMethod* LocateMethodInCurrentLine(Ssiz_t& posMethodName, TString& ret,
136 TString& name, TString& params, Bool_t& isconst,
137 std::ostream &srcOut, TString &anchor,
138 std::ifstream& sourcefile, Bool_t allowPureVirtual);
139 void LocateMethodsInSource(std::ostream& out);
140 void LocateMethodsInHeaderInline(std::ostream& out);
141 void LocateMethodsInHeaderClassDecl(std::ostream& out);
142 void LocateMethods(std::ostream& out,
const char* filename,
143 Bool_t lookForSourceInfo = kTRUE,
144 Bool_t useDocxxStyle = kFALSE,
145 Bool_t allowPureVirtual = kFALSE,
146 const char* methodPattern = 0,
147 const char* sourceExt = 0);
148 virtual Bool_t ProcessComment();
149 void RemoveCommentContext(Bool_t cxxcomment);
150 void WriteClassDoc(std::ostream& out, Bool_t first = kTRUE);
151 void WriteMethod(std::ostream& out, TString& ret,
152 TString& name, TString& params,
154 const char* file, TString& anchor,
155 TString& codeOneLiner);
156 void WriteSourceLine(std::ostream& out);
159 TDocParser(TClassDocOutput& docOutput, TClass* cl);
160 TDocParser(TDocOutput& docOutput);
161 virtual ~TDocParser();
163 static void AnchorFromLine(
const TString& line, TString& anchor);
164 void Convert(std::ostream& out, std::istream& in,
const char* relpath,
165 Bool_t isCode, Bool_t interpretDirectives);
166 void DecrementMethodCount(
const char* name);
167 virtual void DecorateKeywords(std::ostream& out,
const char* text);
168 virtual void DecorateKeywords(TString& text);
169 virtual void DeleteDirectiveOutput()
const;
170 const TList* GetMethods(EAccess access)
const {
return &fMethods[access]; }
171 TClass* GetCurrentClass()
const {
return fCurrentClass; }
172 void GetCurrentModule(TString& out_module)
const;
173 TDocOutput* GetDocOutput()
const {
return fDocOutput; }
174 Long_t GetLineNumber()
const {
return fLineNumber; }
175 const TList* GetDataMembers(EAccess access)
const {
return &fDataMembers[access]; }
176 const TList* GetEnums(EAccess access)
const {
return &fDataMembers[access+3]; }
177 const char* GetSourceInfo(ESourceInfo type)
const {
return fSourceInfo[type]; }
178 void SetCurrentModule(
const char* module) { fCurrentModule = module; }
180 UInt_t InContext(Int_t context)
const;
181 static Bool_t IsName(UChar_t c);
182 static Bool_t IsWord(UChar_t c);
184 virtual void Parse(std::ostream& out);
185 static Bool_t Strip(TString& s);
187 ClassDef(TDocParser,0);
190 #endif // ROOT_TDocParser