1 |
loizides |
1.1 |
// @(#)root/html:$Id: TDocDirective.h 23799 2008-05-12 13:10:34Z axel $
|
2 |
|
|
// Author: Axel Naumann 2007-01-25
|
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_TDocDirective
|
13 |
|
|
#define ROOT_TDocDirective
|
14 |
|
|
|
15 |
|
|
////////////////////////////////////////////////////////////////////////////
|
16 |
|
|
// //
|
17 |
|
|
// TDocDirective //
|
18 |
|
|
// //
|
19 |
|
|
// Special treatment of comments, like HTML source, a macro, or latex. //
|
20 |
|
|
// //
|
21 |
|
|
////////////////////////////////////////////////////////////////////////////
|
22 |
|
|
|
23 |
|
|
#ifndef ROOT_TNamed
|
24 |
|
|
#include "TNamed.h"
|
25 |
|
|
#endif
|
26 |
|
|
|
27 |
|
|
|
28 |
|
|
class TClass;
|
29 |
|
|
class TDocParser;
|
30 |
|
|
class TDocOutput;
|
31 |
|
|
class THtml;
|
32 |
|
|
class TLatex;
|
33 |
|
|
class TMacro;
|
34 |
|
|
class TVirtualPad;
|
35 |
|
|
|
36 |
|
|
class TDocDirective: public TNamed {
|
37 |
|
|
protected:
|
38 |
|
|
TDocParser* fDocParser; // parser invoking this handler
|
39 |
|
|
THtml* fHtml; // parser's THtml object
|
40 |
|
|
TDocOutput* fDocOutput; // parser invoking this handler
|
41 |
|
|
TString fParameters; // parameters to the directive
|
42 |
|
|
Int_t fCounter; // counter to generate unique names, -1 to ignore
|
43 |
|
|
|
44 |
|
|
virtual void AddParameter(const TString& /*name*/, const char* /*value*/ = 0) {}
|
45 |
|
|
|
46 |
|
|
TDocDirective() {}
|
47 |
|
|
TDocDirective(const char* name): TNamed(name, ""), fDocParser(0), fCounter(-1) {};
|
48 |
|
|
virtual ~TDocDirective() {}
|
49 |
|
|
|
50 |
|
|
const char* GetName() const { return TNamed::GetName(); }
|
51 |
|
|
void GetName(TString& name) const;
|
52 |
|
|
TDocParser* GetDocParser() const { return fDocParser; }
|
53 |
|
|
TDocOutput* GetDocOutput() const { return fDocOutput; }
|
54 |
|
|
THtml* GetHtml() const { return fHtml; }
|
55 |
|
|
const char* GetOutputDir() const;
|
56 |
|
|
|
57 |
|
|
void SetParser(TDocParser* parser);
|
58 |
|
|
void SetParameters(const char* params);
|
59 |
|
|
void SetTag(const char* tag) { SetTitle(tag); }
|
60 |
|
|
void SetCounter(Int_t count) { fCounter = count; }
|
61 |
|
|
virtual void DeleteOutputFiles(const char* ext) const;
|
62 |
|
|
|
63 |
|
|
public:
|
64 |
|
|
// get the tag ending this directive
|
65 |
|
|
virtual const char* GetEndTag() const = 0;
|
66 |
|
|
|
67 |
|
|
// add a line to the directive's text
|
68 |
|
|
virtual void AddLine(const TSubString& line) = 0;
|
69 |
|
|
|
70 |
|
|
// retrieve the result (replacement) of the directive; return false if invalid
|
71 |
|
|
virtual Bool_t GetResult(TString& result) = 0;
|
72 |
|
|
|
73 |
|
|
// Delete output for the parser's current class or module.
|
74 |
|
|
virtual void DeleteOutput() const {}
|
75 |
|
|
|
76 |
|
|
friend class TDocParser;
|
77 |
|
|
|
78 |
|
|
ClassDef(TDocDirective, 0); // THtml directive handler
|
79 |
|
|
};
|
80 |
|
|
|
81 |
|
|
class TDocHtmlDirective: public TDocDirective {
|
82 |
|
|
private:
|
83 |
|
|
TString fText; // HTML text to be kept
|
84 |
|
|
Bool_t fVerbatim; // whether we are in a <pre></pre> block
|
85 |
|
|
public:
|
86 |
|
|
TDocHtmlDirective(): TDocDirective("HTML"), fVerbatim(kFALSE) {}
|
87 |
|
|
virtual ~TDocHtmlDirective() {}
|
88 |
|
|
|
89 |
|
|
virtual void AddLine(const TSubString& line);
|
90 |
|
|
virtual const char* GetEndTag() const { return "end_html"; }
|
91 |
|
|
virtual Bool_t GetResult(TString& result);
|
92 |
|
|
|
93 |
|
|
ClassDef(TDocHtmlDirective, 0); // Handler for "Begin_Html"/"End_Html" for raw HTML in documentation comments
|
94 |
|
|
};
|
95 |
|
|
|
96 |
|
|
class TDocMacroDirective: public TDocDirective {
|
97 |
|
|
private:
|
98 |
|
|
TMacro* fMacro; // macro to be executed
|
99 |
|
|
Bool_t fNeedGraphics; // if set, we cannot switch to batch mode
|
100 |
|
|
Bool_t fShowSource; // whether a source tab should be created
|
101 |
|
|
Bool_t fIsFilename; // whether the directive is a failename to be executed
|
102 |
|
|
|
103 |
|
|
virtual void AddParameter(const TString& name, const char* value = 0);
|
104 |
|
|
|
105 |
|
|
public:
|
106 |
|
|
TDocMacroDirective():
|
107 |
|
|
TDocDirective("MACRO"), fMacro(0), fNeedGraphics(kFALSE),
|
108 |
|
|
fShowSource(kFALSE), fIsFilename(kTRUE) {};
|
109 |
|
|
virtual ~TDocMacroDirective();
|
110 |
|
|
|
111 |
|
|
virtual void AddLine(const TSubString& line);
|
112 |
|
|
virtual const char* GetEndTag() const { return "end_macro"; }
|
113 |
|
|
virtual Bool_t GetResult(TString& result);
|
114 |
|
|
// Delete output for the parser's current class or module.
|
115 |
|
|
virtual void DeleteOutput() const { DeleteOutputFiles(".gif"); }
|
116 |
|
|
|
117 |
|
|
ClassDef(TDocMacroDirective, 0); // Handler for "Begin_Macro"/"End_Macro" for code that is executed and that can generate an image for documentation
|
118 |
|
|
};
|
119 |
|
|
|
120 |
|
|
class TDocLatexDirective: public TDocDirective {
|
121 |
|
|
protected:
|
122 |
|
|
TMacro* fLatex; // collection of lines
|
123 |
|
|
Int_t fFontSize; // fontsize for current latex block, in pixels
|
124 |
|
|
TString fSeparator; // column separator, often "="
|
125 |
|
|
Bool_t fSepIsRegexp; // whether fSeparator is a regexp expression
|
126 |
|
|
TString fAlignment; // column alignment: 'l' for justify left, 'c' for center, 'r' for right
|
127 |
|
|
TVirtualPad* fBBCanvas; // canvas for bounding box determination
|
128 |
|
|
|
129 |
|
|
virtual void CreateLatex(const char* filename);
|
130 |
|
|
virtual void AddParameter(const TString& name, const char* value = 0);
|
131 |
|
|
virtual void GetBoundingBox(TLatex& latex, const char* text, Float_t& width, Float_t& height);
|
132 |
|
|
|
133 |
|
|
public:
|
134 |
|
|
TDocLatexDirective():
|
135 |
|
|
TDocDirective("LATEX"), fLatex(0), fFontSize(16),
|
136 |
|
|
fSepIsRegexp(kFALSE), fBBCanvas(0) {};
|
137 |
|
|
virtual ~TDocLatexDirective();
|
138 |
|
|
|
139 |
|
|
virtual void AddLine(const TSubString& line);
|
140 |
|
|
virtual const char* GetEndTag() const {return "end_latex";}
|
141 |
|
|
|
142 |
|
|
const char* GetAlignment() const {return fAlignment;}
|
143 |
|
|
const char* GetSeparator() const {return fSeparator;}
|
144 |
|
|
Bool_t SeparatorIsRegexp() const {return fSepIsRegexp;}
|
145 |
|
|
Int_t GetFontSize() const {return fFontSize;}
|
146 |
|
|
TList* GetListOfLines() const;
|
147 |
|
|
|
148 |
|
|
virtual Bool_t GetResult(TString& result);
|
149 |
|
|
// Delete output for the parser's current class or module.
|
150 |
|
|
virtual void DeleteOutput() const { DeleteOutputFiles(".gif"); }
|
151 |
|
|
|
152 |
|
|
ClassDef(TDocLatexDirective, 0); // Handler for "Begin_Latex"/"End_Latex" to generate an image from latex
|
153 |
|
|
};
|
154 |
|
|
|
155 |
|
|
#endif // ROOT_TDocDirective
|