Doxygen
Loading...
Searching...
No Matches
xmlgen.cpp File Reference
#include <stdlib.h>
#include "textstream.h"
#include "xmlgen.h"
#include "doxygen.h"
#include "message.h"
#include "config.h"
#include "classlist.h"
#include "util.h"
#include "defargs.h"
#include "outputgen.h"
#include "outputlist.h"
#include "dot.h"
#include "dotclassgraph.h"
#include "dotincldepgraph.h"
#include "pagedef.h"
#include "filename.h"
#include "version.h"
#include "xmldocvisitor.h"
#include "docparser.h"
#include "language.h"
#include "parserintf.h"
#include "arguments.h"
#include "memberlist.h"
#include "groupdef.h"
#include "memberdef.h"
#include "namespacedef.h"
#include "membername.h"
#include "membergroup.h"
#include "dirdef.h"
#include "section.h"
#include "htmlentity.h"
#include "resourcemgr.h"
#include "dir.h"
#include "utf8.h"
#include "portable.h"
#include "moduledef.h"
+ Include dependency graph for xmlgen.cpp:

Go to the source code of this file.

Classes

class  TextGeneratorXMLImpl
 Implements TextGeneratorIntf for an XML stream. More...
 

Macros

#define XML_DB(x)   do {} while(0)
 

Functions

static const char * xmlSectionMapper (MemberListType ml)
 
void writeXMLString (TextStream &t, const QCString &s)
 
void writeXMLCodeString (TextStream &t, const QCString &str, size_t &col)
 
static void writeXMLHeader (TextStream &t)
 
static void writeCombineScript ()
 
void writeXMLLink (TextStream &t, const QCString &extRef, const QCString &compoundId, const QCString &anchorId, const QCString &text, const QCString &tooltip)
 
static void writeTemplateArgumentList (TextStream &t, const ArgumentList &al, const Definition *scope, const FileDef *fileScope, int indent)
 
static void writeMemberTemplateLists (const MemberDef *md, TextStream &t)
 
static void writeTemplateList (const ClassDef *cd, TextStream &t)
 
static void writeTemplateList (const ConceptDef *cd, TextStream &t)
 
static void writeXMLDocBlock (TextStream &t, const QCString &fileName, int lineNr, const Definition *scope, const MemberDef *md, const QCString &text)
 
void writeXMLCodeBlock (TextStream &t, FileDef *fd)
 
static void writeMemberReference (TextStream &t, const Definition *def, const MemberDef *rmd, const QCString &tagName)
 
static void stripAnonymousMarkers (QCString &s)
 
static void stripQualifiers (QCString &typeStr)
 
static QCString classOutputFileBase (const ClassDef *cd)
 
static QCString memberOutputFileBase (const MemberDef *md)
 
static QCString extractNoExcept (QCString &argsStr)
 
static void generateXMLForMember (const MemberDef *md, TextStream &ti, TextStream &t, const Definition *def)
 
static bool memberVisible (const Definition *d, const MemberDef *md)
 
static void generateXMLSection (const Definition *d, TextStream &ti, TextStream &t, const MemberList *ml, const QCString &kind, const QCString &header=QCString(), const QCString &documentation=QCString())
 
static void writeListOfAllMembers (const ClassDef *cd, TextStream &t)
 
static void writeInnerClasses (const ClassLinkedRefMap &cl, TextStream &t)
 
static void writeInnerConcepts (const ConceptLinkedRefMap &cl, TextStream &t)
 
static void writeInnerModules (const ModuleLinkedRefMap &ml, TextStream &t)
 
static void writeInnerNamespaces (const NamespaceLinkedRefMap &nl, TextStream &t)
 
static void writeExports (const ImportInfoMap &exportMap, TextStream &t)
 
static void writeInnerFiles (const FileList &fl, TextStream &t)
 
static void writeInnerPages (const PageLinkedRefMap &pl, TextStream &t)
 
static void writeInnerGroups (const GroupList &gl, TextStream &t)
 
static void writeInnerDirs (const DirList *dl, TextStream &t)
 
static void writeIncludeInfo (const IncludeInfo *ii, TextStream &t)
 
static void generateXMLForClass (const ClassDef *cd, TextStream &ti)
 
static void generateXMLForConcept (const ConceptDef *cd, TextStream &ti)
 
static void generateXMLForModule (const ModuleDef *mod, TextStream &ti)
 
static void generateXMLForNamespace (const NamespaceDef *nd, TextStream &ti)
 
static void generateXMLForFile (FileDef *fd, TextStream &ti)
 
static void generateXMLForGroup (const GroupDef *gd, TextStream &ti)
 
static void generateXMLForDir (DirDef *dd, TextStream &ti)
 
static void generateXMLForPage (PageDef *pd, TextStream &ti, bool isExample)
 
void generateXML ()
 

Variables

static std::map< MemberListType, std::string > g_xmlSectionMap
 

Macro Definition Documentation

◆ XML_DB

Function Documentation

◆ classOutputFileBase()

static QCString classOutputFileBase ( const ClassDef * cd)
static

Definition at line 540 of file xmlgen.cpp.

541{
542 //bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
543 //if (inlineGroupedClasses && cd->partOfGroups()!=0)
544 return cd->getOutputFileBase();
545 //else
546 // return cd->getOutputFileBase();
547}
virtual QCString getOutputFileBase() const =0

References Definition::getOutputFileBase().

Referenced by generateXMLForClass(), and writeInnerClasses().

◆ extractNoExcept()

static QCString extractNoExcept ( QCString & argsStr)
static

Definition at line 559 of file xmlgen.cpp.

560{
561 QCString expr;
562 //printf("extractNoExcept(%s)\n",qPrint(argsStr));
563 int i = argsStr.find("noexcept(");
564 if (i!=-1)
565 {
566 int bracketCount = 1;
567 size_t p = i+9;
568 bool found = false;
569 bool insideString = false;
570 bool insideChar = false;
571 char pc = 0;
572 while (!found && p<argsStr.length())
573 {
574 char c = argsStr[p++];
575 if (insideString)
576 {
577 if (c=='"' && pc!='\\') insideString=false;
578 }
579 else if (insideChar)
580 {
581 if (c=='\'' && pc!='\\') insideChar=false;
582 }
583 else
584 {
585 switch (c)
586 {
587 case '(': bracketCount++; break;
588 case ')': bracketCount--; found = bracketCount==0; break;
589 case '"': insideString = true; break;
590 case '\'': insideChar = true; break;
591 }
592 }
593 pc = c;
594 }
595 expr = argsStr.mid(i+9,p-i-10);
596 argsStr = (argsStr.left(i) + argsStr.mid(p)).stripWhiteSpace();
597 }
598 //printf("extractNoExcept -> argsStr='%s', expr='%s'\n",qPrint(argsStr),qPrint(expr));
599 return expr;
600}
This is an alternative implementation of QCString.
Definition qcstring.h:94
int find(char c, int index=0, bool cs=TRUE) const
Definition qcstring.cpp:43
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:146
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:219
QCString left(size_t len) const
Definition qcstring.h:207
std::string_view stripWhiteSpace(std::string_view s)
Given a string view s, returns a new, narrower view on that string, skipping over any leading or trai...
Definition stringutil.h:72
bool found
Definition util.cpp:983

References QCString::find(), found, QCString::left(), QCString::length(), QCString::mid(), and stripWhiteSpace().

Referenced by generateXMLForMember().

◆ generateXML()

void generateXML ( )

Definition at line 2156 of file xmlgen.cpp.

2157{
2158 // + classes
2159 // + concepts
2160 // + namespaces
2161 // + files
2162 // + groups
2163 // + related pages
2164 // - examples
2165
2166 QCString outputDirectory = Config_getString(XML_OUTPUT);
2167 Dir xmlDir(outputDirectory.str());
2168 createSubDirs(xmlDir);
2169
2170 ResourceMgr::instance().copyResource("xml.xsd",outputDirectory);
2171 ResourceMgr::instance().copyResource("index.xsd",outputDirectory);
2172
2173 QCString fileName=outputDirectory+"/compound.xsd";
2174 std::ofstream f = Portable::openOutputStream(fileName);
2175 if (!f.is_open())
2176 {
2177 err("Cannot open file %s for writing!\n",qPrint(fileName));
2178 return;
2179 }
2180 {
2181 TextStream t(&f);
2182
2183 // write compound.xsd, but replace special marker with the entities
2184 QCString compound_xsd = ResourceMgr::instance().getAsString("compound.xsd");
2185 const char *startLine = compound_xsd.data();
2186 while (*startLine)
2187 {
2188 // find end of the line
2189 const char *endLine = startLine+1;
2190 while (*endLine && *(endLine-1)!='\n') endLine++; // skip to end of the line including \n
2191 int len=static_cast<int>(endLine-startLine);
2192 if (len>0)
2193 {
2194 QCString s(startLine,len);
2195 if (s.find("<!-- Automatically insert here the HTML entities -->")!=-1)
2196 {
2198 }
2199 else
2200 {
2201 t.write(startLine,len);
2202 }
2203 }
2204 startLine=endLine;
2205 }
2206 }
2207 f.close();
2208
2209 fileName=outputDirectory+"/doxyfile.xsd";
2210 f = Portable::openOutputStream(fileName);
2211 if (!f.is_open())
2212 {
2213 err("Cannot open file %s for writing!\n",qPrint(fileName));
2214 return;
2215 }
2216 {
2217 TextStream t(&f);
2218
2219 // write doxyfile.xsd, but replace special marker with the entities
2220 QCString doxyfile_xsd = ResourceMgr::instance().getAsString("doxyfile.xsd");
2221 const char *startLine = doxyfile_xsd.data();
2222 while (*startLine)
2223 {
2224 // find end of the line
2225 const char *endLine = startLine+1;
2226 while (*endLine && *(endLine-1)!='\n') endLine++; // skip to end of the line including \n
2227 int len=static_cast<int>(endLine-startLine);
2228 if (len>0)
2229 {
2230 QCString s(startLine,len);
2231 if (s.find("<!-- Automatically insert here the configuration settings -->")!=-1)
2232 {
2234 }
2235 else
2236 {
2237 t.write(startLine,len);
2238 }
2239 }
2240 startLine=endLine;
2241 }
2242 }
2243 f.close();
2244
2245 fileName=outputDirectory+"/Doxyfile.xml";
2246 f = Portable::openOutputStream(fileName);
2247 if (!f.is_open())
2248 {
2249 err("Cannot open file %s for writing\n",fileName.data());
2250 return;
2251 }
2252 else
2253 {
2254 TextStream t(&f);
2256 }
2257 f.close();
2258
2259 fileName=outputDirectory+"/index.xml";
2260 f = Portable::openOutputStream(fileName);
2261 if (!f.is_open())
2262 {
2263 err("Cannot open file %s for writing!\n",qPrint(fileName));
2264 return;
2265 }
2266 else
2267 {
2268 TextStream t(&f);
2269
2270 // write index header
2271 t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n";
2272 t << "<doxygenindex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
2273 t << "xsi:noNamespaceSchemaLocation=\"index.xsd\" ";
2274 t << "version=\"" << getDoxygenVersion() << "\" ";
2275 t << "xml:lang=\"" << theTranslator->trISOLang() << "\"";
2276 t << ">\n";
2277
2278 for (const auto &cd : *Doxygen::classLinkedMap)
2279 {
2280 generateXMLForClass(cd.get(),t);
2281 }
2282 for (const auto &cd : *Doxygen::conceptLinkedMap)
2283 {
2284 msg("Generating XML output for concept %s\n",qPrint(cd->name()));
2285 generateXMLForConcept(cd.get(),t);
2286 }
2287 for (const auto &nd : *Doxygen::namespaceLinkedMap)
2288 {
2289 msg("Generating XML output for namespace %s\n",qPrint(nd->name()));
2290 generateXMLForNamespace(nd.get(),t);
2291 }
2292 for (const auto &fn : *Doxygen::inputNameLinkedMap)
2293 {
2294 for (const auto &fd : *fn)
2295 {
2296 msg("Generating XML output for file %s\n",qPrint(fd->name()));
2297 generateXMLForFile(fd.get(),t);
2298 }
2299 }
2300 for (const auto &gd : *Doxygen::groupLinkedMap)
2301 {
2302 msg("Generating XML output for group %s\n",qPrint(gd->name()));
2303 generateXMLForGroup(gd.get(),t);
2304 }
2305 for (const auto &pd : *Doxygen::pageLinkedMap)
2306 {
2307 msg("Generating XML output for page %s\n",qPrint(pd->name()));
2308 generateXMLForPage(pd.get(),t,FALSE);
2309 }
2310 for (const auto &dd : *Doxygen::dirLinkedMap)
2311 {
2312 msg("Generate XML output for dir %s\n",qPrint(dd->name()));
2313 generateXMLForDir(dd.get(),t);
2314 }
2315 for (const auto &mod : ModuleManager::instance().modules())
2316 {
2317 msg("Generating XML output for module %s\n",qPrint(mod->name()));
2318 generateXMLForModule(mod.get(),t);
2319 }
2320 for (const auto &pd : *Doxygen::exampleLinkedMap)
2321 {
2322 msg("Generating XML output for example %s\n",qPrint(pd->name()));
2323 generateXMLForPage(pd.get(),t,TRUE);
2324 }
2326 {
2327 msg("Generating XML output for the main page\n");
2329 }
2330
2331 //t << " </compoundlist>\n";
2332 t << "</doxygenindex>\n";
2333 }
2334
2336 clearSubDirs(xmlDir);
2337}
Class representing a directory in the file system.
Definition dir.h:75
This class serves as a namespace for global variables used by doxygen.
Definition doxygen.h:85
static std::unique_ptr< PageDef > mainPage
Definition doxygen.h:92
void writeXMLSchema(TextStream &t)
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
const std::string & str() const
Definition qcstring.h:517
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:152
static ResourceMgr & instance()
Returns the one and only instance of this class.
bool copyResource(const QCString &name, const QCString &targetDir) const
Copies a registered resource to a given target directory.
QCString getAsString(const QCString &name) const
Gets the resource data as a C string.
Text streaming class that buffers data.
Definition textstream.h:36
virtual QCString trISOLang()=0
#define Config_getString(name)
Definition config.h:32
Translator * theTranslator
Definition language.cpp:71
void msg(const char *fmt,...)
Definition message.cpp:98
#define err(fmt,...)
Definition message.h:84
void writeXMLDoxyfile(TextStream &t)
void writeXSDDoxyfile(TextStream &t)
std::ofstream openOutputStream(const QCString &name, bool append=false)
Definition portable.cpp:638
const char * qPrint(const char *s)
Definition qcstring.h:652
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
void clearSubDirs(const Dir &d)
Definition util.cpp:3960
void createSubDirs(const Dir &d)
Definition util.cpp:3933
static void generateXMLForGroup(const GroupDef *gd, TextStream &ti)
Definition xmlgen.cpp:1909
static void generateXMLForClass(const ClassDef *cd, TextStream &ti)
Definition xmlgen.cpp:1427
static void generateXMLForFile(FileDef *fd, TextStream &ti)
Definition xmlgen.cpp:1794
static void generateXMLForNamespace(const NamespaceDef *nd, TextStream &ti)
Definition xmlgen.cpp:1721
static void generateXMLForModule(const ModuleDef *mod, TextStream &ti)
Definition xmlgen.cpp:1666
static void generateXMLForConcept(const ConceptDef *cd, TextStream &ti)
Definition xmlgen.cpp:1620
static void generateXMLForDir(DirDef *dd, TextStream &ti)
Definition xmlgen.cpp:1978
static void generateXMLForPage(PageDef *pd, TextStream &ti, bool isExample)
Definition xmlgen.cpp:2016
static void writeCombineScript()
Definition xmlgen.cpp:165

