Chameleon

Chameleon Svn Source Tree

Root/branches/xZenu/src/util/doxygen/src/outputlist.cpp

Source at commit 1322 created 12 years 8 months ago.
By meklort, Add doxygen to utils folder
1/******************************************************************************
2 *
3 * $Id: outputlist.cpp,v 1.35 2001/03/19 19:27:41 root Exp $
4 *
5 * Copyright (C) 1997-2011 by Dimitri van Heesch.
6 *
7 * Permission to use, copy, modify, and distribute this software and its
8 * documentation under the terms of the GNU General Public License is hereby
9 * granted. No representations are made about the suitability of this software
10 * for any purpose. It is provided "as is" without express or implied warranty.
11 * See the GNU General Public License for more details.
12 *
13 * Documents produced by Doxygen are derivative works derived from the
14 * input used in their production; they are not affected by this license.
15 *
16 */
17
18/*! \file
19 * This class represents a list of output generators that work in "parallel".
20 * The class only knows about the abstract base class OutputGenerators.
21 * All output is produced by calling a method of this class, which forwards
22 * the call to all output generators.
23 */
24
25#include "outputlist.h"
26#include "outputgen.h"
27#include "config.h"
28#include "message.h"
29#include "definition.h"
30
31#include "docparser.h"
32
33OutputList::OutputList(bool)
34{
35 //printf("OutputList::OutputList()\n");
36 outputs = new QList<OutputGenerator>;
37 outputs->setAutoDelete(TRUE);
38}
39
40OutputList::~OutputList()
41{
42 //printf("OutputList::~OutputList()\n");
43 delete outputs;
44}
45
46void OutputList::add(const OutputGenerator *og)
47{
48 if (og) outputs->append(og);
49}
50
51void OutputList::disableAllBut(OutputGenerator::OutputType o)
52{
53 OutputGenerator *og=outputs->first();
54 while (og)
55 {
56 og->disableIfNot(o);
57 og=outputs->next();
58 }
59}
60
61void OutputList::enableAll()
62{
63 OutputGenerator *og=outputs->first();
64 while (og)
65 {
66 og->enable();
67 og=outputs->next();
68 }
69}
70
71void OutputList::disableAll()
72{
73 OutputGenerator *og=outputs->first();
74 while (og)
75 {
76 og->disable();
77 og=outputs->next();
78 }
79}
80
81void OutputList::disable(OutputGenerator::OutputType o)
82{
83 OutputGenerator *og=outputs->first();
84 while (og)
85 {
86 og->disableIf(o);
87 og=outputs->next();
88 }
89}
90
91void OutputList::enable(OutputGenerator::OutputType o)
92{
93 OutputGenerator *og=outputs->first();
94 while (og)
95 {
96 og->enableIf(o);
97 og=outputs->next();
98 }
99}
100
101bool OutputList::isEnabled(OutputGenerator::OutputType o)
102{
103 bool result=FALSE;
104 OutputGenerator *og=outputs->first();
105 while (og)
106 {
107 result=result || og->isEnabled(o);
108 og=outputs->next();
109 }
110 return result;
111}
112
113void OutputList::pushGeneratorState()
114{
115 OutputGenerator *og=outputs->first();
116 while (og)
117 {
118 og->pushGeneratorState();
119 og=outputs->next();
120 }
121}
122
123void OutputList::popGeneratorState()
124{
125 OutputGenerator *og=outputs->first();
126 while (og)
127 {
128 og->popGeneratorState();
129 og=outputs->next();
130 }
131}
132
133void OutputList::parseDoc(const char *fileName,int startLine,
134 Definition *ctx,MemberDef * md,
135 const QCString &docStr,bool indexWords,
136 bool isExample,const char *exampleName,
137 bool singleLine,bool linkFromIndex)
138{
139 int count=0;
140 if (docStr.isEmpty()) return;
141
142 OutputGenerator *og=outputs->first();
143 while (og)
144 {
145 if (og->isEnabled()) count++;
146 og=outputs->next();
147 }
148 if (count==0) return; // no output formats enabled.
149
150 DocNode *root=0;
151 if (docStr.at(docStr.length()-1)=='\n')
152 {
153 root = validatingParseDoc(fileName,startLine,
154 ctx,md,docStr,indexWords,isExample,exampleName,
155 singleLine,linkFromIndex);
156 }
157 else
158 {
159 root = validatingParseDoc(fileName,startLine,
160 ctx,md,docStr+"\n",indexWords,isExample,exampleName,
161 singleLine,linkFromIndex);
162 }
163
164 og=outputs->first();
165 while (og)
166 {
167 //printf("og->printDoc(extension=%s)\n",
168 // ctx?ctx->getDefFileExtension().data():"<null>");
169 if (og->isEnabled()) og->printDoc(root,ctx?ctx->getDefFileExtension():QCString(""));
170 og=outputs->next();
171 }
172
173 delete root;
174}
175
176void OutputList::parseText(const QCString &textStr)
177{
178 int count=0;
179 OutputGenerator *og=outputs->first();
180 while (og)
181 {
182 if (og->isEnabled()) count++;
183 og=outputs->next();
184 }
185 if (count==0) return; // no output formats enabled.
186
187 DocNode *root = validatingParseText(textStr);
188
189 og=outputs->first();
190 while (og)
191 {
192 if (og->isEnabled()) og->printDoc(root,0);
193 og=outputs->next();
194 }
195
196 delete root;
197}
198
199
200//--------------------------------------------------------------------------
201// Create some overloaded definitions of the forall function.
202// Using template functions here would have made it a little less
203// portable (I guess).
204
205// zero arguments
206void OutputList::forall(void (OutputGenerator::*func)())
207{
208 OutputGenerator *og=outputs->first();
209 while (og)
210 {
211 if (og->isEnabled()) (og->*func)();
212 og=outputs->next();
213 }
214}
215
216// one argument
217#define FORALL1(a1,p1) \
218void OutputList::forall(void (OutputGenerator::*func)(a1),a1) \
219{ \
220 OutputGenerator *og=outputs->first(); \
221 while (og) \
222 { \
223 if (og->isEnabled()) (og->*func)(p1); \
224 og=outputs->next(); \
225 } \
226}
227
228// two arguments
229#define FORALL2(a1,a2,p1,p2) \
230void OutputList::forall(void (OutputGenerator::*func)(a1,a2),a1,a2) \
231{ \
232 OutputGenerator *og=outputs->first(); \
233 while (og) \
234 { \
235 if (og->isEnabled()) (og->*func)(p1,p2); \
236 og=outputs->next(); \
237 } \
238}
239
240// three arguments
241#define FORALL3(a1,a2,a3,p1,p2,p3) \
242void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3),a1,a2,a3) \
243{ \
244 OutputGenerator *og=outputs->first(); \
245 while (og) \
246 { \
247 if (og->isEnabled()) (og->*func)(p1,p2,p3); \
248 og=outputs->next(); \
249 } \
250}
251
252// four arguments
253#define FORALL4(a1,a2,a3,a4,p1,p2,p3,p4) \
254void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3,a4),a1,a2,a3,a4) \
255{ \
256 OutputGenerator *og=outputs->first(); \
257 while (og) \
258 { \
259 if (og->isEnabled()) (og->*func)(p1,p2,p3,p4); \
260 og=outputs->next(); \
261 } \
262}
263
264// five arguments
265#define FORALL5(a1,a2,a3,a4,a5,p1,p2,p3,p4,p5) \
266void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3,a4,a5),a1,a2,a3,a4,a5) \
267{ \
268 OutputGenerator *og=outputs->first(); \
269 while (og) \
270 { \
271 if (og->isEnabled()) (og->*func)(p1,p2,p3,p4,p5); \
272 og=outputs->next(); \
273 } \
274}
275
276// now instantiate only the ones we need.
277
278FORALL1(const char *a1,a1)
279FORALL1(char a1,a1)
280FORALL1(int a1,a1)
281FORALL1(const DotClassGraph &a1,a1)
282FORALL1(const DotInclDepGraph &a1,a1)
283FORALL1(const DotCallGraph &a1,a1)
284FORALL1(const DotDirDeps &a1,a1)
285FORALL1(const DotGfxHierarchyTable &a1,a1)
286FORALL1(const DotGroupCollaboration &a1,a1)
287FORALL1(SectionTypes a1,a1)
288#if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE)
289FORALL1(bool a1,a1)
290FORALL2(bool a1,int a2,a1,a2)
291FORALL2(bool a1,bool a2,a1,a2)
292FORALL4(const char *a1,const char *a2,const char *a3,bool a4,a1,a2,a3,a4)
293#endif
294FORALL2(int a1,bool a2,a1,a2)
295FORALL2(bool a1,HighlightedItem a2,a1,a2)
296FORALL2(bool a1,const char *a2,a1,a2)
297FORALL2(ParamListTypes a1,const char *a2,a1,a2)
298FORALL1(IndexSections a1,a1)
299FORALL2(const char *a1,const char *a2,a1,a2)
300FORALL2(const char *a1,bool a2,a1,a2)
301FORALL2(const char *a1,SectionInfo::SectionType a2,a1,a2)
302FORALL3(bool a1,bool a2,bool a3,a1,a2,a3)
303FORALL3(const ClassDiagram &a1,const char *a2,const char *a3,a1,a2,a3)
304FORALL3(const char *a1,const char *a2,const char *a3,a1,a2,a3)
305FORALL3(const char *a1,const char *a2,bool a3,a1,a2,a3)
306FORALL3(const char *a1,const char *a2,SectionInfo::SectionType a3,a1,a2,a3)
307FORALL3(uchar a1,uchar a2,uchar a3,a1,a2,a3)
308FORALL4(SectionTypes a1,const char *a2,const char *a3,const char *a4,a1,a2,a3,a4)
309FORALL4(const char *a1,const char *a2,const char *a3,const char *a4,a1,a2,a3,a4)
310FORALL4(const char *a1,const char *a2,const char *a3,int a4,a1,a2,a3,a4)
311FORALL5(const char *a1,const char *a2,const char *a3,const char *a4,const char *a5,a1,a2,a3,a4,a5)
312FORALL5(const char *a1,const char *a2,const char *a3,const char *a4,bool a5,a1,a2,a3,a4,a5)
313
314
315//--------------------------------------------------------------------------
316

Archive Download this file

Revision: 1322