Doxygen
Loading...
Searching...
No Matches
defgen.cpp
Go to the documentation of this file.
1/******************************************************************************
2 *
3 *
4 *
5 *
6 * Copyright (C) 1997-2015 by Dimitri van Heesch.
7 *
8 * Permission to use, copy, modify, and distribute this software and its
9 * documentation under the terms of the GNU General Public License is hereby
10 * granted. No representations are made about the suitability of this software
11 * for any purpose. It is provided "as is" without express or implied warranty.
12 * See the GNU General Public License for more details.
13 *
14 * Documents produced by Doxygen are derivative works derived from the
15 * input used in their production; they are not affected by this license.
16 *
17 */
18
19#include <stdlib.h>
20
21#include "portable.h"
22#include "defgen.h"
23#include "doxygen.h"
24#include "message.h"
25#include "config.h"
26#include "classlist.h"
27#include "util.h"
28#include "defargs.h"
29#include "outputgen.h"
30#include "dot.h"
31#include "dotclassgraph.h"
32#include "arguments.h"
33#include "memberlist.h"
34#include "namespacedef.h"
35#include "filedef.h"
36#include "filename.h"
37#include "dir.h"
38#include "textstream.h"
39
40#define DEF_DB(x)
41
42static inline void writeDEFString(TextStream &t,const QCString &s)
43{
44 t << '\'';
45 if (!s.isEmpty())
46 {
47 const char* p=s.data();
48 char c = 0;
49
50 while ((c = *(p++)))
51 {
52 if (c == '\'') t << '\\';
53 t << c;
54 }
55 }
56 t << '\'';
57}
58
59static void generateDEFForMember(const MemberDef *md,
60 TextStream &t,
61 const Definition *def,
62 const QCString &prefix)
63{
64 QCString memPrefix;
65
66 // + declaration
67 // - reimplements
68 // - reimplementedBy
69 // - exceptions
70 // - const/volatile specifiers
71 // - examples
72 // + source definition
73 // - source references
74 // - source referenced by
75 // - include code
76
77 if (md->memberType()==MemberType::EnumValue) return;
78
79 QCString scopeName;
80 if (md->getClassDef())
81 scopeName=md->getClassDef()->name();
82 else if (md->getNamespaceDef())
83 scopeName=md->getNamespaceDef()->name();
84
85 t << " " << prefix << "-member = {\n";
86 memPrefix = " ";
87 memPrefix.append( prefix );
88 memPrefix.append( "-mem-" );
89
90 QCString memType;
91 bool isFunc=FALSE;
92 switch (md->memberType())
93 {
94 case MemberType::Define: memType="define"; break;
95 case MemberType::EnumValue: ASSERT(0); break;
96 case MemberType::Property: memType="property"; break;
97 case MemberType::Event: memType="event"; break;
98 case MemberType::Variable: memType="variable"; break;
99 case MemberType::Typedef: memType="typedef"; break;
100 case MemberType::Enumeration: memType="enum"; break;
101 case MemberType::Interface: memType="interface"; break;
102 case MemberType::Service: memType="service"; break;
103 case MemberType::Sequence: memType="sequence"; break;
104 case MemberType::Dictionary: memType="dictionary"; break;
105 case MemberType::Function: memType="function"; isFunc=TRUE; break;
106 case MemberType::Signal: memType="signal"; isFunc=TRUE; break;
107 case MemberType::Friend: memType="friend"; isFunc=TRUE; break;
108 case MemberType::DCOP: memType="dcop"; isFunc=TRUE; break;
109 case MemberType::Slot: memType="slot"; isFunc=TRUE; break;
110 }
111
112 t << memPrefix << "kind = '" << memType << "';\n";
113 t << memPrefix << "id = '"
114 << md->getOutputFileBase() << "_1" << md->anchor()
115 << "';\n";
116
117 t << memPrefix << "virt = " << to_string_lower(md->virtualness()) << ";\n";
118 t << memPrefix << "prot = " << to_string_lower(md->protection()) << ";\n";
119
120 if (md->memberType()!=MemberType::Define &&
122 )
123 {
125 t << memPrefix << "type = <<_EnD_oF_dEf_TeXt_\n" << typeStr << "\n"
126 << "_EnD_oF_dEf_TeXt_;\n";
127 }
128
129 t << memPrefix << "name = '" << md->name() << "';\n";
130
131 if (isFunc) //function
132 {
133 const ArgumentList &defAl = md->argumentList();
135 QCString fcnPrefix = " " + memPrefix + "param-";
136
137 auto defIt = defAl.begin();
138 for (const Argument &a : declAl)
139 {
140 const Argument *defArg = nullptr;
141 if (defIt!=defAl.end())
142 {
143 defArg = &(*defIt);
144 ++defIt;
145 }
146 t << memPrefix << "param = {\n";
147 if (!a.attrib.isEmpty())
148 {
149 t << fcnPrefix << "attributes = ";
150 writeDEFString(t,a.attrib);
151 t << ";\n";
152 }
153 if (!a.type.isEmpty())
154 {
155 t << fcnPrefix << "type = <<_EnD_oF_dEf_TeXt_\n"
156 << a.type << "\n_EnD_oF_dEf_TeXt_;\n";
157 }
158 if (!a.name.isEmpty())
159 {
160 t << fcnPrefix << "declname = ";
161 writeDEFString(t,a.name);
162 t << ";\n";
163 }
164 if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
165 {
166 t << fcnPrefix << "defname = ";
167 writeDEFString(t,defArg->name);
168 t << ";\n";
169 }
170 if (!a.array.isEmpty())
171 {
172 t << fcnPrefix << "array = ";
173 writeDEFString(t,a.array);
174 t << ";\n";
175 }
176 if (!a.defval.isEmpty())
177 {
178 t << fcnPrefix << "defval = <<_EnD_oF_dEf_TeXt_\n"
179 << a.defval << "\n_EnD_oF_dEf_TeXt_;\n";
180 }
181 t << " }; /*" << fcnPrefix << "-param */\n";
182 }
183 }
184 else if ( md->memberType()==MemberType::Define
185 && md->argsString()!=nullptr)
186 {
187 QCString defPrefix = " " + memPrefix + "def-";
188 for (const Argument &a : md->argumentList())
189 {
190 t << memPrefix << "param = {\n";
191 t << defPrefix << "name = '" << a.type << "';\n";
192 t << " }; /*" << defPrefix << "-param */\n";
193 }
194 }
195
196 if (!md->initializer().isEmpty())
197 {
198 t << memPrefix << "initializer = <<_EnD_oF_dEf_TeXt_\n"
199 << md->initializer() << "\n_EnD_oF_dEf_TeXt_;\n";
200 }
201 // TODO: exceptions, const volatile
202 if (md->memberType()==MemberType::Enumeration) // enum
203 {
204 for (const auto &emd : md->enumFieldList())
205 {
206 t << memPrefix << "enum = { enum-name = " << emd->name() << ';';
207 if (!emd->initializer().isEmpty())
208 {
209 t << " enum-value = ";
210 writeDEFString(t,emd->initializer());
211 t << ';';
212 }
213 t << " };\n";
214 }
215 }
216
217 t << memPrefix << "desc-file = '" << md->getDefFileName() << "';\n";
218 t << memPrefix << "desc-line = '" << md->getDefLine() << "';\n";
219 t << memPrefix << "briefdesc = <<_EnD_oF_dEf_TeXt_\n"
220 << md->briefDescription() << "\n_EnD_oF_dEf_TeXt_;\n";
221 t << memPrefix << "documentation = <<_EnD_oF_dEf_TeXt_\n"
222 << md->documentation() << "\n_EnD_oF_dEf_TeXt_;\n";
223
224 //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
225
226 QCString refPrefix = " " + memPrefix + "ref-";
227 auto refList = md->getReferencesMembers();
228 for (const auto &rmd : refList)
229 {
230 if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
231 {
232 t << memPrefix << "referenceto = {\n";
233 t << refPrefix << "id = '"
234 << rmd->getBodyDef()->getOutputFileBase()
235 << "_1" // encoded ':' character (see util.cpp:convertNameToFile)
236 << rmd->anchor() << "';\n";
237
238 t << refPrefix << "line = '"
239 << rmd->getStartBodyLine() << "';\n";
240
241 QCString scope = rmd->getScopeString();
242 QCString name = rmd->name();
243 if (!scope.isEmpty() && scope!=def->name())
244 {
245 name.prepend(scope+"::");
246 }
247
248 t << refPrefix << "name = ";
249 writeDEFString(t,name);
250 t << ';' << "\n };\n";
251 }
252 }
253 auto refByList = md->getReferencedByMembers();
254 for (const auto &rmd : refByList)
255 {
256 if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
257 {
258 t << memPrefix << "referencedby = {\n";
259 t << refPrefix << "id = '"
260 << rmd->getBodyDef()->getOutputFileBase()
261 << "_1" // encoded ':' character (see util.cpp:convertNameToFile)
262 << rmd->anchor() << "';\n";
263
264 t << refPrefix << "line = '"
265 << rmd->getStartBodyLine() << "';\n";
266
267 QCString scope = rmd->getScopeString();
268 QCString name = rmd->name();
269 if (!scope.isEmpty() && scope!=def->name())
270 {
271 name.prepend(scope+"::");
272 }
273
274 t << refPrefix << "name = ";
275 writeDEFString(t,name);
276 t << ';' << "\n };\n";
277 }
278 }
279
280 t << " }; /* " << prefix << "-member */\n";
281}
282
283
284static void generateDEFClassSection(const ClassDef *cd,
285 TextStream &t,
286 const MemberList *ml,
287 const QCString &kind)
288{
289 if (cd && ml && !ml->empty())
290 {
291 t << " cp-section = {\n";
292 t << " sec-kind = '" << kind << "';\n";
293
294 for (const auto &md : *ml)
295 {
296 generateDEFForMember(md,t,cd,"sec");
297 }
298 t << " }; /* cp-section */\n";
299 }
300}
301
302static void generateDEFForClass(const ClassDef *cd,TextStream &t)
303{
304 // + brief description
305 // + detailed description
306 // - template arguments
307 // - include files
308 // + inheritance diagram
309 // + list of direct super classes
310 // + list of direct sub classes
311 // + collaboration diagram
312 // - list of all members
313 // + user defined member sections
314 // + standard member sections
315 // + detailed member documentation
316 // - examples
317
318 if (cd->isReference()) return; // skip external references.
319 if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
320 if (cd->isImplicitTemplateInstance()) return; // skip generated template instances.
321
322 t << cd->compoundTypeString() << " = {\n";
323 t << " cp-id = '" << cd->getOutputFileBase() << "';\n";
324 t << " cp-name = '" << cd->name() << "';\n";
325
326 for (const auto &bcd : cd->baseClasses())
327 {
328 t << " cp-ref = {\n" << " ref-type = base;\n";
329 t << " ref-id = '" << bcd.classDef->getOutputFileBase() << "';\n";
330 t << " ref-prot = " << to_string_lower_class(bcd.prot) << ";\n";
331 t << " ref-virt = " << to_string_lower(bcd.virt) << ";\n";
332 t << " };\n";
333 }
334
335 for (const auto &bcd : cd->subClasses())
336 {
337 t << " cp-ref = {\n" << " ref-type = derived;\n";
338 t << " ref-id = '" << bcd.classDef->getOutputFileBase() << "';\n";
339 t << " ref-prot = " << to_string_lower_class(bcd.prot) << ";\n";
340 t << " ref-virt = " << to_string_lower(bcd.virt) << ";\n";
341 t << " };\n";
342 }
343
344 size_t numMembers = 0;
345 for (const auto &ml : cd->getMemberLists())
346 {
347 if (!ml->listType().isDetailed())
348 {
349 numMembers+=ml->size();
350 }
351 }
352 if (numMembers>0)
353 {
354 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubTypes()),"public-type");
355 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Interfaces()),"interfaces");
356 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Services()),"services");
357 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubMethods()),"public-func");
358 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubAttribs()),"public-attrib");
359 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubSlots()),"public-slot");
360 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Signals()),"signal");
361 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::DcopMethods()),"dcop-func");
362 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Properties()),"property");
363 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubStaticMethods()),"public-static-func");
364 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubStaticAttribs()),"public-static-attrib");
365 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProTypes()),"protected-type");
366 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProMethods()),"protected-func");
367 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProAttribs()),"protected-attrib");
368 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProSlots()),"protected-slot");
369 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProStaticMethods()),"protected-static-func");
370 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProStaticAttribs()),"protected-static-attrib");
371 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriTypes()),"private-type");
372 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriMethods()),"private-func");
373 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriAttribs()),"private-attrib");
374 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriSlots()),"private-slot");
375 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriStaticMethods()),"private-static-func");
376 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriStaticAttribs()),"private-static-attrib");
377 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Friends()),"signal");
378 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Related()),"related");
379 }
380
381 t << " cp-filename = '" << cd->getDefFileName() << "';\n";
382 t << " cp-fileline = '" << cd->getDefLine() << "';\n";
383 t << " cp-briefdesc = <<_EnD_oF_dEf_TeXt_\n"
384 << cd->briefDescription() << "\n_EnD_oF_dEf_TeXt_;\n";
385
386 t << " cp-documentation = <<_EnD_oF_dEf_TeXt_\n"
387 << cd->documentation() << "\n_EnD_oF_dEf_TeXt_;\n";
388
389 DotClassGraph inheritanceGraph(cd,GraphType::Inheritance);
390 if (!inheritanceGraph.isTrivial())
391 {
392 t << " cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_\n";
393 inheritanceGraph.writeDEF(t);
394 t << "\n_EnD_oF_dEf_TeXt_;\n";
395 }
396 DotClassGraph collaborationGraph(cd,GraphType::Collaboration);
397 if (!collaborationGraph.isTrivial())
398 {
399 t << " cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_\n";
400 collaborationGraph.writeDEF(t);
401 t << "\n_EnD_oF_dEf_TeXt_;\n";
402 }
403 t << "}; /* " << cd->compoundTypeString() << " */\n";
404}
405
406static void generateDEFSection(const Definition *d,
407 TextStream &t,
408 const MemberList *ml,
409 const QCString &kind)
410{
411 if (ml && !ml->empty())
412 {
413 t << " " << kind << " = {\n";
414 for (const auto &md : *ml)
415 {
416 generateDEFForMember(md,t,d,kind);
417 }
418 t << " };\n";
419 }
420}
421
423{
424 if (nd->isReference()) return; // skip external references
425 t << " namespace = {\n";
426 t << " ns-id = '" << nd->getOutputFileBase() << "';\n";
427 t << " ns-name = ";
428 writeDEFString(t,nd->name());
429 t << ";\n";
430
431 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecDefineMembers()),"define");
432 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecProtoMembers()),"prototype");
433 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecTypedefMembers()),"typedef");
434 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecSequenceMembers()),"sequence");
435 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecDictionaryMembers()),"dictionary");
436 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecEnumMembers()),"enum");
437 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecFuncMembers()),"func");
438 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecVarMembers()),"var");
439
440 t << " ns-filename = '" << nd->getDefFileName() << "';\n";
441 t << " ns-fileline = '" << nd->getDefLine() << "';\n";
442 t << " ns-briefdesc = <<_EnD_oF_dEf_TeXt_\n"
443 << nd->briefDescription() << "\n_EnD_oF_dEf_TeXt_;\n";
444
445 t << " ns-documentation = <<_EnD_oF_dEf_TeXt_\n"
446 << nd->documentation() << "\n_EnD_oF_dEf_TeXt_;\n";
447 t << " };\n";
448}
449
450static void generateDEFForFile(const FileDef *fd,TextStream &t)
451{
452 if (fd->isReference()) return; // skip external references
453
454 t << "file = {\n";
455 t << " file-id = '" << fd->getOutputFileBase() << "';\n";
456 t << " file-name = ";
457 writeDEFString(t,fd->name());
458 t << ";\n";
459
460 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecDefineMembers()),"define");
461 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecProtoMembers()),"prototype");
462 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecTypedefMembers()),"typedef");
463 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecSequenceMembers()),"sequence");
464 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecDictionaryMembers()),"dictionary");
465 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecEnumMembers()),"enum");
466 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecFuncMembers()),"func");
467 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecVarMembers()),"var");
468
469 t << " file-full-name = '" << fd->getDefFileName() << "';\n";
470 t << " file-first-line = '" << fd->getDefLine() << "';\n";
471
472 t << " file-briefdesc = <<_EnD_oF_dEf_TeXt_\n"
473 << fd->briefDescription() << "\n_EnD_oF_dEf_TeXt_;\n";
474
475 t << " file-documentation = <<_EnD_oF_dEf_TeXt_\n"
476 << fd->documentation() << "\n_EnD_oF_dEf_TeXt_;\n";
477
478 t << "}; /* file */\n";
479}
480
481
483{
484 QCString outputDirectory = Config_getString(OUTPUT_DIRECTORY)+"/def";
485 Dir defDir(outputDirectory.str());
486 if (!defDir.exists() && !defDir.mkdir(outputDirectory.str()))
487 {
488 err("Could not create def directory in {}\n",outputDirectory);
489 return;
490 }
491
492 QCString fileName=outputDirectory+"/doxygen.def";
493 std::ofstream f = Portable::openOutputStream(fileName);
494 if (!f.is_open())
495 {
496 err("Cannot open file {} for writing!\n",fileName);
497 return;
498 }
499 TextStream t(&f);
500 t << "AutoGen Definitions dummy;\n";
501
502 if (Doxygen::classLinkedMap->size()+
505 {
506 for (const auto &cd : *Doxygen::classLinkedMap)
507 {
508 generateDEFForClass(cd.get(),t);
509 }
510 for (const auto &fn : *Doxygen::inputNameLinkedMap)
511 {
512 for (const auto &fd : *fn)
513 {
514 generateDEFForFile(fd.get(),t);
515 }
516 }
517 for (const auto &nd : *Doxygen::namespaceLinkedMap)
518 {
519 generateDEFForNamespace(nd.get(),t);
520 }
521 }
522 else
523 {
524 t << "dummy_value = true;\n";
525 }
526}
constexpr auto prefix
Definition anchor.cpp:44
This class represents an function or template argument list.
Definition arguments.h:65
iterator end()
Definition arguments.h:94
iterator begin()
Definition arguments.h:93
A abstract class representing of a compound symbol.
Definition classdef.h:104
virtual QCString compoundTypeString() const =0
Returns the type of compound as a string.
virtual const MemberLists & getMemberLists() const =0
Returns the list containing the list of members sorted per type.
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual MemberList * getMemberList(MemberListType lt) const =0
Returns the members in the list identified by lt.
virtual bool isImplicitTemplateInstance() const =0
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
The common base class of all entity definitions found in the sources.
Definition definition.h:76
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual QCString getDefFileName() const =0
virtual int getDefLine() const =0
virtual QCString anchor() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual QCString documentation() const =0
virtual QCString getOutputFileBase() const =0
virtual const MemberVector & getReferencedByMembers() const =0
virtual bool isReference() const =0
virtual const MemberVector & getReferencesMembers() const =0
virtual const QCString & name() const =0
Class representing a directory in the file system.
Definition dir.h:75
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
Definition dir.cpp:295
bool exists() const
Definition dir.cpp:257
Representation of a class inheritance or dependency graph.
bool isTrivial() const
void writeDEF(TextStream &t)
static NamespaceLinkedMap * namespaceLinkedMap
Definition doxygen.h:115
static FileNameLinkedMap * inputNameLinkedMap
Definition doxygen.h:105
static ClassLinkedMap * classLinkedMap
Definition doxygen.h:96
A model of a file symbol.
Definition filedef.h:99
virtual MemberList * getMemberList(MemberListType lt) const =0
A model of a class/file/namespace member symbol.
Definition memberdef.h:48
virtual QCString typeString() const =0
virtual const ClassDef * getClassDef() const =0
virtual const MemberVector & enumFieldList() const =0
virtual const ArgumentList & argumentList() const =0
virtual const NamespaceDef * getNamespaceDef() const =0
virtual Protection protection() const =0
virtual MemberType memberType() const =0
virtual QCString argsString() const =0
virtual Specifier virtualness(int count=0) const =0
virtual const QCString & initializer() const =0
A list of MemberDef objects as shown in documentation sections.
Definition memberlist.h:109
bool empty() const noexcept
Definition memberlist.h:60
An abstract interface of a namespace symbol.
virtual MemberList * getMemberList(MemberListType lt) const =0
This is an alternative implementation of QCString.
Definition qcstring.h:101
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
QCString & prepend(const char *s)
Definition qcstring.h:407
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:150
const std::string & str() const
Definition qcstring.h:537
QCString & append(char c)
Definition qcstring.h:381
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:159
Text streaming class that buffers data.
Definition textstream.h:36
#define Config_getString(name)
Definition config.h:32
std::unique_ptr< ArgumentList > stringToArgumentList(SrcLangExt lang, const QCString &argsString, QCString *extraTypeChars=nullptr)
Definition defargs.l:814
static void generateDEFClassSection(const ClassDef *cd, TextStream &t, const MemberList *ml, const QCString &kind)
Definition defgen.cpp:284
void generateDEF()
Definition defgen.cpp:482
static void generateDEFForClass(const ClassDef *cd, TextStream &t)
Definition defgen.cpp:302
static void generateDEFForMember(const MemberDef *md, TextStream &t, const Definition *def, const QCString &prefix)
Definition defgen.cpp:59
static void writeDEFString(TextStream &t, const QCString &s)
Definition defgen.cpp:42
static void generateDEFSection(const Definition *d, TextStream &t, const MemberList *ml, const QCString &kind)
Definition defgen.cpp:406
static void generateDEFForFile(const FileDef *fd, TextStream &t)
Definition defgen.cpp:450
static void generateDEFForNamespace(const NamespaceDef *nd, TextStream &t)
Definition defgen.cpp:422
@ Collaboration
Definition dotgraph.h:31
@ Inheritance
Definition dotgraph.h:31
#define err(fmt,...)
Definition message.h:127
std::ofstream openOutputStream(const QCString &name, bool append=false)
Definition portable.cpp:665
Portable versions of functions that are platform dependent.
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
#define ASSERT(x)
Definition qcstring.h:39
This class contains the information about the argument of a function or template.
Definition arguments.h:27
QCString name
Definition arguments.h:44
static const char * to_string_lower_class(Protection prot)
Definition types.h:62
@ Enumeration
Definition types.h:557
@ EnumValue
Definition types.h:558
@ Dictionary
Definition types.h:568
@ Interface
Definition types.h:565
@ Sequence
Definition types.h:567
@ Variable
Definition types.h:555
@ Property
Definition types.h:563
@ Typedef
Definition types.h:556
@ Function
Definition types.h:554
@ Service
Definition types.h:566
static const char * to_string_lower(Protection prot)
Definition types.h:50
QCString replaceAnonymousScopes(const QCString &s, const QCString &replacement)
Definition util.cpp:229
A bunch of utility functions.