References Doxygen::classLinkedMap, clearSubDirs(), Doxygen::conceptLinkedMap, Config_getString, ResourceMgr::copyResource(), createSubDirs(), QCString::data(), Doxygen::dirLinkedMap, err, Doxygen::exampleLinkedMap, FALSE, QCString::find(), generateXMLForClass(), generateXMLForConcept(), generateXMLForDir(), generateXMLForFile(), generateXMLForGroup(), generateXMLForModule(), generateXMLForNamespace(), generateXMLForPage(), ResourceMgr::getAsString(), Doxygen::groupLinkedMap, Doxygen::inputNameLinkedMap, HtmlEntityMapper::instance(), ModuleManager::instance(), ResourceMgr::instance(), Doxygen::mainPage, ModuleManager::modules(), msg(), Doxygen::namespaceLinkedMap, Portable::openOutputStream(), Doxygen::pageLinkedMap, qPrint(), QCString::str(), theTranslator, Translator::trISOLang(), TRUE, TextStream::write(), writeCombineScript(), Config::writeXMLDoxyfile(), HtmlEntityMapper::writeXMLSchema(), and Config::writeXSDDoxyfile().

Referenced by generateOutput().

◆ generateXMLForClass()

static void generateXMLForClass ( const ClassDef * cd,
TextStream & ti )
static

Definition at line 1427 of file xmlgen.cpp.

1428{
1429 // + brief description
1430 // + detailed description
1431 // + template argument list(s)
1432 // - include file
1433 // + member groups
1434 // + inheritance diagram
1435 // + list of direct super classes
1436 // + list of direct sub classes
1437 // + list of inner classes
1438 // + collaboration diagram
1439 // + list of all members
1440 // + user defined member sections
1441 // + standard member sections
1442 // + detailed member documentation
1443 // - examples using the class
1444
1445 if (cd->isReference()) return; // skip external references.
1446 if (cd->isHidden()) return; // skip hidden classes.
1447 if (cd->isAnonymous()) return; // skip anonymous compounds.
1448 if (cd->templateMaster()!=nullptr) return; // skip generated template instances.
1449 if (cd->isArtificial()) return; // skip artificially created classes
1450
1451 msg("Generating XML output for class %s\n",qPrint(cd->name()));
1452
1453 ti << " <compound refid=\"" << classOutputFileBase(cd)
1454 << "\" kind=\"" << cd->compoundTypeString()
1455 << "\"><name>" << convertToXML(cd->name()) << "</name>\n";
1456
1457 QCString outputDirectory = Config_getString(XML_OUTPUT);
1458 QCString fileName=outputDirectory+"/"+ classOutputFileBase(cd)+".xml";
1459 std::ofstream f = Portable::openOutputStream(fileName);
1460 if (!f.is_open())
1461 {
1462 err("Cannot open file %s for writing!\n",qPrint(fileName));
1463 return;
1464 }
1465 TextStream t(&f);
1466
1467 writeXMLHeader(t);
1468 t << " <compounddef id=\""
1469 << classOutputFileBase(cd) << "\" kind=\""
1470 << cd->compoundTypeString() << "\" language=\""
1471 << langToString(cd->getLanguage()) << "\" prot=\"";
1472 switch (cd->protection())
1473 {
1474 case Protection::Public: t << "public"; break;
1475 case Protection::Protected: t << "protected"; break;
1476 case Protection::Private: t << "private"; break;
1477 case Protection::Package: t << "package"; break;
1478 }
1479 if (cd->isFinal()) t << "\" final=\"yes";
1480 if (cd->isSealed()) t << "\" sealed=\"yes";
1481 if (cd->isAbstract()) t << "\" abstract=\"yes";
1482 t << "\">\n";
1483 t << " <compoundname>";
1484 QCString nameStr = cd->name();
1485 stripAnonymousMarkers(nameStr);
1486 writeXMLString(t,nameStr);
1487 t << "</compoundname>\n";
1488 for (const auto &bcd : cd->baseClasses())
1489 {
1490 t << " <basecompoundref ";
1491 if (bcd.classDef->isLinkable())
1492 {
1493 t << "refid=\"" << classOutputFileBase(bcd.classDef) << "\" ";
1494 }
1495 t << "prot=\"";
1496 switch (bcd.prot)
1497 {
1498 case Protection::Public: t << "public"; break;
1499 case Protection::Protected: t << "protected"; break;
1500 case Protection::Private: t << "private"; break;
1501 case Protection::Package: ASSERT(0); break;
1502 }
1503 t << "\" virt=\"";
1504 switch(bcd.virt)
1505 {
1506 case Specifier::Normal: t << "non-virtual"; break;
1507 case Specifier::Virtual: t << "virtual"; break;
1508 case Specifier::Pure: t <<"pure-virtual"; break;
1509 }
1510 t << "\">";
1511 if (!bcd.templSpecifiers.isEmpty())
1512 {
1513 t << convertToXML(
1515 bcd.classDef->name(),bcd.templSpecifiers)
1516 );
1517 }
1518 else
1519 {
1520 t << convertToXML(bcd.classDef->displayName());
1521 }
1522 t << "</basecompoundref>\n";
1523 }
1524 for (const auto &bcd : cd->subClasses())
1525 {
1526 t << " <derivedcompoundref refid=\""
1527 << classOutputFileBase(bcd.classDef)
1528 << "\" prot=\"";
1529 switch (bcd.prot)
1530 {
1531 case Protection::Public: t << "public"; break;
1532 case Protection::Protected: t << "protected"; break;
1533 case Protection::Private: t << "private"; break;
1534 case Protection::Package: ASSERT(0); break;
1535 }
1536 t << "\" virt=\"";
1537 switch (bcd.virt)
1538 {
1539 case Specifier::Normal: t << "non-virtual"; break;
1540 case Specifier::Virtual: t << "virtual"; break;
1541 case Specifier::Pure: t << "pure-virtual"; break;
1542 }
1543 t << "\">" << convertToXML(bcd.classDef->displayName())
1544 << "</derivedcompoundref>\n";
1545 }
1546
1548
1550
1551 writeTemplateList(cd,t);
1552 for (const auto &mg : cd->getMemberGroups())
1553 {
1554 generateXMLSection(cd,ti,t,&mg->members(),"user-defined",mg->header(),
1555 mg->documentation());
1556 }
1557
1558 for (const auto &ml : cd->getMemberLists())
1559 {
1560 if ((ml->listType()&MemberListType_detailedLists)==0)
1561 {
1562 generateXMLSection(cd,ti,t,ml.get(),xmlSectionMapper(ml->listType()));
1563 }
1564 }
1565
1566 if (!cd->requiresClause().isEmpty())
1567 {
1568 t << " <requiresclause>";
1569 linkifyText(TextGeneratorXMLImpl(t),cd,cd->getFileDef(),nullptr,cd->requiresClause());
1570 t << " </requiresclause>\n";
1571 }
1572
1573 for (const auto &qcd : cd->getQualifiers())
1574 {
1575 t << " <qualifier>" << convertToXML(qcd.c_str()) << "</qualifier>\n";
1576 }
1577
1578 t << " <briefdescription>\n";
1579 writeXMLDocBlock(t,cd->briefFile(),cd->briefLine(),cd,nullptr,cd->briefDescription());
1580 t << " </briefdescription>\n";
1581 t << " <detaileddescription>\n";
1582 writeXMLDocBlock(t,cd->docFile(),cd->docLine(),cd,nullptr,cd->documentation());
1583 t << " </detaileddescription>\n";
1584 DotClassGraph inheritanceGraph(cd,Inheritance);
1585 if (!inheritanceGraph.isTrivial())
1586 {
1587 t << " <inheritancegraph>\n";
1588 inheritanceGraph.writeXML(t);
1589 t << " </inheritancegraph>\n";
1590 }
1591 DotClassGraph collaborationGraph(cd,Collaboration);
1592 if (!collaborationGraph.isTrivial())
1593 {
1594 t << " <collaborationgraph>\n";
1595 collaborationGraph.writeXML(t);
1596 t << " </collaborationgraph>\n";
1597 }
1598 t << " <location file=\""
1599 << convertToXML(stripFromPath(cd->getDefFileName())) << "\" line=\""
1600 << cd->getDefLine() << "\"" << " column=\""
1601 << cd->getDefColumn() << "\"" ;
1602 if (cd->getStartBodyLine()!=-1)
1603 {
1604 const FileDef *bodyDef = cd->getBodyDef();
1605 if (bodyDef)
1606 {
1607 t << " bodyfile=\"" << convertToXML(stripFromPath(bodyDef->absFilePath())) << "\"";
1608 }
1609 t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
1610 << cd->getEndBodyLine() << "\"";
1611 }
1612 t << "/>\n";
1614 t << " </compounddef>\n";
1615 t << "</doxygen>\n";
1616
1617 ti << " </compound>\n";
1618}
virtual bool isAbstract() const =0
Returns TRUE if there is at least one pure virtual member in this class.
virtual bool isFinal() const =0
Returns TRUE if this class is marked as final.
virtual QCString compoundTypeString() const =0
Returns the type of compound as a string.
virtual bool isSealed() const =0
Returns TRUE if this class is marked as sealed.
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
virtual const ClassDef * templateMaster() const =0
Returns the template master of which this class is an instance.
virtual ClassLinkedRefMap getClasses() const =0
returns the classes nested into this class
virtual FileDef * getFileDef() const =0
Returns the namespace this compound is in, or 0 if it has a global scope.
virtual const IncludeInfo * includeInfo() const =0
virtual QCString requiresClause() const =0
virtual QCString docFile() const =0
virtual int getEndBodyLine() const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual int docLine() const =0
virtual QCString getDefFileName() const =0
virtual int getDefLine() const =0
virtual const FileDef * getBodyDef() const =0
virtual int briefLine() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual bool isAnonymous() const =0
virtual bool isHidden() const =0
virtual QCString documentation() const =0
virtual bool isArtificial() const =0
virtual QCString briefFile() const =0
virtual int getStartBodyLine() const =0
virtual int getDefColumn() const =0
virtual bool isReference() const =0
virtual const QCString & name() const =0
Representation of a class inheritance or dependency graph.
A model of a file symbol.
Definition filedef.h:99
virtual QCString absFilePath() const =0
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:143
Implements TextGeneratorIntf for an XML stream.
Definition xmlgen.cpp:212
@ Inheritance
Definition dotgraph.h:31
@ Collaboration
Definition dotgraph.h:31
#define ASSERT(x)
Definition qcstring.h:39
@ MemberListType_detailedLists
Definition types.h:103
QCString insertTemplateSpecifierInScope(const QCString &scope, const QCString &templ)
Definition util.cpp:4039
static QCString stripFromPath(const QCString &p, const StringVector &l)
Definition util.cpp:309
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:4205
QCString langToString(SrcLangExt lang)
Returns a string representation of lang.
Definition util.cpp:6126
void linkifyText(const TextGeneratorIntf &out, const Definition *scope, const FileDef *fileScope, const Definition *self, const QCString &text, bool autoBreak, bool external, bool keepSpaces, int indentLevel)
Definition util.cpp:903
static QCString classOutputFileBase(const ClassDef *cd)
Definition xmlgen.cpp:540
static const char * xmlSectionMapper(MemberListType ml)
Definition xmlgen.cpp:107
static void writeXMLDocBlock(TextStream &t, const QCString &fileName, int lineNr, const Definition *scope, const MemberDef *md, const QCString &text)
Definition xmlgen.cpp:421
static void writeListOfAllMembers(const ClassDef *cd, TextStream &t)
Definition xmlgen.cpp:1246
static void stripAnonymousMarkers(QCString &s)
Definition xmlgen.cpp:499
static void writeTemplateList(const ClassDef *cd, TextStream &t)
Definition xmlgen.cpp:411
static void writeIncludeInfo(const IncludeInfo *ii, TextStream &t)
Definition xmlgen.cpp:1407
static void writeXMLHeader(TextStream &t)
Definition xmlgen.cpp:155
void writeXMLString(TextStream &t, const QCString &s)
Definition xmlgen.cpp:114
static void generateXMLSection(const Definition *d, TextStream &ti, TextStream &t, const MemberList *ml, const QCString &kind, const QCString &header=QCString(), const QCString &documentation=QCString())
Definition xmlgen.cpp:1209
static void writeInnerClasses(const ClassLinkedRefMap &cl, TextStream &t)
Definition xmlgen.cpp:1287

References FileDef::absFilePath(), ASSERT, ClassDef::baseClasses(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), classOutputFileBase(), Collaboration, ClassDef::compoundTypeString(), Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), err, generateXMLSection(), Definition::getBodyDef(), ClassDef::getClasses(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), Definition::getEndBodyLine(), ClassDef::getFileDef(), Definition::getLanguage(), ClassDef::getMemberGroups(), ClassDef::getMemberLists(), ClassDef::getQualifiers(), Definition::getStartBodyLine(), ClassDef::includeInfo(), Inheritance, insertTemplateSpecifierInScope(), ClassDef::isAbstract(), Definition::isAnonymous(), Definition::isArtificial(), QCString::isEmpty(), ClassDef::isFinal(), Definition::isHidden(), Definition::isReference(), ClassDef::isSealed(), DotClassGraph::isTrivial(), langToString(), linkifyText(), MemberList::listType(), MemberListType_detailedLists, msg(), Definition::name(), Normal, Portable::openOutputStream(), Package, Private, Protected, ClassDef::protection(), Public, Pure, qPrint(), ClassDef::requiresClause(), stripAnonymousMarkers(), stripFromPath(), ClassDef::subClasses(), ClassDef::templateMaster(), Virtual, writeIncludeInfo(), writeInnerClasses(), writeListOfAllMembers(), writeTemplateList(), DotClassGraph::writeXML(), writeXMLDocBlock(), writeXMLHeader(), writeXMLString(), and xmlSectionMapper().

Referenced by generateXML().

◆ generateXMLForConcept()

static void generateXMLForConcept ( const ConceptDef * cd,
TextStream & ti )
static

Definition at line 1620 of file xmlgen.cpp.

