Doxygen
groupdef.cpp
浏览该文件的文档.
1 /******************************************************************************
2  *
3  *
4  *
5  * Copyright (C) 1997-2015 by Dimitri van Heesch.
6  *
7  * Permission to use, copy, modify, and distribute this software and its
8  * documentation under the terms of the GNU General Public License is hereby
9  * granted. No representations are made about the suitability of this software
10  * for any purpose. It is provided "as is" without express or implied warranty.
11  * See the GNU General Public License for more details.
12  *
13  * Documents produced by Doxygen are derivative works derived from the
14  * input used in their production; they are not affected by this license.
15  *
16  */
17 
18 #include <algorithm>
19 #include <vector>
20 
21 #include <ctype.h>
22 
23 #include "groupdef.h"
24 #include "classdef.h"
25 #include "filedef.h"
26 #include "classlist.h"
27 #include "outputlist.h"
28 #include "namespacedef.h"
29 #include "language.h"
30 #include "util.h"
31 #include "memberlist.h"
32 #include "message.h"
33 #include "membergroup.h"
34 #include "doxygen.h"
35 #include "pagedef.h"
36 #include "docparser.h"
37 #include "searchindex.h"
38 #include "dot.h"
39 #include "dotgroupcollaboration.h"
40 #include "vhdldocgen.h"
41 #include "layout.h"
42 #include "arguments.h"
43 #include "entry.h"
44 #include "membername.h"
45 #include "dirdef.h"
46 #include "config.h"
47 #include "definitionimpl.h"
48 #include "regex.h"
49 
50 //---------------------------------------------------------------------------
51 
52 class GroupDefImpl : public DefinitionMixin<GroupDef>
53 {
54  public:
55  GroupDefImpl(const QCString &fileName,int line,const QCString &name,const QCString &title,const QCString &refFileName=QCString());
56  virtual ~GroupDefImpl();
57 
58  virtual DefType definitionType() const { return TypeGroup; }
59  virtual CodeSymbolType codeSymbolType() const { return CodeSymbolType::Default; }
60  virtual QCString getOutputFileBase() const;
61  virtual QCString anchor() const { return QCString(); }
62  virtual QCString displayName(bool=TRUE) const { return hasGroupTitle() ? m_title : DefinitionMixin::name(); }
63  virtual QCString groupTitle() const { return m_title; }
64  virtual void setGroupTitle( const QCString &newtitle );
65  virtual bool hasGroupTitle( ) const { return m_titleSet; }
66  virtual void addFile(const FileDef *def);
67  virtual bool addClass(const ClassDef *def);
68  virtual bool addConcept(const ConceptDef *def);
69  virtual bool addNamespace(const NamespaceDef *def);
70  virtual void addGroup(const GroupDef *def);
71  virtual void addPage(const PageDef *def);
72  virtual void addExample(const PageDef *def);
73  virtual void addDir(DirDef *dd);
74  virtual bool insertMember(const MemberDef *def,bool docOnly=FALSE);
75  virtual void removeMember(MemberDef *md);
76  virtual bool findGroup(const GroupDef *def) const; // true if def is a subgroup of this group
77  virtual void writeDocumentation(OutputList &ol);
78  virtual void writeMemberPages(OutputList &ol);
79  virtual void writeQuickMemberLinks(OutputList &ol,const MemberDef *currentMd) const;
80  virtual void writeTagFile(TextStream &);
81  virtual size_t numDocMembers() const;
82  virtual bool isLinkableInProject() const;
83  virtual bool isLinkable() const;
84  virtual bool isASubGroup() const;
85  virtual void computeAnchors();
86  virtual void countMembers();
87 
88  virtual void addMembersToMemberGroup();
90  virtual void findSectionsInDocumentation();
91 
92  virtual void addListReferences();
93  virtual void sortMemberLists();
94  virtual bool subGrouping() const { return m_subGrouping; }
95 
96  virtual void setGroupScope(Definition *d) { m_groupScope = d; }
97  virtual Definition *getGroupScope() const { return m_groupScope; }
98 
99  virtual MemberList *getMemberList(MemberListType lt) const;
100  virtual const MemberLists &getMemberLists() const { return m_memberLists; }
101 
102  /* user defined member groups */
103  virtual const MemberGroupList &getMemberGroups() const { return m_memberGroups; }
104 
105  virtual const FileList &getFiles() const { return m_fileList; }
106  virtual const ClassLinkedRefMap &getClasses() const { return m_classes; }
107  virtual const ConceptLinkedRefMap &getConcepts() const { return m_concepts; }
108  virtual const NamespaceLinkedRefMap &getNamespaces() const { return m_namespaces; }
109  virtual const GroupList &getSubGroups() const { return m_groups; }
110  virtual const PageLinkedRefMap &getPages() const { return m_pages; }
111  virtual const DirList & getDirs() const { return m_dirList; }
112  virtual const PageLinkedRefMap &getExamples() const { return m_examples; }
113  virtual bool hasDetailedDescription() const;
114  virtual void sortSubGroups();
115 
116  private:
117  void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
119  void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
123  void writeFiles(OutputList &ol,const QCString &title);
124  void writeNamespaces(OutputList &ol,const QCString &title);
125  void writeNestedGroups(OutputList &ol,const QCString &title);
126  void writeDirs(OutputList &ol,const QCString &title);
127  void writeClasses(OutputList &ol,const QCString &title);
128  void writeConcepts(OutputList &ol,const QCString &title);
129  void writeInlineClasses(OutputList &ol);
131  void writeDetailedDescription(OutputList &ol,const QCString &title);
133  void writeMemberGroups(OutputList &ol);
138  void writeAuthorSection(OutputList &ol);
139  void writeSummaryLinks(OutputList &ol) const;
140  void updateLanguage(const Definition *);
141 
142  QCString m_title; // title of the group
143  bool m_titleSet; // true if title is not the same as the name
144  QCString m_fileName; // base name of the generated file
145  FileList m_fileList; // list of files in the group
146  ClassLinkedRefMap m_classes; // list of classes in the group
147  ConceptLinkedRefMap m_concepts; // list of concepts in the group
148  NamespaceLinkedRefMap m_namespaces; // list of namespaces in the group
149  GroupList m_groups; // list of sub groups.
150  PageLinkedRefMap m_pages; // list of pages in the group
151  PageLinkedRefMap m_examples; // list of examples in the group
152  DirList m_dirList; // list of directories in the group
159 
160 };
161 
162 GroupDef *createGroupDef(const QCString &fileName,int line,const QCString &name,
163  const QCString &title,const QCString &refFileName)
164 {
165  return new GroupDefImpl(fileName,line,name,title,refFileName);
166 }
167 
168 
169 //---------------------------------------------------------------------------
170 
171 GroupDefImpl::GroupDefImpl(const QCString &df,int dl,const QCString &na,const QCString &t,
172  const QCString &refFileName) : DefinitionMixin(df,dl,1,na),
174 {
175  if (!refFileName.isEmpty())
176  {
177  m_fileName=stripExtension(refFileName);
178  }
179  else
180  {
181  m_fileName = convertNameToFile(QCString("group_")+na);
182  }
183  setGroupTitle( t );
184 
185  //visited = 0;
186  m_groupScope = 0;
187  m_subGrouping=Config_getBool(SUBGROUPING);
188 }
189 
191 {
192 }
193 
195 {
196  if ( !t.isEmpty())
197  {
198  m_title = t;
199  m_titleSet = TRUE;
200  }
201  else
202  {
203  m_title = name();
204  m_title[0]=(char)toupper(m_title[0]);
205  m_titleSet = FALSE;
206  }
207 }
208 
209 
211 {
212  for (const auto &mg : m_memberGroups)
213  {
214  mg->distributeMemberGroupDocumentation();
215  }
216 }
217 
219 {
222 
223  for (const auto &mg : m_memberGroups)
224  {
225  mg->findSectionsInDocumentation(this);
226  }
227 
228  for (auto &ml : m_memberLists)
229  {
230  if (ml->listType()&MemberListType_declarationLists)
231  {
232  ml->findSectionsInDocumentation(this);
233  }
234  }
235 }
236 
238 {
239  static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
240  if (def->isHidden()) return;
241  updateLanguage(def);
242  if (sortBriefDocs)
243  m_fileList.insert( std::upper_bound( m_fileList.begin(), m_fileList.end(), def,
244  [](const auto &fd1, const auto &fd2)
245  { return qstricmp(fd1->name(),fd2->name())<0; }),
246  def);
247  else
248  m_fileList.push_back(def);
249 }
250 
252 {
253  if (cd->isHidden()) return FALSE;
254  updateLanguage(cd);
255  QCString qn = cd->name();
256  if (m_classes.find(qn)==0)
257  {
258  m_classes.add(qn,cd);
259  return TRUE;
260  }
261  return FALSE;
262 }
263 
265 {
266  if (cd->isHidden()) return FALSE;
267  QCString qn = cd->name();
268  if (m_concepts.find(qn)==0)
269  {
270  m_concepts.add(qn,cd);
271  return TRUE;
272  }
273  return FALSE;
274 }
275 
277 {
278  //printf("adding namespace hidden=%d\n",def->isHidden());
279  if (def->isHidden()) return false;
280  if (m_namespaces.find(def->name())==0)
281  {
282  updateLanguage(def);
283  m_namespaces.add(def->name(),def);
284  return true;
285  }
286  return false;
287 }
288 
290 {
291  if (def->isHidden()) return;
292  m_dirList.push_back(def);
293 }
294 
296 {
297  if (def->isHidden()) return;
298  //printf("Making page %s part of a group\n",qPrint(def->name));
299  m_pages.add(def->name(),def);
300  const_cast<PageDef*>(def)->makePartOfGroup(this);
301 }
302 
304 {
305  if (def->isHidden()) return;
306  m_examples.add(def->name(),def);
307 }
308 
309 
311 {
312  for (auto &ml : m_memberLists)
313  {
314  if (ml->listType()&MemberListType_declarationLists)
315  {
317  }
318  }
319 }
320 
321 
322 bool GroupDefImpl::insertMember(const MemberDef *md,bool docOnly)
323 {
324  if (md->isHidden()) return FALSE;
325  updateLanguage(md);
326  //printf("GroupDef(%s)::insertMember(%s)\n", qPrint(title), qPrint(md->name()));
328  for (auto &srcMi : *mni)
329  {
330  const MemberDef *srcMd = srcMi->memberDef();
331  if (srcMd==md) return FALSE; // already added before!
332 
333  bool sameScope = srcMd->getOuterScope()==md->getOuterScope() || // same class or namespace
334  // both inside a file => definition and declaration do not have to be in the same file
337 
338  const ArgumentList &srcMdAl = srcMd->argumentList();
339  const ArgumentList &mdAl = md->argumentList();
340  const ArgumentList &tSrcMdAl = srcMd->templateArguments();
341  const ArgumentList &tMdAl = md->templateArguments();
342 
343  if (srcMd->isFunction() && md->isFunction() && // both are a function
344  (tSrcMdAl.size()==tMdAl.size()) && // same number of template arguments
345  matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),&srcMdAl,
346  md->getOuterScope(),md->getFileDef(),&mdAl,
347  TRUE
348  ) && // matching parameters
349  sameScope // both are found in the same scope
350  )
351  {
353  if (mdm && srcMd->getGroupAlias()==0)
354  {
355  mdm->setGroupAlias(srcMd);
356  }
357  else if (mdm && md!=srcMd->getGroupAlias())
358  {
359  mdm->setGroupAlias(srcMd->getGroupAlias());
360  }
361  return FALSE; // member is the same as one that is already added
362  }
363  }
364  mni->push_back(std::make_unique<MemberInfo>(md,md->protection(),md->virtualness(),FALSE));
365  //printf("Added member!\n");
367  switch(md->memberType())
368  {
369  case MemberType_Variable:
370  if (!docOnly)
371  {
373  }
375  break;
376  case MemberType_Function:
377  if (!docOnly)
378  {
380  }
382  break;
383  case MemberType_Typedef:
384  if (!docOnly)
385  {
387  }
389  break;
391  if (!docOnly)
392  {
394  }
396  break;
398  if (!docOnly)
399  {
401  }
403  break;
404  case MemberType_Define:
405  if (!docOnly)
406  {
408  }
410  break;
411  case MemberType_Signal:
412  if (!docOnly)
413  {
415  }
417  break;
418  case MemberType_Slot:
419  if (md->protection()==Public)
420  {
421  if (!docOnly)
422  {
424  }
426  }
427  else if (md->protection()==Protected)
428  {
429  if (!docOnly)
430  {
432  }
434  }
435  else
436  {
437  if (!docOnly)
438  {
440  }
442  }
443  break;
444  case MemberType_Event:
445  if (!docOnly)
446  {
448  }
450  break;
451  case MemberType_Property:
452  if (!docOnly)
453  {
455  }
457  break;
458  case MemberType_Friend:
459  if (!docOnly)
460  {
462  }
464  break;
465  default:
466  err("GroupDefImpl::insertMembers(): "
467  "member '%s' (typeid=%d) with scope '%s' inserted in group scope '%s'!\n",
468  qPrint(md->name()),md->memberType(),
469  md->getClassDef() ? qPrint(md->getClassDef()->name()) : "",
470  qPrint(name()));
471  }
472  return TRUE;
473 }
474 
476 {
477  // fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", qPrint(title), qPrint(md->name()));
479  if (mni)
480  {
482 
484  switch(md->memberType())
485  {
486  case MemberType_Variable:
489  break;
490  case MemberType_Function:
493  break;
494  case MemberType_Typedef:
497  break;
501  break;
505  break;
506  case MemberType_Define:
509  break;
510  case MemberType_Signal:
513  break;
514  case MemberType_Slot:
515  if (md->protection()==Public)
516  {
519  }
520  else if (md->protection()==Protected)
521  {
524  }
525  else
526  {
529  }
530  break;
531  case MemberType_Event:
534  break;
535  case MemberType_Property:
538  break;
539  case MemberType_Friend:
542  break;
543  default:
544  err("GroupDefImpl::removeMember(): unexpected member remove in file!\n");
545  }
546  }
547 }
548 
549 bool GroupDefImpl::findGroup(const GroupDef *def) const
550 {
551  if (this==def)
552  {
553  return TRUE;
554  }
555  for (const auto &gd : m_groups)
556  {
557  if (gd->findGroup(def))
558  {
559  return TRUE;
560  }
561  }
562  return FALSE;
563 }
564 
566 {
567  //printf("adding group '%s' to group '%s'\n",qPrint(def->name()),qPrint(name()));
568  //if (Config_getBool(SORT_MEMBER_DOCS))
569  // groupList->inSort(def);
570  //else
571  m_groups.push_back(def);
572 }
573 
575 {
576  return !partOfGroups().empty();
577 }
578 
580 {
581  for (auto &ml : m_memberLists)
582  {
583  ml->countDecMembers();
584  ml->countDocMembers();
585  }
586  for (const auto &mg : m_memberGroups)
587  {
588  mg->countDecMembers();
589  mg->countDocMembers();
590  }
591 }
592 
594 {
595  return m_fileList.size()+
596  m_classes.size()+
597  m_namespaces.size()+
598  m_groups.size()+
600  m_pages.size()+
601  m_examples.size();
602 }
603 
604 /*! Compute the HTML anchor names for all members in the group */
606 {
607  //printf("GroupDefImpl::computeAnchors()\n");
609 }
610 
612 {
613  tagFile << " <compound kind=\"group\">\n";
614  tagFile << " <name>" << convertToXML(name()) << "</name>\n";
615  tagFile << " <title>" << convertToXML(m_title) << "</title>\n";
616  tagFile << " <filename>" << addHtmlExtensionIfMissing(getOutputFileBase()) << "</filename>\n";
617  for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Group))
618  {
619  switch (lde->kind())
620  {
622  {
623  for (const auto &cd : m_classes)
624  {
625  if (cd->isLinkableInProject())
626  {
627  tagFile << " <class kind=\"" << cd->compoundTypeString()
628  << "\">" << convertToXML(cd->name()) << "</class>\n";
629  }
630  }
631  }
632  break;
634  {
635  for (const auto &cd : m_concepts)
636  {
637  if (cd->isLinkableInProject())
638  {
639  tagFile << " <concept>" << convertToXML(cd->name())
640  << "</concept>\n";
641  }
642  }
643  }
644  break;
646  {
647  for (const auto &nd : m_namespaces)
648  {
649  if (nd->isLinkableInProject())
650  {
651  tagFile << " <namespace>" << convertToXML(nd->name())
652  << "</namespace>\n";
653  }
654  }
655  }
656  break;
658  {
659  for (const auto &fd : m_fileList)
660  {
661  if (fd->isLinkableInProject())
662  {
663  tagFile << " <file>" << convertToXML(fd->name()) << "</file>\n";
664  }
665  }
666  }
667  break;
669  {
670  for (const auto &pd : m_pages)
671  {
672  QCString pageName = pd->getOutputFileBase();
673  if (pd->isLinkableInProject())
674  {
675  tagFile << " <page>" << convertToXML(pageName) << "</page>\n";
676  }
677  }
678  }
679  break;
681  {
682  for (const auto &dd : m_dirList)
683  {
684  if (dd->isLinkableInProject())
685  {
686  tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>\n";
687  }
688  }
689  }
690  break;
692  {
693  for (const auto &gd : m_groups)
694  {
695  if (gd->isVisible())
696  {
697  tagFile << " <subgroup>" << convertToXML(gd->name()) << "</subgroup>\n";
698  }
699  }
700  }
701  break;
703  {
704  const LayoutDocEntryMemberDecl *lmd = (const LayoutDocEntryMemberDecl*)lde.get();
705  MemberList * ml = getMemberList(lmd->type);
706  if (ml)
707  {
708  ml->writeTagFile(tagFile);
709  }
710  }
711  break;
713  {
714  for (const auto &mg : m_memberGroups)
715  {
716  mg->writeTagFile(tagFile);
717  }
718  }
719  break;
720  default:
721  break;
722  }
723  }
724  writeDocAnchorsToTagFile(tagFile);
725  tagFile << " </compound>\n";
726 }
727 
729 {
730  if ((!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF))
731  || !documentation().isEmpty() || !inbodyDocumentation().isEmpty()
732  )
733  {
734  ol.pushGeneratorState();
735  if (m_pages.size()!=numDocMembers()) // not only pages -> classical layout
736  {
737  ol.pushGeneratorState();
739  ol.writeRuler();
740  ol.popGeneratorState();
741  ol.pushGeneratorState();
743  ol.writeAnchor(QCString(),"details");
744  ol.popGeneratorState();
745  }
746  else
747  {
748  ol.disableAllBut(OutputGenerator::Man); // always print title for man page
749  }
750  ol.startGroupHeader();
751  ol.parseText(title);
752  ol.endGroupHeader();
753  ol.popGeneratorState();
754 
755  // repeat brief description
756  if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF))
757  {
759  QCString(),FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT));
760  }
761  // write separator between brief and details
762  if (!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF) &&
763  !documentation().isEmpty())
764  {
765  ol.pushGeneratorState();
768  // ol.newParagraph(); // FIXME:PARA
769  ol.enableAll();
772  ol.writeString("\n\n");
773  ol.popGeneratorState();
774  }
775 
776  // write detailed documentation
777  if (!documentation().isEmpty())
778  {
779  ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE,
780  QCString(),FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT));
781  }
782 
783  // write inbody documentation
784  if (!inbodyDocumentation().isEmpty())
785  {
787  QCString(),FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT));
788  }
789  }
790 }
791 
793 {
794  if (hasBriefDescription())
795  {
796  std::unique_ptr<IDocParser> parser { createDocParser() };
797  std::unique_ptr<DocRoot> rootNode { validatingParseDoc(*parser.get(),
798  briefFile(),briefLine(),this,0,
800  QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT)) };
801  if (rootNode && !rootNode->isEmpty())
802  {
803  ol.startParagraph();
804  ol.pushGeneratorState();
806  ol.writeString(" - ");
807  ol.popGeneratorState();
808  ol.writeDoc(rootNode.get(),this,0);
809  ol.pushGeneratorState();
811  ol.writeString(" \n");
813 
815  {
817  ol.startTextLink(QCString(),"details");
819  ol.endTextLink();
820  }
821  ol.popGeneratorState();
822  ol.endParagraph();
823  }
824  }
825  ol.writeSynopsis();
826 }
827 
829 {
830  if (Config_getBool(HAVE_DOT) /*&& Config_getBool(GROUP_GRAPHS)*/ )
831  {
832  DotGroupCollaboration graph(this);
833  if (!graph.isTrivial())
834  {
835  msg("Generating dependency graph for group %s\n",qPrint(qualifiedName()));
836  ol.pushGeneratorState();
838  //ol.startParagraph();
841  ol.endGroupCollaboration(graph);
842  //ol.endParagraph();
843  ol.popGeneratorState();
844  }
845  }
846 }
847 
849 {
850  // write list of files
851  if (!m_fileList.empty())
852  {
853  ol.startMemberHeader("files");
854  ol.parseText(title);
855  ol.endMemberHeader();
856  ol.startMemberList();
857  for (const auto &fd : m_fileList)
858  {
859  if (!fd->hasDocumentation()) continue;
861  ol.startMemberItem(fd->getOutputFileBase(),0);
863  ol.insertMemberAlign();
864  ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),QCString(),fd->name());
865  ol.endMemberItem();
866  if (!fd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
867  {
868  ol.startMemberDescription(fd->getOutputFileBase());
869  ol.generateDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE,
870  QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT));
872  }
874  }
875  ol.endMemberList();
876  }
877 }
878 
880 {
881  // write list of namespaces
882  m_namespaces.writeDeclaration(ol,title);
883 }
884 
886 {
887  // write list of groups
888  int count=0;
889  for (const auto &gd : m_groups)
890  {
891  if (gd->isVisible()) count++;
892  }
893  if (count>0)
894  {
895  ol.startMemberHeader("groups");
896  ol.parseText(title);
897  ol.endMemberHeader();
898  ol.startMemberList();
899  for (const auto &gd : m_groups)
900  {
901  if (gd->isVisible())
902  {
903  if (!gd->hasDocumentation()) continue;
905  ol.startMemberItem(gd->getOutputFileBase(),0);
906  //ol.docify(theTranslator->trGroup(FALSE,TRUE));
907  //ol.docify(" ");
908  ol.insertMemberAlign();
909  ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),QCString(),gd->groupTitle());
910  ol.endMemberItem();
911  if (!gd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
912  {
913  ol.startMemberDescription(gd->getOutputFileBase());
914  ol.generateDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE,
915  QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT));
917  }
919  }
920  }
921  ol.endMemberList();
922  }
923 }
924 
926 {
927  // write list of directories
928  if (!m_dirList.empty())
929  {
930  ol.startMemberHeader("dirs");
931  ol.parseText(title);
932  ol.endMemberHeader();
933  ol.startMemberList();
934  for(const auto dd : m_dirList)
935  {
936  if (!dd->hasDocumentation()) continue;
938  ol.startMemberItem(dd->getOutputFileBase(),0);
940  ol.insertMemberAlign();
941  ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),QCString(),dd->shortName());
942  ol.endMemberItem();
943  if (!dd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
944  {
945  ol.startMemberDescription(dd->getOutputFileBase());
946  ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,
947  QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT));
949  }
951  }
952 
953  ol.endMemberList();
954  }
955 }
956 
958 {
959  // write list of classes
960  m_classes.writeDeclaration(ol,0,title,FALSE);
961 }
962 
964 {
965  // write list of concepts
967 }
968 
970 {
972 }
973 
975 {
976  for (const auto *pd : m_pages)
977  {
978  if (!pd->isReference())
979  {
980  const SectionInfo *si=0;
981  if (pd->hasTitle() && !pd->name().isEmpty() &&
982  (si=SectionManager::instance().find(pd->name()))!=0)
983  {
985  ol.docify(si->title());
987  }
988  ol.startTextBlock();
989  ol.generateDoc(pd->docFile(),pd->docLine(),pd,0,(pd->documentation()+pd->inbodyDocumentation()),TRUE,FALSE,
990  QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT));
991  ol.endTextBlock();
992  }
993  }
994 }
995 
997 {
998  /* write user defined member groups */
999  for (const auto &mg : m_memberGroups)
1000  {
1001  mg->writeDeclarations(ol,0,0,0,this);
1002  }
1003 }
1004 
1006 {
1007  ol.startMemberSections();
1008 }
1009 
1011 {
1012  ol.endMemberSections();
1013 }
1014 
1016 {
1017  //printf("** GroupDefImpl::startMemberDocumentation()\n");
1018  if (Config_getBool(SEPARATE_MEMBER_PAGES))
1019  {
1020  ol.pushGeneratorState();
1023  }
1024 }
1025 
1027 {
1028  //printf("** GroupDefImpl::endMemberDocumentation()\n");
1029  if (Config_getBool(SEPARATE_MEMBER_PAGES))
1030  {
1031  ol.popGeneratorState();
1033  }
1034 }
1035 
1037 {
1038  // write Author section (Man only)
1039  ol.pushGeneratorState();
1041  ol.startGroupHeader();
1043  ol.endGroupHeader();
1045  ol.popGeneratorState();
1046 }
1047 
1049 {
1050  ol.pushGeneratorState();
1052  bool first=TRUE;
1053  SrcLangExt lang = getLanguage();
1054  for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Group))
1055  {
1056  if ((lde->kind()==LayoutDocEntry::GroupClasses && m_classes.declVisible()) ||
1058  (lde->kind()==LayoutDocEntry::GroupNamespaces && m_namespaces.declVisible(false)) ||
1059  (lde->kind()==LayoutDocEntry::GroupFiles && !m_fileList.empty()) ||
1060  (lde->kind()==LayoutDocEntry::GroupNestedGroups && !m_groups.empty()) ||
1061  (lde->kind()==LayoutDocEntry::GroupDirs && !m_dirList.empty())
1062  )
1063  {
1064  const LayoutDocEntrySection *ls = (const LayoutDocEntrySection*)lde.get();
1065  QCString label = lde->kind()==LayoutDocEntry::GroupClasses ? "nested-classes" :
1066  lde->kind()==LayoutDocEntry::GroupConcepts ? "concepts" :
1067  lde->kind()==LayoutDocEntry::GroupNamespaces ? "namespaces" :
1068  lde->kind()==LayoutDocEntry::GroupFiles ? "files" :
1069  lde->kind()==LayoutDocEntry::GroupNestedGroups ? "groups" :
1070  "dirs";
1071  ol.writeSummaryLink(QCString(),label,ls->title(lang),first);
1072  first=FALSE;
1073  }
1074  else if (lde->kind()==LayoutDocEntry::MemberDecl)
1075  {
1076  const LayoutDocEntryMemberDecl *lmd = (const LayoutDocEntryMemberDecl*)lde.get();
1077  MemberList * ml = getMemberList(lmd->type);
1078  if (ml && ml->declVisible())
1079  {
1081  first=FALSE;
1082  }
1083  }
1084  }
1085  if (!first)
1086  {
1087  ol.writeString(" </div>\n");
1088  }
1089  ol.popGeneratorState();
1090 }
1091 
1093 {
1094  //static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
1095  ol.pushGeneratorState();
1097 
1098  ol.startHeaderSection();
1099  writeSummaryLinks(ol);
1101  ol.pushGeneratorState();
1103  ol.parseText(m_title);
1104  ol.popGeneratorState();
1105  addGroupListToTitle(ol,this);
1106  ol.pushGeneratorState();
1109  ol.popGeneratorState();
1110  ol.pushGeneratorState();
1113  if (!m_title.isEmpty())
1114  {
1115  ol.writeString(" - ");
1116  ol.parseText(m_title);
1117  }
1118  ol.popGeneratorState();
1119  ol.endHeaderSection();
1120  ol.startContents();
1121 
1122  //---------------------------------------- start flexible part -------------------------------
1123 
1124  SrcLangExt lang=getLanguage();
1125  for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Group))
1126  {
1127  switch (lde->kind())
1128  {
1131  break;
1134  break;
1136  {
1137  const LayoutDocEntrySection *ls = (const LayoutDocEntrySection*)lde.get();
1138  writeClasses(ol,ls->title(lang));
1139  }
1140  break;
1142  {
1143  const LayoutDocEntrySection *ls = (const LayoutDocEntrySection*)lde.get();
1144  writeConcepts(ol,ls->title(lang));
1145  }
1146  break;
1148  {
1149  writeInlineClasses(ol);
1150  }
1151  break;
1153  {
1154  const LayoutDocEntrySection *ls = (const LayoutDocEntrySection*)lde.get();
1155  writeNamespaces(ol,ls->title(lang));
1156  }
1157  break;
1159  writeMemberGroups(ol);
1160  break;
1162  {
1163  const LayoutDocEntryMemberDecl *lmd = (const LayoutDocEntryMemberDecl*)lde.get();
1164  writeMemberDeclarations(ol,lmd->type,lmd->title(lang));
1165  }
1166  break;
1169  break;
1171  {
1172  const LayoutDocEntrySection *ls = (const LayoutDocEntrySection*)lde.get();
1173  writeDetailedDescription(ol,ls->title(lang));
1174  }
1175  break;
1178  break;
1180  {
1181  const LayoutDocEntryMemberDef *lmd = (const LayoutDocEntryMemberDef*)lde.get();
1182  writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
1183  }
1184  break;
1187  break;
1189  {
1190  const LayoutDocEntrySection *ls = (const LayoutDocEntrySection*)lde.get();
1191  writeNestedGroups(ol,ls->title(lang));
1192  }
1193  break;
1196  break;
1198  {
1199  const LayoutDocEntrySection *ls = (const LayoutDocEntrySection*)lde.get();
1200  writeDirs(ol,ls->title(lang));
1201  }
1202  break;
1204  {
1205  const LayoutDocEntrySection *ls = (const LayoutDocEntrySection*)lde.get();
1206  writeFiles(ol,ls->title(lang));
1207  }
1208  break;
1210  writeGroupGraph(ol);
1211  break;
1213  writeAuthorSection(ol);
1214  break;
1246  err("Internal inconsistency: member %d should not be part of "
1247  "LayoutDocManager::Group entry list\n",lde->kind());
1248  break;
1249  }
1250  }
1251 
1252  //---------------------------------------- end flexible part -------------------------------
1253 
1254  endFile(ol);
1255 
1256  ol.popGeneratorState();
1257 
1258  if (Config_getBool(SEPARATE_MEMBER_PAGES))
1259  {
1261  writeMemberPages(ol);
1262  }
1263 
1264 }
1265 
1267 {
1268  ol.pushGeneratorState();
1270 
1271  for (const auto &ml : m_memberLists)
1272  {
1273  if (ml->listType()&MemberListType_documentationLists)
1274  {
1275  ml->writeDocumentationPage(ol,name(),this);
1276  }
1277  }
1278 
1279  ol.popGeneratorState();
1280 }
1281 
1283 {
1284  static bool createSubDirs=Config_getBool(CREATE_SUBDIRS);
1285 
1286  ol.writeString(" <div class=\"navtab\">\n");
1287  ol.writeString(" <table>\n");
1288 
1289  for (const auto *md : m_allMemberList)
1290  {
1291  if (md->getGroupDef()==this && md->isLinkable() && !md->isEnumValue())
1292  {
1293  if (md->isLinkableInProject())
1294  {
1295  if (md==currentMd) // selected item => highlight
1296  {
1297  ol.writeString(" <tr><td class=\"navtabHL\">");
1298  }
1299  else
1300  {
1301  ol.writeString(" <tr><td class=\"navtab\">");
1302  }
1303  ol.writeString("<a class=\"navtab\" ");
1304  ol.writeString("href=\"");
1305  if (createSubDirs) ol.writeString("../../");
1306  ol.writeString(addHtmlExtensionIfMissing(md->getOutputFileBase())+"#"+md->anchor());
1307  ol.writeString("\">");
1308  ol.writeString(convertToHtml(md->localName()));
1309  ol.writeString("</a>");
1310  ol.writeString("</td></tr>\n");
1311  }
1312  }
1313  }
1314  ol.writeString(" </table>\n");
1315  ol.writeString(" </div>\n");
1316 }
1317 
1318 
1319 
1320 //---- helper functions ------------------------------------------------------
1321 
1322 void addClassToGroups(const Entry *root,ClassDef *cd)
1323 {
1324  for (const Grouping &g : root->groups)
1325  {
1327  if (gd && gd->addClass(cd))
1328  {
1330  if (cdm)
1331  {
1332  cdm->makePartOfGroup(gd);
1333  }
1334  //printf("Compound %s: in group %s\n",qPrint(cd->name()),gd->groupTitle());
1335  }
1336  }
1337 }
1338 
1339 void addConceptToGroups(const Entry *root,ConceptDef *cd)
1340 {
1341  for (const Grouping &g : root->groups)
1342  {
1344  if (gd && gd->addConcept(cd))
1345  {
1347  if (cdm)
1348  {
1349  cdm->makePartOfGroup(gd);
1350  }
1351  //printf("Compound %s: in group %s\n",qPrint(cd->name()),gd->groupTitle());
1352  }
1353  }
1354 }
1355 
1356 
1358 {
1359  //printf("root->groups.size()=%zu\n",root->groups.size());
1360  for (const Grouping &g : root->groups)
1361  {
1363  //printf("group '%s' gd=%p\n",qPrint(g.groupname),(void*)gd);
1364  if (gd && gd->addNamespace(nd))
1365  {
1367  if (ndm)
1368  {
1369  ndm->makePartOfGroup(gd);
1370  }
1371  //printf("Namespace %s: in group %s\n",qPrint(nd->name()),qPrint(gd->name()));
1372  }
1373  }
1374 }
1375 
1376 void addDirToGroups(const Entry *root,DirDef *dd)
1377 {
1378  //printf("*** root->groups.size()=%d\n",root->groups.size());
1379  for (const Grouping &g : root->groups)
1380  {
1382  //printf("group '%s'\n",qPrint(g->groupname));
1383  if (gd)
1384  {
1385  gd->addDir(dd);
1386  dd->makePartOfGroup(gd);
1387  //printf("Dir %s: in group %s\n",qPrint(dd->name()),qPrint(g->groupname));
1388  }
1389  }
1390 }
1391 
1392 void addGroupToGroups(const Entry *root,GroupDef *subGroup)
1393 {
1394  //printf("addGroupToGroups for %s groups=%d\n",qPrint(root->name),root->groups.size());
1395  for (const Grouping &g : root->groups)
1396  {
1398  if (gd)
1399  {
1400  if (gd==subGroup)
1401  {
1402  warn(root->fileName,root->startLine,"Refusing to add group %s to itself",
1403  qPrint(gd->name()));
1404  }
1405  else if (subGroup->findGroup(gd))
1406  {
1407  warn(root->fileName,root->startLine,"Refusing to add group %s to group %s, since the latter is already a "
1408  "subgroup of the former\n", qPrint(subGroup->name()),qPrint(gd->name()));
1409  }
1410  else if (!gd->findGroup(subGroup))
1411  {
1412  gd->addGroup(subGroup);
1413  subGroup->makePartOfGroup(gd);
1414  }
1415  }
1416  }
1417 }
1418 
1419 /*! Add a member to the group with the highest priority */
1420 void addMemberToGroups(const Entry *root,MemberDef *md)
1421 {
1422  //printf("addMemberToGroups: Root %p = %s, md %p=%s groups=%zu\n",
1423  // root, qPrint(root->name), md, qPrint(md->name()), root->groups.size() );
1424 
1425  // Search entry's group list for group with highest pri.
1427  GroupDef *fgd=0;
1428  for (const Grouping &g : root->groups)
1429  {
1430  GroupDef *gd=0;
1431  if (!g.groupname.isEmpty() &&
1433  g.pri >= pri)
1434  {
1435  if (fgd && gd!=fgd && g.pri==pri)
1436  {
1437  warn(root->fileName, root->startLine,
1438  "Member %s found in multiple %s groups! "
1439  "The member will be put in group %s, and not in group %s",
1440  qPrint(md->name()), Grouping::getGroupPriName( pri ),
1441  qPrint(gd->name()), qPrint(fgd->name())
1442  );
1443  }
1444 
1445  fgd = gd;
1446  pri = g.pri;
1447  }
1448  }
1449  //printf("fgd=%p\n",fgd);
1450 
1451  // put member into group defined by this entry?
1452  if (fgd)
1453  {
1454  GroupDef *mgd = const_cast<GroupDef*>(md->getGroupDef());
1455  //printf("mgd=%p\n",mgd);
1456  bool insertit = FALSE;
1457  if (mgd==0)
1458  {
1459  insertit = TRUE;
1460  }
1461  else if (mgd!=fgd)
1462  {
1463  bool moveit = FALSE;
1464 
1465  // move member from one group to another if
1466  // - the new one has a higher priority
1467  // - the new entry has the same priority, but with docs where the old one had no docs
1468  if (md->getGroupPri()<pri)
1469  {
1470  moveit = TRUE;
1471  }
1472  else
1473  {
1474  if (md->getGroupPri()==pri)
1475  {
1476  if (!root->doc.isEmpty() && !md->getGroupHasDocs())
1477  {
1478  moveit = TRUE;
1479  }
1480  else if (!root->doc.isEmpty() && md->getGroupHasDocs())
1481  {
1483  "Member documentation for %s found several times in %s groups!\n"
1484  "%s:%d: The member will remain in group %s, and won't be put into group %s",
1485  qPrint(md->name()), Grouping::getGroupPriName( pri ),
1486  qPrint(root->fileName), root->startLine,
1487  qPrint(mgd->name()),
1488  qPrint(fgd->name())
1489  );
1490  }
1491  }
1492  }
1493 
1494  if (moveit)
1495  {
1496  //printf("removeMember\n");
1497  mgd->removeMember(md);
1498  insertit = TRUE;
1499  }
1500  }
1501 
1502  if (insertit)
1503  {
1504  //printf("insertMember found at %s line %d: %s: related %s\n",
1505  // qPrint(md->getDefFileName()),md->getDefLine(),
1506  // qPrint(md->name()),qPrint(root->relates));
1507  bool success = fgd->insertMember(md);
1508  if (success)
1509  {
1511  if (mdm)
1512  {
1513  //printf("insertMember successful\n");
1514  mdm->setGroupDef(fgd,pri,root->fileName,root->startLine,!root->doc.isEmpty());
1516  if (cdm)
1517  {
1518  cdm->setGroupDefForAllMembers(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
1519  }
1520  if (mdm->isEnumerate() && mdm->getGroupDef() && md->isStrong())
1521  {
1522  for (const auto &emd : mdm->enumFieldList())
1523  {
1524  MemberDefMutable *emdm = toMemberDefMutable(emd);
1525  if (emdm && emdm->getGroupDef()==0)
1526  {
1527  emdm->setGroupDef(mdm->getGroupDef(),mdm->getGroupPri(),
1528  mdm->getGroupFileName(),mdm->getGroupStartLine(),
1529  mdm->getGroupHasDocs());
1530  }
1531  }
1532  }
1533  }
1534  }
1535  }
1536  }
1537 }
1538 
1539 
1540 void addExampleToGroups(const Entry *root,PageDef *eg)
1541 {
1542  for (const Grouping &g : root->groups)
1543  {
1545  if (gd)
1546  {
1547  gd->addExample(eg);
1548  eg->makePartOfGroup(gd);
1549  //printf("Example %s: in group %s\n",qPrint(eg->name()),s->data());
1550  }
1551  }
1552 }
1553 
1555 {
1556  return m_fileName;
1557 }
1558 
1560 {
1561  {
1562  const RefItemVector &xrefItems = xrefListItems();
1563  addRefItem(xrefItems,
1566  getOutputFileBase(),name(),
1567  QCString(),
1568  0
1569  );
1570  }
1571  for (const auto &mg : m_memberGroups)
1572  {
1573  mg->addListReferences(this);
1574  }
1575  for (auto &ml : m_memberLists)
1576  {
1577  if (ml->listType()&MemberListType_documentationLists)
1578  {
1579  ml->addListReferences(this);
1580  }
1581  }
1582 }
1583 
1585 {
1586  static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
1587  static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
1588  const auto &ml = m_memberLists.get(lt,MemberListContainer::Group);
1589  ml->setNeedsSorting(
1590  ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) ||
1591  ((ml->listType()&MemberListType_documentationLists) && sortMemberDocs));
1592  ml->push_back(md);
1593 }
1594 
1595 // performs a partial reordering to group elements together with the same scope
1596 template<class Vec>
1597 static void groupClassesWithSameScope(Vec &vec)
1598 {
1599  bool done=false;
1600  while (!done) // for each iteration
1601  {
1602  done=true;
1603  for (size_t i=0; i<vec.size(); i++) // go through all items
1604  {
1605  std::string qni = vec[i]->name().str();
1606  size_t posi = qni.rfind("::");
1607  if (posi!=std::string::npos)
1608  {
1609  std::string scope = qni.substr(0,posi);
1610  auto it = std::find_if( vec.begin(), vec.end(),
1611  [&](typename Vec::Ptr &cd)
1612  { return cd->name().str()==scope; });
1613  if (it!=vec.end())
1614  {
1615  size_t idx = std::distance(vec.begin(),it);
1616  if (i<idx) // parent scope located after child scope
1617  {
1618  // to avoid reordering elements with the same parent
1619  // we skip to the last one with the same scope
1620  size_t k = idx;
1621  while (k<vec.size() && vec[k]->name().str().substr(0,posi)==scope)
1622  {
1623  idx = k;
1624  k++;
1625  }
1626  // swap the items such that i is inserted after idx
1627  for (size_t j=i; j<idx; j++)
1628  {
1629  std::swap(vec[j],vec[j+1]);
1630  }
1631  done=false;
1632  }
1633  else if (idx<i && vec[i-1]->name().str().substr(0,posi)!=scope)
1634  {
1635  // parent scope is found before the item, and the item
1636  // has some other item with a different scope in front of it
1637  // move idx to the end of range with the same scope
1638  while (idx<i && vec[idx]->name().str().substr(0,posi)==scope)
1639  {
1640  idx++;
1641  }
1642  // swap the items such that i is just after idx
1643  for (size_t j=idx; j<i; j++)
1644  {
1645  std::swap(vec[j],vec[j+1]);
1646  }
1647  done=false;
1648  }
1649  }
1650  }
1651  }
1652  }
1653 }
1654 
1656 {
1657  for (auto &ml : m_memberLists)
1658  {
1659  if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
1660  }
1661  if (Config_getBool(SORT_BRIEF_DOCS))
1662  {
1663  std::sort(m_dirList.begin(), m_dirList.end(), compareDirDefs);
1664 
1665  auto classComp = [](const ClassLinkedRefMap::Ptr &c1,const ClassLinkedRefMap::Ptr &c2)
1666  {
1667  return Config_getBool(SORT_BY_SCOPE_NAME) ?
1668  qstricmp(c1->name(), c2->name())<0 :
1669  qstricmp(c1->className(), c2->className())<0;
1670  };
1671  std::sort(m_classes.begin(), m_classes.end(), classComp);
1672 
1673  auto namespaceComp = [](const NamespaceLinkedRefMap::Ptr &n1,const NamespaceLinkedRefMap::Ptr &n2)
1674  {
1675  return qstricmp(n1->name(),n2->name())<0;
1676  };
1677 
1678  std::sort(m_namespaces.begin(),m_namespaces.end(),namespaceComp);
1679  }
1680  else
1681  {
1684  }
1685 }
1686 
1688 {
1689  for (auto &ml : m_memberLists)
1690  {
1691  if (ml->listType()==lt)
1692  {
1693  return ml.get();
1694  }
1695  }
1696  return 0;
1697 }
1698 
1700 {
1701  static bool optimizeVhdl = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
1702 
1703  MemberList * ml = getMemberList(lt);
1704  if (optimizeVhdl && ml)
1705  {
1706  VhdlDocGen::writeVhdlDeclarations(ml,ol,this,0,0,0);
1707  return;
1708  }
1709  if (ml)
1710  {
1711  ml->writeDeclarations(ol,0,0,0,this,title,QCString());
1712  }
1713 }
1714 
1716 {
1717  MemberList * ml = getMemberList(lt);
1718  if (ml) ml->writeDocumentation(ol,name(),this,title);
1719 }
1720 
1722 {
1723  MemberList *ml = getMemberList(lt);
1724  if (ml) ml->remove(md);
1725 }
1726 
1728 {
1729  std::sort(m_groups.begin(),
1730  m_groups.end(),
1731  [](const auto &g1,const auto &g2)
1732  { return g1->groupTitle() < g2->groupTitle(); });
1733 }
1734 
1736 {
1737  return !isReference() && isLinkable();
1738 }
1739 
1741 {
1742  return hasUserDocumentation();
1743 }
1744 
1745 // let the "programming language" for a group depend on what is inserted into it.
1746 // First item that has an associated languages determines the language for the whole group.
1748 {
1750  {
1751  setLanguage(d->getLanguage());
1752  }
1753 }
1754 
1756 {
1757  static bool repeatBrief = Config_getBool(REPEAT_BRIEF);
1758  return ((!briefDescription().isEmpty() && repeatBrief) ||
1759  !documentation().isEmpty() ||
1760  !inbodyDocumentation().isEmpty()) &&
1761  (m_pages.size()!=numDocMembers());
1762 }
1763 
1764 // --- Cast functions
1765 
1767 {
1768  if (d==0) return 0;
1769  if (d && typeid(*d)==typeid(GroupDefImpl))
1770  {
1771  return static_cast<GroupDef*>(d);
1772  }
1773  else
1774  {
1775  return 0;
1776  }
1777 }
1778 
1780 {
1781  if (d==0) return 0;
1782  if (d && typeid(*d)==typeid(GroupDefImpl))
1783  {
1784  return static_cast<const GroupDef*>(d);
1785  }
1786  else
1787  {
1788  return 0;
1789  }
1790 }
1791 
1792 
GroupDefImpl::getNamespaces
virtual const NamespaceLinkedRefMap & getNamespaces() const
Definition: groupdef.cpp:123
DefinitionMixin< GroupDef >::briefFile
virtual QCString briefFile() const
Definition: definitionimpl.h:171
LayoutDocEntry::GroupPageDocs
@ GroupPageDocs
Definition: layout.h:65
LinkedRefMap::add
bool add(const char *k, T *obj)
Adds an object reference to the ordered vector if it was not added already.
Definition: linkedmap.h:284
ConceptDefMutable
Definition: conceptdef.h:42
DefinitionMixin< GroupDef >::hasUserDocumentation
virtual bool hasUserDocumentation() const
Definition: definitionimpl.h:177
OutputList::disableAllBut
void disableAllBut(OutputGenerator::OutputType o)
Definition: outputlist.cpp:76
DefinitionMixin< GroupDef >::isReference
virtual bool isReference() const
Definition: definitionimpl.h:183
SrcLangExt_Unknown
@ SrcLangExt_Unknown
Definition: types.h:43
Grouping::getGroupPriName
static const char * getGroupPriName(GroupPri_t priority)
Definition: types.h:78
OutputList::startMemberDescription
void startMemberDescription(const QCString &anchor, const QCString &inheritId=QCString(), bool typ=false)
Definition: outputlist.h:306
GroupDefImpl::getMemberGroups
virtual const MemberGroupList & getMemberGroups() const
Definition: groupdef.cpp:118
outputlist.h
OutputList::endGroupHeader
void endGroupHeader(int extraLevels=0)
Definition: outputlist.h:171
MemberListType_decEnumValMembers
@ MemberListType_decEnumValMembers
Definition: types.h:155
GroupDefImpl::definitionType
virtual DefType definitionType() const
Definition: groupdef.cpp:73
GroupDef::insertMember
virtual bool insertMember(const MemberDef *def, bool docOnly=FALSE)=0
LayoutDocEntryMemberDecl::type
MemberListType type
Definition: layout.h:101
OutputList::startMemberList
void startMemberList()
Definition: outputlist.h:197
LayoutDocEntryMemberDecl
Represents of a member declaration list with configurable title and subtitle.
Definition: layout.h:94
LayoutDocEntry::NamespaceNestedNamespaces
@ NamespaceNestedNamespaces
Definition: layout.h:52
GroupDefImpl::~GroupDefImpl
virtual ~GroupDefImpl()
Definition: groupdef.cpp:190
toGroupDef
GroupDef * toGroupDef(Definition *d)
Definition: groupdef.cpp:1766
GroupDefImpl::writeMemberDeclarations
void writeMemberDeclarations(OutputList &ol, MemberListType lt, const QCString &title)
Definition: groupdef.cpp:1699
MemberType_Variable
@ MemberType_Variable
Definition: types.h:278
ClassDefMutable
Definition: classdef.h:384
ConceptLinkedRefMap::writeDeclaration
void writeDeclaration(OutputList &ol, const QCString &header, bool localNames) const
Definition: conceptdef.cpp:662
GroupDefImpl::endMemberDocumentation
void endMemberDocumentation(OutputList &ol)
Definition: groupdef.cpp:1026
ConceptDef
Definition: conceptdef.h:22
toMemberDefMutable
MemberDefMutable * toMemberDefMutable(Definition *d)
Definition: memberdef.cpp:6125
OutputList::endMemberDeclaration
void endMemberDeclaration(const QCString &anchor, const QCString &inheritId)
Definition: outputlist.h:312
MemberListType_decEventMembers
@ MemberListType_decEventMembers
Definition: types.h:160
GroupDefImpl::m_fileName
QCString m_fileName
Definition: groupdef.cpp:159
membergroup.h
GroupDefImpl::getOutputFileBase
virtual QCString getOutputFileBase() const
Definition: groupdef.cpp:1554
LayoutDocEntry::GroupConcepts
@ GroupConcepts
Definition: layout.h:63
MemberListType
MemberListType
Definition: types.h:100
MemberListType_docProSlotMembers
@ MemberListType_docProSlotMembers
Definition: types.h:172
Entry::startLine
int startLine
start line of entry in the source
Definition: entry.h:291
GroupDefImpl::sortMemberLists
virtual void sortMemberLists()
Definition: groupdef.cpp:1655
Definition
The common base class of all entity definitions found in the sources.
Definition: definition.h:76
MemberListType_docEnumMembers
@ MemberListType_docEnumMembers
Definition: types.h:167
GroupDefImpl::codeSymbolType
virtual CodeSymbolType codeSymbolType() const
Definition: groupdef.cpp:74
LayoutDocEntry::GroupFiles
@ GroupFiles
Definition: layout.h:64
DefinitionMixin< GroupDef >::xrefListItems
virtual const RefItemVector & xrefListItems() const
Definition: definitionimpl.h:192
GroupDefImpl::insertMember
virtual bool insertMember(const MemberDef *def, bool docOnly=FALSE)
Definition: groupdef.cpp:322
LayoutDocEntry::NamespaceInlineClasses
@ NamespaceInlineClasses
Definition: layout.h:54
NamespaceDef
An abstract interface of a namespace symbol.
Definition: namespacedef.h:54
MemberType_EnumValue
@ MemberType_EnumValue
Definition: types.h:281
LayoutDocEntry::MemberDef
@ MemberDef
Definition: layout.h:38
GroupDefImpl::writeConcepts
void writeConcepts(OutputList &ol, const QCString &title)
Definition: groupdef.cpp:963
LayoutDocEntry::FileClasses
@ FileClasses
Definition: layout.h:57
MemberListType_decProSlotMembers
@ MemberListType_decProSlotMembers
Definition: types.h:157
DirList
A list of directories.
Definition: dirdef.h:181
HLI_Modules
@ HLI_Modules
Definition: index.h:144
MemberType_Signal
@ MemberType_Signal
Definition: types.h:282
ClassLinkedRefMap::writeDeclaration
void writeDeclaration(OutputList &ol, const ClassDef::CompoundType *filter, const QCString &header, bool localNames) const
Definition: classlist.cpp:53
OutputList::docify
void docify(const QCString &s)
Definition: outputlist.h:137
GroupDefImpl::getSubGroups
virtual const GroupList & getSubGroups() const
Definition: groupdef.cpp:124
GroupDefImpl::subGrouping
virtual bool subGrouping() const
Definition: groupdef.cpp:109
pagedef.h
LayoutDocEntry::ConceptDefinition
@ ConceptDefinition
Definition: layout.h:49
Grouping::pri
GroupPri_t pri
priority of this definition
Definition: types.h:96
DefinitionMixin< GroupDef >::writeDocAnchorsToTagFile
virtual void writeDocAnchorsToTagFile(TextStream &fs) const
Definition: definitionimpl.h:268
MemberDef::getGroupPri
virtual Grouping::GroupPri_t getGroupPri() const =0
QCString::length
uint length() const
Returns the length of the string, not counting the 0-terminator.
Definition: qcstring.h:147
OutputList::endTitleHead
void endTitleHead(const QCString &fileName, const QCString &name)
Definition: outputlist.h:101
ArgumentList
This class represents an function or template argument list.
Definition: arguments.h:59
MemberDef::getGroupFileName
virtual QCString getGroupFileName() const =0
OutputList::endMemberDescription
void endMemberDescription()
Definition: outputlist.h:308
GroupDefImpl::m_titleSet
bool m_titleSet
Definition: groupdef.cpp:158
MemberLists::get
const std::unique_ptr< MemberList > & get(MemberListType lt, MemberListContainer con)
Definition: memberlist.h:142
DirDef
A model of a directory symbol.
Definition: dirdef.h:110
GroupDefImpl::getGroupScope
virtual Definition * getGroupScope() const
Definition: groupdef.cpp:112
GroupDefImpl::findGroup
virtual bool findGroup(const GroupDef *def) const
Definition: groupdef.cpp:549
DefinitionMixin< GroupDef >::docFile
virtual QCString docFile() const
Definition: definitionimpl.h:164
GroupDefImpl::startMemberDeclarations
void startMemberDeclarations(OutputList &ol)
Definition: groupdef.cpp:1005
QCString::isEmpty
bool isEmpty() const
Returns TRUE iff the string is empty
Definition: qcstring.h:144
MemberListType_allMembersList
@ MemberListType_allMembersList
Definition: types.h:147
GroupDefImpl::writeMemberDocumentation
void writeMemberDocumentation(OutputList &ol, MemberListType lt, const QCString &title)
Definition: groupdef.cpp:1715
GroupDefImpl::removeMemberFromList
void removeMemberFromList(MemberListType lt, MemberDef *md)
Definition: groupdef.cpp:1721
namespacedef.h
DefinitionMixin< GroupDef >::partOfGroups
virtual const GroupList & partOfGroups() const
Definition: definitionimpl.h:190
OutputList::startMemberSections
void startMemberSections()
Definition: outputlist.h:177
OutputList::writeString
void writeString(const QCString &text)
Definition: outputlist.h:111
GroupDefImpl::hasDetailedDescription
virtual bool hasDetailedDescription() const
Definition: groupdef.cpp:1755
LayoutDocEntryMemberDef::title
QCString title(SrcLangExt lang) const
Definition: layout.cpp:1680
OutputList::insertMemberAlign
void insertMemberAlign(bool templ=FALSE)
Definition: outputlist.h:233
OutputList::endGroupCollaboration
void endGroupCollaboration(DotGroupCollaboration &g)
Definition: outputlist.h:405
VhdlDocGen::writeVhdlDeclarations
static void writeVhdlDeclarations(const MemberList *, OutputList &, const GroupDef *, const ClassDef *, const FileDef *, const NamespaceDef *)
Definition: vhdldocgen.cpp:1539
MemberVector::sort
void sort()
Definition: memberlist.h:58
MemberDef::getClassDefOfAnonymousType
virtual ClassDef * getClassDefOfAnonymousType() const =0
LinkedMap::del
bool del(const QCString &key)
Removes an object from the container and deletes it.
Definition: linkedmap.h:196
LayoutDocEntry::ClassInheritanceGraph
@ ClassInheritanceGraph
Definition: layout.h:44
GroupDefImpl::displayName
virtual QCString displayName(bool=TRUE) const
Definition: groupdef.cpp:77
GroupDefImpl::addListReferences
virtual void addListReferences()
Definition: groupdef.cpp:1559
membername.h
GroupDefImpl::addGroup
virtual void addGroup(const GroupDef *def)
Definition: groupdef.cpp:565
DotGroupCollaboration::isTrivial
bool isTrivial() const
Definition: dotgroupcollaboration.cpp:312
GroupDef::addNamespace
virtual bool addNamespace(const NamespaceDef *def)=0
MemberVector::push_back
void push_back(const MemberDef *md)
Definition: memberlist.h:42
SrcLangExt
SrcLangExt
Language as given by extension
Definition: types.h:41
LayoutDocEntry::MemberDeclStart
@ MemberDeclStart
Definition: layout.h:37
MemberType_Friend
@ MemberType_Friend
Definition: types.h:284
LinkedMap::add
T * add(const char *k, Args &&... args)
Adds a new object to the ordered vector if it was not added already.
Definition: linkedmap.h:103
PageLinkedRefMap
Definition: pagedef.h:78
ClassLinkedRefMap::writeDocumentation
void writeDocumentation(OutputList &ol, const Definition *container=0) const
Definition: classlist.cpp:74
GroupDefImpl::getMemberLists
virtual const MemberLists & getMemberLists() const
Definition: groupdef.cpp:115
MemberType_Enumeration
@ MemberType_Enumeration
Definition: types.h:280
addNamespaceToGroups
void addNamespaceToGroups(const Entry *root, NamespaceDef *nd)
Definition: groupdef.cpp:1357
Grouping
Grouping info
Definition: types.h:64
groupClassesWithSameScope
static void groupClassesWithSameScope(Vec &vec)
Definition: groupdef.cpp:1597
Grouping::GROUPING_LOWEST
@ GROUPING_LOWEST
Definition: types.h:69
MemberType_Typedef
@ MemberType_Typedef
Definition: types.h:279
addConceptToGroups
void addConceptToGroups(const Entry *root, ConceptDef *cd)
Definition: groupdef.cpp:1339
GroupDefImpl::getConcepts
virtual const ConceptLinkedRefMap & getConcepts() const
Definition: groupdef.cpp:122
DefinitionMixin< GroupDef >::makePartOfGroup
virtual void makePartOfGroup(const GroupDef *gd)
Definition: definitionimpl.h:256
Definition::isHidden
virtual bool isHidden() const =0
OutputList::startGroupCollaboration
void startGroupCollaboration()
Definition: outputlist.h:403
GroupDefImpl::getClasses
virtual const ClassLinkedRefMap & getClasses() const
Definition: groupdef.cpp:121
LayoutDocEntry::NamespaceClasses
@ NamespaceClasses
Definition: layout.h:53
Definition::TypeGroup
@ TypeGroup
Definition: definition.h:91
definitionimpl.h
MemberListType_docDefineMembers
@ MemberListType_docDefineMembers
Definition: types.h:164
LayoutDocEntry::GroupClasses
@ GroupClasses
Definition: layout.h:63
Public
@ Public
Definition: types.h:26
DefinitionMixin< GroupDef >::getLanguage
virtual SrcLangExt getLanguage() const
Definition: definitionimpl.h:189
GroupDefImpl::addExample
virtual void addExample(const PageDef *def)
Definition: groupdef.cpp:303
GroupDefImpl::m_examples
PageLinkedRefMap m_examples
Definition: groupdef.cpp:166
GroupDefImpl::addPage
virtual void addPage(const PageDef *def)
Definition: groupdef.cpp:295
GroupDef::addClass
virtual bool addClass(const ClassDef *def)=0
err
void err(const char *fmt,...)
Definition: message.cpp:203
GroupDefImpl::writeQuickMemberLinks
virtual void writeQuickMemberLinks(OutputList &ol, const MemberDef *currentMd) const
Definition: groupdef.cpp:1282
MemberLists
Definition: memberlist.h:138
TextStream
Text streaming class that buffers data.
Definition: textstream.h:33
DefinitionMixin< GroupDef >::name
virtual QCString name() const
Definition: definitionimpl.h:155
LayoutDocEntry::ClassIncludes
@ ClassIncludes
Definition: layout.h:43
LayoutDocEntry::FileNamespaces
@ FileNamespaces
Definition: layout.h:57
GroupDefImpl::writeInlineClasses
void writeInlineClasses(OutputList &ol)
Definition: groupdef.cpp:969
LayoutDocEntryMemberDef::type
MemberListType type
Definition: layout.h:116
GroupDefImpl::removeMember
virtual void removeMember(MemberDef *md)
Definition: groupdef.cpp:475
MemberDef::getGroupAlias
virtual const MemberDef * getGroupAlias() const =0
GroupDefImpl::getMemberList
virtual MemberList * getMemberList(MemberListType lt) const
Definition: groupdef.cpp:1687
MemberDefMutable
Definition: memberdef.h:296
LayoutDocEntry::FileConcepts
@ FileConcepts
Definition: layout.h:57
DefinitionMixin< GroupDef >::briefLine
virtual int briefLine() const
Definition: definitionimpl.h:167
compareDirDefs
bool compareDirDefs(const DirDef *item1, const DirDef *item2)
Definition: dirdef.cpp:1115
GroupDefImpl::computeAnchors
virtual void computeAnchors()
Definition: groupdef.cpp:605
LayoutDocEntry::MemberDefEnd
@ MemberDefEnd
Definition: layout.h:38
GroupDefImpl::startMemberDocumentation
void startMemberDocumentation(OutputList &ol)
Definition: groupdef.cpp:1015
LayoutDocEntry::DirSubDirs
@ DirSubDirs
Definition: layout.h:68
GroupDefImpl::m_concepts
ConceptLinkedRefMap m_concepts
Definition: groupdef.cpp:162
DefinitionMixin< GroupDef >::hasBriefDescription
virtual bool hasBriefDescription() const
Definition: definitionimpl.h:199
OutputList::writeDoc
void writeDoc(DocRoot *root, const Definition *ctx, const MemberDef *md, int id=0)
Definition: outputlist.cpp:169
GroupDefImpl::updateLanguage
void updateLanguage(const Definition *)
Definition: groupdef.cpp:1747
MemberList::declVisible
bool declVisible() const
Definition: memberlist.cpp:279
SectionInfo::label
QCString label() const
Definition: section.h:65
NamespaceLinkedRefMap
Definition: namespacedef.h:45
GroupDefImpl::endMemberDeclarations
void endMemberDeclarations(OutputList &ol)
Definition: groupdef.cpp:1010
GroupDefImpl::getDirs
virtual const DirList & getDirs() const
Definition: groupdef.cpp:126
GroupDefImpl::countMembers
virtual void countMembers()
Definition: groupdef.cpp:579
warn
void warn(const QCString &file, int line, const char *fmt,...)
Definition: message.cpp:151
Definition::getLanguage
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
GroupDefImpl::writeTagFile
virtual void writeTagFile(TextStream &)
Definition: groupdef.cpp:611
Entry::doc
QCString doc
documentation block (partly parsed)
Definition: entry.h:267
GroupDefImpl::m_classes
ClassLinkedRefMap m_classes
Definition: groupdef.cpp:161
MemberDefMutable::setGroupAlias
virtual void setGroupAlias(const MemberDef *md)=0
GroupDef::addConcept
virtual bool addConcept(const ConceptDef *def)=0
LayoutDocEntry::NamespaceNestedConstantGroups
@ NamespaceNestedConstantGroups
Definition: layout.h:52
DefinitionMixin< GroupDef >::inbodyLine
virtual int inbodyLine() const
Definition: definitionimpl.h:170
GroupDefImpl::writeSummaryLinks
void writeSummaryLinks(OutputList &ol) const
Definition: groupdef.cpp:1048
LayoutDocEntry::GroupInlineClasses
@ GroupInlineClasses
Definition: layout.h:63
GroupDefImpl::numDocMembers
virtual size_t numDocMembers() const
Definition: groupdef.cpp:593
OutputList::writeSummaryLink
void writeSummaryLink(const QCString &file, const QCString &anchor, const QCString &title, bool first)
Definition: outputlist.h:359
GroupDef::addDir
virtual void addDir(DirDef *dd)=0
OutputList::endTextBlock
void endTextBlock(bool paraBreak=FALSE)
Definition: outputlist.h:411
MemberListType_declarationLists
@ MemberListType_declarationLists
Definition: types.h:104
GroupDefImpl::m_dirList
DirList m_dirList
Definition: groupdef.cpp:167
GroupDefImpl::getPages
virtual const PageLinkedRefMap & getPages() const
Definition: groupdef.cpp:125
OutputGenerator::RTF
@ RTF
Definition: outputgen.h:333
MemberListType_decFriendMembers
@ MemberListType_decFriendMembers
Definition: types.h:161
PageDef
A model of a page symbol.
Definition: pagedef.h:25
GroupDef
A model of a group of symbols.
Definition: groupdef.h:49
LayoutDocManager::Group
@ Group
Definition: layout.h:203
addClassToGroups
void addClassToGroups(const Entry *root, ClassDef *cd)
Definition: groupdef.cpp:1322
GroupDefImpl::m_groupScope
Definition * m_groupScope
Definition: groupdef.cpp:170
ConceptLinkedRefMap::declVisible
bool declVisible() const
Definition: conceptdef.cpp:648
LayoutDocEntry::ClassCollaborationGraph
@ ClassCollaborationGraph
Definition: layout.h:45
DefinitionMixin< GroupDef >::qualifiedName
virtual QCString qualifiedName() const
Definition: definitionimpl.h:158
LayoutDocEntryMemberDecl::title
QCString title(SrcLangExt lang) const
Definition: layout.cpp:1668
toNamespaceDefMutable
NamespaceDefMutable * toNamespaceDefMutable(Definition *d)
Definition: namespacedef.cpp:1579
MemberList::listTypeAsString
static QCString listTypeAsString(MemberListType type)
Definition: memberlist.cpp:882
OutputList
Class representing a list of output generators that are written to in parallel.
Definition: outputlist.h:37
addDirToGroups
void addDirToGroups(const Entry *root, DirDef *dd)
Definition: groupdef.cpp:1376
LayoutDocEntry::FileStructs
@ FileStructs
Definition: layout.h:57
MemberListType_docFriendMembers
@ MemberListType_docFriendMembers
Definition: types.h:176
LayoutDocEntryMemberDef
Represents of a member definition list with configurable title.
Definition: layout.h:110
ClassDefMutable::setGroupDefForAllMembers
virtual void setGroupDefForAllMembers(GroupDef *g, Grouping::GroupPri_t pri, const QCString &fileName, int startLine, bool hasDocs)=0
dot.h
entry.h
addHtmlExtensionIfMissing
QCString addHtmlExtensionIfMissing(const QCString &fName)
Definition: util.cpp:5275
MemberType_Function
@ MemberType_Function
Definition: types.h:277
MemberNameInfoLinkedMap
Definition: membername.h:126
MemberDef
A model of a class/file/namespace member symbol.
Definition: memberdef.h:45
LayoutDocEntry::FileIncludes
@ FileIncludes
Definition: layout.h:58
MemberList::writeTagFile
void writeTagFile(TextStream &)
Definition: memberlist.cpp:940
addGroupToGroups
void addGroupToGroups(const Entry *root, GroupDef *subGroup)
Definition: groupdef.cpp:1392
OutputGenerator::Latex
@ Latex
Definition: outputgen.h:333
MemberListType_decPropMembers
@ MemberListType_decPropMembers
Definition: types.h:162
DefinitionMixin< GroupDef >::briefDescription
virtual QCString briefDescription(bool abbreviate=FALSE) const
Definition: definitionimpl.h:165
GroupDefImpl::addFile
virtual void addFile(const FileDef *def)
Definition: groupdef.cpp:237
ClassDef
A abstract class representing of a compound symbol.
Definition: classdef.h:103
MemberListType_decVarMembers
@ MemberListType_decVarMembers
Definition: types.h:154
classlist.h
MemberType_Slot
@ MemberType_Slot
Definition: types.h:283
OutputList::startTextBlock
void startTextBlock(bool dense=FALSE)
Definition: outputlist.h:409
OutputList::startMemberItem
void startMemberItem(const QCString &anchor, int i1, const QCString &id=QCString())
Definition: outputlist.h:209
OutputList::disable
void disable(OutputGenerator::OutputType o)
Definition: outputlist.cpp:100
GroupDefImpl::addDir
virtual void addDir(DirDef *dd)
Definition: groupdef.cpp:289
addMemberToGroups
void addMemberToGroups(const Entry *root, MemberDef *md)
Definition: groupdef.cpp:1420
OutputList::startMemberHeader
void startMemberHeader(const QCString &anchor, int typ=2)
Definition: outputlist.h:185
MemberNameInfo
Definition: membername.h:98
message.h
GroupDefImpl::GroupDefImpl
GroupDefImpl(const QCString &fileName, int line, const QCString &name, const QCString &title, const QCString &refFileName=QCString())
Definition: groupdef.cpp:171
GroupDefImpl::addConcept
virtual bool addConcept(const ConceptDef *def)
Definition: groupdef.cpp:264
GroupDefImpl::writeNamespaces
void writeNamespaces(OutputList &ol, const QCString &title)
Definition: groupdef.cpp:879
GroupDefImpl::m_subGrouping
bool m_subGrouping
Definition: groupdef.cpp:173
MemberDef::virtualness
virtual Specifier virtualness(int count=0) const =0
MemberList::listType
MemberListType listType() const
Definition: memberlist.h:86
DefinitionMixin< GroupDef >::inbodyDocumentation
virtual QCString inbodyDocumentation() const
Definition: definitionimpl.h:168
LayoutDocEntrySection
Definition: layout.h:84
DefinitionMutable::makePartOfGroup
virtual void makePartOfGroup(const GroupDef *gd)=0
MemberDef::enumFieldList
virtual const MemberVector & enumFieldList() const =0
dotgroupcollaboration.h
LayoutDocEntry::MemberDeclEnd
@ MemberDeclEnd
Definition: layout.h:37
OutputList::writeAnchor
void writeAnchor(const QCString &fileName, const QCString &name)
Definition: outputlist.h:239
GroupDefImpl
Definition: groupdef.cpp:52
Translator::trMore
virtual QCString trMore()=0
GroupDefImpl::isLinkableInProject
virtual bool isLinkableInProject() const
Definition: groupdef.cpp:1735
MemberDef::getGroupHasDocs
virtual bool getGroupHasDocs() const =0
FileList
Definition: filedef.h:205
MemberListType_decPriSlotMembers
@ MemberListType_decPriSlotMembers
Definition: types.h:158
GroupDefImpl::writeGroupGraph
void writeGroupGraph(OutputList &ol)
Definition: groupdef.cpp:828
Definition::TypeFile
@ TypeFile
Definition: definition.h:88
GroupDefImpl::m_fileList
FileList m_fileList
Definition: groupdef.cpp:160
OutputList::startHeaderSection
void startHeaderSection()
Definition: outputlist.h:181
LayoutDocEntry::MemberDefStart
@ MemberDefStart
Definition: layout.h:38
arguments.h
GroupDefImpl::addMemberListToGroup
void addMemberListToGroup(MemberList *, bool(MemberDef::*)() const)
qstricmp
int qstricmp(const char *str1, const char *str2)
Definition: qcstring.cpp:433
LayoutDocEntry::DirFiles
@ DirFiles
Definition: layout.h:68
theTranslator
Translator * theTranslator
Definition: language.cpp:156
GroupDef::removeMember
virtual void removeMember(MemberDef *md)=0
GroupDefImpl::writeDocumentation
virtual void writeDocumentation(OutputList &ol)
Definition: groupdef.cpp:1092
Definition::name
virtual QCString name() const =0
Doxygen::groupLinkedMap
static GroupLinkedMap * groupLinkedMap
Definition: doxygen.h:96
GroupDef::addGroup
virtual void addGroup(const GroupDef *def)=0
MemberVector::remove
void remove(const MemberDef *md)
Definition: memberlist.h:66
MemberListType_decPubSlotMembers
@ MemberListType_decPubSlotMembers
Definition: types.h:156
GroupDefImpl::setGroupScope
virtual void setGroupScope(Definition *d)
Definition: groupdef.cpp:111
doxygen.h
LayoutDocEntry::NamespaceExceptions
@ NamespaceExceptions
Definition: layout.h:53
OutputList::writeRuler
void writeRuler()
Definition: outputlist.h:237
LayoutDocEntry::FileConstantGroups
@ FileConstantGroups
Definition: layout.h:57
MemberListType_docSignalMembers
@ MemberListType_docSignalMembers
Definition: types.h:174
MemberDef::getClassDef
virtual const ClassDef * getClassDef() const =0
Grouping::GroupPri_t
GroupPri_t
Grouping priority
Definition: types.h:67
language.h
Translator::trGeneratedAutomatically
virtual QCString trGeneratedAutomatically(const QCString &s)=0
validatingParseDoc
DocRoot * validatingParseDoc(IDocParser &parserIntf, const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &input, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport)
Definition: docparser.cpp:7495
GroupDefImpl::writeBriefDescription
void writeBriefDescription(OutputList &ol)
Definition: groupdef.cpp:792
MemberListType_docFuncMembers
@ MemberListType_docFuncMembers
Definition: types.h:168
GroupDefImpl::isASubGroup
virtual bool isASubGroup() const
Definition: groupdef.cpp:574
LayoutDocEntry::GroupGraph
@ GroupGraph
Definition: layout.h:65
MemberListContainer
MemberListContainer
Definition: types.h:196
MemberDef::isFunction
virtual bool isFunction() const =0
LayoutDocEntry::NamespaceStructs
@ NamespaceStructs
Definition: layout.h:53
MemberDefMutable::setGroupDef
virtual void setGroupDef(const GroupDef *gd, Grouping::GroupPri_t pri, const QCString &fileName, int startLine, bool hasDocs, MemberDef *member=0)=0
OutputList::endParagraph
void endParagraph()
Definition: outputlist.h:109
startFile
void startFile(OutputList &ol, const QCString &name, const QCString &manName, const QCString &title, HighlightedItem hli, bool additionalIndices, const QCString &altSidebarName)
Definition: index.cpp:235
docparser.h
TRUE
#define TRUE
Definition: qcstring.h:36
OutputList::endMemberList
void endMemberList()
Definition: outputlist.h:199
GroupDefImpl::m_memberLists
MemberLists m_memberLists
Definition: groupdef.cpp:171
regex.h
GroupDefImpl::m_allMemberList
MemberList m_allMemberList
Definition: groupdef.cpp:168
LayoutDocEntry::GroupNestedGroups
@ GroupNestedGroups
Definition: layout.h:64
filedef.h
MemberList::writeDeclarations
void writeDeclarations(OutputList &ol, const ClassDef *cd, const NamespaceDef *nd, const FileDef *fd, const GroupDef *gd, const QCString &title, const QCString &subtitle, bool showEnumValues=FALSE, bool showInline=FALSE, const ClassDef *inheritedFrom=0, MemberListType lt=MemberListType_pubMethods) const
Writes the list of members to the output.
Definition: memberlist.cpp:526
OutputList::endMemberItem
void endMemberItem()
Definition: outputlist.h:211
GroupDefImpl::writeAuthorSection
void writeAuthorSection(OutputList &ol)
Definition: groupdef.cpp:1036
OutputGenerator::Html
@ Html
Definition: outputgen.h:333
MemberDef::protection
virtual Protection protection() const =0
LinkedMap::find
const T * find(const std::string &key) const
Find an object given the key.
Definition: linkedmap.h:60
OutputList::enableAll
void enableAll()
Definition: outputlist.cpp:84
Definition::DefType
DefType
Definition: definition.h:85
MemberListType_decEnumMembers
@ MemberListType_decEnumMembers
Definition: types.h:152
SectionInfo::title
QCString title() const
Definition: section.h:66
GroupDef::addExample
virtual void addExample(const PageDef *def)=0
MemberDef::isStrong
virtual bool isStrong() const =0
LinkedRefMap::begin
iterator begin()
Definition: linkedmap.h:366
SectionType::Subsection
@ Subsection
memberlist.h
addRefItem
void addRefItem(const RefItemVector &sli, const QCString &key, const QCString &prefix, const QCString &name, const QCString &title, const QCString &args, const Definition *scope)
Definition: util.cpp:4880
DefinitionMixin< GroupDef >::docLine
virtual int docLine() const
Definition: definitionimpl.h:163
OutputList::startContents
void startContents()
Definition: outputlist.h:361
Definition::definitionType
virtual DefType definitionType() const =0
OutputList::startGroupHeader
void startGroupHeader(int extraLevels=0)
Definition: outputlist.h:169
dirdef.h
MemberType_Property
@ MemberType_Property
Definition: types.h:286
DefinitionMixin< GroupDef >::inbodyFile
virtual QCString inbodyFile() const
Definition: definitionimpl.h:169
MemberListType_decDefineMembers
@ MemberListType_decDefineMembers
Definition: types.h:149
OutputList::endMemberSections
void endMemberSections()
Definition: outputlist.h:179
OutputList::popGeneratorState
void popGeneratorState()
Definition: outputlist.cpp:134
OutputList::startTextLink
void startTextLink(const QCString &file, const QCString &anchor)
Definition: outputlist.h:152
GroupList
Definition: groupdef.h:127
GroupDefImpl::writeClasses
void writeClasses(OutputList &ol, const QCString &title)
Definition: groupdef.cpp:957
ArgumentList::size
size_t size() const
Definition: arguments.h:93
docFindSections
void docFindSections(const QCString &input, const Definition *d, const QCString &fileName)
Definition: docparser.cpp:7681
Entry::fileName
QCString fileName
file this entry was extracted from
Definition: entry.h:290
Grouping::groupname
QCString groupname
name of the group
Definition: types.h:95
GroupDefImpl::writeMemberGroups
void writeMemberGroups(OutputList &ol)
Definition: groupdef.cpp:996
GroupDefImpl::isLinkable
virtual bool isLinkable() const
Definition: groupdef.cpp:1740
MemberListType_decFuncMembers
@ MemberListType_decFuncMembers
Definition: types.h:153
MemberVector::size
size_t size() const
Definition: memberlist.h:48
DefinitionMixin< GroupDef >::documentation
virtual QCString documentation() const
Definition: definitionimpl.h:162
MemberListType_docPubSlotMembers
@ MemberListType_docPubSlotMembers
Definition: types.h:171
GroupDefImpl::anchor
virtual QCString anchor() const
Definition: groupdef.cpp:76
OutputList::endHeaderSection
void endHeaderSection()
Definition: outputlist.h:183
OutputList::endSection
void endSection(const QCString &lab, SectionType t)
Definition: outputlist.h:333
GroupDefImpl::groupTitle
virtual QCString groupTitle() const
Definition: groupdef.cpp:78
GroupDefImpl::m_title
QCString m_title
Definition: groupdef.cpp:157
Protected
@ Protected
Definition: types.h:26
classdef.h
GroupDefImpl::writeNestedGroups
void writeNestedGroups(OutputList &ol, const QCString &title)
Definition: groupdef.cpp:885
OutputList::endMemberHeader
void endMemberHeader()
Definition: outputlist.h:187
MemberDef::templateArguments
virtual const ArgumentList & templateArguments() const =0
GroupDefImpl::sortSubGroups
virtual void sortSubGroups()
Definition: groupdef.cpp:1727
RefItemVector
std::vector< RefItem * > RefItemVector
Definition: reflist.h:132
MemberList::setAnchors
void setAnchors()
Definition: memberlist.cpp:975
LayoutDocEntry::ClassAllMembersLink
@ ClassAllMembersLink
Definition: layout.h:45
Entry
Represents an unstructured piece of information, about an entity found in the sources.
Definition: entry.h:61
OutputList::startTitleHead
void startTitleHead(const QCString &fileName)
Definition: outputlist.h:99
Config_getBool
#define Config_getBool(name)
Definition: config.h:33
LayoutDocEntry::GroupDirs
@ GroupDirs
Definition: layout.h:64
layout.h
Translator::trFile
virtual QCString trFile(bool first_capital, bool singular)=0
SectionManager::instance
static SectionManager & instance()
returns a reference to the singleton
Definition: section.h:172
MemberList::writeDocumentation
void writeDocumentation(OutputList &ol, const QCString &scopeName, const Definition *container, const QCString &title, bool showEnumValues=FALSE, bool showInline=FALSE) const
Definition: memberlist.cpp:658
LayoutDocEntry::DetailedDesc
@ DetailedDesc
Definition: layout.h:39
MemberDef::isEnumerate
virtual bool isEnumerate() const =0
OutputList::startSection
void startSection(const QCString &lab, const QCString &title, SectionType t)
Definition: outputlist.h:331
msg
void msg(const char *fmt,...)
Definition: message.cpp:53
MemberListType_documentationLists
@ MemberListType_documentationLists
Definition: types.h:105
MemberListType_docVarMembers
@ MemberListType_docVarMembers
Definition: types.h:169
LayoutDocManager::instance
static LayoutDocManager & instance()
Returns a reference to this singleton.
Definition: layout.cpp:1574
LayoutDocEntry::FileInterfaces
@ FileInterfaces
Definition: layout.h:57
MemberType_Event
@ MemberType_Event
Definition: types.h:287
Definition::getOuterScope
virtual Definition * getOuterScope() const =0
MemberGroupList
Definition: membergroup.h:109
GroupDefImpl::addClass
virtual bool addClass(const ClassDef *def)
Definition: groupdef.cpp:251
OutputList::writeSynopsis
void writeSynopsis()
Definition: outputlist.h:337
MemberListType_decTypedefMembers
@ MemberListType_decTypedefMembers
Definition: types.h:151
Translator::trCollaborationDiagram
virtual QCString trCollaborationDiagram(const QCString &clName)=0
OutputList::parseText
void parseText(const QCString &textStr)
Definition: outputlist.cpp:179
NamespaceLinkedRefMap::declVisible
bool declVisible(bool isContantGroup) const
Definition: namespacedef.cpp:1284
qPrint
const char * qPrint(const char *s)
Definition: qcstring.h:589
ConceptLinkedRefMap
Definition: conceptdef.h:67
GroupDefImpl::m_allMemberNameInfoLinkedMap
MemberNameInfoLinkedMap m_allMemberNameInfoLinkedMap
Definition: groupdef.cpp:169
MemberDef::getFileDef
virtual const FileDef * getFileDef() const =0
addExampleToGroups
void addExampleToGroups(const Entry *root, PageDef *eg)
Definition: groupdef.cpp:1540
LayoutDocEntry::MemberGroups
@ MemberGroups
Definition: layout.h:36
Config_getString
#define Config_getString(name)
Definition: config.h:32
LayoutDocEntry::ClassInlineClasses
@ ClassInlineClasses
Definition: layout.h:43
LinkedRefMap::end
iterator end()
Definition: linkedmap.h:367
SectionInfo
class that provide information about a section.
Definition: section.h:49
OutputList::generateDoc
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport)
Definition: outputlist.cpp:142
addGroupListToTitle
void addGroupListToTitle(OutputList &ol, const Definition *d)
Definition: util.cpp:4929
MemberDef::argumentList
virtual const ArgumentList & argumentList() const =0
convertNameToFile
QCString convertNameToFile(const QCString &name, bool allowDots, bool allowUnderscore)
Definition: util.cpp:3604
config.h
MemberListType_decSignalMembers
@ MemberListType_decSignalMembers
Definition: types.h:159
MemberListType_docPriSlotMembers
@ MemberListType_docPriSlotMembers
Definition: types.h:173
ClassLinkedRefMap::declVisible
bool declVisible(const ClassDef::CompoundType *filter=0) const
Definition: classlist.cpp:29
DotGroupCollaboration
Representation of a group collaboration graph
Definition: dotgroupcollaboration.h:28
OutputList::pushGeneratorState
void pushGeneratorState()
Definition: outputlist.cpp:126
groupdef.h
convertToXML
QCString convertToXML(const QCString &s, bool keepEntities)
Definition: util.cpp:3948
GroupDefImpl::findSectionsInDocumentation
virtual void findSectionsInDocumentation()
Definition: groupdef.cpp:218
NamespaceDefMutable
Definition: namespacedef.h:106
FileDef
A model of a file symbol.
Definition: filedef.h:73
MemberListType_docEnumValMembers
@ MemberListType_docEnumValMembers
Definition: types.h:170
GroupDefImpl::getExamples
virtual const PageLinkedRefMap & getExamples() const
Definition: groupdef.cpp:127
MemberType_Define
@ MemberType_Define
Definition: types.h:276
LayoutDocEntry::BriefDesc
@ BriefDesc
Definition: layout.h:39
MemberDef::getGroupStartLine
virtual int getGroupStartLine() const =0
LayoutDocEntry::NamespaceConcepts
@ NamespaceConcepts
Definition: layout.h:53
GroupDefImpl::m_memberGroups
MemberGroupList m_memberGroups
Definition: groupdef.cpp:172
stripExtension
QCString stripExtension(const QCString &fName)
Definition: util.cpp:5295
LayoutDocEntry::DirGraph
@ DirGraph
Definition: layout.h:68
MemberListContainer::Group
@ Group
CodeSymbolType::Default
@ Default
LayoutDocEntry::FileIncludeGraph
@ FileIncludeGraph
Definition: layout.h:58
LayoutDocEntry::FileIncludedByGraph
@ FileIncludedByGraph
Definition: layout.h:59
GroupDefImpl::m_namespaces
NamespaceLinkedRefMap m_namespaces
Definition: groupdef.cpp:163
Doxygen::suppressDocWarnings
static bool suppressDocWarnings
Definition: doxygen.h:112
OutputList::writeObjectLink
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition: outputlist.h:141
GroupDefImpl::writePageDocumentation
void writePageDocumentation(OutputList &ol)
Definition: groupdef.cpp:974
GroupDef::findGroup
virtual bool findGroup(const GroupDef *def) const =0
toClassDefMutable
ClassDefMutable * toClassDefMutable(Definition *d)
Definition: classdef.cpp:4944
GroupDefImpl::addMembersToMemberGroup
virtual void addMembersToMemberGroup()
Definition: groupdef.cpp:310
createGroupDef
GroupDef * createGroupDef(const QCString &fileName, int line, const QCString &name, const QCString &title, const QCString &refFileName)
Definition: groupdef.cpp:162
LayoutDocEntry::ClassUsedFiles
@ ClassUsedFiles
Definition: layout.h:46
LayoutDocEntry::FileSourceLink
@ FileSourceLink
Definition: layout.h:59
OutputList::startMemberDeclaration
void startMemberDeclaration()
Definition: outputlist.h:310
searchindex.h
LinkedRefMap::find
const T * find(const std::string &key) const
find an object given the key.
Definition: linkedmap.h:243
GroupDefImpl::getFiles
virtual const FileList & getFiles() const
Definition: groupdef.cpp:120
GroupDefImpl::hasGroupTitle
virtual bool hasGroupTitle() const
Definition: groupdef.cpp:80
GroupDefImpl::m_groups
GroupList m_groups
Definition: groupdef.cpp:164
LayoutDocEntry::ClassNestedClasses
@ ClassNestedClasses
Definition: layout.h:44
GroupDefImpl::addMemberToList
void addMemberToList(MemberListType lt, const MemberDef *md)
Definition: groupdef.cpp:1584
GroupDefImpl::writeDirs
void writeDirs(OutputList &ol, const QCString &title)
Definition: groupdef.cpp:925
util.h
A bunch of utility functions.
createSubDirs
void createSubDirs(const Dir &d)
Definition: util.cpp:3677
LayoutDocEntry::FileExceptions
@ FileExceptions
Definition: layout.h:57
toConceptDefMutable
ConceptDefMutable * toConceptDefMutable(Definition *d)
Definition: conceptdef.cpp:713
OutputList::enable
void enable(OutputGenerator::OutputType o)
Definition: outputlist.cpp:108
NamespaceLinkedRefMap::writeDeclaration
void writeDeclaration(OutputList &ol, const QCString &title, bool isConstantGroup=false, bool localName=FALSE)
Definition: namespacedef.cpp:1314
Translator::trDir
virtual QCString trDir(bool first_capital, bool singular)=0
GroupDefImpl::addNamespace
virtual bool addNamespace(const NamespaceDef *def)
Definition: groupdef.cpp:276
CodeSymbolType
CodeSymbolType
Definition: types.h:204
LayoutDocEntry::NamespaceInterfaces
@ NamespaceInterfaces
Definition: layout.h:53
DefinitionMixin< GroupDef >::setLanguage
virtual void setLanguage(SrcLangExt lang)
Definition: definitionimpl.h:242
Entry::groups
std::vector< Grouping > groups
list of groups this entry belongs to
Definition: entry.h:288
MemberList
A list of MemberDef objects as shown in documentation sections.
Definition: memberlist.h:81
LayoutDocEntry::FileInlineClasses
@ FileInlineClasses
Definition: layout.h:60
matchArguments2
bool matchArguments2(const Definition *srcScope, const FileDef *srcFileScope, const ArgumentList *srcAl, const Definition *dstScope, const FileDef *dstFileScope, const ArgumentList *dstAl, bool checkCV)
Definition: util.cpp:1919
LayoutDocEntry::GroupNamespaces
@ GroupNamespaces
Definition: layout.h:63
ClassLinkedRefMap
Definition: classlist.h:30
GroupDefImpl::writeFiles
void writeFiles(OutputList &ol, const QCString &title)
Definition: groupdef.cpp:848
LinkedRefMap::size
size_t size() const
Definition: linkedmap.h:375
GroupDefImpl::m_pages
PageLinkedRefMap m_pages
Definition: groupdef.cpp:165
MemberListType_docEventMembers
@ MemberListType_docEventMembers
Definition: types.h:175
ClassDef::className
virtual QCString className() const =0
Returns the name of the class including outer classes, but not including namespaces.
GroupDefImpl::writeDetailedDescription
void writeDetailedDescription(OutputList &ol, const QCString &title)
Definition: groupdef.cpp:728
MemberListType_docTypedefMembers
@ MemberListType_docTypedefMembers
Definition: types.h:166
MemberListType_docPropMembers
@ MemberListType_docPropMembers
Definition: types.h:177
OutputList::endTextLink
void endTextLink()
Definition: outputlist.h:154
MemberDef::memberType
virtual MemberType memberType() const =0
GroupDefImpl::setGroupTitle
virtual void setGroupTitle(const QCString &newtitle)
Definition: groupdef.cpp:194
convertToHtml
QCString convertToHtml(const QCString &s, bool keepEntities)
Definition: util.cpp:4063
LayoutDocEntry::MemberDecl
@ MemberDecl
Definition: layout.h:37
OutputList::startParagraph
void startParagraph(const QCString &classDef=QCString())
Definition: outputlist.h:107
DefinitionMixin
Definition: definitionimpl.h:142
MemberDef::getGroupDef
virtual const GroupDef * getGroupDef() const =0
vhdldocgen.h
GroupDefImpl::writeMemberPages
virtual void writeMemberPages(OutputList &ol)
Definition: groupdef.cpp:1266
endFile
void endFile(OutputList &ol, bool skipNavIndex, bool skipEndContents, const QCString &navPath)
Definition: index.cpp:254
LayoutDocEntry::AuthorSection
@ AuthorSection
Definition: layout.h:40
LayoutDocEntrySection::title
QCString title(SrcLangExt lang) const
Definition: layout.cpp:1661
createDocParser
std::unique_ptr< IDocParser > createDocParser()
Definition: docparser.cpp:179
Translator::trGroup
virtual QCString trGroup(bool first_capital, bool singular)=0
FALSE
#define FALSE
Definition: qcstring.h:33
GroupDefImpl::distributeMemberGroupDocumentation
virtual void distributeMemberGroupDocumentation()
Definition: groupdef.cpp:210
Translator::trAuthor
virtual QCString trAuthor(bool first_capital, bool singular)=0
OutputGenerator::Man
@ Man
Definition: outputgen.h:333
QCString
This is an alternative implementation of QCString.
Definition: qcstring.h:108