Doxygen
Loading...
Searching...
No Matches
defgen.cpp File Reference
#include <stdlib.h>
#include "portable.h"
#include "defgen.h"
#include "doxygen.h"
#include "message.h"
#include "config.h"
#include "classlist.h"
#include "util.h"
#include "defargs.h"
#include "outputgen.h"
#include "dot.h"
#include "dotclassgraph.h"
#include "arguments.h"
#include "memberlist.h"
#include "namespacedef.h"
#include "filedef.h"
#include "filename.h"
#include "dir.h"
#include "textstream.h"
Include dependency graph for defgen.cpp:

Go to the source code of this file.

Macros

#define DEF_DB(x)

Functions

static void writeDEFString (TextStream &t, const QCString &s)
static void generateDEFForMember (const MemberDef *md, TextStream &t, const Definition *def, const QCString &prefix)
static void generateDEFClassSection (const ClassDef *cd, TextStream &t, const MemberList *ml, const QCString &kind)
static void generateDEFForClass (const ClassDef *cd, TextStream &t)
static void generateDEFSection (const Definition *d, TextStream &t, const MemberList *ml, const QCString &kind)
static void generateDEFForNamespace (const NamespaceDef *nd, TextStream &t)
static void generateDEFForFile (const FileDef *fd, TextStream &t)
void generateDEF ()

Macro Definition Documentation

◆ DEF_DB

#define DEF_DB ( x)

Definition at line 40 of file defgen.cpp.

Function Documentation

◆ generateDEF()

void generateDEF ( )

Definition at line 464 of file defgen.cpp.