1621{
1622 if (cd->isReference() || cd->isHidden()) return; // skip external references.
1623
1624 ti << " <compound refid=\"" << cd->getOutputFileBase()
1625 << "\" kind=\"concept\"" << "><name>"
1626 << convertToXML(cd->name()) << "</name>\n";
1627
1628 QCString outputDirectory = Config_getString(XML_OUTPUT);
1629 QCString fileName=outputDirectory+"/"+cd->getOutputFileBase()+".xml";
1630 std::ofstream f = Portable::openOutputStream(fileName);
1631 if (!f.is_open())
1632 {
1633 err("Cannot open file %s for writing!\n",qPrint(fileName));
1634 return;
1635 }
1636 TextStream t(&f);
1637 writeXMLHeader(t);
1638 t << " <compounddef id=\"" << cd->getOutputFileBase()
1639 << "\" kind=\"concept\">\n";
1640 t << " <compoundname>";
1641 QCString nameStr = cd->name();
1642 stripAnonymousMarkers(nameStr);
1643 writeXMLString(t,nameStr);
1644 t << "</compoundname>\n";
1646 writeTemplateList(cd,t);
1647 t << " <initializer>";
1648 linkifyText(TextGeneratorXMLImpl(t),cd,cd->getFileDef(),nullptr,cd->initializer());
1649 t << " </initializer>\n";
1650 t << " <briefdescription>\n";
1651 writeXMLDocBlock(t,cd->briefFile(),cd->briefLine(),cd,nullptr,cd->briefDescription());
1652 t << " </briefdescription>\n";
1653 t << " <detaileddescription>\n";
1654 writeXMLDocBlock(t,cd->docFile(),cd->docLine(),cd,nullptr,cd->documentation());
1655 t << " </detaileddescription>\n";
1656 t << " <location file=\""
1657 << convertToXML(stripFromPath(cd->getDefFileName())) << "\" line=\""
1658 << cd->getDefLine() << "\"" << " column=\""
1659 << cd->getDefColumn() << "\"/>\n" ;
1660 t << " </compounddef>\n";
1661 t << "</doxygen>\n";
1662
1663 ti << " </compound>\n";
1664}
virtual QCString initializer() const =0
virtual const IncludeInfo * includeInfo() const =0
virtual const FileDef * getFileDef() const =0

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), err, Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), ConceptDef::getFileDef(), Definition::getOutputFileBase(), ConceptDef::includeInfo(), ConceptDef::initializer(), Definition::isHidden(), Definition::isReference(), linkifyText(), Definition::name(), Portable::openOutputStream(), qPrint(), stripAnonymousMarkers(), stripFromPath(), writeIncludeInfo(), writeTemplateList(), writeXMLDocBlock(), writeXMLHeader(), and writeXMLString().

Referenced by generateXML().

◆ generateXMLForDir()

static void generateXMLForDir ( DirDef * dd,
TextStream & ti )
static

Definition at line 1978 of file xmlgen.cpp.

1979{
1980 if (dd->isReference()) return; // skip external references
1981 ti << " <compound refid=\"" << dd->getOutputFileBase()
1982 << "\" kind=\"dir\"><name>" << convertToXML(dd->displayName())
1983 << "</name>\n";
1984
1985 QCString outputDirectory = Config_getString(XML_OUTPUT);
1986 QCString fileName=outputDirectory+"/"+dd->getOutputFileBase()+".xml";
1987 std::ofstream f = Portable::openOutputStream(fileName);
1988 if (!f.is_open())
1989 {
1990 err("Cannot open file %s for writing!\n",qPrint(fileName));
1991 return;
1992 }
1993 TextStream t(&f);
1994
1995 writeXMLHeader(t);
1996 t << " <compounddef id=\""
1997 << dd->getOutputFileBase() << "\" kind=\"dir\">\n";
1998 t << " <compoundname>" << convertToXML(dd->displayName()) << "</compoundname>\n";
1999
2000 writeInnerDirs(&dd->subDirs(),t);
2001 writeInnerFiles(dd->getFiles(),t);
2002
2003 t << " <briefdescription>\n";
2004 writeXMLDocBlock(t,dd->briefFile(),dd->briefLine(),dd,nullptr,dd->briefDescription());
2005 t << " </briefdescription>\n";
2006 t << " <detaileddescription>\n";
2007 writeXMLDocBlock(t,dd->docFile(),dd->docLine(),dd,nullptr,dd->documentation());
2008 t << " </detaileddescription>\n";
2009 t << " <location file=\"" << convertToXML(stripFromPath(dd->name())) << "\"/>\n";
2010 t << " </compounddef>\n";
2011 t << "</doxygen>\n";
2012
2013 ti << " </compound>\n";
2014}
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual const DirList & subDirs() const =0
virtual const FileList & getFiles() const =0
static void writeInnerDirs(const DirList *dl, TextStream &t)
Definition xmlgen.cpp:1395
static void writeInnerFiles(const FileList &fl, TextStream &t)
Definition xmlgen.cpp:1363

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getString, convertToXML(), Definition::displayName(), Definition::docFile(), Definition::docLine(), Definition::documentation(), err, DirDef::getFiles(), Definition::getOutputFileBase(), Definition::isReference(), Definition::name(), Portable::openOutputStream(), qPrint(), stripFromPath(), DirDef::subDirs(), writeInnerDirs(), writeInnerFiles(), writeXMLDocBlock(), and writeXMLHeader().

Referenced by generateXML().

◆ generateXMLForFile()

static void generateXMLForFile ( FileDef * fd,
TextStream & ti )
static

Definition at line 1794 of file xmlgen.cpp.

1795{
1796 // + includes files
1797 // + includedby files
1798 // + include graph
1799 // + included by graph
1800 // + contained class definitions
1801 // + contained namespace definitions
1802 // + member groups
1803 // + normal members
1804 // + brief desc
1805 // + detailed desc
1806 // + source code
1807 // + location
1808 // - number of lines
1809
1810 if (fd->isReference()) return; // skip external references
1811
1812 ti << " <compound refid=\"" << fd->getOutputFileBase()
1813 << "\" kind=\"file\"><name>" << convertToXML(fd->name())
1814 << "</name>\n";
1815
1816 QCString outputDirectory = Config_getString(XML_OUTPUT);
1817 QCString fileName=outputDirectory+"/"+fd->getOutputFileBase()+".xml";
1818 std::ofstream f = Portable::openOutputStream(fileName);
1819 if (!f.is_open())
1820 {
1821 err("Cannot open file %s for writing!\n",qPrint(fileName));
1822 return;
1823 }
1824 TextStream t(&f);
1825
1826 writeXMLHeader(t);
1827 t << " <compounddef id=\"" << fd->getOutputFileBase()
1828 << "\" kind=\"file\" language=\""
1829 << langToString(fd->getLanguage()) << "\">\n";
1830 t << " <compoundname>";
1831 writeXMLString(t,fd->name());
1832 t << "</compoundname>\n";
1833
1834 for (const auto &inc : fd->includeFileList())
1835 {
1836 t << " <includes";
1837 if (inc.fileDef && !inc.fileDef->isReference()) // TODO: support external references
1838 {
1839 t << " refid=\"" << inc.fileDef->getOutputFileBase() << "\"";
1840 }
1841 t << " local=\"" << ((inc.kind & IncludeKind_LocalMask) ? "yes" : "no") << "\">";
1842 t << inc.includeName;
1843 t << "</includes>\n";
1844 }
1845
1846 for (const auto &inc : fd->includedByFileList())
1847 {
1848 t << " <includedby";
1849 if (inc.fileDef && !inc.fileDef->isReference()) // TODO: support external references
1850 {
1851 t << " refid=\"" << inc.fileDef->getOutputFileBase() << "\"";
1852 }
1853 t << " local=\"" << ((inc.kind &IncludeKind_LocalMask) ? "yes" : "no") << "\">";
1854 t << inc.includeName;
1855 t << "</includedby>\n";
1856 }
1857
1858 DotInclDepGraph incDepGraph(fd,FALSE);
1859 if (!incDepGraph.isTrivial())
1860 {
1861 t << " <incdepgraph>\n";
1862 incDepGraph.writeXML(t);
1863 t << " </incdepgraph>\n";
1864 }
1865
1866 DotInclDepGraph invIncDepGraph(fd,TRUE);
1867 if (!invIncDepGraph.isTrivial())
1868 {
1869 t << " <invincdepgraph>\n";
1870 invIncDepGraph.writeXML(t);
1871 t << " </invincdepgraph>\n";
1872 }
1873
1877
1878 for (const auto &mg : fd->getMemberGroups())
1879 {
1880 generateXMLSection(fd,ti,t,&mg->members(),"user-defined",mg->header(),
1881 mg->documentation());
1882 }
1883
1884 for (const auto &ml : fd->getMemberLists())
1885 {
1886 if ((ml->listType()&MemberListType_declarationLists)!=0)
1887 {
1888 generateXMLSection(fd,ti,t,ml.get(),xmlSectionMapper(ml->listType()));
1889 }
1890 }
1891
1892 t << " <briefdescription>\n";
1893 writeXMLDocBlock(t,fd->briefFile(),fd->briefLine(),fd,nullptr,fd->briefDescription());
1894 t << " </briefdescription>\n";
1895 t << " <detaileddescription>\n";
1896 writeXMLDocBlock(t,fd->docFile(),fd->docLine(),fd,nullptr,fd->documentation());
1897 t << " </detaileddescription>\n";
1898 if (Config_getBool(XML_PROGRAMLISTING))
1899 {
1900 writeXMLCodeBlock(t,fd);
1901 }
1902 t << " <location file=\"" << convertToXML(stripFromPath(fd->getDefFileName())) << "\"/>\n";
1903 t << " </compounddef>\n";
1904 t << "</doxygen>\n";
1905
1906 ti << " </compound>\n";
1907}
Representation of an include dependency graph.
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
#define Config_getBool(name)
Definition config.h:33
constexpr uint32_t IncludeKind_LocalMask
Definition filedef.h:63
@ MemberListType_declarationLists
Definition types.h:104
static void writeInnerConcepts(const ConceptLinkedRefMap &cl, TextStream &t)
Definition xmlgen.cpp:1307
void writeXMLCodeBlock(TextStream &t, FileDef *fd)
Definition xmlgen.cpp:449
static void writeInnerNamespaces(const NamespaceLinkedRefMap &nl, TextStream &t)
Definition xmlgen.cpp:1331

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getBool, Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), err, FALSE, generateXMLSection(), FileDef::getClasses(), FileDef::getConcepts(), Definition::getDefFileName(), Definition::getLanguage(), FileDef::getMemberGroups(), FileDef::getMemberLists(), FileDef::getNamespaces(), Definition::getOutputFileBase(), FileDef::includedByFileList(), FileDef::includeFileList(), IncludeKind_LocalMask, Definition::isReference(), DotInclDepGraph::isTrivial(), langToString(), MemberList::listType(), MemberListType_declarationLists, Definition::name(), Portable::openOutputStream(), qPrint(), stripFromPath(), TRUE, writeInnerClasses(), writeInnerConcepts(), writeInnerNamespaces(), DotInclDepGraph::writeXML(), writeXMLCodeBlock(), writeXMLDocBlock(), writeXMLHeader(), writeXMLString(), and xmlSectionMapper().

Referenced by generateXML().

◆ generateXMLForGroup()

static void generateXMLForGroup ( const GroupDef * gd,
TextStream & ti )
static

Definition at line 1909 of file xmlgen.cpp.

1910{
1911 // + members
1912 // + member groups
1913 // + files
1914 // + classes
1915 // + namespaces
1916 // - packages
1917 // + pages
1918 // + child groups
1919 // - examples
1920 // + brief description
1921 // + detailed description
1922
1923 if (gd->isReference()) return; // skip external references
1924
1925 ti << " <compound refid=\"" << gd->getOutputFileBase()
1926 << "\" kind=\"group\"><name>" << convertToXML(gd->name()) << "</name>\n";
1927
1928 QCString outputDirectory = Config_getString(XML_OUTPUT);
1929 QCString fileName=outputDirectory+"/"+gd->getOutputFileBase()+".xml";
1930 std::ofstream f = Portable::openOutputStream(fileName);
1931 if (!f.is_open())
1932 {
1933 err("Cannot open file %s for writing!\n",qPrint(fileName));
1934 return;
1935 }
1936 TextStream t(&f);
1937
1938 writeXMLHeader(t);
1939 t << " <compounddef id=\""
1940 << gd->getOutputFileBase() << "\" kind=\"group\">\n";
1941 t << " <compoundname>" << convertToXML(gd->name()) << "</compoundname>\n";
1942 t << " <title>" << convertToXML(gd->groupTitle()) << "</title>\n";
1943
1945 writeInnerFiles(gd->getFiles(),t);
1949 writeInnerPages(gd->getPages(),t);
1951
1952 for (const auto &mg : gd->getMemberGroups())
1953 {
1954 generateXMLSection(gd,ti,t,&mg->members(),"user-defined",mg->header(),
1955 mg->documentation());
1956 }
1957
1958 for (const auto &ml : gd->getMemberLists())
1959 {
1960 if ((ml->listType()&MemberListType_declarationLists)!=0)
1961 {
1962 generateXMLSection(gd,ti,t,ml.get(),xmlSectionMapper(ml->listType()));
1963 }
1964 }
1965
1966 t << " <briefdescription>\n";
1967 writeXMLDocBlock(t,gd->briefFile(),gd->briefLine(),gd,nullptr,gd->briefDescription());
1968 t << " </briefdescription>\n";
1969 t << " <detaileddescription>\n";
1970 writeXMLDocBlock(t,gd->docFile(),gd->docLine(),gd,nullptr,gd->documentation());
1971 t << " </detaileddescription>\n";
1972 t << " </compounddef>\n";
1973 t << "</doxygen>\n";
1974
1975 ti << " </compound>\n";
1976}
virtual const GroupList & getSubGroups() const =0
virtual QCString groupTitle() const =0
virtual const FileList & getFiles() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const PageLinkedRefMap & getPages() const =0
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual const ModuleLinkedRefMap & getModules() const =0
static void writeInnerGroups(const GroupList &gl, TextStream &t)
Definition xmlgen.cpp:1385
static void writeInnerPages(const PageLinkedRefMap &pl, TextStream &t)
Definition xmlgen.cpp:1372
static void writeInnerModules(const ModuleLinkedRefMap &ml, TextStream &t)
Definition xmlgen.cpp:1319

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), err, generateXMLSection(), GroupDef::getClasses(), GroupDef::getConcepts(), GroupDef::getFiles(), GroupDef::getMemberGroups(), GroupDef::getMemberLists(), GroupDef::getModules(), GroupDef::getNamespaces(), Definition::getOutputFileBase(), GroupDef::getPages(), GroupDef::getSubGroups(), GroupDef::groupTitle(), Definition::isReference(), MemberList::listType(), MemberListType_declarationLists, Definition::name(), Portable::openOutputStream(), qPrint(), writeInnerClasses(), writeInnerConcepts(), writeInnerFiles(), writeInnerGroups(), writeInnerModules(), writeInnerNamespaces(), writeInnerPages(), writeXMLDocBlock(), writeXMLHeader(), and xmlSectionMapper().

Referenced by generateXML().

◆ generateXMLForMember()

static void generateXMLForMember ( const MemberDef * md,
TextStream & ti,
TextStream & t,
const Definition * def )
static

