doxygen  1.8.18
About: Doxygen is a source code documentation generator tool for C++, C, Objective-C, C#, PHP, Java, Python, IDL (diverse flavors), Fortran, VHDL, Tcl, and to some extent D. Different output formats are supported.
  Fossies Dox: doxygen-1.8.18.src.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

xmlgen.cpp
Go to the documentation of this file.
1 
16 #include <stdlib.h>
17 
18 #include <qdir.h>
19 #include <qfile.h>
20 #include <qtextstream.h>
21 #include <qintdict.h>
22 
23 #include "xmlgen.h"
24 #include "doxygen.h"
25 #include "message.h"
26 #include "config.h"
27 #include "classlist.h"
28 #include "util.h"
29 #include "defargs.h"
30 #include "outputgen.h"
31 #include "dot.h"
32 #include "dotclassgraph.h"
33 #include "dotincldepgraph.h"
34 #include "pagedef.h"
35 #include "filename.h"
36 #include "version.h"
37 #include "xmldocvisitor.h"
38 #include "docparser.h"
39 #include "language.h"
40 #include "parserintf.h"
41 #include "arguments.h"
42 #include "memberlist.h"
43 #include "groupdef.h"
44 #include "memberdef.h"
45 #include "namespacedef.h"
46 #include "membername.h"
47 #include "membergroup.h"
48 #include "dirdef.h"
49 #include "section.h"
50 #include "htmlentity.h"
51 #include "resourcemgr.h"
52 
53 // no debug info
54 #define XML_DB(x) do {} while(0)
55 // debug to stdout
56 //#define XML_DB(x) printf x
57 // debug inside output
58 //#define XML_DB(x) QCString __t;__t.sprintf x;m_t << __t
59 
60 //------------------
61 
63 class XmlSectionMapper : public QIntDict<char>
64 {
65  public:
66  XmlSectionMapper() : QIntDict<char>(47)
67  {
68  insert(MemberListType_pubTypes,"public-type");
69  insert(MemberListType_pubMethods,"public-func");
70  insert(MemberListType_pubAttribs,"public-attrib");
71  insert(MemberListType_pubSlots,"public-slot");
76  insert(MemberListType_interfaces,"interfaces");
77  insert(MemberListType_services,"services");
78  insert(MemberListType_pubStaticMethods,"public-static-func");
79  insert(MemberListType_pubStaticAttribs,"public-static-attrib");
80  insert(MemberListType_proTypes,"protected-type");
81  insert(MemberListType_proMethods,"protected-func");
82  insert(MemberListType_proAttribs,"protected-attrib");
83  insert(MemberListType_proSlots,"protected-slot");
84  insert(MemberListType_proStaticMethods,"protected-static-func");
85  insert(MemberListType_proStaticAttribs,"protected-static-attrib");
86  insert(MemberListType_pacTypes,"package-type");
87  insert(MemberListType_pacMethods,"package-func");
88  insert(MemberListType_pacAttribs,"package-attrib");
89  insert(MemberListType_pacStaticMethods,"package-static-func");
90  insert(MemberListType_pacStaticAttribs,"package-static-attrib");
91  insert(MemberListType_priTypes,"private-type");
92  insert(MemberListType_priMethods,"private-func");
93  insert(MemberListType_priAttribs,"private-attrib");
94  insert(MemberListType_priSlots,"private-slot");
95  insert(MemberListType_priStaticMethods,"private-static-func");
96  insert(MemberListType_priStaticAttribs,"private-static-attrib");
98  insert(MemberListType_related,"related");
107  }
108 };
109 
111 
112 
113 inline void writeXMLString(FTextStream &t,const char *s)
114 {
115  t << convertToXML(s);
116 }
117 
118 inline void writeXMLCodeString(FTextStream &t,const char *s, int &col)
119 {
120  char c;
121  while ((c=*s++))
122  {
123  switch(c)
124  {
125  case '\t':
126  {
127  static int tabSize = Config_getInt(TAB_SIZE);
128  int spacesToNextTabStop = tabSize - (col%tabSize);
129  col+=spacesToNextTabStop;
130  while (spacesToNextTabStop--) t << "<sp/>";
131  break;
132  }
133  case ' ': t << "<sp/>"; col++; break;
134  case '<': t << "&lt;"; col++; break;
135  case '>': t << "&gt;"; col++; break;
136  case '&': t << "&amp;"; col++; break;
137  case '\'': t << "&apos;"; col++; break;
138  case '"': t << "&quot;"; col++; break;
139  case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
140  case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18:
141  case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26:
142  case 27: case 28: case 29: case 30: case 31:
143  // encode invalid XML characters (see http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char)
144  t << "<sp value=\"" << int(c) << "\"/>";
145  break;
146  default: s=writeUtf8Char(t,s-1); col++; break;
147  }
148  }
149 }
150 
151 
153 {
154  t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;;
155  t << "<doxygen xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
156  t << "xsi:noNamespaceSchemaLocation=\"compound.xsd\" ";
157  t << "version=\"" << getDoxygenVersion() << "\">" << endl;
158 }
159 
160 static void writeCombineScript()
161 {
162  QCString outputDirectory = Config_getString(XML_OUTPUT);
163  QCString fileName=outputDirectory+"/combine.xslt";
164  QFile f(fileName);
165  if (!f.open(IO_WriteOnly))
166  {
167  err("Cannot open file %s for writing!\n",fileName.data());
168  return;
169  }
170  FTextStream t(&f);
171  //t.setEncoding(FTextStream::UnicodeUTF8);
172 
173  t <<
174  "<!-- XSLT script to combine the generated output into a single file. \n"
175  " If you have xsltproc you could use:\n"
176  " xsltproc combine.xslt index.xml >all.xml\n"
177  "-->\n"
178  "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n"
179  " <xsl:output method=\"xml\" version=\"1.0\" indent=\"no\" standalone=\"yes\" />\n"
180  " <xsl:template match=\"/\">\n"
181  " <doxygen version=\"{doxygenindex/@version}\">\n"
182  " <!-- Load all doxygen generated xml files -->\n"
183  " <xsl:for-each select=\"doxygenindex/compound\">\n"
184  " <xsl:copy-of select=\"document( concat( @refid, '.xml' ) )/doxygen/*\" />\n"
185  " </xsl:for-each>\n"
186  " </doxygen>\n"
187  " </xsl:template>\n"
188  "</xsl:stylesheet>\n";
189 
190 }
191 
192 void writeXMLLink(FTextStream &t,const char *extRef,const char *compoundId,
193  const char *anchorId,const char *text,const char *tooltip)
194 {
195  t << "<ref refid=\"" << compoundId;
196  if (anchorId) t << "_1" << anchorId;
197  t << "\" kindref=\"";
198  if (anchorId) t << "member"; else t << "compound";
199  t << "\"";
200  if (extRef) t << " external=\"" << extRef << "\"";
201  if (tooltip) t << " tooltip=\"" << convertToXML(tooltip) << "\"";
202  t << ">";
203  writeXMLString(t,text);
204  t << "</ref>";
205 }
206 
209 {
210  public:
212  void writeString(const char *s,bool /*keepSpaces*/) const
213  {
214  writeXMLString(m_t,s);
215  }
216  void writeBreak(int) const {}
217  void writeLink(const char *extRef,const char *file,
218  const char *anchor,const char *text
219  ) const
220  {
221  writeXMLLink(m_t,extRef,file,anchor,text,0);
222  }
223  private:
225 };
226 
227 
229 void XMLCodeGenerator::codify(const char *text)
230 {
231  XML_DB(("(codify \"%s\")\n",text));
233  {
234  m_t << "<highlight class=\"normal\">";
236  }
238 }
239 void XMLCodeGenerator::writeCodeLink(const char *ref,const char *file,
240  const char *anchor,const char *name,
241  const char *tooltip)
242 {
243  XML_DB(("(writeCodeLink)\n"));
245  {
246  m_t << "<highlight class=\"normal\">";
248  }
249  writeXMLLink(m_t,ref,file,anchor,name,tooltip);
250  m_col+=qstrlen(name);
251 }
252 void XMLCodeGenerator::writeTooltip(const char *, const DocLinkInfo &, const char *,
253  const char *, const SourceLinkInfo &, const SourceLinkInfo &
254  )
255 {
256  XML_DB(("(writeToolTip)\n"));
257 }
259 {
260  XML_DB(("(startCodeLine)\n"));
261  m_t << "<codeline";
262  if (m_lineNumber!=-1)
263  {
264  m_t << " lineno=\"" << m_lineNumber << "\"";
265  if (!m_refId.isEmpty())
266  {
267  m_t << " refid=\"" << m_refId << "\"";
268  if (m_isMemberRef)
269  {
270  m_t << " refkind=\"member\"";
271  }
272  else
273  {
274  m_t << " refkind=\"compound\"";
275  }
276  }
277  if (!m_external.isEmpty())
278  {
279  m_t << " external=\"" << m_external << "\"";
280  }
281  }
282  m_t << ">";
284  m_col=0;
285 }
287 {
288  XML_DB(("(endCodeLine)\n"));
290  {
291  m_t << "</highlight>";
293  }
294  m_t << "</codeline>" << endl; // non DocBook
295  m_lineNumber = -1;
296  m_refId.resize(0);
297  m_external.resize(0);
299 }
300 void XMLCodeGenerator::startFontClass(const char *colorClass)
301 {
302  XML_DB(("(startFontClass)\n"));
304  {
305  m_t << "</highlight>";
307  }
308  m_t << "<highlight class=\"" << colorClass << "\">"; // non DocBook
310 }
312 {
313  XML_DB(("(endFontClass)\n"));
314  m_t << "</highlight>"; // non DocBook
316 }
318 {
319  XML_DB(("(writeCodeAnchor)\n"));
320 }
321 void XMLCodeGenerator::writeLineNumber(const char *extRef,const char *compId,
322  const char *anchorId,int l)
323 {
324  XML_DB(("(writeLineNumber)\n"));
325  // we remember the information provided here to use it
326  // at the <codeline> start tag.
327  m_lineNumber = l;
328  if (compId)
329  {
330  m_refId=compId;
331  if (anchorId) m_refId+=(QCString)"_1"+anchorId;
332  m_isMemberRef = anchorId!=0;
333  if (extRef) m_external=extRef;
334  }
335 }
337 {
339 }
340 
342  const ArgumentList &al,
343  const Definition *scope,
344  const FileDef *fileScope,
345  int indent)
346 {
347  QCString indentStr;
348  indentStr.fill(' ',indent);
349  if (al.hasParameters())
350  {
351  t << indentStr << "<templateparamlist>" << endl;
352  for (const Argument &a : al)
353  {
354  t << indentStr << " <param>" << endl;
355  if (!a.type.isEmpty())
356  {
357  t << indentStr << " <type>";
358  linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a.type);
359  t << "</type>" << endl;
360  }
361  if (!a.name.isEmpty())
362  {
363  t << indentStr << " <declname>" << convertToXML(a.name) << "</declname>" << endl;
364  t << indentStr << " <defname>" << convertToXML(a.name) << "</defname>" << endl;
365  }
366  if (!a.defval.isEmpty())
367  {
368  t << indentStr << " <defval>";
369  linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a.defval);
370  t << "</defval>" << endl;
371  }
372  if (!a.typeConstraint.isEmpty())
373  {
374  t << indentStr << " <typeconstraint>";
375  linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a.typeConstraint);
376  t << "</typeconstraint>" << endl;
377  }
378  t << indentStr << " </param>" << endl;
379  }
380  t << indentStr << "</templateparamlist>" << endl;
381  }
382 }
383 
385 {
387 }
388 
389 static void writeTemplateList(const ClassDef *cd,FTextStream &t)
390 {
392 }
393 
395  const QCString &fileName,
396  int lineNr,
397  const Definition *scope,
398  const MemberDef * md,
399  const QCString &text)
400 {
401  QCString stext = text.stripWhiteSpace();
402  if (stext.isEmpty()) return;
403  // convert the documentation string into an abstract syntax tree
404  DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text,FALSE,FALSE);
405  // create a code generator
406  XMLCodeGenerator *xmlCodeGen = new XMLCodeGenerator(t);
407  // create a parse tree visitor for XML
408  XmlDocVisitor *visitor = new XmlDocVisitor(t,*xmlCodeGen);
409  // visit all nodes
410  root->accept(visitor);
411  // clean up
412  delete visitor;
413  delete xmlCodeGen;
414  delete root;
415 
416 }
417 
419 {
422  intf.resetCodeParserState();
423  XMLCodeGenerator *xmlGen = new XMLCodeGenerator(t);
424  intf.parseCode(*xmlGen, // codeOutIntf
425  0, // scopeName
426  fileToString(fd->absFilePath(),Config_getBool(FILTER_SOURCE_FILES)),
427  langExt, // lang
428  FALSE, // isExampleBlock
429  0, // exampleName
430  fd, // fileDef
431  -1, // startLine
432  -1, // endLine
433  FALSE, // inlineFragment
434  0, // memberDef
435  TRUE // showLineNumbers
436  );
437  xmlGen->finish();
438  delete xmlGen;
439 }
440 
441 static void writeMemberReference(FTextStream &t,const Definition *def,const MemberDef *rmd,const char *tagName)
442 {
443  QCString scope = rmd->getScopeString();
444  QCString name = rmd->name();
445  if (!scope.isEmpty() && scope!=def->name())
446  {
448  }
449  t << " <" << tagName << " refid=\"";
450  t << rmd->getOutputFileBase() << "_1" << rmd->anchor() << "\"";
451  if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
452  {
453  t << " compoundref=\"" << rmd->getBodyDef()->getOutputFileBase() << "\"";
454  t << " startline=\"" << rmd->getStartBodyLine() << "\"";
455  if (rmd->getEndBodyLine()!=-1)
456  {
457  t << " endline=\"" << rmd->getEndBodyLine() << "\"";
458  }
459  }
460  t << ">" << convertToXML(name) << "</" << tagName << ">" << endl;
461 
462 }
463 
464 static void stripQualifiers(QCString &typeStr)
465 {
466  bool done=FALSE;
467  while (!done)
468  {
469  if (typeStr.stripPrefix("static "));
470  else if (typeStr.stripPrefix("virtual "));
471  else if (typeStr.stripPrefix("volatile "));
472  else if (typeStr=="virtual") typeStr="";
473  else done=TRUE;
474  }
475 }
476 
478 {
479  //static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
480  //if (inlineGroupedClasses && cd->partOfGroups()!=0)
481  return cd->getOutputFileBase();
482  //else
483  // return cd->getOutputFileBase();
484 }
485 
487 {
488  //static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
489  //if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0)
490  // return md->getClassDef()->getXmlOutputFileBase();
491  //else
492  // return md->getOutputFileBase();
493  return md->getOutputFileBase();
494 }
495 
496 
497 static void generateXMLForMember(const MemberDef *md,FTextStream &ti,FTextStream &t,const Definition *def)
498 {
499 
500  // + declaration/definition arg lists
501  // + reimplements
502  // + reimplementedBy
503  // + exceptions
504  // + const/volatile specifiers
505  // - examples
506  // + source definition
507  // + source references
508  // + source referenced by
509  // - body code
510  // + template arguments
511  // (templateArguments(), definitionTemplateParameterLists())
512  // - call graph
513 
514  // enum values are written as part of the enum
515  if (md->memberType()==MemberType_EnumValue) return;
516  if (md->isHidden()) return;
517 
518  // group members are only visible in their group
519  //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
520 
521  QCString memType;
522  bool isFunc=FALSE;
523  switch (md->memberType())
524  {
525  case MemberType_Define: memType="define"; break;
526  case MemberType_Function: memType="function"; isFunc=TRUE; break;
527  case MemberType_Variable: memType="variable"; break;
528  case MemberType_Typedef: memType="typedef"; break;
529  case MemberType_Enumeration: memType="enum"; break;
530  case MemberType_EnumValue: ASSERT(0); break;
531  case MemberType_Signal: memType="signal"; isFunc=TRUE; break;
532  case MemberType_Slot: memType="slot"; isFunc=TRUE; break;
533  case MemberType_Friend: memType="friend"; isFunc=TRUE; break;
534  case MemberType_DCOP: memType="dcop"; isFunc=TRUE; break;
535  case MemberType_Property: memType="property"; break;
536  case MemberType_Event: memType="event"; break;
537  case MemberType_Interface: memType="interface"; break;
538  case MemberType_Service: memType="service"; break;
539  case MemberType_Sequence: memType="sequence"; break;
540  case MemberType_Dictionary: memType="dictionary"; break;
541  }
542 
543  ti << " <member refid=\"" << memberOutputFileBase(md)
544  << "_1" << md->anchor() << "\" kind=\"" << memType << "\"><name>"
545  << convertToXML(md->name()) << "</name></member>" << endl;
546 
547  QCString scopeName;
548  if (md->getClassDef())
549  scopeName=md->getClassDef()->name();
550  else if (md->getNamespaceDef())
551  scopeName=md->getNamespaceDef()->name();
552 
553  t << " <memberdef kind=\"";
554  //enum { define_t,variable_t,typedef_t,enum_t,function_t } xmlType = function_t;
555  t << memType << "\" id=\"";
556  if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup)
557  {
558  t << md->getGroupDef()->getOutputFileBase();
559  }
560  else
561  {
562  t << memberOutputFileBase(md);
563  }
564  t << "_1" // encoded ':' character (see util.cpp:convertNameToFile)
565  << md->anchor();
566  t << "\" prot=\"";
567  switch(md->protection())
568  {
569  case Public: t << "public"; break;
570  case Protected: t << "protected"; break;
571  case Private: t << "private"; break;
572  case Package: t << "package"; break;
573  }
574  t << "\"";
575 
576  t << " static=\"";
577  if (md->isStatic()) t << "yes"; else t << "no";
578  t << "\"";
579 
580  if (md->isConstExpr())
581  {
582  t << " constexpr=\"yes\"";
583  }
584 
585  if (isFunc)
586  {
587  const ArgumentList &al = md->argumentList();
588  t << " const=\"";
589  if (al.constSpecifier) t << "yes"; else t << "no";
590  t << "\"";
591 
592  t << " explicit=\"";
593  if (md->isExplicit()) t << "yes"; else t << "no";
594  t << "\"";
595 
596  t << " inline=\"";
597  if (md->isInline()) t << "yes"; else t << "no";
598  t << "\"";
599 
601  {
602  t << " refqual=\"";
603  if (al.refQualifier==RefQualifierLValue) t << "lvalue"; else t << "rvalue";
604  t << "\"";
605  }
606 
607  if (md->isFinal())
608  {
609  t << " final=\"yes\"";
610  }
611 
612  if (md->isSealed())
613  {
614  t << " sealed=\"yes\"";
615  }
616 
617  if (md->isNew())
618  {
619  t << " new=\"yes\"";
620  }
621 
622  if (md->isOptional())
623  {
624  t << " optional=\"yes\"";
625  }
626 
627  if (md->isRequired())
628  {
629  t << " required=\"yes\"";
630  }
631 
632  if (md->isNoExcept())
633  {
634  t << " noexcept=\"yes\"";
635  }
636 
637  if (al.volatileSpecifier)
638  {
639  t << " volatile=\"yes\"";
640  }
641 
642  t << " virt=\"";
643  switch (md->virtualness())
644  {
645  case Normal: t << "non-virtual"; break;
646  case Virtual: t << "virtual"; break;
647  case Pure: t << "pure-virtual"; break;
648  default: ASSERT(0);
649  }
650  t << "\"";
651  }
652 
653  if (md->memberType() == MemberType_Enumeration)
654  {
655  t << " strong=\"";
656  if (md->isStrong()) t << "yes"; else t << "no";
657  t << "\"";
658  }
659 
660  if (md->memberType() == MemberType_Variable)
661  {
662  //ArgumentList *al = md->argumentList();
663  //t << " volatile=\"";
664  //if (al && al->volatileSpecifier) t << "yes"; else t << "no";
665 
666  t << " mutable=\"";
667  if (md->isMutable()) t << "yes"; else t << "no";
668  t << "\"";
669 
670  if (md->isInitonly())
671  {
672  t << " initonly=\"yes\"";
673  }
674  if (md->isAttribute())
675  {
676  t << " attribute=\"yes\"";
677  }
678  if (md->isUNOProperty())
679  {
680  t << " property=\"yes\"";
681  }
682  if (md->isReadonly())
683  {
684  t << " readonly=\"yes\"";
685  }
686  if (md->isBound())
687  {
688  t << " bound=\"yes\"";
689  }
690  if (md->isRemovable())
691  {
692  t << " removable=\"yes\"";
693  }
694  if (md->isConstrained())
695  {
696  t << " constrained=\"yes\"";
697  }
698  if (md->isTransient())
699  {
700  t << " transient=\"yes\"";
701  }
702  if (md->isMaybeVoid())
703  {
704  t << " maybevoid=\"yes\"";
705  }
706  if (md->isMaybeDefault())
707  {
708  t << " maybedefault=\"yes\"";
709  }
710  if (md->isMaybeAmbiguous())
711  {
712  t << " maybeambiguous=\"yes\"";
713  }
714  }
715  else if (md->memberType() == MemberType_Property)
716  {
717  t << " readable=\"";
718  if (md->isReadable()) t << "yes"; else t << "no";
719  t << "\"";
720 
721  t << " writable=\"";
722  if (md->isWritable()) t << "yes"; else t << "no";
723  t << "\"";
724 
725  t << " gettable=\"";
726  if (md->isGettable()) t << "yes"; else t << "no";
727  t << "\"";
728 
729  t << " privategettable=\"";
730  if (md->isPrivateGettable()) t << "yes"; else t << "no";
731  t << "\"";
732 
733  t << " protectedgettable=\"";
734  if (md->isProtectedGettable()) t << "yes"; else t << "no";
735  t << "\"";
736 
737  t << " settable=\"";
738  if (md->isSettable()) t << "yes"; else t << "no";
739  t << "\"";
740 
741  t << " privatesettable=\"";
742  if (md->isPrivateSettable()) t << "yes"; else t << "no";
743  t << "\"";
744 
745  t << " protectedsettable=\"";
746  if (md->isProtectedSettable()) t << "yes"; else t << "no";
747  t << "\"";
748 
749  if (md->isAssign() || md->isCopy() || md->isRetain() || md->isStrong() || md->isWeak())
750  {
751  t << " accessor=\"";
752  if (md->isAssign()) t << "assign";
753  else if (md->isCopy()) t << "copy";
754  else if (md->isRetain()) t << "retain";
755  else if (md->isStrong()) t << "strong";
756  else if (md->isWeak()) t << "weak";
757  t << "\"";
758  }
759  }
760  else if (md->memberType() == MemberType_Event)
761  {
762  t << " add=\"";
763  if (md->isAddable()) t << "yes"; else t << "no";
764  t << "\"";
765 
766  t << " remove=\"";
767  if (md->isRemovable()) t << "yes"; else t << "no";
768  t << "\"";
769 
770  t << " raise=\"";
771  if (md->isRaisable()) t << "yes"; else t << "no";
772  t << "\"";
773  }
774 
775  t << ">" << endl;
776 
777  if (md->memberType()!=MemberType_Define &&
779  )
780  {
782  QCString typeStr = md->typeString(); //replaceAnonymousScopes(md->typeString());
783  stripQualifiers(typeStr);
784  t << " <type>";
785  linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,typeStr);
786  t << "</type>" << endl;
787  t << " <definition>" << convertToXML(md->definition()) << "</definition>" << endl;
788  t << " <argsstring>" << convertToXML(md->argsString()) << "</argsstring>" << endl;
789  }
790 
791  if (md->memberType() == MemberType_Enumeration)
792  {
793  t << " <type>";
795  t << "</type>" << endl;
796  }
797 
798  t << " <name>" << convertToXML(md->name()) << "</name>" << endl;
799 
800  if (md->memberType() == MemberType_Property)
801  {
802  if (md->isReadable())
803  t << " <read>" << convertToXML(md->getReadAccessor()) << "</read>" << endl;
804  if (md->isWritable())
805  t << " <write>" << convertToXML(md->getWriteAccessor()) << "</write>" << endl;
806  }
807 
808  if (md->memberType()==MemberType_Variable && md->bitfieldString())
809  {
810  QCString bitfield = md->bitfieldString();
811  if (bitfield.at(0)==':') bitfield=bitfield.mid(1);
812  t << " <bitfield>" << convertToXML(bitfield) << "</bitfield>" << endl;
813  }
814 
815  const MemberDef *rmd = md->reimplements();
816  if (rmd)
817  {
818  t << " <reimplements refid=\""
819  << memberOutputFileBase(rmd) << "_1" << rmd->anchor() << "\">"
820  << convertToXML(rmd->name()) << "</reimplements>" << endl;
821  }
822  MemberList *rbml = md->reimplementedBy();
823  if (rbml)
824  {
825  MemberListIterator mli(*rbml);
826  for (mli.toFirst();(rmd=mli.current());++mli)
827  {
828  t << " <reimplementedby refid=\""
829  << memberOutputFileBase(rmd) << "_1" << rmd->anchor() << "\">"
830  << convertToXML(rmd->name()) << "</reimplementedby>" << endl;
831  }
832  }
833 
834  if (isFunc) //function
835  {
836  const ArgumentList &declAl = md->declArgumentList();
837  const ArgumentList &defAl = md->argumentList();
838  if (declAl.hasParameters())
839  {
840  auto defIt = defAl.begin();
841  for (const Argument &a : declAl)
842  {
843  //const Argument *defArg = defAli.current();
844  const Argument *defArg = 0;
845  if (defIt!=defAl.end())
846  {
847  defArg = &(*defIt);
848  ++defIt;
849  }
850  t << " <param>" << endl;
851  if (!a.attrib.isEmpty())
852  {
853  t << " <attributes>";
854  writeXMLString(t,a.attrib);
855  t << "</attributes>" << endl;
856  }
857  if (!a.type.isEmpty())
858  {
859  t << " <type>";
860  linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a.type);
861  t << "</type>" << endl;
862  }
863  if (!a.name.isEmpty())
864  {
865  t << " <declname>";
866  writeXMLString(t,a.name);
867  t << "</declname>" << endl;
868  }
869  if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
870  {
871  t << " <defname>";
872  writeXMLString(t,defArg->name);
873  t << "</defname>" << endl;
874  }
875  if (!a.array.isEmpty())
876  {
877  t << " <array>";
878  writeXMLString(t,a.array);
879  t << "</array>" << endl;
880  }
881  if (!a.defval.isEmpty())
882  {
883  t << " <defval>";
884  linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a.defval);
885  t << "</defval>" << endl;
886  }
887  if (defArg && defArg->hasDocumentation())
888  {
889  t << " <briefdescription>";
891  md->getOuterScope(),md,defArg->docs);
892  t << "</briefdescription>" << endl;
893  }
894  t << " </param>" << endl;
895  }
896  }
897  }
898  else if (md->memberType()==MemberType_Define &&
899  md->argsString()) // define
900  {
901  if (md->argumentList().empty()) // special case for "foo()" to
902  // distinguish it from "foo".
903  {
904  t << " <param></param>" << endl;
905  }
906  else
907  {
908  for (const Argument &a : md->argumentList())
909  {
910  t << " <param><defname>" << a.type << "</defname></param>" << endl;
911  }
912  }
913  }
914 
916  {
917  t << " <initializer>";
919  t << "</initializer>" << endl;
920  }
921 
922  if (md->excpString())
923  {
924  t << " <exceptions>";
925  linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,md->excpString());
926  t << "</exceptions>" << endl;
927  }
928 
929  if (md->memberType()==MemberType_Enumeration) // enum
930  {
931  const MemberList *enumFields = md->enumFieldList();
932  if (enumFields)
933  {
934  MemberListIterator emli(*enumFields);
935  const MemberDef *emd;
936  for (emli.toFirst();(emd=emli.current());++emli)
937  {
938  ti << " <member refid=\"" << memberOutputFileBase(md)
939  << "_1" << emd->anchor() << "\" kind=\"enumvalue\"><name>"
940  << convertToXML(emd->name()) << "</name></member>" << endl;
941 
942  t << " <enumvalue id=\"" << memberOutputFileBase(md) << "_1"
943  << emd->anchor() << "\" prot=\"";
944  switch (emd->protection())
945  {
946  case Public: t << "public"; break;
947  case Protected: t << "protected"; break;
948  case Private: t << "private"; break;
949  case Package: t << "package"; break;
950  }
951  t << "\">" << endl;
952  t << " <name>";
953  writeXMLString(t,emd->name());
954  t << "</name>" << endl;
955  if (!emd->initializer().isEmpty())
956  {
957  t << " <initializer>";
958  writeXMLString(t,emd->initializer());
959  t << "</initializer>" << endl;
960  }
961  t << " <briefdescription>" << endl;
962  writeXMLDocBlock(t,emd->briefFile(),emd->briefLine(),emd->getOuterScope(),emd,emd->briefDescription());
963  t << " </briefdescription>" << endl;
964  t << " <detaileddescription>" << endl;
965  writeXMLDocBlock(t,emd->docFile(),emd->docLine(),emd->getOuterScope(),emd,emd->documentation());
966  t << " </detaileddescription>" << endl;
967  t << " </enumvalue>" << endl;
968  }
969  }
970  }
971  t << " <briefdescription>" << endl;
972  writeXMLDocBlock(t,md->briefFile(),md->briefLine(),md->getOuterScope(),md,md->briefDescription());
973  t << " </briefdescription>" << endl;
974  t << " <detaileddescription>" << endl;
975  writeXMLDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
976  t << " </detaileddescription>" << endl;
977  t << " <inbodydescription>" << endl;
979  t << " </inbodydescription>" << endl;
980  if (md->getDefLine()!=-1)
981  {
982  t << " <location file=\""
983  << convertToXML(stripFromPath(md->getDefFileName())) << "\" line=\""
984  << md->getDefLine() << "\" column=\""
985  << md->getDefColumn() << "\"" ;
986  if (md->getStartBodyLine()!=-1)
987  {
988  FileDef *bodyDef = md->getBodyDef();
989  if (bodyDef)
990  {
991  t << " bodyfile=\"" << convertToXML(stripFromPath(bodyDef->absFilePath())) << "\"";
992  }
993  t << " bodystart=\"" << md->getStartBodyLine() << "\" bodyend=\""
994  << md->getEndBodyLine() << "\"";
995  }
996  if (md->getDeclLine()!=-1)
997  {
998  t << " declfile=\"" << convertToXML(stripFromPath(md->getDeclFileName())) << "\" declline=\""
999  << md->getDeclLine() << "\" declcolumn=\""
1000  << md->getDeclColumn() << "\"";
1001  }
1002  t << "/>" << endl;
1003  }
1004 
1005  //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
1006  MemberSDict *mdict = md->getReferencesMembers();
1007  if (mdict)
1008  {
1009  MemberSDict::Iterator mdi(*mdict);
1010  for (mdi.toFirst();(rmd=mdi.current());++mdi)
1011  {
1012  writeMemberReference(t,def,rmd,"references");
1013  }
1014  }
1015  mdict = md->getReferencedByMembers();
1016  if (mdict)
1017  {
1018  MemberSDict::Iterator mdi(*mdict);
1019  for (mdi.toFirst();(rmd=mdi.current());++mdi)
1020  {
1021  writeMemberReference(t,def,rmd,"referencedby");
1022  }
1023  }
1024 
1025  t << " </memberdef>" << endl;
1026 }
1027 
1028 // namespace members are also inserted in the file scope, but
1029 // to prevent this duplication in the XML output, we optionally filter those here.
1030 static bool memberVisible(const Definition *d,const MemberDef *md)
1031 {
1032  return Config_getBool(XML_NS_MEMB_FILE_SCOPE) ||
1034  md->getNamespaceDef()==0;
1035 }
1036 
1038  MemberList *ml,const char *kind,const char *header=0,
1039  const char *documentation=0)
1040 {
1041  if (ml==0) return;
1042  MemberListIterator mli(*ml);
1043  const MemberDef *md;
1044  int count=0;
1045  for (mli.toFirst();(md=mli.current());++mli)
1046  {
1047  if (memberVisible(d,md) && (md->memberType()!=MemberType_EnumValue) &&
1048  !md->isHidden())
1049  {
1050  count++;
1051  }
1052  }
1053  if (count==0) return; // empty list
1054 
1055  t << " <sectiondef kind=\"" << kind << "\">" << endl;
1056  if (header)
1057  {
1058  t << " <header>" << convertToXML(header) << "</header>" << endl;
1059  }
1060  if (documentation)
1061  {
1062  t << " <description>";
1063  writeXMLDocBlock(t,d->docFile(),d->docLine(),d,0,documentation);
1064  t << "</description>" << endl;
1065  }
1066  for (mli.toFirst();(md=mli.current());++mli)
1067  {
1068  if (memberVisible(d,md))
1069  {
1070  generateXMLForMember(md,ti,t,d);
1071  }
1072  }
1073  t << " </sectiondef>" << endl;
1074 }
1075 
1076 static void writeListOfAllMembers(const ClassDef *cd,FTextStream &t)
1077 {
1078  t << " <listofallmembers>" << endl;
1079  if (cd->memberNameInfoSDict())
1080  {
1082  MemberNameInfo *mni;
1083  for (mnii.toFirst();(mni=mnii.current());++mnii)
1084  {
1085  MemberNameInfoIterator mii(*mni);
1086  MemberInfo *mi;
1087  for (mii.toFirst();(mi=mii.current());++mii)
1088  {
1089  const MemberDef *md=mi->memberDef;
1090  if (!md->isAnonymous())
1091  {
1092  Protection prot = mi->prot;
1093  Specifier virt=md->virtualness();
1094  t << " <member refid=\"" << memberOutputFileBase(md) << "_1" <<
1095  md->anchor() << "\" prot=\"";
1096  switch (prot)
1097  {
1098  case Public: t << "public"; break;
1099  case Protected: t << "protected"; break;
1100  case Private: t << "private"; break;
1101  case Package: t << "package"; break;
1102  }
1103  t << "\" virt=\"";
1104  switch(virt)
1105  {
1106  case Normal: t << "non-virtual"; break;
1107  case Virtual: t << "virtual"; break;
1108  case Pure: t << "pure-virtual"; break;
1109  }
1110  t << "\"";
1111  if (!mi->ambiguityResolutionScope.isEmpty())
1112  {
1113  t << " ambiguityscope=\"" << convertToXML(mi->ambiguityResolutionScope) << "\"";
1114  }
1115  t << "><scope>" << convertToXML(cd->name()) << "</scope><name>" <<
1116  convertToXML(md->name()) << "</name></member>" << endl;
1117  }
1118  }
1119  }
1120  }
1121  t << " </listofallmembers>" << endl;
1122 }
1123 
1124 static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
1125 {
1126  if (cl)
1127  {
1128  ClassSDict::Iterator cli(*cl);
1129  const ClassDef *cd;
1130  for (cli.toFirst();(cd=cli.current());++cli)
1131  {
1132  if (!cd->isHidden() && !cd->isAnonymous())
1133  {
1134  t << " <innerclass refid=\"" << classOutputFileBase(cd)
1135  << "\" prot=\"";
1136  switch(cd->protection())
1137  {
1138  case Public: t << "public"; break;
1139  case Protected: t << "protected"; break;
1140  case Private: t << "private"; break;
1141  case Package: t << "package"; break;
1142  }
1143  t << "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
1144  }
1145  }
1146  }
1147 }
1148 
1150 {
1151  if (nl)
1152  {
1153  NamespaceSDict::Iterator nli(*nl);
1154  const NamespaceDef *nd;
1155  for (nli.toFirst();(nd=nli.current());++nli)
1156  {
1157  if (!nd->isHidden() && !nd->isAnonymous())
1158  {
1159  t << " <innernamespace refid=\"" << nd->getOutputFileBase()
1160  << "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
1161  }
1162  }
1163  }
1164 }
1165 
1166 static void writeInnerFiles(const FileList *fl,FTextStream &t)
1167 {
1168  if (fl)
1169  {
1170  QListIterator<FileDef> fli(*fl);
1171  FileDef *fd;
1172  for (fli.toFirst();(fd=fli.current());++fli)
1173  {
1174  t << " <innerfile refid=\"" << fd->getOutputFileBase()
1175  << "\">" << convertToXML(fd->name()) << "</innerfile>" << endl;
1176  }
1177  }
1178 }
1179 
1180 static void writeInnerPages(const PageSDict *pl,FTextStream &t)
1181 {
1182  if (pl)
1183  {
1184  PageSDict::Iterator pli(*pl);
1185  PageDef *pd;
1186  for (pli.toFirst();(pd=pli.current());++pli)
1187  {
1188  t << " <innerpage refid=\"" << pd->getOutputFileBase();
1189  if (pd->getGroupDef())
1190  {
1191  t << "_" << pd->name();
1192  }
1193  t << "\">" << convertToXML(pd->title()) << "</innerpage>" << endl;
1194  }
1195  }
1196 }
1197 
1198 static void writeInnerGroups(const GroupList *gl,FTextStream &t)
1199 {
1200  if (gl)
1201  {
1202  GroupListIterator gli(*gl);
1203  const GroupDef *sgd;
1204  for (gli.toFirst();(sgd=gli.current());++gli)
1205  {
1206  t << " <innergroup refid=\"" << sgd->getOutputFileBase()
1207  << "\">" << convertToXML(sgd->groupTitle())
1208  << "</innergroup>" << endl;
1209  }
1210  }
1211 }
1212 
1213 static void writeInnerDirs(const DirList *dl,FTextStream &t)
1214 {
1215  if (dl)
1216  {
1217  QListIterator<DirDef> subdirs(*dl);
1218  DirDef *subdir;
1219  for (subdirs.toFirst();(subdir=subdirs.current());++subdirs)
1220  {
1221  t << " <innerdir refid=\"" << subdir->getOutputFileBase()
1222  << "\">" << convertToXML(subdir->displayName()) << "</innerdir>" << endl;
1223  }
1224  }
1225 }
1226 
1227 static void generateXMLForClass(const ClassDef *cd,FTextStream &ti)
1228 {
1229  // + brief description
1230  // + detailed description
1231  // + template argument list(s)
1232  // - include file
1233  // + member groups
1234  // + inheritance diagram
1235  // + list of direct super classes
1236  // + list of direct sub classes
1237  // + list of inner classes
1238  // + collaboration diagram
1239  // + list of all members
1240  // + user defined member sections
1241  // + standard member sections
1242  // + detailed member documentation
1243  // - examples using the class
1244 
1245  if (cd->isReference()) return; // skip external references.
1246  if (cd->isHidden()) return; // skip hidden classes.
1247  if (cd->isAnonymous()) return; // skip anonymous compounds.
1248  if (cd->templateMaster()!=0) return; // skip generated template instances.
1249  if (cd->isArtificial()) return; // skip artificially created classes
1250 
1251  msg("Generating XML output for class %s\n",cd->name().data());
1252 
1253  ti << " <compound refid=\"" << classOutputFileBase(cd)
1254  << "\" kind=\"" << cd->compoundTypeString()
1255  << "\"><name>" << convertToXML(cd->name()) << "</name>" << endl;
1256 
1257  QCString outputDirectory = Config_getString(XML_OUTPUT);
1258  QCString fileName=outputDirectory+"/"+ classOutputFileBase(cd)+".xml";
1259  QFile f(fileName);
1260  if (!f.open(IO_WriteOnly))
1261  {
1262  err("Cannot open file %s for writing!\n",fileName.data());
1263  return;
1264  }
1265  FTextStream t(&f);
1266  //t.setEncoding(FTextStream::UnicodeUTF8);
1267 
1268  writeXMLHeader(t);
1269  t << " <compounddef id=\""
1270  << classOutputFileBase(cd) << "\" kind=\""
1271  << cd->compoundTypeString() << "\" language=\""
1272  << langToString(cd->getLanguage()) << "\" prot=\"";
1273  switch (cd->protection())
1274  {
1275  case Public: t << "public"; break;
1276  case Protected: t << "protected"; break;
1277  case Private: t << "private"; break;
1278  case Package: t << "package"; break;
1279  }
1280  if (cd->isFinal()) t << "\" final=\"yes";
1281  if (cd->isSealed()) t << "\" sealed=\"yes";
1282  if (cd->isAbstract()) t << "\" abstract=\"yes";
1283  t << "\">" << endl;
1284  t << " <compoundname>";
1285  writeXMLString(t,cd->name());
1286  t << "</compoundname>" << endl;
1287  if (cd->baseClasses())
1288  {
1289  BaseClassListIterator bcli(*cd->baseClasses());
1290  BaseClassDef *bcd;
1291  for (bcli.toFirst();(bcd=bcli.current());++bcli)
1292  {
1293  t << " <basecompoundref ";
1294  if (bcd->classDef->isLinkable())
1295  {
1296  t << "refid=\"" << classOutputFileBase(bcd->classDef) << "\" ";
1297  }
1298  t << "prot=\"";
1299  switch (bcd->prot)
1300  {
1301  case Public: t << "public"; break;
1302  case Protected: t << "protected"; break;
1303  case Private: t << "private"; break;
1304  case Package: ASSERT(0); break;
1305  }
1306  t << "\" virt=\"";
1307  switch(bcd->virt)
1308  {
1309  case Normal: t << "non-virtual"; break;
1310  case Virtual: t << "virtual"; break;
1311  case Pure: t <<"pure-virtual"; break;
1312  }
1313  t << "\">";
1314  if (!bcd->templSpecifiers.isEmpty())
1315  {
1316  t << convertToXML(
1318  bcd->classDef->name(),bcd->templSpecifiers)
1319  );
1320  }
1321  else
1322  {
1323  t << convertToXML(bcd->classDef->displayName());
1324  }
1325  t << "</basecompoundref>" << endl;
1326  }
1327  }
1328  if (cd->subClasses())
1329  {
1330  BaseClassListIterator bcli(*cd->subClasses());
1331  BaseClassDef *bcd;
1332  for (bcli.toFirst();(bcd=bcli.current());++bcli)
1333  {
1334  t << " <derivedcompoundref refid=\""
1335  << classOutputFileBase(bcd->classDef)
1336  << "\" prot=\"";
1337  switch (bcd->prot)
1338  {
1339  case Public: t << "public"; break;
1340  case Protected: t << "protected"; break;
1341  case Private: t << "private"; break;
1342  case Package: ASSERT(0); break;
1343  }
1344  t << "\" virt=\"";
1345  switch(bcd->virt)
1346  {
1347  case Normal: t << "non-virtual"; break;
1348  case Virtual: t << "virtual"; break;
1349  case Pure: t << "pure-virtual"; break;
1350  }
1351  t << "\">" << convertToXML(bcd->classDef->displayName())
1352  << "</derivedcompoundref>" << endl;
1353  }
1354  }
1355 
1356  IncludeInfo *ii=cd->includeInfo();
1357  if (ii)
1358  {
1359  QCString nm = ii->includeName;
1360  if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName();
1361  if (!nm.isEmpty())
1362  {
1363  t << " <includes";
1364  if (ii->fileDef && !ii->fileDef->isReference()) // TODO: support external references
1365  {
1366  t << " refid=\"" << ii->fileDef->getOutputFileBase() << "\"";
1367  }
1368  t << " local=\"" << (ii->local ? "yes" : "no") << "\">";
1369  t << nm;
1370  t << "</includes>" << endl;
1371  }
1372  }
1373 
1375 
1376  writeTemplateList(cd,t);
1377  if (cd->getMemberGroupSDict())
1378  {
1380  MemberGroup *mg;
1381  for (;(mg=mgli.current());++mgli)
1382  {
1383  generateXMLSection(cd,ti,t,mg->members(),"user-defined",mg->header(),
1384  mg->documentation());
1385  }
1386  }
1387 
1389  MemberList *ml;
1390  for (mli.toFirst();(ml=mli.current());++mli)
1391  {
1392  if ((ml->listType()&MemberListType_detailedLists)==0)
1393  {
1395  }
1396  }
1397 
1398  t << " <briefdescription>" << endl;
1399  writeXMLDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
1400  t << " </briefdescription>" << endl;
1401  t << " <detaileddescription>" << endl;
1402  writeXMLDocBlock(t,cd->docFile(),cd->docLine(),cd,0,cd->documentation());
1403  t << " </detaileddescription>" << endl;
1404  DotClassGraph inheritanceGraph(cd,Inheritance);
1405  if (!inheritanceGraph.isTrivial())
1406  {
1407  t << " <inheritancegraph>" << endl;
1408  inheritanceGraph.writeXML(t);
1409  t << " </inheritancegraph>" << endl;
1410  }
1411  DotClassGraph collaborationGraph(cd,Collaboration);
1412  if (!collaborationGraph.isTrivial())
1413  {
1414  t << " <collaborationgraph>" << endl;
1415  collaborationGraph.writeXML(t);
1416  t << " </collaborationgraph>" << endl;
1417  }
1418  t << " <location file=\""
1419  << convertToXML(stripFromPath(cd->getDefFileName())) << "\" line=\""
1420  << cd->getDefLine() << "\"" << " column=\""
1421  << cd->getDefColumn() << "\"" ;
1422  if (cd->getStartBodyLine()!=-1)
1423  {
1424  FileDef *bodyDef = cd->getBodyDef();
1425  if (bodyDef)
1426  {
1427  t << " bodyfile=\"" << convertToXML(stripFromPath(bodyDef->absFilePath())) << "\"";
1428  }
1429  t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
1430  << cd->getEndBodyLine() << "\"";
1431  }
1432  t << "/>" << endl;
1433  writeListOfAllMembers(cd,t);
1434  t << " </compounddef>" << endl;
1435  t << "</doxygen>" << endl;
1436 
1437  ti << " </compound>" << endl;
1438 }
1439 
1441 {
1442  // + contained class definitions
1443  // + contained namespace definitions
1444  // + member groups
1445  // + normal members
1446  // + brief desc
1447  // + detailed desc
1448  // + location
1449  // - files containing (parts of) the namespace definition
1450 
1451  if (nd->isReference() || nd->isHidden()) return; // skip external references
1452 
1453  ti << " <compound refid=\"" << nd->getOutputFileBase()
1454  << "\" kind=\"namespace\"" << "><name>"
1455  << convertToXML(nd->name()) << "</name>" << endl;
1456 
1457  QCString outputDirectory = Config_getString(XML_OUTPUT);
1458  QCString fileName=outputDirectory+"/"+nd->getOutputFileBase()+".xml";
1459  QFile f(fileName);
1460  if (!f.open(IO_WriteOnly))
1461  {
1462  err("Cannot open file %s for writing!\n",fileName.data());
1463  return;
1464  }
1465  FTextStream t(&f);
1466  //t.setEncoding(FTextStream::UnicodeUTF8);
1467 
1468  writeXMLHeader(t);
1469  t << " <compounddef id=\"" << nd->getOutputFileBase()
1470  << "\" kind=\"namespace\" language=\""
1471  << langToString(nd->getLanguage()) << "\">" << endl;
1472  t << " <compoundname>";
1473  writeXMLString(t,nd->name());
1474  t << "</compoundname>" << endl;
1475 
1478 
1479  if (nd->getMemberGroupSDict())
1480  {
1482  MemberGroup *mg;
1483  for (;(mg=mgli.current());++mgli)
1484  {
1485  generateXMLSection(nd,ti,t,mg->members(),"user-defined",mg->header(),
1486  mg->documentation());
1487  }
1488  }
1489 
1491  MemberList *ml;
1492  for (mli.toFirst();(ml=mli.current());++mli)
1493  {
1495  {
1497  }
1498  }
1499 
1500  t << " <briefdescription>" << endl;
1501  writeXMLDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
1502  t << " </briefdescription>" << endl;
1503  t << " <detaileddescription>" << endl;
1504  writeXMLDocBlock(t,nd->docFile(),nd->docLine(),nd,0,nd->documentation());
1505  t << " </detaileddescription>" << endl;
1506  t << " <location file=\""
1507  << convertToXML(stripFromPath(nd->getDefFileName())) << "\" line=\""
1508  << nd->getDefLine() << "\"" << " column=\""
1509  << nd->getDefColumn() << "\"/>" << endl ;
1510  t << " </compounddef>" << endl;
1511  t << "</doxygen>" << endl;
1512 
1513  ti << " </compound>" << endl;
1514 }
1515 
1517 {
1518  // + includes files
1519  // + includedby files
1520  // + include graph
1521  // + included by graph
1522  // + contained class definitions
1523  // + contained namespace definitions
1524  // + member groups
1525  // + normal members
1526  // + brief desc
1527  // + detailed desc
1528  // + source code
1529  // + location
1530  // - number of lines
1531 
1532  if (fd->isReference()) return; // skip external references
1533 
1534  ti << " <compound refid=\"" << fd->getOutputFileBase()
1535  << "\" kind=\"file\"><name>" << convertToXML(fd->name())
1536  << "</name>" << endl;
1537 
1538  QCString outputDirectory = Config_getString(XML_OUTPUT);
1539  QCString fileName=outputDirectory+"/"+fd->getOutputFileBase()+".xml";
1540  QFile f(fileName);
1541  if (!f.open(IO_WriteOnly))
1542  {
1543  err("Cannot open file %s for writing!\n",fileName.data());
1544  return;
1545  }
1546  FTextStream t(&f);
1547  //t.setEncoding(FTextStream::UnicodeUTF8);
1548 
1549  writeXMLHeader(t);
1550  t << " <compounddef id=\"" << fd->getOutputFileBase()
1551  << "\" kind=\"file\" language=\""
1552  << langToString(fd->getLanguage()) << "\">" << endl;
1553  t << " <compoundname>";
1554  writeXMLString(t,fd->name());
1555  t << "</compoundname>" << endl;
1556 
1557  IncludeInfo *inc;
1558 
1559  if (fd->includeFileList())
1560  {
1562  for (ili1.toFirst();(inc=ili1.current());++ili1)
1563  {
1564  t << " <includes";
1565  if (inc->fileDef && !inc->fileDef->isReference()) // TODO: support external references
1566  {
1567  t << " refid=\"" << inc->fileDef->getOutputFileBase() << "\"";
1568  }
1569  t << " local=\"" << (inc->local ? "yes" : "no") << "\">";
1570  t << inc->includeName;
1571  t << "</includes>" << endl;
1572  }
1573  }
1574 
1575  if (fd->includedByFileList())
1576  {
1578  for (ili2.toFirst();(inc=ili2.current());++ili2)
1579  {
1580  t << " <includedby";
1581  if (inc->fileDef && !inc->fileDef->isReference()) // TODO: support external references
1582  {
1583  t << " refid=\"" << inc->fileDef->getOutputFileBase() << "\"";
1584  }
1585  t << " local=\"" << (inc->local ? "yes" : "no") << "\">";
1586  t << inc->includeName;
1587  t << "</includedby>" << endl;
1588  }
1589  }
1590 
1591  DotInclDepGraph incDepGraph(fd,FALSE);
1592  if (!incDepGraph.isTrivial())
1593  {
1594  t << " <incdepgraph>" << endl;
1595  incDepGraph.writeXML(t);
1596  t << " </incdepgraph>" << endl;
1597  }
1598 
1599  DotInclDepGraph invIncDepGraph(fd,TRUE);
1600  if (!invIncDepGraph.isTrivial())
1601  {
1602  t << " <invincdepgraph>" << endl;
1603  invIncDepGraph.writeXML(t);
1604  t << " </invincdepgraph>" << endl;
1605  }
1606 
1607  if (fd->getClassSDict())
1608  {
1610  }
1611  if (fd->getNamespaceSDict())
1612  {
1614  }
1615 
1616  if (fd->getMemberGroupSDict())
1617  {
1619  MemberGroup *mg;
1620  for (;(mg=mgli.current());++mgli)
1621  {
1622  generateXMLSection(fd,ti,t,mg->members(),"user-defined",mg->header(),
1623  mg->documentation());
1624  }
1625  }
1626 
1628  MemberList *ml;
1629  for (mli.toFirst();(ml=mli.current());++mli)
1630  {
1632  {
1634  }
1635  }
1636 
1637  t << " <briefdescription>" << endl;
1638  writeXMLDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription());
1639  t << " </briefdescription>" << endl;
1640  t << " <detaileddescription>" << endl;
1641  writeXMLDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation());
1642  t << " </detaileddescription>" << endl;
1643  if (Config_getBool(XML_PROGRAMLISTING))
1644  {
1645  t << " <programlisting>" << endl;
1646  writeXMLCodeBlock(t,fd);
1647  t << " </programlisting>" << endl;
1648  }
1649  t << " <location file=\"" << convertToXML(stripFromPath(fd->getDefFileName())) << "\"/>" << endl;
1650  t << " </compounddef>" << endl;
1651  t << "</doxygen>" << endl;
1652 
1653  ti << " </compound>" << endl;
1654 }
1655 
1656 static void generateXMLForGroup(const GroupDef *gd,FTextStream &ti)
1657 {
1658  // + members
1659  // + member groups
1660  // + files
1661  // + classes
1662  // + namespaces
1663  // - packages
1664  // + pages
1665  // + child groups
1666  // - examples
1667  // + brief description
1668  // + detailed description
1669 
1670  if (gd->isReference()) return; // skip external references
1671 
1672  ti << " <compound refid=\"" << gd->getOutputFileBase()
1673  << "\" kind=\"group\"><name>" << convertToXML(gd->name()) << "</name>" << endl;
1674 
1675  QCString outputDirectory = Config_getString(XML_OUTPUT);
1676  QCString fileName=outputDirectory+"/"+gd->getOutputFileBase()+".xml";
1677  QFile f(fileName);
1678  if (!f.open(IO_WriteOnly))
1679  {
1680  err("Cannot open file %s for writing!\n",fileName.data());
1681  return;
1682  }
1683 
1684  FTextStream t(&f);
1685  //t.setEncoding(FTextStream::UnicodeUTF8);
1686  writeXMLHeader(t);
1687  t << " <compounddef id=\""
1688  << gd->getOutputFileBase() << "\" kind=\"group\">" << endl;
1689  t << " <compoundname>" << convertToXML(gd->name()) << "</compoundname>" << endl;
1690  t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl;
1691 
1692  writeInnerFiles(gd->getFiles(),t);
1693  writeInnerClasses(gd->getClasses(),t);
1695  writeInnerPages(gd->getPages(),t);
1696  writeInnerGroups(gd->getSubGroups(),t);
1697 
1698  if (gd->getMemberGroupSDict())
1699  {
1701  MemberGroup *mg;
1702  for (;(mg=mgli.current());++mgli)
1703  {
1704  generateXMLSection(gd,ti,t,mg->members(),"user-defined",mg->header(),
1705  mg->documentation());
1706  }
1707  }
1708 
1710  MemberList *ml;
1711  for (mli.toFirst();(ml=mli.current());++mli)
1712  {
1714  {
1716  }
1717  }
1718 
1719  t << " <briefdescription>" << endl;
1720  writeXMLDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription());
1721  t << " </briefdescription>" << endl;
1722  t << " <detaileddescription>" << endl;
1723  writeXMLDocBlock(t,gd->docFile(),gd->docLine(),gd,0,gd->documentation());
1724  t << " </detaileddescription>" << endl;
1725  t << " </compounddef>" << endl;
1726  t << "</doxygen>" << endl;
1727 
1728  ti << " </compound>" << endl;
1729 }
1730 
1732 {
1733  if (dd->isReference()) return; // skip external references
1734  ti << " <compound refid=\"" << dd->getOutputFileBase()
1735  << "\" kind=\"dir\"><name>" << convertToXML(dd->displayName())
1736  << "</name>" << endl;
1737 
1738  QCString outputDirectory = Config_getString(XML_OUTPUT);
1739  QCString fileName=outputDirectory+"/"+dd->getOutputFileBase()+".xml";
1740  QFile f(fileName);
1741  if (!f.open(IO_WriteOnly))
1742  {
1743  err("Cannot open file %s for writing!\n",fileName.data());
1744  return;
1745  }
1746 
1747  FTextStream t(&f);
1748  //t.setEncoding(FTextStream::UnicodeUTF8);
1749  writeXMLHeader(t);
1750  t << " <compounddef id=\""
1751  << dd->getOutputFileBase() << "\" kind=\"dir\">" << endl;
1752  t << " <compoundname>" << convertToXML(dd->displayName()) << "</compoundname>" << endl;
1753 
1754  writeInnerDirs(&dd->subDirs(),t);
1755  writeInnerFiles(dd->getFiles(),t);
1756 
1757  t << " <briefdescription>" << endl;
1758  writeXMLDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription());
1759  t << " </briefdescription>" << endl;
1760  t << " <detaileddescription>" << endl;
1761  writeXMLDocBlock(t,dd->docFile(),dd->docLine(),dd,0,dd->documentation());
1762  t << " </detaileddescription>" << endl;
1763  t << " <location file=\"" << convertToXML(stripFromPath(dd->name())) << "\"/>" << endl;
1764  t << " </compounddef>" << endl;
1765  t << "</doxygen>" << endl;
1766 
1767  ti << " </compound>" << endl;
1768 }
1769 
1770 static void generateXMLForPage(PageDef *pd,FTextStream &ti,bool isExample)
1771 {
1772  // + name
1773  // + title
1774  // + documentation
1775 
1776  const char *kindName = isExample ? "example" : "page";
1777 
1778  if (pd->isReference()) return;
1779 
1780  QCString pageName = pd->getOutputFileBase();
1781  if (pd->getGroupDef())
1782  {
1783  pageName+=(QCString)"_"+pd->name();
1784  }
1785  if (pageName=="index") pageName="indexpage"; // to prevent overwriting the generated index page.
1786 
1787  ti << " <compound refid=\"" << pageName
1788  << "\" kind=\"" << kindName << "\"><name>" << convertToXML(pd->name())
1789  << "</name>" << endl;
1790 
1791  QCString outputDirectory = Config_getString(XML_OUTPUT);
1792  QCString fileName=outputDirectory+"/"+pageName+".xml";
1793  QFile f(fileName);
1794  if (!f.open(IO_WriteOnly))
1795  {
1796  err("Cannot open file %s for writing!\n",fileName.data());
1797  return;
1798  }
1799 
1800  FTextStream t(&f);
1801  //t.setEncoding(FTextStream::UnicodeUTF8);
1802  writeXMLHeader(t);
1803  t << " <compounddef id=\"" << pageName;
1804  t << "\" kind=\"" << kindName << "\">" << endl;
1805  t << " <compoundname>" << convertToXML(pd->name())
1806  << "</compoundname>" << endl;
1807 
1808  if (pd==Doxygen::mainPage) // main page is special
1809  {
1810  QCString title;
1811  if (mainPageHasTitle())
1812  {
1814  }
1815  else
1816  {
1817  title = Config_getString(PROJECT_NAME);
1818  }
1819  t << " <title>" << convertToXML(convertCharEntitiesToUTF8(title))
1820  << "</title>" << endl;
1821  }
1822  else
1823  {
1824  const SectionInfo *si = SectionManager::instance().find(pd->name());
1825  if (si)
1826  {
1827  t << " <title>" << convertToXML(convertCharEntitiesToUTF8(filterTitle(si->title())))
1828  << "</title>" << endl;
1829  }
1830  }
1831  writeInnerPages(pd->getSubPages(),t);
1832  const SectionRefs &sectionRefs = pd->getSectionRefs();
1833  if (pd->localToc().isXmlEnabled() && !sectionRefs.empty())
1834  {
1835  t << " <tableofcontents>" << endl;
1836  int level=1,l;
1837  bool inLi[5]={ FALSE, FALSE, FALSE, FALSE, FALSE };
1838  int maxLevel = pd->localToc().xmlLevel();
1839  for (const SectionInfo *si : sectionRefs)
1840  {
1841  if (isSection(si->type()))
1842  {
1843  //printf(" level=%d title=%s\n",level,si->title.data());
1844  int nextLevel = (int)si->type();
1845  if (nextLevel>level)
1846  {
1847  for (l=level;l<nextLevel;l++)
1848  {
1849  if (l < maxLevel) t << " <tableofcontents>" << endl;
1850  }
1851  }
1852  else if (nextLevel<level)
1853  {
1854  for (l=level;l>nextLevel;l--)
1855  {
1856  if (l <= maxLevel && inLi[l]) t << " </tocsect>" << endl;
1857  inLi[l]=FALSE;
1858  if (l <= maxLevel) t << " </tableofcontents>" << endl;
1859  }
1860  }
1861  if (nextLevel <= maxLevel)
1862  {
1863  if (inLi[nextLevel]) t << " </tocsect>" << endl;
1864  QCString titleDoc = convertToXML(si->title());
1865  t << " <tocsect>" << endl;
1866  t << " <name>" << (si->title().isEmpty()?si->label():titleDoc) << "</name>" << endl;
1867  t << " <reference>" << convertToXML(pageName) << "_1" << convertToXML(si->label()) << "</reference>" << endl;
1868  inLi[nextLevel]=TRUE;
1869  level = nextLevel;
1870  }
1871  }
1872  }
1873  while (level>1 && level <= maxLevel)
1874  {
1875  if (inLi[level]) t << " </tocsect>" << endl;
1876  inLi[level]=FALSE;
1877  t << " </tableofcontents>" << endl;
1878  level--;
1879  }
1880  if (level <= maxLevel && inLi[level]) t << " </tocsect>" << endl;
1881  inLi[level]=FALSE;
1882  t << " </tableofcontents>" << endl;
1883  }
1884  t << " <briefdescription>" << endl;
1885  writeXMLDocBlock(t,pd->briefFile(),pd->briefLine(),pd,0,pd->briefDescription());
1886  t << " </briefdescription>" << endl;
1887  t << " <detaileddescription>" << endl;
1888  if (isExample)
1889  {
1890  writeXMLDocBlock(t,pd->docFile(),pd->docLine(),pd,0,
1891  pd->documentation()+"\n\\include "+pd->name());
1892  }
1893  else
1894  {
1895  writeXMLDocBlock(t,pd->docFile(),pd->docLine(),pd,0,
1896  pd->documentation());
1897  }
1898  t << " </detaileddescription>" << endl;
1899 
1900  t << " </compounddef>" << endl;
1901  t << "</doxygen>" << endl;
1902 
1903  ti << " </compound>" << endl;
1904 }
1905 
1907 {
1908  // + classes
1909  // + namespaces
1910  // + files
1911  // + groups
1912  // + related pages
1913  // - examples
1914 
1915  QCString outputDirectory = Config_getString(XML_OUTPUT);
1916  QDir xmlDir(outputDirectory);
1917  createSubDirs(xmlDir);
1918 
1919  ResourceMgr::instance().copyResource("index.xsd",outputDirectory);
1920 
1921  QCString fileName=outputDirectory+"/compound.xsd";
1922  QFile f(fileName);
1923  if (!f.open(IO_WriteOnly))
1924  {
1925  err("Cannot open file %s for writing!\n",fileName.data());
1926  return;
1927  }
1928 
1929  // write compound.xsd, but replace special marker with the entities
1930  QCString compound_xsd = ResourceMgr::instance().getAsString("compound.xsd");
1931  const char *startLine = compound_xsd.data();
1932  while (*startLine)
1933  {
1934  // find end of the line
1935  const char *endLine = startLine+1;
1936  while (*endLine && *(endLine-1)!='\n') endLine++; // skip to end of the line including \n
1937  int len=endLine-startLine;
1938  if (len>0)
1939  {
1940  QCString s(len+1);
1941  qstrncpy(s.rawData(),startLine,len);
1942  s[len]='\0';
1943  if (s.find("<!-- Automatically insert here the HTML entities -->")!=-1)
1944  {
1945  FTextStream t(&f);
1947  }
1948  else
1949  {
1950  f.writeBlock(startLine,len);
1951  }
1952  }
1953  startLine=endLine;
1954  }
1955  f.close();
1956 
1957  fileName=outputDirectory+"/index.xml";
1958  f.setName(fileName);
1959  if (!f.open(IO_WriteOnly))
1960  {
1961  err("Cannot open file %s for writing!\n",fileName.data());
1962  return;
1963  }
1964  FTextStream t(&f);
1965  //t.setEncoding(FTextStream::UnicodeUTF8);
1966 
1967  // write index header
1968  t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;;
1969  t << "<doxygenindex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
1970  t << "xsi:noNamespaceSchemaLocation=\"index.xsd\" ";
1971  t << "version=\"" << getDoxygenVersion() << "\">" << endl;
1972 
1973  {
1975  const ClassDef *cd;
1976  for (cli.toFirst();(cd=cli.current());++cli)
1977  {
1978  generateXMLForClass(cd,t);
1979  }
1980  }
1981  //{
1982  // ClassSDict::Iterator cli(Doxygen::hiddenClasses);
1983  // ClassDef *cd;
1984  // for (cli.toFirst();(cd=cli.current());++cli)
1985  // {
1986  // msg("Generating XML output for class %s\n",cd->name().data());
1987  // generateXMLForClass(cd,t);
1988  // }
1989  //}
1991  const NamespaceDef *nd;
1992  for (nli.toFirst();(nd=nli.current());++nli)
1993  {
1994  msg("Generating XML output for namespace %s\n",nd->name().data());
1996  }
1997  for (const auto &fn : *Doxygen::inputNameLinkedMap)
1998  {
1999  for (const auto &fd : *fn)
2000  {
2001  msg("Generating XML output for file %s\n",fd->name().data());
2002  generateXMLForFile(fd.get(),t);
2003  }
2004  }
2006  const GroupDef *gd;
2007  for (;(gd=gli.current());++gli)
2008  {
2009  msg("Generating XML output for group %s\n",gd->name().data());
2010  generateXMLForGroup(gd,t);
2011  }
2012  {
2014  PageDef *pd=0;
2015  for (pdi.toFirst();(pd=pdi.current());++pdi)
2016  {
2017  msg("Generating XML output for page %s\n",pd->name().data());
2018  generateXMLForPage(pd,t,FALSE);
2019  }
2020  }
2021  {
2022  DirDef *dir;
2024  for (sdi.toFirst();(dir=sdi.current());++sdi)
2025  {
2026  msg("Generate XML output for dir %s\n",dir->name().data());
2027  generateXMLForDir(dir,t);
2028  }
2029  }
2030  {
2032  PageDef *pd=0;
2033  for (pdi.toFirst();(pd=pdi.current());++pdi)
2034  {
2035  msg("Generating XML output for example %s\n",pd->name().data());
2036  generateXMLForPage(pd,t,TRUE);
2037  }
2038  }
2039  if (Doxygen::mainPage)
2040  {
2041  msg("Generating XML output for the main page\n");
2043  }
2044 
2045  //t << " </compoundlist>" << endl;
2046  t << "</doxygenindex>" << endl;
2047 
2049 }
2050 
2051 
qfile.h
NamespaceDef::getClassSDict
virtual ClassSDict * getClassSDict() const =0
MemberDef::initializer
virtual const QCString & initializer() const =0
getLanguageFromFileName
SrcLangExt getLanguageFromFileName(const QCString &fileName)
Definition: util.cpp:6876
GroupDef::getClasses
virtual ClassSDict * getClasses() const =0
MemberDef::isInitonly
virtual bool isInitonly() const =0
MemberDef::hasOneLineInitializer
virtual bool hasOneLineInitializer() const =0
writeMemberTemplateLists
static void writeMemberTemplateLists(const MemberDef *md, FTextStream &t)
Definition: xmlgen.cpp:384
MemberDef::argumentList
virtual const ArgumentList & argumentList() const =0
dotincldepgraph.h
xmlgen.h
BaseClassDef
Class that contains information about an inheritance relation.
Definition: classdef.h:487
ArgumentList
This class represents an function or template argument list.
Definition: arguments.h:60
Doxygen::classSDict
static ClassSDict * classSDict
Definition: doxygen.h:94
MemberSDict
A sorted dictionary of MemberDef objects.
Definition: memberlist.h:140
MemberDef::reimplementedBy
virtual MemberList * reimplementedBy() const =0
QCString::isEmpty
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition: qcstring.h:191
writeInnerFiles
static void writeInnerFiles(const FileList *fl, FTextStream &t)
Definition: xmlgen.cpp:1166
writeTemplateList
static void writeTemplateList(const ClassDef *cd, FTextStream &t)
Definition: xmlgen.cpp:389
QCString::rawData
char * rawData() const
Returns a writable pointer to the data.
Definition: qcstring.h:218
writeXMLHeader
static void writeXMLHeader(FTextStream &t)
Definition: xmlgen.cpp:152
langToString
QCString langToString(SrcLangExt lang)
Returns a string representation of lang.
Definition: util.cpp:7896
MemberDef::enumFieldList
virtual const MemberList * enumFieldList() const =0
RefQualifierNone
@ RefQualifierNone
Definition: arguments.h:48
MemberType_Variable
@ MemberType_Variable
Definition: types.h:200
LocalToc::isXmlEnabled
bool isXmlEnabled() const
Definition: types.h:261
MemberListIterator
An iterator for MemberDef objects in a MemberList.
Definition: memberlist.h:124
DotClassGraph::isTrivial
bool isTrivial() const
Definition: dotclassgraph.cpp:415
BaseClassDef::classDef
ClassDef * classDef
Class definition that this relation inherits from.
Definition: classdef.h:493
Definition::getReferencesMembers
virtual MemberSDict * getReferencesMembers() const =0
MemberListType_priStaticMethods
@ MemberListType_priStaticMethods
Definition: types.h:114
BaseClassListIterator
Iterator for a list of base classes.
Definition: classdef.h:536
FileDef::getMemberLists
virtual const QList< MemberList > & getMemberLists() const =0
MemberListType_priStaticAttribs
@ MemberListType_priStaticAttribs
Definition: types.h:125
Normal
@ Normal
Definition: types.h:30
PageDef
A model of a page symbol.
Definition: pagedef.h:30
NamespaceSDict
A sorted dictionary of NamespaceDef objects.
Definition: namespacedef.h:155
qstrncpy
char * qstrncpy(char *dst, const char *src, uint len)
Definition: qcstring.cpp:736
MemberDef::isUNOProperty
virtual bool isUNOProperty() const =0
MemberListType_signals
@ MemberListType_signals
Definition: types.h:131
Protection
Protection
Protection level of members.
Definition: types.h:27
XMLCodeGenerator::writeCodeLink
void writeCodeLink(const char *ref, const char *file, const char *anchor, const char *name, const char *tooltip)
Definition: xmlgen.cpp:239
membergroup.h
generateXML
void generateXML()
Definition: xmlgen.cpp:1906
Doxygen::parserManager
static ParserManager * parserManager
Definition: doxygen.h:130
Argument::hasDocumentation
bool hasDocumentation() const
Definition: arguments.h:31
TextGeneratorXMLImpl::TextGeneratorXMLImpl
TextGeneratorXMLImpl(FTextStream &t)
Definition: xmlgen.cpp:211
ClassDef
A abstract class representing of a compound symbol.
Definition: classdef.h:61
qtextstream.h
MemberDef::getDeclFileName
virtual QCString getDeclFileName() const =0
MemberListType_pacStaticAttribs
@ MemberListType_pacStaticAttribs
Definition: types.h:124
MemberType_EnumValue
@ MemberType_EnumValue
Definition: types.h:203
MemberListType_services
@ MemberListType_services
Definition: types.h:187
Private
@ Private
Definition: types.h:27
MemberDef::isTransient
virtual bool isTransient() const =0
MemberDef::definition
virtual const char * definition() const =0
MemberType_Signal
@ MemberType_Signal
Definition: types.h:204
pagedef.h
ClassDef::isLinkable
virtual bool isLinkable() const =0
return TRUE iff a link to this class is possible (either within this project, or as a cross-reference...
XMLCodeGenerator::m_external
QCString m_external
Definition: xmlgen.h:50
Definition::isArtificial
virtual bool isArtificial() const =0
MemberDef::isAttribute
virtual bool isAttribute() const =0
linkifyText
void linkifyText(const TextGeneratorIntf &out, const Definition *scope, const FileDef *fileScope, const Definition *self, const char *text, bool autoBreak, bool external, bool keepSpaces, int indentLevel)
Definition: util.cpp:1988
DocNode::accept
virtual void accept(DocVisitor *v)=0
ClassDef::getMemberLists
virtual const QList< MemberList > & getMemberLists() const =0
Returns the list containing the list of members sorted per type.
DotInclDepGraph::isTrivial
bool isTrivial() const
Definition: dotincldepgraph.cpp:209
MemberType_Interface
@ MemberType_Interface
Definition: types.h:210
memberdef.h
Definition::getDefLine
virtual int getDefLine() const =0
ArgumentList::constSpecifier
bool constSpecifier
Definition: arguments.h:82
filterTitle
QCString filterTitle(const QCString &title)
Definition: util.cpp:7591
MemberListType_priAttribs
@ MemberListType_priAttribs
Definition: types.h:121
GroupDef::getFiles
virtual FileList * getFiles() const =0
MemberDef::bitfieldString
virtual const char * bitfieldString() const =0
LocalToc::xmlLevel
int xmlLevel() const
Definition: types.h:266
FTextStream
Simplified and optimized version of QTextStream.
Definition: ftextstream.h:12
MemberDef::hasMultiLineInitializer
virtual bool hasMultiLineInitializer() const =0
MemberDef::isMaybeDefault
virtual bool isMaybeDefault() const =0
DirDef::subDirs
virtual const DirList & subDirs() const =0
section.h
ClassDef::isAbstract
virtual bool isAbstract() const =0
Returns TRUE if there is at least one pure virtual member in this class.
MemberGroup::documentation
const QCString & documentation() const
Definition: membergroup.h:68
namespacedef.h
stripQualifiers
static void stripQualifiers(QCString &typeStr)
Definition: xmlgen.cpp:464
Doxygen::directories
static DirSDict * directories
Definition: doxygen.h:128
QCString::resize
bool resize(uint newlen)
Resizes the string to hold newlen characters (this value should include the 0-terminator).
Definition: qcstring.h:227
PageDef::localToc
virtual LocalToc localToc() const =0
membername.h
MemberDef::isPrivateSettable
virtual bool isPrivateSettable() const =0
MemberDef::isInline
virtual bool isInline() const =0
MemberListType_pubTypes
@ MemberListType_pubTypes
Definition: types.h:126
qintdict.h
ArgumentList::volatileSpecifier
bool volatileSpecifier
Definition: arguments.h:84
SrcLangExt
SrcLangExt
Language as given by extension.
Definition: types.h:43
MemberType_Friend
@ MemberType_Friend
Definition: types.h:206
MemberListType_priSlots
@ MemberListType_priSlots
Definition: types.h:117
MemberType_Enumeration
@ MemberType_Enumeration
Definition: types.h:202
XMLCodeGenerator::finish
void finish()
Definition: xmlgen.cpp:336
DirDef::getFiles
virtual FileList * getFiles() const =0
QListIterator
The QListIterator class provides an iterator for QList collections.
Definition: qlist.h:128
writeInnerNamespaces
static void writeInnerNamespaces(const NamespaceSDict *nl, FTextStream &t)
Definition: xmlgen.cpp:1149
ResourceMgr::copyResource
bool copyResource(const char *name, const char *targetDir) const
Copies a registered resource to a given target directory.
Definition: resourcemgr.cpp:162
MemberListType_dcopMethods
@ MemberListType_dcopMethods
Definition: types.h:133
MemberDef::isWritable
virtual bool isWritable() const =0
Virtual
@ Virtual
Definition: types.h:30
Definition::isHidden
virtual bool isHidden() const =0
MemberType_Typedef
@ MemberType_Typedef
Definition: types.h:201
Specifier
Specifier
Virtualness of a member.
Definition: types.h:30
XMLCodeGenerator::startFontClass
void startFontClass(const char *colorClass)
Definition: xmlgen.cpp:300
MemberDef::isStatic
virtual bool isStatic() const =0
PageDef::getOutputFileBase
virtual QCString getOutputFileBase() const =0
FileDef::getMemberGroupSDict
virtual MemberGroupSDict * getMemberGroupSDict() const =0
MemberDef::isAssign
virtual bool isAssign() const =0
validatingParseDoc
DocRoot * validatingParseDoc(const char *fileName, int startLine, const Definition *ctx, const MemberDef *md, const char *input, bool indexWords, bool isExample, const char *exampleName, bool singleLine, bool linkFromIndex)
Definition: docparser.cpp:7574
MemberDef::templateArguments
virtual const ArgumentList & templateArguments() const =0
Definition::getDefFileExtension
virtual QCString getDefFileExtension() const =0
Public
@ Public
Definition: types.h:27
MemberDef::isMaybeAmbiguous
virtual bool isMaybeAmbiguous() const =0
FileDef::includeFileList
virtual QList< IncludeInfo > * includeFileList() const =0
MemberDef::isProtectedSettable
virtual bool isProtectedSettable() const =0
QFile::writeBlock
int writeBlock(const char *data, uint len)
Definition: qfile_unix.cpp:537
Package
@ Package
Definition: types.h:27
languages.l
l
Definition: languages.py:75
FileList
Class representing a list of FileDef objects.
Definition: filedef.h:191
MemberListType_decDictionaryMembers
@ MemberListType_decDictionaryMembers
Definition: types.h:192
Argument::docs
QCString docs
Definition: arguments.h:42
IO_WriteOnly
#define IO_WriteOnly
Definition: qiodevice.h:62
DocLinkInfo
Definition: outputgen.h:41
err
void err(const char *fmt,...)
Definition: message.cpp:238
Definition::docFile
virtual QCString docFile() const =0
MemberListType_friends
@ MemberListType_friends
Definition: types.h:132
MemberDef::typeString
virtual const char * typeString() const =0
DotClassGraph
Copyright (C) 1997-2019 by Dimitri van Heesch.
Definition: dotclassgraph.h:25
MemberDef::isRemovable
virtual bool isRemovable() const =0
writeMemberReference
static void writeMemberReference(FTextStream &t, const Definition *def, const MemberDef *rmd, const char *tagName)
Definition: xmlgen.cpp:441
Doxygen::inputNameLinkedMap
static FileNameLinkedMap * inputNameLinkedMap
Definition: doxygen.h:103
convertCharEntitiesToUTF8
QCString convertCharEntitiesToUTF8(const QCString &s)
Definition: util.cpp:5597
Definition::briefDescription
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
GroupDef::getPages
virtual PageSDict * getPages() const =0
version.h
MemberListType_proAttribs
@ MemberListType_proAttribs
Definition: types.h:119
writeCombineScript
static void writeCombineScript()
Definition: xmlgen.cpp:160
MemberDef::isBound
virtual bool isBound() const =0
Definition::getDefColumn
virtual int getDefColumn() const =0
MemberListType_pubMethods
@ MemberListType_pubMethods
Definition: types.h:107
DotInclDepGraph::writeXML
void writeXML(FTextStream &t)
Definition: dotincldepgraph.cpp:224
generateXMLForDir
static void generateXMLForDir(DirDef *dd, FTextStream &ti)
Definition: xmlgen.cpp:1731
ClassDef::isSealed
virtual bool isSealed() const =0
Returns TRUE if this class is marked as sealed.
filename.h
memberOutputFileBase
static QCString memberOutputFileBase(const MemberDef *md)
Definition: xmlgen.cpp:486
writeXMLString
void writeXMLString(FTextStream &t, const char *s)
Definition: xmlgen.cpp:113
MemberDef::anchor
virtual QCString anchor() const =0
Definition::getEndBodyLine
virtual int getEndBodyLine() const =0
stripFromPath
static QCString stripFromPath(const QCString &path, QStrList &l)
Definition: util.cpp:278
MemberDef::getOutputFileBase
virtual QCString getOutputFileBase() const =0
config.h
FileDef::name
virtual QCString name() const =0
TextGeneratorXMLImpl::m_t
FTextStream & m_t
Definition: xmlgen.cpp:224
SectionInfo::title
QCString title() const
Definition: section.h:67
FileDef::getClassSDict
virtual ClassSDict * getClassSDict() const =0
MemberDef::getDeclColumn
virtual int getDeclColumn() const =0
writeUtf8Char
const char * writeUtf8Char(FTextStream &t, const char *s)
Definition: util.cpp:6985
QCString
This is an alternative implementation of QCString.
Definition: qcstring.h:134
Definition::getSectionRefs
virtual const SectionRefs & getSectionRefs() const =0
returns the section dictionary, only of importance for pagedef
Definition::docLine
virtual int docLine() const =0
FileDef::docName
virtual const QCString & docName() const =0
GroupDef::getOutputFileBase
virtual QCString getOutputFileBase() const =0
mainPageHasTitle
bool mainPageHasTitle()
Definition: util.cpp:8431
NamespaceDef::getMemberGroupSDict
virtual MemberGroupSDict * getMemberGroupSDict() const =0
MemberListType_interfaces
@ MemberListType_interfaces
Definition: types.h:184
XmlSectionMapper::XmlSectionMapper
XmlSectionMapper()
Definition: xmlgen.cpp:66
GroupDef
A model of a group of symbols.
Definition: groupdef.h:48
DocNode
Abstract node interface with type information.
Definition: docparser.h:87
QFile::setName
void setName(const QString &name)
Definition: qfile.cpp:167
XMLCodeGenerator::m_refId
QCString m_refId
Definition: xmlgen.h:49
LinkedMap::find
const T * find(const char *k) const
find an element given the key.
Definition: linkedmap.h:39
ClassSDict
A sorted dictionary of ClassDef objects.
Definition: classlist.h:57
MemberListType_declarationLists
@ MemberListType_declarationLists
Definition: types.h:104
generateXMLForPage
static void generateXMLForPage(PageDef *pd, FTextStream &ti, bool isExample)
Definition: xmlgen.cpp:1770
FileDef
A model of a file symbol.
Definition: filedef.h:65
ParserManager::getCodeParser
CodeParserInterface & getCodeParser(const char *extension)
Gets the interface to the parser associated with given extension.
Definition: parserintf.h:227
writeXMLCodeString
void writeXMLCodeString(FTextStream &t, const char *s, int &col)
Definition: xmlgen.cpp:118
MemberGroup
A class representing a group of members.
Definition: membergroup.h:42
Config_getString
#define Config_getString(val)
Definition: config.h:34
MemberListType_decSequenceMembers
@ MemberListType_decSequenceMembers
Definition: types.h:190
MemberDef::documentation
virtual QCString documentation() const =0
MemberType_Service
@ MemberType_Service
Definition: types.h:211
SectionManager::instance
static SectionManager & instance()
returns a reference to the singleton
Definition: section.h:146
MemberDef::isMutable
virtual bool isMutable() const =0
ClassDef::protection
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
ResourceMgr::instance
static ResourceMgr & instance()
Returns the one and only instance of this class.
Definition: resourcemgr.cpp:35
MemberDef::getReadAccessor
virtual const char * getReadAccessor() const =0
MemberInfo::memberDef
MemberDef * memberDef
Definition: membername.h:46
BaseClassDef::prot
Protection prot
Protection level of the inheritance relation: Public, Protected, or Private.
Definition: classdef.h:503
PageSDict
Definition: pagedef.h:71
MemberDef
A model of a class/file/namespace member symbol.
Definition: memberdef.h:45
QCString::find
int find(char c, int index=0, bool cs=TRUE) const
Definition: qcstring.cpp:42
ClassDef::templateArguments
virtual const ArgumentList & templateArguments() const =0
Returns the template arguments of this class.
MemberInfo::prot
Protection prot
Definition: membername.h:47
TRUE
@ TRUE
Definition: mscgen_bool.h:29
outputgen.h
XMLCodeGenerator::m_isMemberRef
bool m_isMemberRef
Definition: xmlgen.h:52
FALSE
@ FALSE
Definition: mscgen_bool.h:28
dot.h
MemberType_Function
@ MemberType_Function
Definition: types.h:199
MemberDef::declArgumentList
virtual const ArgumentList & declArgumentList() const =0
generateXMLForGroup
static void generateXMLForGroup(const GroupDef *gd, FTextStream &ti)
Definition: xmlgen.cpp:1656
convertToXML
QCString convertToXML(const char *s, bool keepEntities)
Definition: util.cpp:5386
MemberListType_decProtoMembers
@ MemberListType_decProtoMembers
Definition: types.h:150
MemberDef::isCopy
virtual bool isCopy() const =0
MemberListType_pubSlots
@ MemberListType_pubSlots
Definition: types.h:115
generateXMLSection
static void generateXMLSection(const Definition *d, FTextStream &ti, FTextStream &t, MemberList *ml, const char *kind, const char *header=0, const char *documentation=0)
Definition: xmlgen.cpp:1037
MemberListType_decVarMembers
@ MemberListType_decVarMembers
Definition: types.h:154
IncludeInfo
Class representing the data associated with a #include statement.
Definition: filedef.h:46
classlist.h
MemberType_Slot
@ MemberType_Slot
Definition: types.h:205
QCString::mid
QCString mid(uint index, uint len=(uint) -1) const
Definition: qcstring.cpp:274
Definition::getOuterScope
virtual Definition * getOuterScope() const =0
SectionRefs::empty
bool empty() const
Definition: section.h:118
Doxygen::mainPage
static PageDef * mainPage
Definition: doxygen.h:98
RefQualifierLValue
@ RefQualifierLValue
Definition: arguments.h:49
Definition::briefFile
virtual QCString briefFile() const =0
HtmlEntityMapper::writeXMLSchema
void writeXMLSchema(FTextStream &t)
Definition: htmlentity.cpp:479
MemberListType_proStaticMethods
@ MemberListType_proStaticMethods
Definition: types.h:112
MemberDef::getNamespaceDef
virtual const NamespaceDef * getNamespaceDef() const =0
Definition::getLanguage
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
ClassDef::compoundTypeString
virtual QCString compoundTypeString() const =0
Returns the type of compound as a string.
generateXMLForFile
static void generateXMLForFile(FileDef *fd, FTextStream &ti)
Definition: xmlgen.cpp:1516
message.h
MemberDef::isConstrained
virtual bool isConstrained() const =0
QIntDict
Definition of QIntDict template class.
Definition: qintdict.h:47
MemberDef::getWriteAccessor
virtual const char * getWriteAccessor() const =0
NamespaceDef::getOutputFileBase
virtual QCString getOutputFileBase() const =0
PageDef::title
virtual QCString title() const =0
Definition::documentation
virtual QCString documentation() const =0
QIntDict< char >::insert
void insert(long k, const char *d)
Definition: qintdict.h:57
QCString::at
char & at(uint i) const
Returns a reference to the character at index i.
Definition: qcstring.h:329
XMLCodeGenerator::writeCodeAnchor
void writeCodeAnchor(const char *)
Definition: xmlgen.cpp:317
Argument
Copyright (C) 1997-2015 by Dimitri van Heesch.
Definition: arguments.h:27
MemberInfo::ambiguityResolutionScope
QCString ambiguityResolutionScope
Definition: membername.h:51
MemberList::listType
MemberListType listType() const
Definition: memberlist.h:38
DotClassGraph::writeXML
void writeXML(FTextStream &t)
Definition: dotclassgraph.cpp:527
ClassDef::baseClasses
virtual BaseClassList * baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
MemberDef::isMaybeVoid
virtual bool isMaybeVoid() const =0
XMLCodeGenerator::m_insideCodeLine
bool m_insideCodeLine
Definition: xmlgen.h:55
MemberDef::isNew
virtual bool isNew() const =0
arguments.h
GroupDef::getMemberGroupSDict
virtual MemberGroupSDict * getMemberGroupSDict() const =0
DefinitionIntf::TypeFile
@ TypeFile
Definition: definition.h:81
memberVisible
static bool memberVisible(const Definition *d, const MemberDef *md)
Definition: xmlgen.cpp:1030
NamespaceDef
An abstract interface of a namespace symbol.
Definition: namespacedef.h:38
MemberInfo
Data associated with a MemberDef in an inheritance relation.
Definition: membername.h:42
MemberDef::protection
virtual Protection protection() const =0
resourcemgr.h
XmlDocVisitor
Concrete visitor implementation for XML output.
Definition: xmldocvisitor.h:32
writeXMLCodeBlock
void writeXMLCodeBlock(FTextStream &t, FileDef *fd)
Definition: xmlgen.cpp:418
Definition::isAnonymous
virtual bool isAnonymous() const =0
MemberDef::isStrong
virtual bool isStrong() const =0
MemberListType_events
@ MemberListType_events
Definition: types.h:135
CodeParserInterface::parseCode
virtual void parseCode(CodeOutputInterface &codeOutIntf, const char *scopeName, const QCString &input, SrcLangExt lang, bool isExampleBlock, const char *exampleName=0, FileDef *fileDef=0, int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, const MemberDef *memberDef=0, bool showLineNumbers=TRUE, const Definition *searchCtx=0, bool collectXRefs=TRUE)=0
Parses a source file or fragment with the goal to produce highlighted and cross-referenced output.
doxygen.h
MemberDef::isGettable
virtual bool isGettable() const =0
QDir
Implementation of QDir class.
Definition: qdir.h:53
MemberType_DCOP
@ MemberType_DCOP
Definition: types.h:207
parserintf.h
Doxygen::groupSDict
static GroupSDict * groupSDict
Definition: doxygen.h:112
SIntDict< MemberGroup >::Iterator
friend class Iterator
Definition: sortdict.h:594
TextGeneratorXMLImpl
Implements TextGeneratorIntf for an XML stream.
Definition: xmlgen.cpp:209
MemberDef::isExplicit
virtual bool isExplicit() const =0
ArgumentList::hasParameters
bool hasParameters() const
Definition: arguments.h:65
language.h
MemberDef::briefDescription
virtual QCString briefDescription(bool abbr=FALSE) const =0
CodeParserInterface::resetCodeParserState
virtual void resetCodeParserState()=0
Resets the state of the code parser.
Definition::inbodyDocumentation
virtual QCString inbodyDocumentation() const =0
QFile::open
bool open(int)
Definition: qfile_unix.cpp:134
XMLCodeGenerator::endFontClass
void endFontClass()
Definition: xmlgen.cpp:311
BaseClassDef::virt
Specifier virt
Virtualness of the inheritance relation: Normal, or Virtual.
Definition: classdef.h:508
DefinitionIntf::definitionType
virtual DefType definitionType() const =0
getLanguageSpecificSeparator
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition: util.cpp:7921
QListIterator::current
type * current() const
Definition: qlist.h:147
MemberDef::isConstExpr
virtual bool isConstExpr() const =0
XMLCodeGenerator::startCodeLine
void startCodeLine(bool)
Definition: xmlgen.cpp:258
XMLCodeGenerator::endCodeLine
void endCodeLine()
Definition: xmlgen.cpp:286
defargs.h
docparser.h
MemberDef::getClassDef
virtual const ClassDef * getClassDef() const =0
XMLCodeGenerator::writeLineNumber
void writeLineNumber(const char *extRef, const char *compId, const char *anchorId, int l)
Definition: xmlgen.cpp:321
ClassDef::isFinal
virtual bool isFinal() const =0
Returns TRUE if this class is marked as final.
QCString::stripWhiteSpace
QCString stripWhiteSpace() const
Definition: qcstring.cpp:323
Definition
The common base class of all entity definitions found in the sources.
Definition: definition.h:100
ClassDef::includeInfo
virtual IncludeInfo * includeInfo() const =0
MemberDef::isWeak
virtual bool isWeak() const =0
MemberListType_pacAttribs
@ MemberListType_pacAttribs
Definition: types.h:120
XmlSectionMapper
Helper class mapping MemberList::ListType to a string representing.
Definition: xmlgen.cpp:64
MemberGroup::header
QCString header() const
Definition: membergroup.h:48
PageDef::getGroupDef
virtual GroupDef * getGroupDef() const =0
XMLCodeGenerator::codify
void codify(const char *text)
Generator for producing XML formatted source code.
Definition: xmlgen.cpp:229
ClassDef::subClasses
virtual BaseClassList * subClasses() const =0
Returns the list of sub classes that directly derive from this class.
FileDef::getOutputFileBase
virtual QCString getOutputFileBase() const =0
HtmlEntityMapper::instance
static HtmlEntityMapper * instance()
Returns the one and only instance of the HTML entity mapper.
Definition: htmlentity.cpp:343
insertTemplateSpecifierInScope
QCString insertTemplateSpecifierInScope(const QCString &scope, const QCString &templ)
Definition: util.cpp:5196
MemberListType_decEnumMembers
@ MemberListType_decEnumMembers
Definition: types.h:152
MemberListType_pacTypes
@ MemberListType_pacTypes
Definition: types.h:128
Collaboration
@ Collaboration
Definition: dotgraph.h:28
XMLCodeGenerator::m_t
FTextStream & m_t
Definition: xmlgen.h:48
Definition::getDefFileName
virtual QCString getDefFileName() const =0
MemberDef::isReadonly
virtual bool isReadonly() const =0
FileDef::getNamespaceSDict
virtual NamespaceSDict * getNamespaceSDict() const =0
GroupListIterator
An iterator for GroupDef objects in a GroupList.
Definition: groupdef.h:137
memberlist.h
ClassDef::displayName
virtual QCString displayName(bool includeScope=TRUE) const =0
Returns the name as it is appears in the documentation.
MemberDef::isSettable
virtual bool isSettable() const =0
MemberListType_priTypes
@ MemberListType_priTypes
Definition: types.h:129
DirDef::displayName
virtual QCString displayName(bool=TRUE) const =0
DirDef
A model of a directory symbol.
Definition: dirdef.h:45
MemberNameInfoIterator
Iterator for MemberInfo objects in a MemberNameInfo list.
Definition: membername.h:69
NamespaceDef::getNamespaceSDict
virtual const NamespaceSDict * getNamespaceSDict() const =0
MemberListType_pubStaticAttribs
@ MemberListType_pubStaticAttribs
Definition: types.h:122
dirdef.h
dotclassgraph.h
MemberType_Property
@ MemberType_Property
Definition: types.h:208
MemberDef::getGroupDef
virtual const GroupDef * getGroupDef() const =0
ResourceMgr::getAsString
QCString getAsString(const char *name) const
Gets the resource data as a C string.
Definition: resourcemgr.cpp:172
ClassDef::memberNameInfoSDict
virtual MemberNameInfoSDict * memberNameInfoSDict() const =0
Returns a dictionary of all members.
MemberDef::isAddable
virtual bool isAddable() const =0
MemberListType_decDefineMembers
@ MemberListType_decDefineMembers
Definition: types.h:149
MemberDef::isReadable
virtual bool isReadable() const =0
MemberType_Dictionary
@ MemberType_Dictionary
Definition: types.h:213
QListIterator::toFirst
type * toFirst()
Definition: qlist.h:136
MemberDef::virtualness
virtual Specifier virtualness(int count=0) const =0
MemberDef::reimplements
virtual MemberDef * reimplements() const =0
XMLCodeGenerator::m_normalHLNeedStartTag
bool m_normalHLNeedStartTag
Definition: xmlgen.h:56
MemberListType_proMethods
@ MemberListType_proMethods
Definition: types.h:108
QIntDict::find
type * find(long k) const
Definition: qintdict.h:63
MemberDef::excpString
virtual const char * excpString() const =0
MemberListType_decFuncMembers
@ MemberListType_decFuncMembers
Definition: types.h:153
createSubDirs
void createSubDirs(QDir &d)
Definition: util.cpp:5127
MemberListType_proTypes
@ MemberListType_proTypes
Definition: types.h:127
FileDef::includedByFileList
virtual QList< IncludeInfo > * includedByFileList() const =0
DirList
A list of directories.
Definition: dirdef.h:38
SDict< MemberDef >::Iterator
friend class Iterator
Definition: sortdict.h:285
TextGeneratorXMLImpl::writeString
void writeString(const char *s, bool) const
Definition: xmlgen.cpp:212
Protected
@ Protected
Definition: types.h:27
MemberListType_pacMethods
@ MemberListType_pacMethods
Definition: types.h:109
xmldocvisitor.h
MemberListType_proStaticAttribs
@ MemberListType_proStaticAttribs
Definition: types.h:123
TextGeneratorXMLImpl::writeLink
void writeLink(const char *extRef, const char *file, const char *anchor, const char *text) const
Definition: xmlgen.cpp:217
MemberListType_detailedLists
@ MemberListType_detailedLists
Definition: types.h:103
MemberDef::getDeclLine
virtual int getDeclLine() const =0
MemberDef::isOptional
virtual bool isOptional() const =0
XMLCodeGenerator::writeTooltip
void writeTooltip(const char *, const DocLinkInfo &, const char *, const char *, const SourceLinkInfo &, const SourceLinkInfo &)
Definition: xmlgen.cpp:252
MemberDef::isRaisable
virtual bool isRaisable() const =0
QCString::stripPrefix
bool stripPrefix(const char *prefix)
Definition: qcstring.cpp:229
QCString::data
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:209
GroupDef::getSubGroups
virtual GroupList * getSubGroups() const =0
QCString::prepend
QCString & prepend(const char *s)
Definition: qcstring.cpp:415
GroupDef::groupTitle
virtual const char * groupTitle() const =0
MemberListType_related
@ MemberListType_related
Definition: types.h:130
MemberListType_priMethods
@ MemberListType_priMethods
Definition: types.h:110
msg
void msg(const char *fmt,...)
Definition: message.cpp:107
writeInnerPages
static void writeInnerPages(const PageSDict *pl, FTextStream &t)
Definition: xmlgen.cpp:1180
CodeParserInterface
Abstract interface for code parsers.
Definition: parserintf.h:101
MemberType_Event
@ MemberType_Event
Definition: types.h:209
MemberListType_proSlots
@ MemberListType_proSlots
Definition: types.h:116
MemberListType_decTypedefMembers
@ MemberListType_decTypedefMembers
Definition: types.h:151
ClassDef::isReference
virtual bool isReference() const =0
Returns TRUE if this class is imported via a tag file.
ClassDef::getMemberGroupSDict
virtual MemberGroupSDict * getMemberGroupSDict() const =0
Returns the member groups defined for this class.
MemberDef::getFileDef
virtual const FileDef * getFileDef() const =0
XML_DB
#define XML_DB(x)
Copyright (C) 1997-2015 by Dimitri van Heesch.
Definition: xmlgen.cpp:54
MemberType_Sequence
@ MemberType_Sequence
Definition: types.h:212
IncludeInfo::local
bool local
Definition: filedef.h:51
MemberGroup::members
MemberList * members() const
Definition: membergroup.h:85
TextGeneratorXMLImpl::writeBreak
void writeBreak(int) const
Definition: xmlgen.cpp:216
SourceLinkInfo
Definition: outputgen.h:49
isSection
constexpr bool isSection(SectionType type)
return true if type is a section, and false if it is a page, anchor or table.
Definition: section.h:41
MemberNameInfo
Class representing all MemberInfo objects with the same name.
Definition: membername.h:57
Config_getBool
#define Config_getBool(val)
Definition: config.h:35
Inheritance
@ Inheritance
Definition: dotgraph.h:28
writeInnerClasses
static void writeInnerClasses(const ClassSDict *cl, FTextStream &t)
Definition: xmlgen.cpp:1124
DotInclDepGraph
Copyright (C) 1997-2019 by Dimitri van Heesch.
Definition: dotincldepgraph.h:26
IncludeInfo::fileDef
FileDef * fileDef
Definition: filedef.h:49
writeInnerDirs
static void writeInnerDirs(const DirList *dl, FTextStream &t)
Definition: xmlgen.cpp:1213
DefinitionIntf::TypeGroup
@ TypeGroup
Definition: definition.h:84
g_xmlSectionMapper
static XmlSectionMapper g_xmlSectionMapper
Definition: xmlgen.cpp:110
writeInnerGroups
static void writeInnerGroups(const GroupList *gl, FTextStream &t)
Definition: xmlgen.cpp:1198
XMLCodeGenerator::m_insideSpecialHL
bool m_insideSpecialHL
Definition: xmlgen.h:57
MemberListType_pubAttribs
@ MemberListType_pubAttribs
Definition: types.h:118
writeTemplateArgumentList
static void writeTemplateArgumentList(FTextStream &t, const ArgumentList &al, const Definition *scope, const FileDef *fileScope, int indent)
Definition: xmlgen.cpp:341
groupdef.h
qdir.h
GroupDef::getNamespaces
virtual NamespaceSDict * getNamespaces() const =0
NamespaceDef::getMemberLists
virtual const QList< MemberList > & getMemberLists() const =0
writeXMLLink
void writeXMLLink(FTextStream &t, const char *extRef, const char *compoundId, const char *anchorId, const char *text, const char *tooltip)
Definition: xmlgen.cpp:192
IncludeInfo::includeName
QCString includeName
Definition: filedef.h:50
MemberDef::isProtectedGettable
virtual bool isProtectedGettable() const =0
SectionRefs
class that represents a list of constant references to sections.
Definition: section.h:96
BaseClassDef::templSpecifiers
QCString templSpecifiers
Template arguments used for the base class.
Definition: classdef.h:511
MemberType_Define
@ MemberType_Define
Definition: types.h:198
ASSERT
#define ASSERT(x)
Definition: qglobal.h:591
XMLCodeGenerator::m_col
int m_col
Definition: xmlgen.h:53
XMLCodeGenerator::m_lineNumber
int m_lineNumber
Definition: xmlgen.h:51
generateXMLForMember
static void generateXMLForMember(const MemberDef *md, FTextStream &ti, FTextStream &t, const Definition *def)
Definition: xmlgen.cpp:497
GroupList
A list of GroupDef objects.
Definition: groupdef.h:127
Definition::isReference
virtual bool isReference() const =0
GroupDef::getMemberLists
virtual const QList< MemberList > & getMemberLists() const =0
writeListOfAllMembers
static void writeListOfAllMembers(const ClassDef *cd, FTextStream &t)
Definition: xmlgen.cpp:1076
Doxygen::pageSDict
static PageSDict * pageSDict
Definition: doxygen.h:97
MemberDef::enumBaseType
virtual QCString enumBaseType() const =0
Definition::name
virtual QCString name() const =0
generateXMLForClass
static void generateXMLForClass(const ClassDef *cd, FTextStream &ti)
Definition: xmlgen.cpp:1227
MemberListType_pacStaticMethods
@ MemberListType_pacStaticMethods
Definition: types.h:113
TextGeneratorIntf
Abstract interface for a hyperlinked text fragment.
Definition: util.h:66
Config_getInt
#define Config_getInt(val)
Definition: config.h:36
MemberDef::isRequired
virtual bool isRequired() const =0
endl
QTextStream & endl(QTextStream &s)
Definition: qtextstream.cpp:2030
XMLCodeGenerator
Copyright (C) 1997-2015 by Dimitri van Heesch.
Definition: xmlgen.h:21
Doxygen::namespaceSDict
static NamespaceSDict * namespaceSDict
Definition: doxygen.h:113
Definition::getStartBodyLine
virtual int getStartBodyLine() const =0
MemberListType_properties
@ MemberListType_properties
Definition: types.h:134
PageDef::getSubPages
virtual PageSDict * getSubPages() const =0
htmlentity.h
MemberDef::isFinal
virtual bool isFinal() const =0
Argument::name
QCString name
Definition: arguments.h:39
ClassDef::getClassSDict
virtual ClassSDict * getClassSDict() const =0
returns the classes nested into this class
MemberDef::isPrivateGettable
virtual bool isPrivateGettable() const =0
MemberDef::isNoExcept
virtual bool isNoExcept() const =0
ClassDef::templateMaster
virtual const ClassDef * templateMaster() const =0
Returns the template master of which this class is an instance.
SectionInfo
class that provide information about a section.
Definition: section.h:51
Definition::inbodyLine
virtual int inbodyLine() const =0
util.h
Copyright (C) 1997-2015 by Dimitri van Heesch.
MemberListType_pubStaticMethods
@ MemberListType_pubStaticMethods
Definition: types.h:111
Definition::briefLine
virtual int briefLine() const =0
Definition::getBodyDef
virtual FileDef * getBodyDef() const =0
MemberDef::isRetain
virtual bool isRetain() const =0
Definition::getReferencedByMembers
virtual MemberSDict * getReferencedByMembers() const =0
QFile::close
void close()
Definition: qfile_unix.cpp:614
ClassDef::getOutputFileBase
virtual QCString getOutputFileBase() const =0
Returns the unique base name (without extension) of the class's file on disk.
MemberDef::isSealed
virtual bool isSealed() const =0
QCString::fill
bool fill(char c, int len=-1)
Fills a string with a predefined character.
Definition: qcstring.h:245
qstrlen
uint qstrlen(const char *str)
Definition: qcstring.h:83
generateXMLForNamespace
static void generateXMLForNamespace(const NamespaceDef *nd, FTextStream &ti)
Definition: xmlgen.cpp:1440
MemberDef::memberType
virtual MemberType memberType() const =0
ArgumentList::refQualifier
RefQualifierType refQualifier
Definition: arguments.h:92
MemberList
A list of MemberDef objects.
Definition: memberlist.h:32
classOutputFileBase
static QCString classOutputFileBase(const ClassDef *cd)
Definition: xmlgen.cpp:477
QFile
The QFile class is an I/O device that operates on files.
Definition: qfile.h:51
MemberDef::getScopeString
virtual QCString getScopeString() const =0
Doxygen::exampleSDict
static PageSDict * exampleSDict
Definition: doxygen.h:96
DirDef::getOutputFileBase
virtual QCString getOutputFileBase() const =0
MemberDef::argsString
virtual const char * argsString() const =0
fileToString
QCString fileToString(const char *name, bool filter, bool isSourceCode)
Definition: util.cpp:2506
getDoxygenVersion
char * getDoxygenVersion(void)
Copyright (C) 1997-2015 by Dimitri van Heesch.
FileDef::absFilePath
virtual QCString absFilePath() const =0
writeXMLDocBlock
static void writeXMLDocBlock(FTextStream &t, const QCString &fileName, int lineNr, const Definition *scope, const MemberDef *md, const QCString &text)
Definition: xmlgen.cpp:394
Pure
@ Pure
Definition: types.h:30