465{
466 QCString outputDirectory = Config_getString(OUTPUT_DIRECTORY)+"/def";
467 Dir defDir(outputDirectory.str());
468 if (!defDir.exists() && !defDir.mkdir(outputDirectory.str()))
469 {
470 err("Could not create def directory in {}\n",outputDirectory);
471 return;
472 }
473
474 QCString fileName=outputDirectory+"/doxygen.def";
475 std::ofstream f = Portable::openOutputStream(fileName);
476 if (!f.is_open())
477 {
478 err("Cannot open file {} for writing!\n",fileName);
479 return;
480 }
481 TextStream t(&f);
482 t << "AutoGen Definitions dummy;\n";
483
484 if (Doxygen::classLinkedMap->size()+
487 {
488 for (const auto &cd : *Doxygen::classLinkedMap)
489 {
490 generateDEFForClass(cd.get(),t);
491 }
492 for (const auto &fn : *Doxygen::inputNameLinkedMap)
493 {
494 for (const auto &fd : *fn)
495 {
496 generateDEFForFile(fd.get(),t);
497 }
498 }
499 for (const auto &nd : *Doxygen::namespaceLinkedMap)
500 {
501 generateDEFForNamespace(nd.get(),t);
502 }
503 }
504 else
505 {
506 t << "dummy_value = true;\n";
507 }
508}
Class representing a directory in the file system.
Definition dir.h:75
static NamespaceLinkedMap * namespaceLinkedMap
Definition doxygen.h:115
static FileNameLinkedMap * inputNameLinkedMap
Definition doxygen.h:104
static ClassLinkedMap * classLinkedMap
Definition doxygen.h:95
This is an alternative implementation of QCString.
Definition qcstring.h:103
const std::string & str() const
Definition qcstring.h:556
Text streaming class that buffers data.
Definition textstream.h:36
#define Config_getString(name)
Definition config.h:32
static void generateDEFForClass(const ClassDef *cd, TextStream &t)
Definition defgen.cpp:284
static void generateDEFForFile(const FileDef *fd, TextStream &t)
Definition defgen.cpp:432
static void generateDEFForNamespace(const NamespaceDef *nd, TextStream &t)
Definition defgen.cpp:404
#define err(fmt,...)
Definition message.h:127
std::ofstream openOutputStream(const QCString &name, bool append=false)
Definition portable.cpp:648

References Doxygen::classLinkedMap, Config_getString, err, Dir::exists(), generateDEFForClass(), generateDEFForFile(), generateDEFForNamespace(), Doxygen::inputNameLinkedMap, Dir::mkdir(), Doxygen::namespaceLinkedMap, Portable::openOutputStream(), and QCString::str().

Referenced by generateOutput().

◆ generateDEFClassSection()

void generateDEFClassSection ( const ClassDef * cd,
TextStream & t,
const MemberList * ml,
const QCString & kind )
static

Definition at line 266 of file defgen.cpp.

270{
271 if (cd && ml && !ml->empty())
272 {
273 t << " cp-section = {\n";
274 t << " sec-kind = '" << kind << "';\n";
275
276 for (const auto &md : *ml)
277 {
278 generateDEFForMember(md,t,cd,"sec");
279 }
280 t << " }; /* cp-section */\n";
281 }
282}
bool empty() const noexcept
Definition memberlist.h:60
static void generateDEFForMember(const MemberDef *md, TextStream &t, const Definition *def, const QCString &prefix)
Definition defgen.cpp:59

References MemberVector::empty(), and generateDEFForMember().

Referenced by generateDEFForClass().

◆ generateDEFForClass()

void generateDEFForClass ( const ClassDef * cd,
TextStream & t )
static

Definition at line 284 of file defgen.cpp.

285{
286 // + brief description
287 // + detailed description
288 // - template arguments
289 // - include files
290 // + inheritance diagram
291 // + list of direct super classes
292 // + list of direct sub classes
293 // + collaboration diagram
294 // - list of all members
295 // + user defined member sections
296 // + standard member sections
297 // + detailed member documentation
298 // - examples
299
300 if (cd->isReference()) return; // skip external references.
301 if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
302 if (cd->isImplicitTemplateInstance()) return; // skip generated template instances.
303
304 t << cd->compoundTypeString() << " = {\n";
305 t << " cp-id = '" << cd->getOutputFileBase() << "';\n";
306 t << " cp-name = '" << cd->name() << "';\n";
307
308 for (const auto &bcd : cd->baseClasses())
309 {
310 t << " cp-ref = {\n" << " ref-type = base;\n";
311 t << " ref-id = '" << bcd.classDef->getOutputFileBase() << "';\n";
312 t << " ref-prot = " << to_string_lower_class(bcd.prot) << ";\n";
313 t << " ref-virt = " << to_string_lower(bcd.virt) << ";\n";
314 t << " };\n";
315 }
316
317 for (const auto &bcd : cd->subClasses())
318 {
319 t << " cp-ref = {\n" << " ref-type = derived;\n";
320 t << " ref-id = '" << bcd.classDef->getOutputFileBase() << "';\n";
321 t << " ref-prot = " << to_string_lower_class(bcd.prot) << ";\n";
322 t << " ref-virt = " << to_string_lower(bcd.virt) << ";\n";
323 t << " };\n";
324 }
325
326 size_t numMembers = 0;
327 for (const auto &ml : cd->getMemberLists())
328 {
329 if (!ml->listType().isDetailed())
330 {
331 numMembers+=ml->size();
332 }
333 }
334 if (numMembers>0)
335 {
336 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubTypes()),"public-type");
337 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Interfaces()),"interfaces");
338 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Services()),"services");
339 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubMethods()),"public-func");
340 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubAttribs()),"public-attrib");
341 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubSlots()),"public-slot");
342 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Signals()),"signal");
343 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::DcopMethods()),"dcop-func");
344 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Properties()),"property");
345 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubStaticMethods()),"public-static-func");
346 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PubStaticAttribs()),"public-static-attrib");
347 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProTypes()),"protected-type");
348 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProMethods()),"protected-func");
349 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProAttribs()),"protected-attrib");
350 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProSlots()),"protected-slot");
351 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProStaticMethods()),"protected-static-func");
352 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::ProStaticAttribs()),"protected-static-attrib");
353 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriTypes()),"private-type");
354 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriMethods()),"private-func");
355 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriAttribs()),"private-attrib");
356 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriSlots()),"private-slot");
357 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriStaticMethods()),"private-static-func");
358 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::PriStaticAttribs()),"private-static-attrib");
359 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Friends()),"signal");
360 generateDEFClassSection(cd,t,cd->getMemberList(MemberListType::Related()),"related");
361 }
362
363 t << " cp-filename = '" << cd->getDefFileName() << "';\n";
364 t << " cp-fileline = '" << cd->getDefLine() << "';\n";
365 t << " cp-briefdesc = <<_EnD_oF_dEf_TeXt_\n"
366 << cd->briefDescription() << "\n_EnD_oF_dEf_TeXt_;\n";
367
368 t << " cp-documentation = <<_EnD_oF_dEf_TeXt_\n"
369 << cd->documentation() << "\n_EnD_oF_dEf_TeXt_;\n";
370
371 DotClassGraph inheritanceGraph(cd,GraphType::Inheritance);
372 if (!inheritanceGraph.isTrivial())
373 {
374 t << " cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_\n";
375 inheritanceGraph.writeDEF(t);
376 t << "\n_EnD_oF_dEf_TeXt_;\n";
377 }
378 DotClassGraph collaborationGraph(cd,GraphType::Collaboration);
379 if (!collaborationGraph.isTrivial())
380 {
381 t << " cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_\n";
382 collaborationGraph.writeDEF(t);
383 t << "\n_EnD_oF_dEf_TeXt_;\n";
384 }
385 t << "}; /* " << cd->compoundTypeString() << " */\n";
386}
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.
virtual QCString getDefFileName() const =0
virtual int getDefLine() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual QCString documentation() const =0
virtual QCString getOutputFileBase() const =0
virtual bool isReference() const =0
virtual const QCString & name() const =0
Representation of a class inheritance or dependency graph.
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
static void generateDEFClassSection(const ClassDef *cd, TextStream &t, const MemberList *ml, const QCString &kind)
Definition defgen.cpp:266
@ Collaboration
Definition dotgraph.h:31
@ Inheritance
Definition dotgraph.h:31
static constexpr const char * to_string_lower_class(Protection prot) noexcept
Definition types.h:62
static constexpr const char * to_string_lower(Protection prot) noexcept
Definition types.h:50