Definition at line 603 of file xmlgen.cpp.

604{
605
606 // + declaration/definition arg lists
607 // + reimplements
608 // + reimplementedBy
609 // + exceptions
610 // + const/volatile specifiers
611 // - examples
612 // + source definition
613 // + source references
614 // + source referenced by
615 // - body code
616 // + template arguments
617 // (templateArguments(), definitionTemplateParameterLists())
618 // - call graph
619
620 // enum values are written as part of the enum
621 if (md->memberType()==MemberType_EnumValue) return;
622 if (md->isHidden()) return;
623
624 // group members are only visible in their group
625 bool groupMember = md->getGroupDef() && def->definitionType()!=Definition::TypeGroup;
626
627 QCString memType;
628 bool isFunc=FALSE;
629 switch (md->memberType())
630 {
631 case MemberType_Define: memType="define"; break;
632 case MemberType_Function: memType="function"; isFunc=TRUE; break;
633 case MemberType_Variable: memType="variable"; break;
634 case MemberType_Typedef: memType="typedef"; break;
635 case MemberType_Enumeration: memType="enum"; break;
636 case MemberType_EnumValue: ASSERT(0); break;
637 case MemberType_Signal: memType="signal"; isFunc=TRUE; break;
638 case MemberType_Slot: memType="slot"; isFunc=TRUE; break;
639 case MemberType_Friend: memType="friend"; isFunc=TRUE; break;
640 case MemberType_DCOP: memType="dcop"; isFunc=TRUE; break;
641 case MemberType_Property: memType="property"; break;
642 case MemberType_Event: memType="event"; break;
643 case MemberType_Interface: memType="interface"; break;
644 case MemberType_Service: memType="service"; break;
645 case MemberType_Sequence: memType="sequence"; break;
646 case MemberType_Dictionary: memType="dictionary"; break;
647 }
648
649 QCString nameStr = md->name();
650 QCString typeStr = md->typeString();
651 QCString argsStr = md->argsString();
652 QCString defStr = md->definition();
653 defStr.stripPrefix("constexpr ");
654 defStr.stripPrefix("consteval ");
655 defStr.stripPrefix("constinit ");
656 stripAnonymousMarkers(typeStr);
657 stripQualifiers(typeStr);
658 if (typeStr=="auto")
659 {
660 int i=argsStr.findRev("->");
661 if (i!=-1) // move trailing return type into type and strip it from argsStr
662 {
663 typeStr=argsStr.mid(i+2).stripWhiteSpace();
664 argsStr=argsStr.left(i).stripWhiteSpace();
665 i=defStr.find("auto ");
666 if (i!=-1)
667 {
668 defStr=defStr.left(i)+typeStr+defStr.mid(i+4);
669 }
670 }
671 }
672 QCString noExceptExpr = extractNoExcept(argsStr);
673
674 stripAnonymousMarkers(nameStr);
675 ti << " <member refid=\"" << memberOutputFileBase(md)
676 << "_1" << md->anchor() << "\" kind=\"" << memType << "\"><name>"
677 << convertToXML(nameStr) << "</name></member>\n";
678
679 if (groupMember)
680 {
681 t << " <member refid=\""
683 << "_1" << md->anchor() << "\" kind=\"" << memType << "\"><name>"
684 << convertToXML(nameStr) << "</name></member>\n";
685 return;
686 }
687 else
688 {
689 t << " <memberdef kind=\"";
690 t << memType << "\" id=\"";
691 t << memberOutputFileBase(md);
692 t << "_1" // encoded ':' character (see util.cpp:convertNameToFile)
693 << md->anchor();
694 }
695 //enum { define_t,variable_t,typedef_t,enum_t,function_t } xmlType = function_t;
696
697 t << "\" prot=\"";
698 switch (md->protection())
699 {
700 case Protection::Public: t << "public"; break;
701 case Protection::Protected: t << "protected"; break;
702 case Protection::Private: t << "private"; break;
703 case Protection::Package: t << "package"; break;
704 }
705 t << "\"";
706
707 t << " static=\"";
708 if (md->isStatic()) t << "yes"; else t << "no";
709 t << "\"";
710
711 if (md->isNoDiscard())
712 {
713 t << " nodiscard=\"yes\"";
714 }
715
716 if (md->isConstExpr())
717 {
718 t << " constexpr=\"yes\"";
719 }
720
721 if (md->isConstEval())
722 {
723 t << " consteval=\"yes\"";
724 }
725
726 if (md->isConstInit())
727 {
728 t << " constinit=\"yes\"";
729 }
730
731 if (md->isExternal())
732 {
733 t << " extern=\"yes\"";
734 }
735
736 if (isFunc)
737 {
738 const ArgumentList &al = md->argumentList();
739 t << " const=\"";
740 if (al.constSpecifier()) t << "yes"; else t << "no";
741 t << "\"";
742
743 t << " explicit=\"";
744 if (md->isExplicit()) t << "yes"; else t << "no";
745 t << "\"";
746
747 t << " inline=\"";
748 if (md->isInline()) t << "yes"; else t << "no";
749 t << "\"";
750
752 {
753 t << " refqual=\"";
754 if (al.refQualifier()==RefQualifierLValue) t << "lvalue"; else t << "rvalue";
755 t << "\"";
756 }
757
758 if (md->isFinal())
759 {
760 t << " final=\"yes\"";
761 }
762
763 if (md->isSealed())
764 {
765 t << " sealed=\"yes\"";
766 }
767
768 if (md->isNew())
769 {
770 t << " new=\"yes\"";
771 }
772
773 if (md->isOptional())
774 {
775 t << " optional=\"yes\"";
776 }
777
778 if (md->isRequired())
779 {
780 t << " required=\"yes\"";
781 }
782
783 if (md->isNoExcept())
784 {
785 t << " noexcept=\"yes\"";
786 }
787
788 if (!noExceptExpr.isEmpty())
789 {
790 t << " noexceptexpression=\"" << convertToXML(noExceptExpr) << "\"";
791 }
792
793 if (al.volatileSpecifier())
794 {
795 t << " volatile=\"yes\"";
796 }
797
798 t << " virt=\"";
799 switch (md->virtualness())
800 {
801 case Specifier::Normal: t << "non-virtual"; break;
802 case Specifier::Virtual: t << "virtual"; break;
803 case Specifier::Pure: t << "pure-virtual"; break;
804 default: ASSERT(0);
805 }
806 t << "\"";
807 }
808
810 {
811 t << " strong=\"";
812 if (md->isStrong()) t << "yes"; else t << "no";
813 t << "\"";
814 }
815
816 if (md->memberType() == MemberType_Variable)
817 {
818 //ArgumentList *al = md->argumentList();
819 //t << " volatile=\"";
820 //if (al && al->volatileSpecifier) t << "yes"; else t << "no";
821
822 t << " mutable=\"";
823 if (md->isMutable()) t << "yes"; else t << "no";
824 t << "\"";
825
826 if (md->isInitonly())
827 {
828 t << " initonly=\"yes\"";
829 }
830 if (md->isAttribute())
831 {
832 t << " attribute=\"yes\"";
833 }
834 if (md->isUNOProperty())
835 {
836 t << " property=\"yes\"";
837 }
838 if (md->isReadonly())
839 {
840 t << " readonly=\"yes\"";
841 }
842 if (md->isBound())
843 {
844 t << " bound=\"yes\"";
845 }
846 if (md->isRemovable())
847 {
848 t << " removable=\"yes\"";
849 }
850 if (md->isConstrained())
851 {
852 t << " constrained=\"yes\"";
853 }
854 if (md->isTransient())
855 {
856 t << " transient=\"yes\"";
857 }
858 if (md->isMaybeVoid())
859 {
860 t << " maybevoid=\"yes\"";
861 }
862 if (md->isMaybeDefault())
863 {
864 t << " maybedefault=\"yes\"";
865 }
866 if (md->isMaybeAmbiguous())
867 {
868 t << " maybeambiguous=\"yes\"";
869 }
870 }
871 else if (md->memberType() == MemberType_Property)
872 {
873 t << " readable=\"";
874 if (md->isReadable()) t << "yes"; else t << "no";
875 t << "\"";
876
877 t << " writable=\"";
878 if (md->isWritable()) t << "yes"; else t << "no";
879 t << "\"";
880
881 t << " gettable=\"";
882 if (md->isGettable()) t << "yes"; else t << "no";
883 t << "\"";
884
885 t << " privategettable=\"";
886 if (md->isPrivateGettable()) t << "yes"; else t << "no";
887 t << "\"";
888
889 t << " protectedgettable=\"";
890 if (md->isProtectedGettable()) t << "yes"; else t << "no";
891 t << "\"";
892
893 t << " settable=\"";
894 if (md->isSettable()) t << "yes"; else t << "no";
895 t << "\"";
896
897 t << " privatesettable=\"";
898 if (md->isPrivateSettable()) t << "yes"; else t << "no";
899 t << "\"";
900
901 t << " protectedsettable=\"";
902 if (md->isProtectedSettable()) t << "yes"; else t << "no";
903 t << "\"";
904
905 if (md->isAssign() || md->isCopy() || md->isRetain() || md->isStrong() || md->isWeak())
906 {
907 t << " accessor=\"";
908 if (md->isAssign()) t << "assign";
909 else if (md->isCopy()) t << "copy";
910 else if (md->isRetain()) t << "retain";
911 else if (md->isStrong()) t << "strong";
912 else if (md->isWeak()) t << "weak";
913 t << "\"";
914 }
915 }
916 else if (md->memberType() == MemberType_Event)
917 {
918 t << " add=\"";
919 if (md->isAddable()) t << "yes"; else t << "no";
920 t << "\"";
921
922 t << " remove=\"";
923 if (md->isRemovable()) t << "yes"; else t << "no";
924 t << "\"";
925
926 t << " raise=\"";
927 if (md->isRaisable()) t << "yes"; else t << "no";
928 t << "\"";
929 }
930
931 t << ">\n";
932
933 if (md->memberType()!=MemberType_Define &&
935 )
936 {
938 t << " <type>";
939 linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,typeStr);
940 t << "</type>\n";
941 if (md->isTypeAlias())
942 {
943 defStr+=" = "+md->initializer();
944 }
945 stripAnonymousMarkers(defStr);
946 t << " <definition>" << convertToXML(defStr) << "</definition>\n";
947 t << " <argsstring>" << convertToXML(argsStr) << "</argsstring>\n";
948 }
949
951 {
952 t << " <type>";
954 t << "</type>\n";
955 }
956
957 QCString qualifiedNameStr = md->qualifiedName();
958 stripAnonymousMarkers(qualifiedNameStr);
959 t << " <name>" << convertToXML(nameStr) << "</name>\n";
960 if (nameStr!=qualifiedNameStr)
961 {
962 t << " <qualifiedname>" << convertToXML(qualifiedNameStr) << "</qualifiedname>\n";
963 }
964
965 if (md->memberType() == MemberType_Property)
966 {
967 if (md->isReadable())
968 t << " <read>" << convertToXML(md->getReadAccessor()) << "</read>\n";
969 if (md->isWritable())
970 t << " <write>" << convertToXML(md->getWriteAccessor()) << "</write>\n";
971 }
972
974 {
975 QCString bitfield = md->bitfieldString();
976 if (bitfield.at(0)==':') bitfield=bitfield.mid(1);
977 t << " <bitfield>" << convertToXML(bitfield) << "</bitfield>\n";
978 }
979
980 const MemberDef *rmd = md->reimplements();
981 if (rmd)
982 {
983 t << " <reimplements refid=\""
984 << memberOutputFileBase(rmd) << "_1" << rmd->anchor() << "\">"
985 << convertToXML(rmd->name()) << "</reimplements>\n";
986 }
987 for (const auto &rbmd : md->reimplementedBy())
988 {
989 t << " <reimplementedby refid=\""
990 << memberOutputFileBase(rbmd) << "_1" << rbmd->anchor() << "\">"
991 << convertToXML(rbmd->name()) << "</reimplementedby>\n";
992 }
993
994 for (const auto &qmd : md->getQualifiers())
995 {
996 t << " <qualifier>" << convertToXML(qmd.c_str()) << "</qualifier>\n";
997 }
998
999 if (md->isFriendClass()) // for friend classes we show a link to the class as a "parameter"
1000 {
1001 t << " <param>\n";
1002 t << " <type>";
1003 linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,nameStr);
1004 t << "</type>\n";
1005 t << " </param>\n";
1006 }
1007 else if (isFunc) //function
1008 {
1009 const ArgumentList &declAl = md->declArgumentList();
1010 const ArgumentList &defAl = md->argumentList();
1011 bool isFortran = md->getLanguage()==SrcLangExt::Fortran;
1012 if (declAl.hasParameters())
1013 {
1014 auto defIt = defAl.begin();
1015 for (const Argument &a : declAl)
1016 {
1017 //const Argument *defArg = defAli.current();
1018 const Argument *defArg = nullptr;
1019 if (defIt!=defAl.end())
1020 {
1021 defArg = &(*defIt);
1022 ++defIt;
1023 }
1024 t << " <param>\n";
1025 if (!a.attrib.isEmpty())
1026 {
1027 t << " <attributes>";
1028 writeXMLString(t,a.attrib);
1029 t << "</attributes>\n";
1030 }
1031 if (isFortran && defArg && !defArg->type.isEmpty())
1032 {
1033 t << " <type>";
1034 linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,defArg->type);
1035 t << "</type>\n";
1036 }
1037 else if (!a.type.isEmpty())
1038 {
1039 t << " <type>";
1040 linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a.type);
1041 t << "</type>\n";
1042 }
1043 if (!a.name.isEmpty())
1044 {
1045 t << " <declname>";
1046 writeXMLString(t,a.name);
1047 t << "</declname>\n";
1048 }
1049 if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
1050 {
1051 t << " <defname>";
1052 writeXMLString(t,defArg->name);
1053 t << "</defname>\n";
1054 }
1055 if (!a.array.isEmpty())
1056 {
1057 t << " <array>";
1058 writeXMLString(t,a.array);
1059 t << "</array>\n";
1060 }
1061 if (!a.defval.isEmpty())
1062 {
1063 t << " <defval>";
1064 linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a.defval);
1065 t << "</defval>\n";
1066 }
1067 if (defArg && defArg->hasDocumentation())
1068 {
1069 t << " <briefdescription>";
1071 md->getOuterScope(),md,defArg->docs);
1072 t << "</briefdescription>\n";
1073 }
1074 t << " </param>\n";
1075 }
1076 }
1077 }
1078 else if (md->memberType()==MemberType_Define &&
1079 !md->argsString().isEmpty()) // define
1080 {
1081 if (md->argumentList().empty()) // special case for "foo()" to
1082 // distinguish it from "foo".
1083 {
1084 t << " <param></param>\n";
1085 }
1086 else
1087 {
1088 for (const Argument &a : md->argumentList())
1089 {
1090 t << " <param><defname>" << a.type << "</defname></param>\n";
1091 }
1092 }
1093 }
1094 if (!md->requiresClause().isEmpty())
1095 {
1096 t << " <requiresclause>";
1098 t << " </requiresclause>\n";
1099 }
1100
1101 if (!md->isTypeAlias() && (md->hasOneLineInitializer() || md->hasMultiLineInitializer()))
1102 {
1103 t << " <initializer>";
1105 t << "</initializer>\n";
1106 }
1107
1108 if (!md->excpString().isEmpty())
1109 {
1110 t << " <exceptions>";
1112 t << "</exceptions>\n";
1113 }
1114
1115 if (md->memberType()==MemberType_Enumeration) // enum
1116 {
1117 for (const auto &emd : md->enumFieldList())
1118 {
1119 ti << " <member refid=\"" << memberOutputFileBase(md)
1120 << "_1" << emd->anchor() << "\" kind=\"enumvalue\"><name>"
1121 << convertToXML(emd->name()) << "</name></member>\n";
1122
1123 t << " <enumvalue id=\"" << memberOutputFileBase(md) << "_1"
1124 << emd->anchor() << "\" prot=\"";
1125 switch (emd->protection())
1126 {
1127 case Protection::Public: t << "public"; break;
1128 case Protection::Protected: t << "protected"; break;
1129 case Protection::Private: t << "private"; break;
1130 case Protection::Package: t << "package"; break;
1131 }
1132 t << "\">\n";
1133 t << " <name>";
1134 writeXMLString(t,emd->name());
1135 t << "</name>\n";
1136 if (!emd->initializer().isEmpty())
1137 {
1138 t << " <initializer>";
1139 writeXMLString(t,emd->initializer());
1140 t << "</initializer>\n";
1141 }
1142 t << " <briefdescription>\n";
1143 writeXMLDocBlock(t,emd->briefFile(),emd->briefLine(),emd->getOuterScope(),emd,emd->briefDescription());
1144 t << " </briefdescription>\n";
1145 t << " <detaileddescription>\n";
1146 writeXMLDocBlock(t,emd->docFile(),emd->docLine(),emd->getOuterScope(),emd,emd->documentation());
1147 t << " </detaileddescription>\n";
1148 t << " </enumvalue>\n";
1149 }
1150 }
1151 t << " <briefdescription>\n";
1153 t << " </briefdescription>\n";
1154 t << " <detaileddescription>\n";
1155 writeXMLDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
1156 t << " </detaileddescription>\n";
1157 t << " <inbodydescription>\n";
1159 t << " </inbodydescription>\n";
1160 if (md->getDefLine()!=-1)
1161 {
1162 t << " <location file=\""
1163 << convertToXML(stripFromPath(md->getDefFileName())) << "\" line=\""
1164 << md->getDefLine() << "\" column=\""
1165 << md->getDefColumn() << "\"" ;
1166 if (md->getStartBodyLine()!=-1)
1167 {
1168 const FileDef *bodyDef = md->getBodyDef();
1169 if (bodyDef)
1170 {
1171 t << " bodyfile=\"" << convertToXML(stripFromPath(bodyDef->absFilePath())) << "\"";
1172 }
1173 t << " bodystart=\"" << md->getStartBodyLine() << "\" bodyend=\""
1174 << md->getEndBodyLine() << "\"";
1175 }
1176 if (md->getDeclLine()!=-1)
1177 {
1178 t << " declfile=\"" << convertToXML(stripFromPath(md->getDeclFileName())) << "\" declline=\""
1179 << md->getDeclLine() << "\" declcolumn=\""
1180 << md->getDeclColumn() << "\"";
1181 }
1182 t << "/>\n";
1183 }
1184
1185 //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
1186 auto refList = md->getReferencesMembers();
1187 for (const auto &refmd : refList)
1188 {
1189 writeMemberReference(t,def,refmd,"references");
1190 }
1191 auto refByList = md->getReferencedByMembers();
1192 for (const auto &refmd : refByList)
1193 {
1194 writeMemberReference(t,def,refmd,"referencedby");
1195 }
1196
1197 t << " </memberdef>\n";
1198}
@ RefQualifierNone
Definition arguments.h:48
@ RefQualifierLValue
Definition arguments.h:49
This class represents an function or template argument list.
Definition arguments.h:60
RefQualifierType refQualifier() const
Definition arguments.h:109
iterator end()
Definition arguments.h:87
bool hasParameters() const
Definition arguments.h:69
bool constSpecifier() const
Definition arguments.h:104
bool empty() const
Definition arguments.h:92
iterator begin()
Definition arguments.h:86
bool volatileSpecifier() const
Definition arguments.h:105
virtual DefType definitionType() const =0
virtual QCString anchor() const =0
virtual int inbodyLine() const =0
virtual QCString qualifiedName() const =0
virtual Definition * getOuterScope() const =0
virtual const MemberVector & getReferencedByMembers() const =0
virtual const MemberVector & getReferencesMembers() const =0
virtual QCString inbodyDocumentation() const =0
A model of a class/file/namespace member symbol.
Definition memberdef.h:48
virtual QCString typeString() const =0
virtual bool isConstExpr() const =0
virtual bool isConstEval() const =0
virtual bool isInitonly() const =0
virtual bool isNoExcept() const =0
virtual QCString requiresClause() const =0
virtual bool isAssign() const =0
virtual bool isExplicit() const =0
virtual bool isNew() const =0
virtual bool isMaybeVoid() const =0
virtual bool isSealed() const =0
virtual QCString definition() const =0
virtual QCString enumBaseType() const =0
virtual bool isConstInit() const =0
virtual QCString excpString() const =0
virtual const GroupDef * getGroupDef() const =0
virtual bool isSettable() const =0
virtual bool isRetain() const =0
virtual bool isAddable() const =0
virtual const FileDef * getFileDef() const =0
virtual bool isInline() const =0
virtual const ArgumentList & argumentList() const =0
virtual bool isWritable() const =0
virtual bool isMaybeAmbiguous() const =0
virtual bool isPrivateGettable() const =0
virtual bool isRequired() const =0
virtual bool isAttribute() const =0
virtual bool isExternal() const =0
virtual bool isCopy() const =0
virtual int getDeclLine() const =0
virtual bool isTypeAlias() const =0
virtual int getDeclColumn() const =0
virtual bool isStatic() const =0
virtual const MemberDef * reimplements() const =0
virtual bool isMaybeDefault() const =0
virtual QCString getWriteAccessor() const =0
virtual bool isPrivateSettable() const =0
virtual QCString bitfieldString() const =0
virtual bool isRaisable() const =0
virtual bool isRemovable() const =0
virtual bool isConstrained() const =0
virtual bool isReadonly() const =0
virtual bool isBound() const =0
virtual QCString getDeclFileName() const =0
virtual bool isProtectedSettable() const =0
virtual bool isProtectedGettable() const =0
virtual bool hasOneLineInitializer() const =0
virtual bool isTransient() const =0
virtual bool hasMultiLineInitializer() const =0
virtual Protection protection() const =0
virtual bool isOptional() const =0
virtual QCString getReadAccessor() const =0
virtual bool isGettable() const =0
virtual MemberType memberType() const =0
virtual bool isReadable() const =0
virtual bool isWeak() const =0
virtual bool isNoDiscard() const =0
virtual bool isStrong() const =0
virtual QCString argsString() const =0
virtual Specifier virtualness(int count=0) const =0
virtual bool isUNOProperty() const =0
virtual bool isFinal() const =0
virtual const ArgumentList & declArgumentList() const =0
virtual bool isMutable() const =0
virtual bool isFriendClass() const =0
virtual const QCString & initializer() const =0
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:558
QCString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition qcstring.h:238
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition qcstring.cpp:91
bool stripPrefix(const QCString &prefix)
Definition qcstring.h:191
This class contains the information about the argument of a function or template.
Definition arguments.h:27
QCString type
Definition arguments.h:37
QCString name
Definition arguments.h:39
QCString docs
Definition arguments.h:42
bool hasDocumentation() const
Definition arguments.h:31
@ MemberType_Sequence
Definition types.h:296
@ MemberType_Friend
Definition types.h:290
@ MemberType_Slot
Definition types.h:289
@ MemberType_Enumeration
Definition types.h:286
@ MemberType_Interface
Definition types.h:294
@ MemberType_Service
Definition types.h:295
@ MemberType_Signal
Definition types.h:288
@ MemberType_Dictionary
Definition types.h:297
@ MemberType_Variable
Definition types.h:284
@ MemberType_Event
Definition types.h:293
@ MemberType_DCOP
Definition types.h:291
@ MemberType_Function
Definition types.h:283
@ MemberType_Define
Definition types.h:282
@ MemberType_Property
Definition types.h:292
@ MemberType_EnumValue
Definition types.h:287
@ MemberType_Typedef
Definition types.h:285
static void writeMemberReference(TextStream &t, const Definition *def, const MemberDef *rmd, const QCString &tagName)
Definition xmlgen.cpp:474
static QCString memberOutputFileBase(const MemberDef *md)
Definition xmlgen.cpp:549
static void writeMemberTemplateLists(const MemberDef *md, TextStream &t)
Definition xmlgen.cpp:406
static void stripQualifiers(QCString &typeStr)
Definition xmlgen.cpp:524
static QCString extractNoExcept(QCString &argsStr)
Definition xmlgen.cpp:559

References FileDef::absFilePath(), Definition::anchor(), MemberDef::argsString(), MemberDef::argumentList(), ASSERT, QCString::at(), ArgumentList::begin(), MemberDef::bitfieldString(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), ArgumentList::constSpecifier(), convertToXML(), MemberDef::declArgumentList(), MemberDef::definition(), Definition::definitionType(), Definition::docFile(), Definition::docLine(), Argument::docs, Definition::documentation(), ArgumentList::empty(), ArgumentList::end(), MemberDef::enumBaseType(), MemberDef::enumFieldList(), MemberDef::excpString(), extractNoExcept(), FALSE, QCString::find(), QCString::findRev(), Fortran, Definition::getBodyDef(), MemberDef::getDeclColumn(), MemberDef::getDeclFileName(), MemberDef::getDeclLine(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), Definition::getEndBodyLine(), MemberDef::getFileDef(), MemberDef::getGroupDef(), Definition::getLanguage(), Definition::getOuterScope(), Definition::getOutputFileBase(), MemberDef::getQualifiers(), MemberDef::getReadAccessor(), Definition::getReferencedByMembers(), Definition::getReferencesMembers(), Definition::getStartBodyLine(), MemberDef::getWriteAccessor(), Argument::hasDocumentation(), MemberDef::hasMultiLineInitializer(), MemberDef::hasOneLineInitializer(), ArgumentList::hasParameters(), Definition::inbodyDocumentation(), Definition::inbodyLine(), MemberDef::initializer(), MemberDef::isAddable(), MemberDef::isAssign(), MemberDef::isAttribute(), MemberDef::isBound(), MemberDef::isConstEval(), MemberDef::isConstExpr(), MemberDef::isConstInit(), MemberDef::isConstrained(), MemberDef::isCopy(), QCString::isEmpty(), MemberDef::isExplicit(), MemberDef::isExternal(), MemberDef::isFinal(), MemberDef::isFriendClass(), MemberDef::isGettable(), Definition::isHidden(), MemberDef::isInitonly(), MemberDef::isInline(), MemberDef::isMaybeAmbiguous(), MemberDef::isMaybeDefault(), MemberDef::isMaybeVoid(), MemberDef::isMutable(), MemberDef::isNew(), MemberDef::isNoDiscard(), MemberDef::isNoExcept(), MemberDef::isOptional(), MemberDef::isPrivateGettable(), MemberDef::isPrivateSettable(), MemberDef::isProtectedGettable(), MemberDef::isProtectedSettable(), MemberDef::isRaisable(), MemberDef::isReadable(), MemberDef::isReadonly(), MemberDef::isRemovable(), MemberDef::isRequired(), MemberDef::isRetain(), MemberDef::isSealed(), MemberDef::isSettable(), MemberDef::isStatic(), MemberDef::isStrong(), MemberDef::isTransient(), MemberDef::isTypeAlias(), MemberDef::isUNOProperty(), MemberDef::isWeak(), MemberDef::isWritable(), QCString::left(), linkifyText(), memberOutputFileBase(), MemberDef::memberType(), MemberType_DCOP, MemberType_Define, MemberType_Dictionary, MemberType_Enumeration, MemberType_EnumValue, MemberType_Event, MemberType_Friend, MemberType_Function, MemberType_Interface, MemberType_Property, MemberType_Sequence, MemberType_Service, MemberType_Signal, MemberType_Slot, MemberType_Typedef, MemberType_Variable, QCString::mid(), Argument::name, Definition::name(), Normal, Package, Private, Protected, MemberDef::protection(), Public, Pure, Definition::qualifiedName(), ArgumentList::refQualifier(), RefQualifierLValue, RefQualifierNone, MemberDef::reimplementedBy(), MemberDef::reimplements(), MemberDef::requiresClause(), stripAnonymousMarkers(), stripFromPath(), QCString::stripPrefix(), stripQualifiers(), QCString::stripWhiteSpace(), TRUE, Argument::type, Definition::TypeGroup, MemberDef::typeString(), Virtual, MemberDef::virtualness(), ArgumentList::volatileSpecifier(), writeMemberReference(), writeMemberTemplateLists(), writeXMLDocBlock(), and writeXMLString().

Referenced by generateXMLSection().

◆ generateXMLForModule()

static void generateXMLForModule ( const ModuleDef * mod,
TextStream & ti )
static

Definition at line 1666 of file xmlgen.cpp.