References ClassDef::baseClasses(), Definition::briefDescription(), Collaboration, ClassDef::compoundTypeString(), Definition::documentation(), QCString::find(), generateDEFClassSection(), Definition::getDefFileName(), Definition::getDefLine(), ClassDef::getMemberList(), ClassDef::getMemberLists(), Definition::getOutputFileBase(), Inheritance, ClassDef::isImplicitTemplateInstance(), Definition::isReference(), DotClassGraph::isTrivial(), Definition::name(), ClassDef::subClasses(), to_string_lower(), to_string_lower_class(), and DotClassGraph::writeDEF().

Referenced by generateDEF().

◆ generateDEFForFile()

void generateDEFForFile ( const FileDef * fd,
TextStream & t )
static

Definition at line 432 of file defgen.cpp.

433{
434 if (fd->isReference()) return; // skip external references
435
436 t << "file = {\n";
437 t << " file-id = '" << fd->getOutputFileBase() << "';\n";
438 t << " file-name = ";
439 writeDEFString(t,fd->name());
440 t << ";\n";
441
442 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecDefineMembers()),"define");
443 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecProtoMembers()),"prototype");
444 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecTypedefMembers()),"typedef");
445 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecSequenceMembers()),"sequence");
446 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecDictionaryMembers()),"dictionary");
447 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecEnumMembers()),"enum");
448 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecFuncMembers()),"func");
449 generateDEFSection(fd,t,fd->getMemberList(MemberListType::DecVarMembers()),"var");
450
451 t << " file-full-name = '" << fd->getDefFileName() << "';\n";
452 t << " file-first-line = '" << fd->getDefLine() << "';\n";
453
454 t << " file-briefdesc = <<_EnD_oF_dEf_TeXt_\n"
455 << fd->briefDescription() << "\n_EnD_oF_dEf_TeXt_;\n";
456
457 t << " file-documentation = <<_EnD_oF_dEf_TeXt_\n"
458 << fd->documentation() << "\n_EnD_oF_dEf_TeXt_;\n";
459
460 t << "}; /* file */\n";
461}
virtual MemberList * getMemberList(MemberListType lt) const =0
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:388