1667{
1668 if (mod->isReference() || mod->isHidden() || !mod->isPrimaryInterface()) return;
1669 ti << " <compound refid=\"" << mod->getOutputFileBase()
1670 << "\" kind=\"module\"" << "><name>"
1671 << convertToXML(mod->name()) << "</name>\n";
1672
1673 QCString outputDirectory = Config_getString(XML_OUTPUT);
1674 QCString fileName=outputDirectory+"/"+mod->getOutputFileBase()+".xml";
1675 std::ofstream f = Portable::openOutputStream(fileName);
1676 if (!f.is_open())
1677 {
1678 err("Cannot open file %s for writing!\n",qPrint(fileName));
1679 return;
1680 }
1681 TextStream t(&f);
1682 writeXMLHeader(t);
1683 t << " <compounddef id=\"" << mod->getOutputFileBase()
1684 << "\" kind=\"module\">\n";
1685 t << " <compoundname>";
1686 writeXMLString(t,mod->name());
1687 t << "</compoundname>\n";
1688 writeInnerFiles(mod->getUsedFiles(),t);
1689 writeInnerClasses(mod->getClasses(),t);
1691 for (const auto &ml : mod->getMemberLists())
1692 {
1693 if ((ml->listType()&MemberListType_declarationLists)!=0)
1694 {
1695 generateXMLSection(mod,ti,t,ml.get(),xmlSectionMapper(ml->listType()));
1696 }
1697 }
1698 for (const auto &mg : mod->getMemberGroups())
1699 {
1700 generateXMLSection(mod,ti,t,&mg->members(),"user-defined",mg->header(),
1701 mg->documentation());
1702 }
1703 t << " <briefdescription>\n";
1704 writeXMLDocBlock(t,mod->briefFile(),mod->briefLine(),mod,nullptr,mod->briefDescription());
1705 t << " </briefdescription>\n";
1706 t << " <detaileddescription>\n";
1707 writeXMLDocBlock(t,mod->docFile(),mod->docLine(),mod,nullptr,mod->documentation());
1708 t << " </detaileddescription>\n";
1709 writeExports(mod->getExports(),t);
1710 t << " <location file=\""
1711 << convertToXML(stripFromPath(mod->getDefFileName())) << "\" line=\""
1712 << mod->getDefLine() << "\"" << " column=\""
1713 << mod->getDefColumn() << "\"/>\n" ;
1714 t << " </compounddef>\n";
1715 t << "</doxygen>\n";
1716
1717 ti << " </compound>\n";
1718
1719}
virtual bool isPrimaryInterface() const =0
virtual FileList getUsedFiles() const =0
virtual const ImportInfoMap & getExports() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
static void writeExports(const ImportInfoMap &exportMap, TextStream &t)
Definition xmlgen.cpp:1344

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), err, generateXMLSection(), ModuleDef::getClasses(), ModuleDef::getConcepts(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), ModuleDef::getExports(), ModuleDef::getMemberGroups(), ModuleDef::getMemberLists(), Definition::getOutputFileBase(), ModuleDef::getUsedFiles(), Definition::isHidden(), ModuleDef::isPrimaryInterface(), Definition::isReference(), MemberList::listType(), MemberListType_declarationLists, Definition::name(), Portable::openOutputStream(), qPrint(), stripFromPath(), writeExports(), writeInnerClasses(), writeInnerConcepts(), writeInnerFiles(), writeXMLDocBlock(), writeXMLHeader(), writeXMLString(), and xmlSectionMapper().

Referenced by generateXML().

◆ generateXMLForNamespace()

static void generateXMLForNamespace ( const NamespaceDef * nd,
TextStream & ti )
static

Definition at line 1721 of file xmlgen.cpp.

1722{
1723 // + contained class definitions
1724 // + contained namespace definitions
1725 // + member groups
1726 // + normal members
1727 // + brief desc
1728 // + detailed desc
1729 // + location
1730 // - files containing (parts of) the namespace definition
1731
1732 if (nd->isReference() || nd->isHidden()) return; // skip external references
1733
1734 ti << " <compound refid=\"" << nd->getOutputFileBase()
1735 << "\" kind=\"namespace\"" << "><name>"
1736 << convertToXML(nd->name()) << "</name>\n";
1737
1738 QCString outputDirectory = Config_getString(XML_OUTPUT);
1739 QCString fileName=outputDirectory+"/"+nd->getOutputFileBase()+".xml";
1740 std::ofstream f = Portable::openOutputStream(fileName);
1741 if (!f.is_open())
1742 {
1743 err("Cannot open file %s for writing!\n",qPrint(fileName));
1744 return;
1745 }
1746 TextStream t(&f);
1747
1748 writeXMLHeader(t);
1749 t << " <compounddef id=\"" << nd->getOutputFileBase()
1750 << "\" kind=\"namespace\" "
1751 << (nd->isInline()?"inline=\"yes\" ":"")
1752 << "language=\""
1753 << langToString(nd->getLanguage()) << "\">\n";
1754 t << " <compoundname>";
1755 QCString nameStr = nd->name();
1756 stripAnonymousMarkers(nameStr);
1757 writeXMLString(t,nameStr);
1758 t << "</compoundname>\n";
1759
1763
1764 for (const auto &mg : nd->getMemberGroups())
1765 {
1766 generateXMLSection(nd,ti,t,&mg->members(),"user-defined",mg->header(),
1767 mg->documentation());
1768 }
1769
1770 for (const auto &ml : nd->getMemberLists())
1771 {
1772 if ((ml->listType()&MemberListType_declarationLists)!=0)
1773 {
1774 generateXMLSection(nd,ti,t,ml.get(),xmlSectionMapper(ml->listType()));
1775 }
1776 }
1777
1778 t << " <briefdescription>\n";
1779 writeXMLDocBlock(t,nd->briefFile(),nd->briefLine(),nd,nullptr,nd->briefDescription());
1780 t << " </briefdescription>\n";
1781 t << " <detaileddescription>\n";
1782 writeXMLDocBlock(t,nd->docFile(),nd->docLine(),nd,nullptr,nd->documentation());
1783 t << " </detaileddescription>\n";
1784 t << " <location file=\""
1785 << convertToXML(stripFromPath(nd->getDefFileName())) << "\" line=\""
1786 << nd->getDefLine() << "\"" << " column=\""
1787 << nd->getDefColumn() << "\"/>\n" ;
1788 t << " </compounddef>\n";
1789 t << "</doxygen>\n";
1790
1791 ti << " </compound>\n";
1792}
virtual ConceptLinkedRefMap getConcepts() const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual bool isInline() const =0
virtual ClassLinkedRefMap getClasses() const =0

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getString, convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), err, generateXMLSection(), NamespaceDef::getClasses(), NamespaceDef::getConcepts(), Definition::getDefColumn(), Definition::getDefFileName(), Definition::getDefLine(), Definition::getLanguage(), NamespaceDef::getMemberGroups(), NamespaceDef::getMemberLists(), NamespaceDef::getNamespaces(), Definition::getOutputFileBase(), Definition::isHidden(), NamespaceDef::isInline(), Definition::isReference(), langToString(), MemberList::listType(), MemberListType_declarationLists, Definition::name(), Portable::openOutputStream(), qPrint(), stripAnonymousMarkers(), stripFromPath(), writeInnerClasses(), writeInnerConcepts(), writeInnerNamespaces(), writeXMLDocBlock(), writeXMLHeader(), writeXMLString(), and xmlSectionMapper().

Referenced by generateXML().

◆ generateXMLForPage()

static void generateXMLForPage ( PageDef * pd,
TextStream & ti,
bool isExample )
static

Definition at line 2016 of file xmlgen.cpp.

2017{
2018 // + name
2019 // + title
2020 // + documentation
2021 // + location
2022
2023 const char *kindName = isExample ? "example" : "page";
2024
2025 if (pd->isReference()) return;
2026
2027 QCString pageName = pd->getOutputFileBase();
2028 if (pd->getGroupDef())
2029 {
2030 pageName+=QCString("_")+pd->name();
2031 }
2032 if (pageName=="index") pageName="indexpage"; // to prevent overwriting the generated index page.
2033
2034 ti << " <compound refid=\"" << pageName
2035 << "\" kind=\"" << kindName << "\"><name>" << convertToXML(pd->name())
2036 << "</name>\n";
2037
2038 QCString outputDirectory = Config_getString(XML_OUTPUT);
2039 QCString fileName=outputDirectory+"/"+pageName+".xml";
2040 std::ofstream f = Portable::openOutputStream(fileName);
2041 if (!f.is_open())
2042 {
2043 err("Cannot open file %s for writing!\n",qPrint(fileName));
2044 return;
2045 }
2046 TextStream t(&f);
2047
2048 writeXMLHeader(t);
2049 t << " <compounddef id=\"" << pageName;
2050 t << "\" kind=\"" << kindName << "\">\n";
2051 t << " <compoundname>" << convertToXML(pd->name())
2052 << "</compoundname>\n";
2053
2054 if (pd==Doxygen::mainPage.get()) // main page is special
2055 {
2056 QCString title;
2057 if (mainPageHasTitle())
2058 {
2060 }
2061 else
2062 {
2063 title = Config_getString(PROJECT_NAME);
2064 }
2065 t << " <title>" << convertToXML(convertCharEntitiesToUTF8(title))
2066 << "</title>\n";
2067 }
2068 else
2069 {
2070 const SectionInfo *si = SectionManager::instance().find(pd->name());
2071 if (si)
2072 {
2073 t << " <title>" << convertToXML(filterTitle(convertCharEntitiesToUTF8(si->title())))
2074 << "</title>\n";
2075 }
2076 }
2078 const SectionRefs &sectionRefs = pd->getSectionRefs();
2079 if (pd->localToc().isXmlEnabled() && !sectionRefs.empty())
2080 {
2081 t << " <tableofcontents>\n";
2082 int level=1;
2083 int maxLevel = pd->localToc().xmlLevel();
2084 BoolVector inLi(maxLevel+1,false);
2085 for (const SectionInfo *si : sectionRefs)
2086 {
2087 if (si->type().isSection())
2088 {
2089 //printf(" level=%d title=%s\n",level,qPrint(si->title));
2090 int nextLevel = si->type().level();
2091 if (nextLevel>level)
2092 {
2093 for (int l=level;l<nextLevel;l++)
2094 {
2095 if (l < maxLevel) t << " <tableofcontents>\n";
2096 }
2097 }
2098 else if (nextLevel<level)
2099 {
2100 for (int l=level;l>nextLevel;l--)
2101 {
2102 if (l <= maxLevel && inLi[l]) t << " </tocsect>\n";
2103 inLi[l]=false;
2104 if (l <= maxLevel) t << " </tableofcontents>\n";
2105 }
2106 }
2107 if (nextLevel <= maxLevel)
2108 {
2109 if (inLi[nextLevel]) t << " </tocsect>\n";
2110 QCString titleDoc = convertToXML(si->title());
2111 QCString label = convertToXML(si->label());
2112 if (titleDoc.isEmpty()) titleDoc = label;
2113 t << " <tocsect>\n";
2114 t << " <name>" << titleDoc << "</name>\n";
2115 t << " <reference>" << convertToXML(pageName) << "_1" << label << "</reference>\n";
2116 inLi[nextLevel]=true;
2117 level = nextLevel;
2118 }
2119 }
2120 }
2121 while (level>1 && level <= maxLevel)
2122 {
2123 if (inLi[level]) t << " </tocsect>\n";
2124 inLi[level]=false;
2125 t << " </tableofcontents>\n";
2126 level--;
2127 }
2128 if (level <= maxLevel && inLi[level]) t << " </tocsect>\n";
2129 inLi[level]=false;
2130 t << " </tableofcontents>\n";
2131 }
2132 t << " <briefdescription>\n";
2133 writeXMLDocBlock(t,pd->briefFile(),pd->briefLine(),pd,nullptr,pd->briefDescription());
2134 t << " </briefdescription>\n";
2135 t << " <detaileddescription>\n";
2136 if (isExample)
2137 {
2138 writeXMLDocBlock(t,pd->docFile(),pd->docLine(),pd,nullptr,
2139 pd->documentation()+"\n\\include "+pd->name());
2140 }
2141 else
2142 {
2143 writeXMLDocBlock(t,pd->docFile(),pd->docLine(),pd,nullptr,
2144 pd->documentation());
2145 }
2146 t << " </detaileddescription>\n";
2147
2148 t << " <location file=\"" << convertToXML(stripFromPath(pd->getDefFileName())) << "\"/>\n";
2149
2150 t << " </compounddef>\n";
2151 t << "</doxygen>\n";
2152
2153 ti << " </compound>\n";
2154}
virtual const SectionRefs & getSectionRefs() const =0
returns the section dictionary, only of importance for pagedef
const T * find(const std::string &key) const
Find an object given the key.
Definition linkedmap.h:47
bool isXmlEnabled() const
Definition types.h:346
int xmlLevel() const
Definition types.h:351
virtual const PageLinkedRefMap & getSubPages() const =0
virtual LocalToc localToc() const =0
virtual const GroupDef * getGroupDef() const =0
class that provide information about a section.
Definition section.h:57
QCString label() const
Definition section.h:68
QCString title() const
Definition section.h:69
SectionType type() const
Definition section.h:70
static SectionManager & instance()
returns a reference to the singleton
Definition section.h:175
class that represents a list of constant references to sections.
Definition section.h:102
bool empty() const
Definition section.h:124
constexpr bool isSection() const
Definition section.h:46
constexpr int level() const
Definition section.h:45
std::vector< bool > BoolVector
Definition containers.h:36
bool mainPageHasTitle()
Definition util.cpp:6634
QCString filterTitle(const QCString &title)
Definition util.cpp:5843
QCString convertCharEntitiesToUTF8(const QCString &str)
Definition util.cpp:4337

References Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), Config_getString, convertCharEntitiesToUTF8(), convertToXML(), Definition::docFile(), Definition::docLine(), Definition::documentation(), SectionRefs::empty(), err, filterTitle(), LinkedMap< T, Hash, KeyEqual, Map >::find(), Definition::getDefFileName(), PageDef::getGroupDef(), Definition::getOutputFileBase(), Definition::getSectionRefs(), PageDef::getSubPages(), SectionManager::instance(), QCString::isEmpty(), Definition::isReference(), LocalToc::isXmlEnabled(), PageDef::localToc(), Doxygen::mainPage, mainPageHasTitle(), Definition::name(), Portable::openOutputStream(), qPrint(), stripFromPath(), SectionInfo::title(), writeInnerPages(), writeXMLDocBlock(), writeXMLHeader(), and LocalToc::xmlLevel().

Referenced by generateXML().

◆ generateXMLSection()

static void generateXMLSection ( const Definition * d,
TextStream & ti,
TextStream & t,
const MemberList * ml,
const QCString & kind,
const QCString & header = QCString(),
const QCString & documentation = QCString() )
static

Definition at line 1209 of file xmlgen.cpp.

1212{
1213 if (ml==nullptr) return;
1214 int count=0;
1215 for (const auto &md : *ml)
1216 {
1217 if (memberVisible(d,md) && (md->memberType()!=MemberType_EnumValue) &&
1218 !md->isHidden())
1219 {
1220 count++;
1221 }
1222 }
1223 if (count==0) return; // empty list
1224
1225 t << " <sectiondef kind=\"" << kind << "\">\n";
1226 if (!header.isEmpty())
1227 {
1228 t << " <header>" << convertToXML(header) << "</header>\n";
1229 }
1230 if (!documentation.isEmpty())
1231 {
1232 t << " <description>";
1233 writeXMLDocBlock(t,d->docFile(),d->docLine(),d,nullptr,documentation);
1234 t << "</description>\n";
1235 }
1236 for (const auto &md : *ml)
1237 {
1238 if (memberVisible(d,md))
1239 {
1240 generateXMLForMember(md,ti,t,d);
1241 }
1242 }
1243 t << " </sectiondef>\n";
1244}
static bool memberVisible(const Definition *d, const MemberDef *md)
Definition xmlgen.cpp:1202
static void generateXMLForMember(const MemberDef *md, TextStream &ti, TextStream &t, const Definition *def)
Definition xmlgen.cpp:603

References convertToXML(), Definition::docFile(), Definition::docLine(), generateXMLForMember(), MemberType_EnumValue, memberVisible(), and writeXMLDocBlock().

Referenced by generateXMLForClass(), generateXMLForFile(), generateXMLForGroup(), generateXMLForModule(), and generateXMLForNamespace().

◆ memberOutputFileBase()

static QCString memberOutputFileBase ( const MemberDef * md)
static

Definition at line 549 of file xmlgen.cpp.