References Definition::briefDescription(), Definition::documentation(), generateDEFSection(), Definition::getDefFileName(), Definition::getDefLine(), FileDef::getMemberList(), Definition::getOutputFileBase(), Definition::isReference(), Definition::name(), and writeDEFString().

Referenced by generateDEF().

◆ generateDEFForMember()

void generateDEFForMember ( const MemberDef * md,
TextStream & t,
const Definition * def,
const QCString & prefix )
static

Definition at line 59 of file defgen.cpp.

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 if (md->memberType() == MemberType::EnumValue) ASSERT(0);
91 bool isFunc=to_isFunction(md->memberType());
92 QCString memType = to_string_lower(md->memberType());
93
94 t << memPrefix << "kind = '" << memType << "';\n";
95 t << memPrefix << "id = '"
96 << md->getOutputFileBase() << "_1" << md->anchor()
97 << "';\n";
98
99 t << memPrefix << "virt = " << to_string_lower(md->virtualness()) << ";\n";
100 t << memPrefix << "prot = " << to_string_lower(md->protection()) << ";\n";
101
102 if (md->memberType()!=MemberType::Define &&
103 md->memberType()!=MemberType::Enumeration
104 )
105 {
107 t << memPrefix << "type = <<_EnD_oF_dEf_TeXt_\n" << typeStr << "\n"
108 << "_EnD_oF_dEf_TeXt_;\n";
109 }
110
111 t << memPrefix << "name = '" << md->name() << "';\n";
112
113 if (isFunc) //function
114 {
115 const ArgumentList &defAl = md->argumentList();
117 QCString fcnPrefix = " " + memPrefix + "param-";
118
119 auto defIt = defAl.begin();
120 for (const Argument &a : declAl)
121 {
122 const Argument *defArg = nullptr;
123 if (defIt!=defAl.end())
124 {
125 defArg = &(*defIt);
126 ++defIt;
127 }
128 t << memPrefix << "param = {\n";
129 if (!a.attrib.isEmpty())
130 {
131 t << fcnPrefix << "attributes = ";
132 writeDEFString(t,a.attrib);
133 t << ";\n";
134 }
135 if (!a.type.isEmpty())
136 {
137 t << fcnPrefix << "type = <<_EnD_oF_dEf_TeXt_\n"
138 << a.type << "\n_EnD_oF_dEf_TeXt_;\n";
139 }
140 if (!a.name.isEmpty())
141 {
142 t << fcnPrefix << "declname = ";
143 writeDEFString(t,a.name);
144 t << ";\n";
145 }
146 if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
147 {
148 t << fcnPrefix << "defname = ";
149 writeDEFString(t,defArg->name);
150 t << ";\n";
151 }
152 if (!a.array.isEmpty())
153 {
154 t << fcnPrefix << "array = ";
155 writeDEFString(t,a.array);
156 t << ";\n";
157 }
158 if (!a.defval.isEmpty())
159 {
160 t << fcnPrefix << "defval = <<_EnD_oF_dEf_TeXt_\n"
161 << a.defval << "\n_EnD_oF_dEf_TeXt_;\n";
162 }
163 t << " }; /*" << fcnPrefix << "-param */\n";
164 }
165 }
166 else if ( md->memberType()==MemberType::Define
167 && md->argsString()!=nullptr)
168 {
169 QCString defPrefix = " " + memPrefix + "def-";
170 for (const Argument &a : md->argumentList())
171 {
172 t << memPrefix << "param = {\n";
173 t << defPrefix << "name = '" << a.type << "';\n";
174 t << " }; /*" << defPrefix << "-param */\n";
175 }
176 }
177
178 if (!md->initializer().isEmpty())
179 {
180 t << memPrefix << "initializer = <<_EnD_oF_dEf_TeXt_\n"
181 << md->initializer() << "\n_EnD_oF_dEf_TeXt_;\n";
182 }
183 // TODO: exceptions, const volatile
184 if (md->memberType()==MemberType::Enumeration) // enum
185 {
186 for (const auto &emd : md->enumFieldList())
187 {
188 t << memPrefix << "enum = { enum-name = " << emd->name() << ';';
189 if (!emd->initializer().isEmpty())
190 {
191 t << " enum-value = ";
192 writeDEFString(t,emd->initializer());
193 t << ';';
194 }
195 t << " };\n";
196 }
197 }
198
199 t << memPrefix << "desc-file = '" << md->getDefFileName() << "';\n";
200 t << memPrefix << "desc-line = '" << md->getDefLine() << "';\n";
201 t << memPrefix << "briefdesc = <<_EnD_oF_dEf_TeXt_\n"
202 << md->briefDescription() << "\n_EnD_oF_dEf_TeXt_;\n";
203 t << memPrefix << "documentation = <<_EnD_oF_dEf_TeXt_\n"
204 << md->documentation() << "\n_EnD_oF_dEf_TeXt_;\n";
205
206 //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
207
208 QCString refPrefix = " " + memPrefix + "ref-";
209 auto refList = md->getReferencesMembers();
210 for (const auto &rmd : refList)
211 {
212 if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
213 {
214 t << memPrefix << "referenceto = {\n";
215 t << refPrefix << "id = '"
216 << rmd->getBodyDef()->getOutputFileBase()
217 << "_1" // encoded ':' character (see util.cpp:convertNameToFile)
218 << rmd->anchor() << "';\n";
219
220 t << refPrefix << "line = '"
221 << rmd->getStartBodyLine() << "';\n";
222
223 QCString scope = rmd->getScopeString();
224 QCString name = rmd->name();
225 if (!scope.isEmpty() && scope!=def->name())
226 {
227 name.prepend(scope+"::");
228 }
229
230 t << refPrefix << "name = ";
231 writeDEFString(t,name);
232 t << ';' << "\n };\n";
233 }
234 }
235 auto refByList = md->getReferencedByMembers();
236 for (const auto &rmd : refByList)
237 {
238 if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
239 {
240 t << memPrefix << "referencedby = {\n";
241 t << refPrefix << "id = '"
242 << rmd->getBodyDef()->getOutputFileBase()
243 << "_1" // encoded ':' character (see util.cpp:convertNameToFile)
244 << rmd->anchor() << "';\n";
245
246 t << refPrefix << "line = '"
247 << rmd->getStartBodyLine() << "';\n";
248
249 QCString scope = rmd->getScopeString();
250 QCString name = rmd->name();
251 if (!scope.isEmpty() && scope!=def->name())
252 {
253 name.prepend(scope+"::");
254 }
255
256 t << refPrefix << "name = ";
257 writeDEFString(t,name);
258 t << ';' << "\n };\n";
259 }
260 }
261
262 t << " }; /* " << prefix << "-member */\n";
263}
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
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual QCString anchor() const =0
virtual const MemberVector & getReferencedByMembers() const =0
virtual const MemberVector & getReferencesMembers() const =0
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
QCString & prepend(const char *s)
Definition qcstring.h:426
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:167
QCString & append(char c)
Definition qcstring.h:400
std::unique_ptr< ArgumentList > stringToArgumentList(SrcLangExt lang, const QCString &argsString, QCString *extraTypeChars=nullptr)
Definition defargs.l:826
#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 constexpr bool to_isFunction(MemberType mt) noexcept
Definition types.h:599
QCString replaceAnonymousScopes(const QCString &s, const QCString &replacement)
Definition util.cpp:218