550{
551 //bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
552 //if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0)
553 // return md->getClassDef()->getXmlOutputFileBase();
554 //else
555 // return md->getOutputFileBase();
556 return md->getOutputFileBase();
557}

References Definition::getOutputFileBase().

Referenced by generateXMLForMember(), and writeListOfAllMembers().

◆ memberVisible()

static bool memberVisible ( const Definition * d,
const MemberDef * md )
static

Definition at line 1202 of file xmlgen.cpp.

1203{
1204 return Config_getBool(XML_NS_MEMB_FILE_SCOPE) ||
1206 md->getNamespaceDef()==nullptr;
1207}
virtual const NamespaceDef * getNamespaceDef() const =0

References Config_getBool, Definition::definitionType(), MemberDef::getNamespaceDef(), and Definition::TypeFile.

Referenced by generateXMLSection().

◆ stripAnonymousMarkers()

static void stripAnonymousMarkers ( QCString & s)
static

Definition at line 499 of file xmlgen.cpp.

500{
501 auto isDigit = [](char c) { return c>='0' && c<='9'; };
502 int len = static_cast<int>(s.length());
503 int i=0,j=0;
504 if (len>0)
505 {
506 while (i<len)
507 {
508 if (i<len-1 && s[i]=='@' && isDigit(s[i+1])) // found pattern '@\d+'
509 {
510 if (j>=2 && i>=2 && s[i-2]==':' && s[i-1]==':') j-=2; // found pattern '::@\d+'
511 i+=2; // skip over @ and first digit
512 while (i<len && isDigit(s[i])) i++; // skip additional digits
513 }
514 else // copy characters
515 {
516 s[j++]=s[i++];
517 }
518 }
519 // resize resulting string
520 s.resize(j);
521 }
522}
void resize(size_t newlen)
Definition qcstring.h:160

References QCString::length(), and QCString::resize().

Referenced by generateXMLForClass(), generateXMLForConcept(), generateXMLForMember(), and generateXMLForNamespace().

◆ stripQualifiers()

static void stripQualifiers ( QCString & typeStr)
static

Definition at line 524 of file xmlgen.cpp.

525{
526 bool done=false;
527 typeStr.stripPrefix("friend ");
528 while (!done)
529 {
530 if (typeStr.stripPrefix("static ")) {}
531 else if (typeStr.stripPrefix("constexpr ")) {}
532 else if (typeStr.stripPrefix("consteval ")) {}
533 else if (typeStr.stripPrefix("constinit ")) {}
534 else if (typeStr.stripPrefix("virtual ")) {}
535 else if (typeStr=="virtual") typeStr="";
536 else done=TRUE;
537 }
538}

References QCString::stripPrefix(), and TRUE.

Referenced by generateXMLForMember().

◆ writeCombineScript()

static void writeCombineScript ( )
static

Definition at line 165 of file xmlgen.cpp.

166{
167 QCString outputDirectory = Config_getString(XML_OUTPUT);
168 QCString fileName=outputDirectory+"/combine.xslt";
169 std::ofstream t = Portable::openOutputStream(fileName);
170 if (!t.is_open())
171 {
172 err("Cannot open file %s for writing!\n",qPrint(fileName));
173 return;
174 }
175
176 t <<
177 "<!-- XSLT script to combine the generated output into a single file. \n"
178 " If you have xsltproc you could use:\n"
179 " xsltproc combine.xslt index.xml >all.xml\n"
180 "-->\n"
181 "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n"
182 " <xsl:output method=\"xml\" version=\"1.0\" indent=\"no\" standalone=\"yes\" />\n"
183 " <xsl:template match=\"/\">\n"
184 " <doxygen version=\"{doxygenindex/@version}\" xml:lang=\"{doxygenindex/@xml:lang}\">\n"
185 " <!-- Load all doxygen generated xml files -->\n"
186 " <xsl:for-each select=\"doxygenindex/compound\">\n"
187 " <xsl:copy-of select=\"document( concat( @refid, '.xml' ) )/doxygen/*\" />\n"
188 " </xsl:for-each>\n"
189 " </doxygen>\n"
190 " </xsl:template>\n"
191 "</xsl:stylesheet>\n";
192
193}

References Config_getString, err, Portable::openOutputStream(), and qPrint().

Referenced by generateXML().

◆ writeExports()

static void writeExports ( const ImportInfoMap & exportMap,
TextStream & t )
static

Definition at line 1344 of file xmlgen.cpp.

1345{
1346 if (exportMap.empty()) return;
1347 t << " <exports>\n";
1348 for (auto &[moduleName,importInfo] : exportMap)
1349 {
1350 t << " <export";
1351 ModuleDef *mod = ModuleManager::instance().getPrimaryInterface(importInfo.importName);
1352 if (mod && mod->isLinkableInProject())
1353 {
1354 t << " refid=\"" << mod->getOutputFileBase() << "\"";
1355 }
1356 t << ">";
1357 t << importInfo.importName;
1358 t << "</export>\n";
1359 }
1360 t << " </exports>\n";
1361}
virtual bool isLinkableInProject() const =0
static ModuleManager & instance()
ModuleDef * getPrimaryInterface(const QCString &moduleName) const

References Definition::getOutputFileBase(), ModuleManager::getPrimaryInterface(), ModuleManager::instance(), and Definition::isLinkableInProject().

Referenced by generateXMLForModule().

◆ writeIncludeInfo()

static void writeIncludeInfo ( const IncludeInfo * ii,
TextStream & t )
static

Definition at line 1407 of file xmlgen.cpp.

1408{
1409 if (ii)
1410 {
1411 QCString nm = ii->includeName;
1412 if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName();
1413 if (!nm.isEmpty())
1414 {
1415 t << " <includes";
1416 if (ii->fileDef && !ii->fileDef->isReference()) // TODO: support external references
1417 {
1418 t << " refid=\"" << ii->fileDef->getOutputFileBase() << "\"";
1419 }
1420 t << " local=\"" << ((ii->kind & IncludeKind_LocalMask) ? "yes" : "no") << "\">";
1421 t << nm;
1422 t << "</includes>\n";
1423 }
1424 }
1425}
virtual const QCString & docName() const =0
QCString includeName
Definition filedef.h:80
IncludeKind kind
Definition filedef.h:81
const FileDef * fileDef
Definition filedef.h:79

References FileDef::docName(), IncludeInfo::fileDef, Definition::getOutputFileBase(), IncludeKind_LocalMask, IncludeInfo::includeName, QCString::isEmpty(), Definition::isReference(), and IncludeInfo::kind.

Referenced by generateXMLForClass(), and generateXMLForConcept().

◆ writeInnerClasses()

static void writeInnerClasses ( const ClassLinkedRefMap & cl,
TextStream & t )
static

Definition at line 1287 of file xmlgen.cpp.

1288{
1289 for (const auto &cd : cl)
1290 {
1291 if (!cd->isHidden() && !cd->isAnonymous())
1292 {
1293 t << " <innerclass refid=\"" << classOutputFileBase(cd)
1294 << "\" prot=\"";
1295 switch(cd->protection())
1296 {
1297 case Protection::Public: t << "public"; break;
1298 case Protection::Protected: t << "protected"; break;
1299 case Protection::Private: t << "private"; break;
1300 case Protection::Package: t << "package"; break;
1301 }
1302 t << "\">" << convertToXML(cd->name()) << "</innerclass>\n";
1303 }
1304 }
1305}

References classOutputFileBase(), convertToXML(), Package, Private, Protected, and Public.

Referenced by generateXMLForClass(), generateXMLForFile(), generateXMLForGroup(), generateXMLForModule(), and generateXMLForNamespace().

◆ writeInnerConcepts()

static void writeInnerConcepts ( const ConceptLinkedRefMap & cl,
TextStream & t )
static

Definition at line 1307 of file xmlgen.cpp.

1308{
1309 for (const auto &cd : cl)
1310 {
1311 if (cd->isHidden())
1312 {
1313 t << " <innerconcept refid=\"" << cd->getOutputFileBase()
1314 << "\">" << convertToXML(cd->name()) << "</innerconcept>\n";
1315 }
1316 }
1317}

References convertToXML().

Referenced by generateXMLForFile(), generateXMLForGroup(), generateXMLForModule(), and generateXMLForNamespace().

◆ writeInnerDirs()

static void writeInnerDirs ( const DirList * dl,
TextStream & t )
static

Definition at line 1395 of file xmlgen.cpp.

1396{
1397 if (dl)
1398 {
1399 for(const auto subdir : *dl)
1400 {
1401 t << " <innerdir refid=\"" << subdir->getOutputFileBase()
1402 << "\">" << convertToXML(subdir->displayName()) << "</innerdir>\n";
1403 }
1404 }
1405}

References convertToXML().

Referenced by generateXMLForDir().

◆ writeInnerFiles()

static void writeInnerFiles ( const FileList & fl,
TextStream & t )
static

Definition at line 1363 of file xmlgen.cpp.

1364{
1365 for (const auto &fd : fl)
1366 {
1367 t << " <innerfile refid=\"" << fd->getOutputFileBase()
1368 << "\">" << convertToXML(fd->name()) << "</innerfile>\n";
1369 }
1370}

References convertToXML().

Referenced by generateXMLForDir(), generateXMLForGroup(), and generateXMLForModule().

◆ writeInnerGroups()

static void writeInnerGroups ( const GroupList & gl,
TextStream & t )
static

Definition at line 1385 of file xmlgen.cpp.

1386{
1387 for (const auto &sgd : gl)
1388 {
1389 t << " <innergroup refid=\"" << sgd->getOutputFileBase()
1390 << "\">" << convertToXML(sgd->groupTitle())
1391 << "</innergroup>\n";
1392 }
1393}

References convertToXML().

Referenced by generateXMLForGroup().

◆ writeInnerModules()

static void writeInnerModules ( const ModuleLinkedRefMap & ml,
TextStream & t )
static

Definition at line 1319 of file xmlgen.cpp.

1320{
1321 for (const auto &mod : ml)
1322 {
1323 if (mod->isHidden())
1324 {
1325 t << " <innermodule refid=\"" << mod->getOutputFileBase()
1326 << "\">" << convertToXML(mod->name()) << "</innermodule>\n";
1327 }
1328 }
1329}

References convertToXML().

Referenced by generateXMLForGroup().

◆ writeInnerNamespaces()

static void writeInnerNamespaces ( const NamespaceLinkedRefMap & nl,
TextStream & t )
static

Definition at line 1331 of file xmlgen.cpp.

1332{
1333 for (const auto &nd : nl)
1334 {
1335 if (!nd->isHidden() && !nd->isAnonymous())
1336 {
1337 t << " <innernamespace refid=\"" << nd->getOutputFileBase()
1338 << "\"" << (nd->isInline() ? " inline=\"yes\"" : "")
1339 << ">" << convertToXML(nd->name()) << "</innernamespace>\n";
1340 }
1341 }
1342}

References convertToXML().

Referenced by generateXMLForFile(), generateXMLForGroup(), and generateXMLForNamespace().

◆ writeInnerPages()

static void writeInnerPages ( const PageLinkedRefMap & pl,
TextStream & t )
static

Definition at line 1372 of file xmlgen.cpp.

1373{
1374 for (const auto &pd : pl)
1375 {
1376 t << " <innerpage refid=\"" << pd->getOutputFileBase();
1377 if (pd->getGroupDef())
1378 {
1379 t << "_" << pd->name();
1380 }
1381 t << "\">" << convertToXML(pd->title()) << "</innerpage>\n";
1382 }
1383}

References convertToXML().

Referenced by generateXMLForGroup(), and generateXMLForPage().

◆ writeListOfAllMembers()

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

Definition at line 1246 of file xmlgen.cpp.

1247{
1248 t << " <listofallmembers>\n";
1249 for (auto &mni : cd->memberNameInfoLinkedMap())
1250 {
1251 for (auto &mi : *mni)
1252 {
1253 const MemberDef *md=mi->memberDef();
1254 if (!md->isAnonymous())
1255 {
1256 Protection prot = mi->prot();
1257 Specifier virt=md->virtualness();
1258 t << " <member refid=\"" << memberOutputFileBase(md) << "_1" <<
1259 md->anchor() << "\" prot=\"";
1260 switch (prot)
1261 {
1262 case Protection::Public: t << "public"; break;
1263 case Protection::Protected: t << "protected"; break;
1264 case Protection::Private: t << "private"; break;
1265 case Protection::Package: t << "package"; break;
1266 }
1267 t << "\" virt=\"";
1268 switch(virt)
1269 {
1270 case Specifier::Normal: t << "non-virtual"; break;
1271 case Specifier::Virtual: t << "virtual"; break;
1272 case Specifier::Pure: t << "pure-virtual"; break;
1273 }
1274 t << "\"";
1275 if (!mi->ambiguityResolutionScope().isEmpty())
1276 {
1277 t << " ambiguityscope=\"" << convertToXML(mi->ambiguityResolutionScope()) << "\"";
1278 }
1279 t << "><scope>" << convertToXML(cd->name()) << "</scope><name>" <<
1280 convertToXML(md->name()) << "</name></member>\n";
1281 }
1282 }
1283 }
1284 t << " </listofallmembers>\n";
1285}
Protection
Protection level of members.
Definition types.h:26
Specifier
Virtualness of a member.
Definition types.h:29

References Definition::anchor(), convertToXML(), Definition::isAnonymous(), ClassDef::memberNameInfoLinkedMap(), memberOutputFileBase(), Definition::name(), Normal, Package, Private, Protected, Public, Pure, Virtual, and MemberDef::virtualness().

Referenced by generateXMLForClass().

◆ writeMemberReference()

static void writeMemberReference ( TextStream & t,
const Definition * def,
const MemberDef * rmd,
const QCString & tagName )
static

Definition at line 474 of file xmlgen.cpp.

475{
476 QCString scope = rmd->getScopeString();
477 QCString name = rmd->name();
478 if (!scope.isEmpty() && scope!=def->name())
479 {
481 }
482 t << " <" << tagName << " refid=\"";
483 t << rmd->getOutputFileBase() << "_1" << rmd->anchor() << "\"";
484 if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
485 {
486 t << " compoundref=\"" << rmd->getBodyDef()->getOutputFileBase() << "\"";
487 t << " startline=\"" << rmd->getStartBodyLine() << "\"";
488 if (rmd->getEndBodyLine()!=-1)
489 {
490 t << " endline=\"" << rmd->getEndBodyLine() << "\"";
491 }
492 }
493 t << ">" << convertToXML(name) << "</" << tagName << ">\n";
494
495}
virtual QCString getScopeString() const =0
QCString & prepend(const char *s)
Definition qcstring.h:398
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition util.cpp:6152

References Definition::anchor(), convertToXML(), Definition::getBodyDef(), Definition::getEndBodyLine(), Definition::getLanguage(), getLanguageSpecificSeparator(), Definition::getOutputFileBase(), MemberDef::getScopeString(), Definition::getStartBodyLine(), QCString::isEmpty(), Definition::name(), and QCString::prepend().

Referenced by generateXMLForMember().

◆ writeMemberTemplateLists()