References Definition::anchor(), QCString::append(), MemberDef::argsString(), MemberDef::argumentList(), ASSERT, ArgumentList::begin(), Definition::briefDescription(), Definition::documentation(), ArgumentList::end(), MemberDef::enumFieldList(), MemberDef::getClassDef(), Definition::getDefFileName(), Definition::getDefLine(), Definition::getLanguage(), MemberDef::getNamespaceDef(), Definition::getOutputFileBase(), Definition::getReferencedByMembers(), Definition::getReferencesMembers(), MemberDef::initializer(), QCString::isEmpty(), MemberDef::memberType(), Argument::name, Definition::name(), prefix, QCString::prepend(), MemberDef::protection(), replaceAnonymousScopes(), stringToArgumentList(), to_isFunction(), to_string_lower(), MemberDef::typeString(), MemberDef::virtualness(), and writeDEFString().

Referenced by generateDEFClassSection(), and generateDEFSection().

◆ generateDEFForNamespace()

void generateDEFForNamespace ( const NamespaceDef * nd,
TextStream & t )
static

Definition at line 404 of file defgen.cpp.

405{
406 if (nd->isReference()) return; // skip external references
407 t << " namespace = {\n";
408 t << " ns-id = '" << nd->getOutputFileBase() << "';\n";
409 t << " ns-name = ";
410 writeDEFString(t,nd->name());
411 t << ";\n";
412
413 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecDefineMembers()),"define");
414 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecProtoMembers()),"prototype");
415 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecTypedefMembers()),"typedef");
416 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecSequenceMembers()),"sequence");
417 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecDictionaryMembers()),"dictionary");
418 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecEnumMembers()),"enum");
419 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecFuncMembers()),"func");
420 generateDEFSection(nd,t,nd->getMemberList(MemberListType::DecVarMembers()),"var");
421
422 t << " ns-filename = '" << nd->getDefFileName() << "';\n";
423 t << " ns-fileline = '" << nd->getDefLine() << "';\n";
424 t << " ns-briefdesc = <<_EnD_oF_dEf_TeXt_\n"
425 << nd->briefDescription() << "\n_EnD_oF_dEf_TeXt_;\n";
426
427 t << " ns-documentation = <<_EnD_oF_dEf_TeXt_\n"
428 << nd->documentation() << "\n_EnD_oF_dEf_TeXt_;\n";
429 t << " };\n";
430}
virtual MemberList * getMemberList(MemberListType lt) const =0

References Definition::briefDescription(), Definition::documentation(), generateDEFSection(), Definition::getDefFileName(), Definition::getDefLine(), NamespaceDef::getMemberList(), Definition::getOutputFileBase(), Definition::isReference(), Definition::name(), and writeDEFString().

Referenced by generateDEF().

◆ generateDEFSection()

void generateDEFSection ( const Definition * d,
TextStream & t,
const MemberList * ml,
const QCString & kind )
static

Definition at line 388 of file defgen.cpp.

392{
393 if (ml && !ml->empty())
394 {
395 t << " " << kind << " = {\n";
396 for (const auto &md : *ml)
397 {
398 generateDEFForMember(md,t,d,kind);
399 }
400 t << " };\n";
401 }
402}

References MemberVector::empty(), and generateDEFForMember().

Referenced by generateDEFForFile(), and generateDEFForNamespace().

◆ writeDEFString()

void writeDEFString ( TextStream & t,
const QCString & s )
inlinestatic

Definition at line 42 of file defgen.cpp.

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}
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:176

References QCString::data(), and QCString::isEmpty().

Referenced by generateDEFForFile(), generateDEFForMember(), and generateDEFForNamespace().