static void writeMemberTemplateLists ( const MemberDef * md,
TextStream & t )
static

Definition at line 406 of file xmlgen.cpp.

407{
409}
virtual const ClassDef * getClassDef() const =0
virtual const ArgumentList & templateArguments() const =0
static void writeTemplateArgumentList(TextStream &t, const ArgumentList &al, const Definition *scope, const FileDef *fileScope, int indent)
Definition xmlgen.cpp:363

References MemberDef::getClassDef(), MemberDef::getFileDef(), MemberDef::templateArguments(), and writeTemplateArgumentList().

Referenced by generateXMLForMember().

◆ writeTemplateArgumentList()

static void writeTemplateArgumentList ( TextStream & t,
const ArgumentList & al,
const Definition * scope,
const FileDef * fileScope,
int indent )
static

Definition at line 363 of file xmlgen.cpp.

368{
369 QCString indentStr;
370 indentStr.fill(' ',indent);
371 if (al.hasParameters())
372 {
373 t << indentStr << "<templateparamlist>\n";
374 for (const Argument &a : al)
375 {
376 t << indentStr << " <param>\n";
377 if (!a.type.isEmpty())
378 {
379 t << indentStr << " <type>";
380 linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,nullptr,a.type);
381 t << "</type>\n";
382 }
383 if (!a.name.isEmpty())
384 {
385 t << indentStr << " <declname>" << convertToXML(a.name) << "</declname>\n";
386 t << indentStr << " <defname>" << convertToXML(a.name) << "</defname>\n";
387 }
388 if (!a.defval.isEmpty())
389 {
390 t << indentStr << " <defval>";
391 linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,nullptr,a.defval);
392 t << "</defval>\n";
393 }
394 if (!a.typeConstraint.isEmpty())
395 {
396 t << indentStr << " <typeconstraint>";
397 linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,nullptr,a.typeConstraint);
398 t << "</typeconstraint>\n";
399 }
400 t << indentStr << " </param>\n";
401 }
402 t << indentStr << "</templateparamlist>\n";
403 }
404}
void fill(char c, int len=-1)
Fills a string with a predefined character.
Definition qcstring.h:173

References convertToXML(), QCString::fill(), ArgumentList::hasParameters(), and linkifyText().

Referenced by writeMemberTemplateLists(), writeTemplateList(), and writeTemplateList().

◆ writeTemplateList() [1/2]

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

Definition at line 411 of file xmlgen.cpp.

412{
414}
virtual const ArgumentList & templateArguments() const =0
Returns the template arguments of this class.

References ClassDef::getFileDef(), ClassDef::templateArguments(), and writeTemplateArgumentList().

Referenced by generateXMLForClass(), and generateXMLForConcept().

◆ writeTemplateList() [2/2]

static void writeTemplateList ( const ConceptDef * cd,
TextStream & t )
static

Definition at line 416 of file xmlgen.cpp.

417{
419}
virtual ArgumentList getTemplateParameterList() const =0

References ConceptDef::getFileDef(), ConceptDef::getTemplateParameterList(), and writeTemplateArgumentList().

◆ writeXMLCodeBlock()

void writeXMLCodeBlock ( TextStream & t,
FileDef * fd )

Definition at line 449 of file xmlgen.cpp.

450{
453 intf->resetCodeParserState();
454 OutputCodeList xmlList;
455 xmlList.add<XMLCodeGenerator>(&t);
456 xmlList.startCodeFragment("DoxyCode");
457 intf->parseCode(xmlList, // codeOutList
458 QCString(), // scopeName
459 fileToString(fd->absFilePath(),Config_getBool(FILTER_SOURCE_FILES)),
460 langExt, // lang
461 FALSE, // isExampleBlock
462 QCString(), // exampleName
463 fd, // fileDef
464 -1, // startLine
465 -1, // endLine
466 FALSE, // inlineFragment
467 nullptr, // memberDef
468 TRUE // showLineNumbers
469 );
470 xmlList.endCodeFragment("DoxyCode");
471 xmlList.get<XMLCodeGenerator>(OutputType::XML)->finish();
472}
virtual QCString getDefFileExtension() const =0
static ParserManager * parserManager
Definition doxygen.h:121
Class representing a list of different code generators.
Definition outputlist.h:153
T * get(OutputType o)
Returns a pointer to a specific generator in the list.
Definition outputlist.h:198
void add(OutputCodeIntfPtr &&p)
Definition outputlist.h:183
void endCodeFragment(const QCString &style)
Definition outputlist.h:258
void startCodeFragment(const QCString &style)
Definition outputlist.h:255
std::unique_ptr< CodeParserInterface > getCodeParser(const QCString &extension)
Gets the interface to the parser associated with a given extension.
Definition parserintf.h:216
SrcLangExt
Language as given by extension.
Definition types.h:42
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5472
QCString fileToString(const QCString &name, bool filter, bool isSourceCode)
Definition util.cpp:1413

References FileDef::absFilePath(), OutputCodeList::add(), Config_getBool, OutputCodeList::endCodeFragment(), FALSE, fileToString(), OutputCodeList::get(), ParserManager::getCodeParser(), Definition::getDefFileExtension(), getLanguageFromFileName(), Doxygen::parserManager, OutputCodeList::startCodeFragment(), TRUE, and XML.

Referenced by generateXMLForFile().

◆ writeXMLCodeString()

void writeXMLCodeString ( TextStream & t,
const QCString & str,
size_t & col )
inline

Definition at line 119 of file xmlgen.cpp.

120{
121 if (str.isEmpty()) return;
122 const char *s = str.data();
123 char c=0;
124 while ((c=*s++))
125 {
126 switch(c)
127 {
128 case '\t':
129 {
130 int tabSize = Config_getInt(TAB_SIZE);
131 int spacesToNextTabStop = tabSize - (col%tabSize);
132 col+=spacesToNextTabStop;
133 while (spacesToNextTabStop--) t << "<sp/>";
134 break;
135 }
136 case ' ': t << "<sp/>"; col++; break;
137 case '<': t << "&lt;"; col++; break;
138 case '>': t << "&gt;"; col++; break;
139 case '&': t << "&amp;"; col++; break;
140 case '\'': t << "&apos;"; col++; break;
141 case '"': t << "&quot;"; col++; break;
142 case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
143 case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18:
144 case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26:
145 case 27: case 28: case 29: case 30: case 31:
146 // encode invalid XML characters (see http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char)
147 t << "<sp value=\"" << int(c) << "\"/>";
148 break;
149 default: s=writeUTF8Char(t,s-1); col++; break;
150 }
151 }
152}
#define Config_getInt(name)
Definition config.h:34
const char * writeUTF8Char(TextStream &t, const char *s)
Writes the UTF8 character pointed to by s to stream t and returns a pointer to the next character.
Definition utf8.cpp:197

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

Referenced by XMLCodeGenerator::codify().

◆ writeXMLDocBlock()

static void writeXMLDocBlock ( TextStream & t,
const QCString & fileName,
int lineNr,
const Definition * scope,
const MemberDef * md,
const QCString & text )
static

Definition at line 421 of file xmlgen.cpp.

427{
428 QCString stext = text.stripWhiteSpace();
429 if (stext.isEmpty()) return;
430 // convert the documentation string into an abstract syntax tree
431 auto parser { createDocParser() };
432 auto ast { validatingParseDoc(*parser.get(),
433 fileName,lineNr,scope,md,text,FALSE,FALSE,
434 QCString(),FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)) };
435 auto astImpl = dynamic_cast<const DocNodeAST*>(ast.get());
436 if (astImpl)
437 {
438 // create a code generator
439 OutputCodeList xmlCodeList;
440 xmlCodeList.add<XMLCodeGenerator>(&t);
441 // create a parse tree visitor for XML
442 XmlDocVisitor visitor(t,xmlCodeList,scope?scope->getDefFileExtension():QCString(""));
443 // visit all nodes
444 std::visit(visitor,astImpl->root);
445 // clean up
446 }
447}
Class representing the abstract syntax tree of a documentation block.
Definition docnode.h:1428
Concrete visitor implementation for XML output.
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:54
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &input, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport)

References OutputCodeList::add(), Config_getBool, createDocParser(), FALSE, Definition::getDefFileExtension(), QCString::isEmpty(), QCString::stripWhiteSpace(), and validatingParseDoc().

Referenced by generateXMLForClass(), generateXMLForConcept(), generateXMLForDir(), generateXMLForFile(), generateXMLForGroup(), generateXMLForMember(), generateXMLForModule(), generateXMLForNamespace(), generateXMLForPage(), and generateXMLSection().

◆ writeXMLHeader()

static void writeXMLHeader ( TextStream & t)
static

Definition at line 155 of file xmlgen.cpp.

156{
157 t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n";
158 t << "<doxygen xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
159 t << "xsi:noNamespaceSchemaLocation=\"compound.xsd\" ";
160 t << "version=\"" << getDoxygenVersion() << "\" ";
161 t << "xml:lang=\"" << theTranslator->trISOLang() << "\"";
162 t << ">\n";
163}

References theTranslator, and Translator::trISOLang().

Referenced by generateXMLForClass(), generateXMLForConcept(), generateXMLForDir(), generateXMLForFile(), generateXMLForGroup(), generateXMLForModule(), generateXMLForNamespace(), and generateXMLForPage().

◆ writeXMLLink()

void writeXMLLink ( TextStream & t,
const QCString & extRef,
const QCString & compoundId,
const QCString & anchorId,
const QCString & text,
const QCString & tooltip )

Definition at line 195 of file xmlgen.cpp.

197{
198 t << "<ref refid=\"" << compoundId;
199 if (!anchorId.isEmpty()) t << "_1" << anchorId;
200 t << "\" kindref=\"";
201 if (!anchorId.isEmpty()) t << "member"; else t << "compound";
202 t << "\"";
203 if (!extRef.isEmpty()) t << " external=\"" << extRef << "\"";
204 if (!tooltip.isEmpty()) t << " tooltip=\"" << convertToXML(tooltip) << "\"";
205 t << ">";
206 writeXMLString(t,text);
207 t << "</ref>";
208}

References convertToXML(), QCString::isEmpty(), and writeXMLString().

Referenced by XMLCodeGenerator::writeCodeLink(), and TextGeneratorXMLImpl::writeLink().

◆ writeXMLString()

◆ xmlSectionMapper()

static const char * xmlSectionMapper ( MemberListType ml)
static

Definition at line 107 of file xmlgen.cpp.

108{
109 auto it = g_xmlSectionMap.find(ml);
110 return it!=g_xmlSectionMap.end() ? it->second.c_str() : "";
111}
static std::map< MemberListType, std::string > g_xmlSectionMap
Definition xmlgen.cpp:64

References g_xmlSectionMap.

Referenced by generateXMLForClass(), generateXMLForFile(), generateXMLForGroup(), generateXMLForModule(), and generateXMLForNamespace().

Variable Documentation

◆ g_xmlSectionMap

std::map<MemberListType,std::string> g_xmlSectionMap
static

Definition at line 64 of file xmlgen.cpp.

65{
66 { MemberListType_pubTypes,"public-type" },
67 { MemberListType_pubMethods,"public-func" },
68 { MemberListType_pubAttribs,"public-attrib" },
69 { MemberListType_pubSlots,"public-slot" },
70 { MemberListType_signals,"signal" },
71 { MemberListType_dcopMethods,"dcop-func" },
72 { MemberListType_properties,"property" },
73 { MemberListType_events,"event" },
74 { MemberListType_interfaces,"interfaces" },
75 { MemberListType_services,"services" },
76 { MemberListType_pubStaticMethods,"public-static-func" },
77 { MemberListType_pubStaticAttribs,"public-static-attrib" },
78 { MemberListType_proTypes,"protected-type" },
79 { MemberListType_proMethods,"protected-func" },
80 { MemberListType_proAttribs,"protected-attrib" },
81 { MemberListType_proSlots,"protected-slot" },
82 { MemberListType_proStaticMethods,"protected-static-func" },
83 { MemberListType_proStaticAttribs,"protected-static-attrib" },
84 { MemberListType_pacTypes,"package-type" },
85 { MemberListType_pacMethods,"package-func" },
86 { MemberListType_pacAttribs,"package-attrib" },
87 { MemberListType_pacStaticMethods,"package-static-func" },
88 { MemberListType_pacStaticAttribs,"package-static-attrib" },
89 { MemberListType_priTypes,"private-type" },
90 { MemberListType_priMethods,"private-func" },
91 { MemberListType_priAttribs,"private-attrib" },
92 { MemberListType_priSlots,"private-slot" },
93 { MemberListType_priStaticMethods,"private-static-func" },
94 { MemberListType_priStaticAttribs,"private-static-attrib" },
95 { MemberListType_friends,"friend" },
96 { MemberListType_related,"related" },
98 { MemberListType_decProtoMembers,"prototype" },
105};
@ MemberListType_pubStaticAttribs
Definition types.h:126
@ MemberListType_pubStaticMethods
Definition types.h:115
@ MemberListType_decEnumMembers
Definition types.h:156
@ MemberListType_priTypes
Definition types.h:133
@ MemberListType_friends
Definition types.h:136
@ MemberListType_pubTypes
Definition types.h:130
@ MemberListType_proTypes
Definition types.h:131
@ MemberListType_dcopMethods
Definition types.h:137
@ MemberListType_proStaticAttribs
Definition types.h:127
@ MemberListType_priMethods
Definition types.h:114
@ MemberListType_priStaticMethods
Definition types.h:118
@ MemberListType_decVarMembers
Definition types.h:158
@ MemberListType_decSequenceMembers
Definition types.h:194
@ MemberListType_priSlots
Definition types.h:121
@ MemberListType_proStaticMethods
Definition types.h:116
@ MemberListType_events
Definition types.h:139
@ MemberListType_decTypedefMembers
Definition types.h:155
@ MemberListType_proAttribs
Definition types.h:123
@ MemberListType_proMethods
Definition types.h:112
@ MemberListType_proSlots
Definition types.h:120
@ MemberListType_decDefineMembers
Definition types.h:153
@ MemberListType_pacStaticMethods
Definition types.h:117
@ MemberListType_decDictionaryMembers
Definition types.h:196
@ MemberListType_interfaces
Definition types.h:188
@ MemberListType_signals
Definition types.h:135
@ MemberListType_priStaticAttribs
Definition types.h:129
@ MemberListType_pacAttribs
Definition types.h:124
@ MemberListType_priAttribs
Definition types.h:125
@ MemberListType_related
Definition types.h:134
@ MemberListType_properties
Definition types.h:138
@ MemberListType_decFuncMembers
Definition types.h:157
@ MemberListType_pacTypes
Definition types.h:132
@ MemberListType_pubSlots
Definition types.h:119
@ MemberListType_services
Definition types.h:191
@ MemberListType_decProtoMembers
Definition types.h:154
@ MemberListType_pubAttribs
Definition types.h:122
@ MemberListType_pubMethods
Definition types.h:111
@ MemberListType_pacMethods
Definition types.h:113
@ MemberListType_pacStaticAttribs
Definition types.h:128

Referenced by xmlSectionMapper().