filedef.cpp
Go to the documentation of this file.
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 "memberlist.h"
19 #include "classlist.h"
20 #include "filedef.h"
21 #include "doxygen.h"
22 #include "memberdef.h"
23 #include "classdef.h"
24 #include "namespacedef.h"
25 #include "util.h"
26 #include "language.h"
27 #include "outputlist.h"
28 #include "dot.h"
29 #include "message.h"
30 #include "docparser.h"
31 #include "searchindex.h"
32 #include "htags.h"
33 #include "parserintf.h"
34 #include "portable.h"
35 #include "vhdldocgen.h"
36 #include "debug.h"
37 #include "layout.h"
38 #include "entry.h"
39 #include "groupdef.h"
40 #include "filename.h"
41 #include "membergroup.h"
42 #include "dirdef.h"
43 #include "config.h"
44 #include "clangparser.h"
45 #include "settings.h"
46 
47 //---------------------------------------------------------------------------
48 
49 /** Class implementing CodeOutputInterface by throwing away everything. */
51 {
52  public:
53  virtual void codify(const char *) {}
54  virtual void writeCodeLink(const char *,const char *,
55  const char *,const char *,
56  const char *) {}
57  virtual void writeTooltip(const char *, const DocLinkInfo &, const char *,
58  const char *, const SourceLinkInfo &, const SourceLinkInfo &
59  ) {}
60  virtual void writeLineNumber(const char *,const char *,
61  const char *,int) {}
62  virtual void startCodeLine(bool) {}
63  virtual void endCodeLine() {}
64  virtual void startFontClass(const char *) {}
65  virtual void endFontClass() {}
66  virtual void writeCodeAnchor(const char *) {}
67  virtual void linkableSymbol(int, const char *,Definition *,Definition *) {}
68  virtual void setCurrentDoc(Definition *,const char *,bool) {}
69  virtual void addWord(const char *,bool) {}
70 };
71 
72 //---------------------------------------------------------------------------
73 
74 /*! create a new file definition, where \a p is the file path,
75  \a nm the file name, and \a lref is an HTML anchor name if the
76  file was read from a tag file or 0 otherwise
77 */
78 FileDef::FileDef(const char *p,const char *nm,
79  const char *lref,const char *dn)
80  : Definition((QCString)p+nm,1,1,nm)
81 {
82  m_path=p;
84  m_fileName=nm;
85  m_diskName=dn;
86  if (m_diskName.isEmpty()) m_diskName=nm;
87  setReference(lref);
88  m_classSDict = 0;
89  m_includeList = 0;
90  m_includeDict = 0;
91  m_includedByList = 0;
92  m_includedByDict = 0;
93  m_namespaceSDict = 0;
94  m_srcDefDict = 0;
95  m_srcMemberDict = 0;
96  m_usingDirList = 0;
97  m_usingDeclList = 0;
98  m_package = 0;
100  m_docname = nm;
101  m_dir = 0;
102  if (Config_getBool("FULL_PATH_NAMES"))
103  {
105  }
107  m_memberGroupSDict = 0;
109  m_subGrouping=Config_getBool("SUBGROUPING");
110 }
111 
112 /*! destroy the file definition */
114 {
115  delete m_classSDict;
116  delete m_includeDict;
117  delete m_includeList;
118  delete m_includedByDict;
119  delete m_includedByList;
120  delete m_namespaceSDict;
121  delete m_srcDefDict;
122  delete m_srcMemberDict;
123  delete m_usingDirList;
124  delete m_usingDeclList;
125  delete m_memberGroupSDict;
126 }
127 
128 /*! Compute the HTML anchor names for all members in the class */
130 {
132  if (ml) setAnchors(ml);
133 }
134 
136 {
137  //printf("FileDef::distributeMemberGroupDocumentation()\n");
138  if (m_memberGroupSDict)
139  {
141  MemberGroup *mg;
142  for (;(mg=mgli.current());++mgli)
143  {
145  }
146  }
147 }
148 
150 {
152  if (m_memberGroupSDict)
153  {
155  MemberGroup *mg;
156  for (;(mg=mgli.current());++mgli)
157  {
159  }
160  }
161 
163  MemberList *ml;
164  for (mli.toFirst();(ml=mli.current());++mli)
165  {
167  {
169  }
170  }
171 }
172 
174 {
175  static bool repeatBrief = Config_getBool("REPEAT_BRIEF");
176  static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
177  return ((!briefDescription().isEmpty() && repeatBrief) ||
178  !documentation().stripWhiteSpace().isEmpty() || // avail empty section
179  (sourceBrowser && getStartBodyLine()!=-1 && getBodyDef())
180  );
181 }
182 
184 {
185  tagFile << " <compound kind=\"file\">" << endl;
186  tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
187  tagFile << " <path>" << convertToXML(getPath()) << "</path>" << endl;
188  tagFile << " <filename>" << convertToXML(getOutputFileBase()) << "</filename>" << endl;
189  if (m_includeList && m_includeList->count()>0)
190  {
192  IncludeInfo *ii;
193  for (;(ii=ili.current());++ili)
194  {
195  if (!ii->indirect)
196  {
197  FileDef *fd=ii->fileDef;
198  if (fd && fd->isLinkable() && !fd->isReference())
199  {
200  bool isIDLorJava = FALSE;
201  SrcLangExt lang = fd->getLanguage();
202  isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
203  const char *locStr = (ii->local || isIDLorJava) ? "yes" : "no";
204  const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no";
205  tagFile << " <includes id=\""
206  << convertToXML(fd->getOutputFileBase()) << "\" "
207  << "name=\"" << convertToXML(fd->name()) << "\" "
208  << "local=\"" << locStr << "\" "
209  << "imported=\"" << impStr << "\">"
210  << convertToXML(ii->includeName)
211  << "</includes>"
212  << endl;
213  }
214  }
215  }
216  }
219  LayoutDocEntry *lde;
220  for (eli.toFirst();(lde=eli.current());++eli)
221  {
222  switch (lde->kind())
223  {
225  {
226  if (m_classSDict)
227  {
229  ClassDef *cd;
230  for (ci.toFirst();(cd=ci.current());++ci)
231  {
232  if (cd->isLinkableInProject())
233  {
234  tagFile << " <class kind=\"" << cd->compoundTypeString() <<
235  "\">" << convertToXML(cd->name()) << "</class>" << endl;
236  }
237  }
238  }
239  }
240  break;
242  {
243  if (m_namespaceSDict)
244  {
246  NamespaceDef *nd;
247  for (ni.toFirst();(nd=ni.current());++ni)
248  {
249  if (nd->isLinkableInProject())
250  {
251  tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
252  }
253  }
254  }
255  }
256  break;
258  {
260  MemberList * ml = getMemberList(lmd->type);
261  if (ml)
262  {
263  ml->writeTagFile(tagFile);
264  }
265  }
266  break;
268  {
269  if (m_memberGroupSDict)
270  {
272  MemberGroup *mg;
273  for (;(mg=mgli.current());++mgli)
274  {
275  mg->writeTagFile(tagFile);
276  }
277  }
278  }
279  break;
280  default:
281  break;
282  }
283  }
284 
285  writeDocAnchorsToTagFile(tagFile);
286  tagFile << " </compound>" << endl;
287 }
288 
290 {
292  {
293  ol.pushGeneratorState();
295  ol.writeRuler();
296  ol.popGeneratorState();
297  ol.pushGeneratorState();
299  ol.writeAnchor(0,"details");
300  ol.popGeneratorState();
301  ol.startGroupHeader();
302  ol.parseText(title);
303  ol.endGroupHeader();
304 
305  ol.startTextBlock();
306  if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
307  {
309  }
310  if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
311  !documentation().isEmpty())
312  {
313  ol.pushGeneratorState();
316  // ol.newParagraph(); // FIXME:PARA
317  ol.enableAll();
320  ol.writeString("\n\n");
321  ol.popGeneratorState();
322  }
323  if (!documentation().isEmpty())
324  {
325  ol.generateDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
326  }
327  //printf("Writing source ref for file %s\n",name().data());
328  if (Config_getBool("SOURCE_BROWSER"))
329  {
330  //if Latex enabled and LATEX_SOURCE_CODE isn't -> skip, bug_738548
331  ol.pushGeneratorState();
332  if (ol.isEnabled(OutputGenerator::Latex) && !Config_getBool("LATEX_SOURCE_CODE"))
333  {
335  }
336  if (ol.isEnabled(OutputGenerator::RTF) && !Config_getBool("RTF_SOURCE_CODE"))
337  {
339  }
340 
341  ol.startParagraph();
343  int fileMarkerPos = refText.find("@0");
344  if (fileMarkerPos!=-1) // should always pass this.
345  {
346  ol.parseText(refText.left(fileMarkerPos)); //text left from marker 1
348  0,name());
349  ol.parseText(refText.right(
350  refText.length()-fileMarkerPos-2)); // text right from marker 2
351  }
352  ol.endParagraph();
353  //Restore settings, bug_738548
354  ol.popGeneratorState();
355  }
356  ol.endTextBlock();
357  }
358 }
359 
361 {
362  if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
363  {
364  DocRoot *rootNode = validatingParseDoc(briefFile(),briefLine(),this,0,
366 
367  if (rootNode && !rootNode->isEmpty())
368  {
369  ol.startParagraph();
370  ol.writeDoc(rootNode,this,0);
371  ol.pushGeneratorState();
373  ol.writeString(" \n");
375 
376  if (Config_getBool("REPEAT_BRIEF") ||
377  !documentation().isEmpty()
378  )
379  {
381  ol.startTextLink(0,"details");
383  ol.endTextLink();
384  }
385  ol.popGeneratorState();
386  ol.endParagraph();
387  }
388  delete rootNode;
389  }
390  ol.writeSynopsis();
391 }
392 
394 {
395  if (m_includeList && m_includeList->count()>0)
396  {
397  ol.startTextBlock(TRUE);
399  IncludeInfo *ii;
400  for (;(ii=ili.current());++ili)
401  {
402  if (!ii->indirect)
403  {
404  FileDef *fd=ii->fileDef;
405  bool isIDLorJava = FALSE;
406  if (fd)
407  {
408  SrcLangExt lang = fd->getLanguage();
409  isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
410  }
411  ol.startTypewriter();
412  if (isIDLorJava) // IDL/Java include
413  {
414  ol.docify("import ");
415  }
416  else if (ii->imported) // Objective-C include
417  {
418  ol.docify("#import ");
419  }
420  else // C/C++ include
421  {
422  ol.docify("#include ");
423  }
424  if (ii->local || isIDLorJava)
425  ol.docify("\"");
426  else
427  ol.docify("<");
429  ol.docify(ii->includeName);
430  ol.enableAll();
432 
433  // Here we use the include file name as it appears in the file.
434  // we could also we the name as it is used within doxygen,
435  // then we should have used fd->docName() instead of ii->includeName
436  if (fd && fd->isLinkable())
437  {
438  ol.writeObjectLink(fd->getReference(),
439  fd->generateSourceFile() ? fd->includeName() : fd->getOutputFileBase(),
440  0,ii->includeName);
441  }
442  else
443  {
444  ol.docify(ii->includeName);
445  }
446 
447  ol.enableAll();
448  if (ii->local || isIDLorJava)
449  ol.docify("\"");
450  else
451  ol.docify(">");
452  if (isIDLorJava)
453  ol.docify(";");
454  ol.endTypewriter();
455  ol.lineBreak();
456  }
457  }
458  ol.endTextBlock();
459  }
460 }
461 
463 {
464  if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDE_GRAPH")*/)
465  {
466  //printf("Graph for file %s\n",name().data());
467  DotInclDepGraph incDepGraph(this,FALSE);
468  if (incDepGraph.isTooBig())
469  {
470  warn_uncond("Include graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
471  }
472  else if (!incDepGraph.isTrivial())
473  {
474  ol.startTextBlock();
476  ol.startInclDepGraph();
478  ol.endInclDepGraph(incDepGraph);
479  ol.enableAll();
480  ol.endTextBlock(TRUE);
481  }
482  //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase());
483  }
484 }
485 
487 {
488  if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDED_BY_GRAPH")*/)
489  {
490  //printf("Graph for file %s\n",name().data());
491  DotInclDepGraph incDepGraph(this,TRUE);
492  if (incDepGraph.isTooBig())
493  {
494  warn_uncond("Included by graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
495  }
496  else if (!incDepGraph.isTrivial())
497  {
498  ol.startTextBlock();
500  ol.startInclDepGraph();
502  ol.endInclDepGraph(incDepGraph);
503  ol.enableAll();
504  ol.endTextBlock(TRUE);
505  }
506  //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase());
507  }
508 }
509 
510 
512 {
513  //printf("%s: generateSourceFile()=%d\n",name().data(),generateSourceFile());
514  if (generateSourceFile())
515  {
517  ol.startParagraph();
518  ol.startTextLink(includeName(),0);
520  ol.endTextLink();
521  ol.endParagraph();
522  ol.enableAll();
523  }
524 }
525 
527  bool const isConstantGroup)
528 {
529  // write list of namespaces
530  if (m_namespaceSDict) m_namespaceSDict->writeDeclaration(ol,title,isConstantGroup);
531 }
532 
534 {
535  // write list of classes
537 }
538 
540 {
541  // temporarily undo the disbling could be done by startMemberDocumentation()
542  // as a result of setting SEPARATE_MEMBER_PAGES to YES; see bug730512
543  bool isEnabled = ol.isEnabled(OutputGenerator::Html);
545 
547 
548  // restore the initial state if needed
549  if (!isEnabled) ol.disable(OutputGenerator::Html);
550 }
551 
553 {
554  ol.startMemberSections();
555 }
556 
558 {
559  ol.endMemberSections();
560 }
561 
563 {
564  if (Config_getBool("SEPARATE_MEMBER_PAGES"))
565  {
568  }
569 }
570 
572 {
573  if (Config_getBool("SEPARATE_MEMBER_PAGES"))
574  {
577  }
578 }
579 
581 {
582  /* write user defined member groups */
583  if (m_memberGroupSDict)
584  {
587  MemberGroup *mg;
588  for (;(mg=mgli.current());++mgli)
589  {
590  if ((!mg->allMembersInSameSection() || !m_subGrouping)
591  && mg->header()!="[NOHEADER]")
592  {
593  mg->writeDeclarations(ol,0,0,this,0);
594  }
595  }
596  }
597 }
598 
600 {
601  // write Author section (Man only)
602  ol.pushGeneratorState();
604  ol.startGroupHeader();
606  ol.endGroupHeader();
608  ol.popGeneratorState();
609 }
610 
612 {
613  ol.pushGeneratorState();
617  LayoutDocEntry *lde;
618  bool first=TRUE;
619  SrcLangExt lang=getLanguage();
620  for (eli.toFirst();(lde=eli.current());++eli)
621  {
622  if ((lde->kind()==LayoutDocEntry::FileClasses &&
626  )
627  {
629  QCString label = lde->kind()==LayoutDocEntry::FileClasses ? "nested-classes" : "namespaces";
630  ol.writeSummaryLink(0,label,ls->title(lang),first);
631  first=FALSE;
632  }
633  else if (lde->kind()==LayoutDocEntry::MemberDecl)
634  {
636  MemberList * ml = getMemberList(lmd->type);
637  if (ml && ml->declVisible())
638  {
639  ol.writeSummaryLink(0,MemberList::listTypeAsString(ml->listType()),lmd->title(lang),first);
640  first=FALSE;
641  }
642  }
643  }
644  if (!first)
645  {
646  ol.writeString(" </div>\n");
647  }
648  ol.popGeneratorState();
649 }
650 
651 /*! Write the documentation page for this file to the file of output
652  generators \a ol.
653 */
655 {
656  static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
657  //funcList->countDecMembers();
658 
659  //QCString fn = name();
660  //if (Config_getBool("FULL_PATH_NAMES"))
661  //{
662  // fn.prepend(stripFromPath(getPath().copy()));
663  //}
664 
665  //printf("WriteDocumentation diskname=%s\n",diskname.data());
666 
667  QCString versionTitle;
668  if (!m_fileVersion.isEmpty())
669  {
670  versionTitle=("("+m_fileVersion+")");
671  }
672  QCString title = m_docname+versionTitle;
674 
675  if (getDirDef())
676  {
677  startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
678  if (!generateTreeView)
679  {
681  ol.endQuickIndices();
682  }
683  QCString pageTitleShort=theTranslator->trFileReference(name());
684  startTitle(ol,getOutputFileBase(),this);
685  ol.pushGeneratorState();
687  ol.parseText(pageTitleShort); // Html only
688  ol.enableAll();
690  ol.parseText(pageTitle); // other output formats
691  ol.popGeneratorState();
692  addGroupListToTitle(ol,this);
693  endTitle(ol,getOutputFileBase(),title);
694  }
695  else
696  {
697  startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
698  if (!generateTreeView)
699  {
700  ol.endQuickIndices();
701  }
702  startTitle(ol,getOutputFileBase(),this);
703  ol.parseText(pageTitle);
704  addGroupListToTitle(ol,this);
705  endTitle(ol,getOutputFileBase(),title);
706  }
707 
708  ol.startContents();
709 
710  if (!m_fileVersion.isEmpty())
711  {
713  ol.startProjectNumber();
714  ol.docify(versionTitle);
715  ol.endProjectNumber();
716  ol.enableAll();
717  }
718 
720  {
723  }
724 
725 
726  //---------------------------------------- start flexible part -------------------------------
727 
728  SrcLangExt lang = getLanguage();
731  LayoutDocEntry *lde;
732  for (eli.toFirst();(lde=eli.current());++eli)
733  {
734  switch (lde->kind())
735  {
738  break;
741  break;
743  writeIncludeFiles(ol);
744  break;
746  writeIncludeGraph(ol);
747  break;
750  break;
752  writeSourceLink(ol);
753  break;
755  {
757  writeClassDeclarations(ol,ls->title(lang));
758  }
759  break;
761  {
763  writeNamespaceDeclarations(ol,ls->title(lang),false);
764  }
765  break;
767  {
769  writeNamespaceDeclarations(ol,ls->title(lang),true);
770  }
771  break;
773  writeMemberGroups(ol);
774  break;
776  {
778  writeMemberDeclarations(ol,lmd->type,lmd->title(lang));
779  }
780  break;
783  break;
785  {
787  writeDetailedDescription(ol,ls->title(lang));
788  }
789  break;
792  break;
794  writeInlineClasses(ol);
795  break;
797  {
799  writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
800  }
801  break;
804  break;
806  writeAuthorSection(ol);
807  break;
830  err("Internal inconsistency: member %d should not be part of "
831  "LayoutDocManager::File entry list\n",lde->kind());
832  break;
833  }
834  }
835 
836  //---------------------------------------- end flexible part -------------------------------
837 
838  ol.endContents();
839 
840  endFileWithNavPath(this,ol);
841 
842  if (Config_getBool("SEPARATE_MEMBER_PAGES"))
843  {
845  if (ml) ml->sort();
846  writeMemberPages(ol);
847  }
848 }
849 
851 {
852  ol.pushGeneratorState();
854 
856  MemberList *ml;
857  for (mli.toFirst();(ml=mli.current());++mli)
858  {
860  {
861  ml->writeDocumentationPage(ol,name(),this);
862  }
863  }
864 
865  ol.popGeneratorState();
866 }
867 
869 {
870  static bool createSubDirs=Config_getBool("CREATE_SUBDIRS");
871 
872  ol.writeString(" <div class=\"navtab\">\n");
873  ol.writeString(" <table>\n");
874 
876  if (allMemberList)
877  {
878  MemberListIterator mli(*allMemberList);
879  MemberDef *md;
880  for (mli.toFirst();(md=mli.current());++mli)
881  {
882  if (md->getFileDef()==this && md->getNamespaceDef()==0 && md->isLinkable() && !md->isEnumValue())
883  {
884  ol.writeString(" <tr><td class=\"navtab\">");
885  if (md->isLinkableInProject())
886  {
887  if (md==currentMd) // selected item => highlight
888  {
889  ol.writeString("<a class=\"qindexHL\" ");
890  }
891  else
892  {
893  ol.writeString("<a class=\"qindex\" ");
894  }
895  ol.writeString("href=\"");
896  if (createSubDirs) ol.writeString("../../");
898  ol.writeString("\">");
900  ol.writeString("</a>");
901  }
902  ol.writeString("</td></tr>\n");
903  }
904  }
905  }
906 
907  ol.writeString(" </table>\n");
908  ol.writeString(" </div>\n");
909 }
910 
911 /*! Write a source listing of this file to the output */
912 void FileDef::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu)
913 {
914  static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
915  static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
916  static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
917  static bool rtfSourceCode = Config_getBool("RTF_SOURCE_CODE");
918  DevNullCodeDocInterface devNullIntf;
920  if (!m_fileVersion.isEmpty())
921  {
922  title+=(" ("+m_fileVersion+")");
923  }
924  QCString pageTitle = theTranslator->trSourceFile(title);
926  if (!latexSourceCode) ol.disable(OutputGenerator::Latex);
927  if (!rtfSourceCode) ol.disable(OutputGenerator::RTF);
928 
929  bool isDocFile = isDocumentationFile();
930  bool genSourceFile = !isDocFile && generateSourceFile();
931  if (getDirDef())
932  {
934  !generateTreeView,
935  !isDocFile && genSourceFile ? QCString() : getOutputFileBase());
936  if (!generateTreeView)
937  {
939  ol.endQuickIndices();
940  }
942  ol.parseText(name());
943  endTitle(ol,getSourceFileBase(),title);
944  }
945  else
946  {
948  !isDocFile && genSourceFile ? QCString() : getOutputFileBase());
950  ol.parseText(title);
951  endTitle(ol,getSourceFileBase(),0);
952  }
953 
954  ol.startContents();
955 
956  if (isLinkable())
957  {
958  if (latexSourceCode) ol.disable(OutputGenerator::Latex);
959  if (rtfSourceCode) ol.disable(OutputGenerator::RTF);
962  ol.endTextLink();
963  if (latexSourceCode) ol.enable(OutputGenerator::Latex);
964  if (rtfSourceCode) ol.enable(OutputGenerator::RTF);
965  }
966 
967  (void)sameTu;
968  (void)filesInSameTu;
969 #if USE_LIBCLANG
970  static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
971  if (clangAssistedParsing &&
973  {
974  ol.startCodeFragment();
975  if (!sameTu)
976  {
977  ClangParser::instance()->start(absFilePath(),filesInSameTu);
978  }
979  else
980  {
982  }
984  ol.endCodeFragment();
985  }
986  else
987 #endif
988  {
990  pIntf->resetCodeParserState();
991  ol.startCodeFragment();
992  bool needs2PassParsing =
993  Doxygen::parseSourcesNeeded && // we need to parse (filtered) sources for cross-references
994  !filterSourceFiles && // but user wants to show sources as-is
995  !getFileFilter(absFilePath(),TRUE).isEmpty(); // and there is a filter used while parsing
996 
997  if (needs2PassParsing)
998  {
999  // parse code for cross-references only (see bug707641)
1000  pIntf->parseCode(devNullIntf,0,
1002  getLanguage(),
1003  FALSE,0,this
1004  );
1005  }
1006  pIntf->parseCode(ol,0,
1007  fileToString(absFilePath(),filterSourceFiles,TRUE),
1008  getLanguage(), // lang
1009  FALSE, // isExampleBlock
1010  0, // exampleName
1011  this, // fileDef
1012  -1, // startLine
1013  -1, // endLine
1014  FALSE, // inlineFragment
1015  0, // memberDef
1016  TRUE, // showLineNumbers
1017  0, // searchCtx
1018  !needs2PassParsing // collectXRefs
1019  );
1020  ol.endCodeFragment();
1021  }
1022  ol.endContents();
1023  endFileWithNavPath(this,ol);
1024  ol.enableAll();
1025 }
1026 
1027 void FileDef::parseSource(bool sameTu,QStrList &filesInSameTu)
1028 {
1029  static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
1030  DevNullCodeDocInterface devNullIntf;
1031  (void)sameTu;
1032  (void)filesInSameTu;
1033 #if USE_LIBCLANG
1034  static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING");
1035  if (clangAssistedParsing &&
1037  {
1038  if (!sameTu)
1039  {
1040  ClangParser::instance()->start(absFilePath(),filesInSameTu);
1041  }
1042  else
1043  {
1045  }
1046  ClangParser::instance()->writeSources(devNullIntf,this);
1047  }
1048  else
1049 #endif
1050  {
1052  pIntf->resetCodeParserState();
1053  pIntf->parseCode(
1054  devNullIntf,0,
1055  fileToString(absFilePath(),filterSourceFiles,TRUE),
1056  getLanguage(),
1057  FALSE,0,this
1058  );
1059  }
1060 }
1061 
1063 {
1064 }
1065 
1067 {
1069 }
1070 
1072 {
1074  MemberList *ml;
1075  for (mli.toFirst();(ml=mli.current());++mli)
1076  {
1078  {
1080  }
1081  }
1082 
1083  // add members inside sections to their groups
1084  if (m_memberGroupSDict)
1085  {
1087  MemberGroup *mg;
1088  for (;(mg=mgli.current());++mgli)
1089  {
1091  {
1092  //printf("----> addToDeclarationSection(%s)\n",mg->header().data());
1094  }
1095  }
1096  }
1097 }
1098 
1099 /*! Adds member definition \a md to the list of all members of this file */
1101 {
1102  if (md->isHidden()) return;
1103  //printf("%s:FileDef::insertMember(%s (=%p) list has %d elements)\n",
1104  // name().data(),md->name().data(),md,allMemberList.count());
1106  if (allMemberList && allMemberList->findRef(md)!=-1) // TODO optimize the findRef!
1107  {
1108  return;
1109  }
1110 
1111  if (allMemberList==0)
1112  {
1113  allMemberList = new MemberList(MemberListType_allMembersList);
1114  m_memberLists.append(allMemberList);
1115  }
1116  allMemberList->append(md);
1117  //::addFileMemberNameToIndex(md);
1118  switch (md->memberType())
1119  {
1120  case MemberType_Variable:
1121  case MemberType_Property:
1124  break;
1125  case MemberType_Function:
1128  break;
1129  case MemberType_Typedef:
1132  break;
1133  case MemberType_Enumeration:
1136  break;
1137  case MemberType_EnumValue: // enum values are shown inside their enums
1138  break;
1139  case MemberType_Define:
1142  break;
1143  default:
1144  err("FileDef::insertMembers(): "
1145  "member `%s' with class scope `%s' inserted in file scope `%s'!\n",
1146  md->name().data(),
1147  md->getClassDef() ? md->getClassDef()->name().data() : "<global>",
1148  name().data());
1149  }
1150  //addMemberToGroup(md,groupId);
1151 }
1152 
1153 /*! Adds compound definition \a cd to the list of all compounds of this file */
1155 {
1156  if (cd->isHidden()) return;
1157  if (m_classSDict==0)
1158  {
1159  m_classSDict = new ClassSDict(17);
1160  }
1161  if (Config_getBool("SORT_BRIEF_DOCS"))
1162  {
1163  m_classSDict->inSort(cd->name(),cd);
1164  }
1165  else
1166  {
1167  m_classSDict->append(cd->name(),cd);
1168  }
1169 }
1170 
1171 /*! Adds namespace definition \a nd to the list of all compounds of this file */
1173 {
1174  if (nd->isHidden()) return;
1175  if (!nd->name().isEmpty() &&
1176  (m_namespaceSDict==0 || m_namespaceSDict->find(nd->name())==0))
1177  {
1178  if (m_namespaceSDict==0)
1179  {
1181  }
1182  if (Config_getBool("SORT_BRIEF_DOCS"))
1183  {
1184  m_namespaceSDict->inSort(nd->name(),nd);
1185  }
1186  else
1187  {
1188  m_namespaceSDict->append(nd->name(),nd);
1189  }
1190  }
1191 }
1192 
1194 {
1195  if (Config_getBool("FULL_PATH_NAMES"))
1196  return m_fileName;
1197  else
1198  return Definition::name();
1199 }
1200 
1202 {
1203  //printf("FileDef::addSourceDef(%d,%p,%p)\n",line,d,md);
1204  if (d)
1205  {
1206  if (m_srcDefDict==0) m_srcDefDict = new QIntDict<Definition>(257);
1208  m_srcDefDict->insert(line,d);
1209  if (md) m_srcMemberDict->insert(line,md);
1210  //printf("Adding member %s with anchor %s at line %d to file %s\n",
1211  // md?md->name().data():"<none>",md?md->anchor().data():"<none>",line,name().data());
1212  }
1213 }
1214 
1216 {
1217  Definition *result=0;
1218  if (m_srcDefDict)
1219  {
1220  result = m_srcDefDict->find(lineNr);
1221  }
1222  //printf("%s::getSourceDefinition(%d)=%s\n",name().data(),lineNr,result?result->name().data():"none");
1223  return result;
1224 }
1225 
1227 {
1228  MemberDef *result=0;
1229  if (m_srcMemberDict)
1230  {
1231  result = m_srcMemberDict->find(lineNr);
1232  }
1233  //printf("%s::getSourceMember(%d)=%s\n",name().data(),lineNr,result?result->name().data():"none");
1234  return result;
1235 }
1236 
1237 
1239 {
1240  if (m_usingDirList==0)
1241  {
1243  }
1244  if (m_usingDirList->find(nd->qualifiedName())==0)
1245  {
1246  m_usingDirList->append(nd->qualifiedName(),nd);
1247  }
1248  //printf("%p: FileDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
1249 }
1250 
1252 {
1253  //printf("%p: FileDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
1254  return m_usingDirList;
1255 }
1256 
1258 {
1259  if (m_usingDeclList==0)
1260  {
1262  }
1263  if (m_usingDeclList->find(d->qualifiedName())==0)
1264  {
1266  }
1267 }
1268 
1269 void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
1270  bool imported,bool indirect)
1271 {
1272  //printf("FileDef::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
1273  QCString iName = fd ? fd->absFilePath().data() : incName;
1274  if (!iName.isEmpty() && (!m_includeDict || m_includeDict->find(iName)==0))
1275  {
1276  if (m_includeDict==0)
1277  {
1278  m_includeDict = new QDict<IncludeInfo>(61);
1280  m_includeList->setAutoDelete(TRUE);
1281  }
1282  IncludeInfo *ii = new IncludeInfo;
1283  ii->fileDef = fd;
1284  ii->includeName = incName;
1285  ii->local = local;
1286  ii->imported = imported;
1287  ii->indirect = indirect;
1288  m_includeList->append(ii);
1289  m_includeDict->insert(iName,ii);
1290  }
1291 }
1292 
1294 {
1295  if (visited) return;
1296  visited=TRUE;
1297  //printf("( FileDef::addIncludedUsingDirectives for file %s\n",name().data());
1298 
1299  if (m_includeList) // file contains #includes
1300  {
1301  {
1303  IncludeInfo *ii;
1304  for (iii.toFirst();(ii=iii.current());++iii) // foreach #include...
1305  {
1306  if (ii->fileDef && !ii->fileDef->visited) // ...that is a known file
1307  {
1308  // recurse into this file
1310  }
1311  }
1312  }
1313  {
1315  IncludeInfo *ii;
1316  // iterate through list from last to first
1317  for (iii.toLast();(ii=iii.current());--iii)
1318  {
1319  if (ii->fileDef && ii->fileDef!=this)
1320  {
1321  // add using directives
1323  if (unl)
1324  {
1325  NamespaceSDict::Iterator nli(*unl);
1326  NamespaceDef *nd;
1327  for (nli.toLast();(nd=nli.current());--nli)
1328  {
1329  // append each using directive found in a #include file
1331  //printf("Prepending used namespace %s to the list of file %s\n",
1332  // nd->name().data(),name().data());
1333  if (m_usingDirList->find(nd->qualifiedName())==0) // not yet added
1334  {
1336  }
1337  }
1338  }
1339  // add using declarations
1341  if (udl)
1342  {
1343  SDict<Definition>::Iterator udi(*udl);
1344  Definition *d;
1345  for (udi.toLast();(d=udi.current());--udi)
1346  {
1347  //printf("Adding using declaration %s\n",d->name().data());
1348  if (m_usingDeclList==0)
1349  {
1351  }
1352  if (m_usingDeclList->find(d->qualifiedName())==0)
1353  {
1355  }
1356  }
1357  }
1358  }
1359  }
1360  }
1361  }
1362  //printf(") end FileDef::addIncludedUsingDirectives for file %s\n",name().data());
1363 }
1364 
1365 
1366 void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
1367  bool local,bool imported)
1368 {
1369  //printf("FileDef::addIncludedByDependency(%p,%s,%d)\n",fd,incName,local);
1370  QCString iName = fd ? fd->absFilePath().data() : incName;
1371  if (!iName.isEmpty() && (m_includedByDict==0 || m_includedByDict->find(iName)==0))
1372  {
1373  if (m_includedByDict==0)
1374  {
1375  m_includedByDict = new QDict<IncludeInfo>(61);
1377  m_includedByList->setAutoDelete(TRUE);
1378  }
1379  IncludeInfo *ii = new IncludeInfo;
1380  ii->fileDef = fd;
1381  ii->includeName = incName;
1382  ii->local = local;
1383  ii->imported = imported;
1384  ii->indirect = FALSE;
1385  m_includedByList->append(ii);
1386  m_includedByDict->insert(iName,ii);
1387  }
1388 }
1389 
1391 {
1392  if (name.isEmpty()) return FALSE;
1393  return m_includeDict!=0 && m_includeDict->find(name)!=0;
1394 }
1395 
1397 {
1398  static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
1399  static bool verbatimHeaders = Config_getBool("VERBATIM_HEADERS");
1400  QCString extension = name().right(4);
1401  return !isReference() &&
1402  (sourceBrowser ||
1403  (verbatimHeaders && guessSection(name())==Entry::HEADER_SEC)
1404  ) &&
1405  extension!=".doc" && extension!=".txt" && extension!=".dox" &&
1406  extension!=".md" && name().right(9)!=".markdown";
1407 }
1408 
1409 
1411 {
1412  {
1413  QList<ListItemInfo> *xrefItems = xrefListItems();
1414  addRefItem(xrefItems,
1417  getOutputFileBase(),name(),
1418  0,
1419  0
1420  );
1421  }
1422  if (m_memberGroupSDict)
1423  {
1425  MemberGroup *mg;
1426  for (;(mg=mgli.current());++mgli)
1427  {
1428  mg->addListReferences(this);
1429  }
1430  }
1432  MemberList *ml;
1433  for (mli.toFirst();(ml=mli.current());++mli)
1434  {
1436  {
1437  ml->addListReferences(this);
1438  }
1439  }
1440 }
1441 
1442 //-------------------------------------------------------------------
1443 
1444 static int findMatchingPart(const QCString &path,const QCString dir)
1445 {
1446  int si1;
1447  int pos1=0,pos2=0;
1448  while ((si1=path.find('/',pos1))!=-1)
1449  {
1450  int si2=dir.find('/',pos2);
1451  //printf(" found slash at pos %d in path %d: %s<->%s\n",si1,si2,
1452  // path.mid(pos1,si1-pos2).data(),dir.mid(pos2).data());
1453  if (si2==-1 && path.mid(pos1,si1-pos2)==dir.mid(pos2)) // match at end
1454  {
1455  return dir.length();
1456  }
1457  if (si1!=si2 || path.mid(pos1,si1-pos2)!=dir.mid(pos2,si2-pos2)) // no match in middle
1458  {
1459  return QMAX(pos1-1,0);
1460  }
1461  pos1=si1+1;
1462  pos2=si2+1;
1463  }
1464  return 0;
1465 }
1466 
1468 {
1469  QListIterator<DirEntry> dli(root->children());
1470  DirEntry *de;
1471  for (dli.toFirst();(de=dli.current());++dli)
1472  {
1473  if (de->kind()==DirEntry::Dir)
1474  {
1475  Directory *dir = (Directory *)de;
1476  QCString dirName=dir->name();
1477  int sp=findMatchingPart(name,dirName);
1478  //printf("findMatchingPart(%s,%s)=%d\n",name.data(),dirName.data(),sp);
1479  if (sp>0) // match found
1480  {
1481  if ((uint)sp==dirName.length()) // whole directory matches
1482  {
1483  // recurse into the directory
1484  return findDirNode(dir,name.mid(dirName.length()+1));
1485  }
1486  else // partial match => we need to split the path into three parts
1487  {
1488  QCString baseName =dirName.left(sp);
1489  QCString oldBranchName=dirName.mid(sp+1);
1490  QCString newBranchName=name.mid(sp+1);
1491  // strip file name from path
1492  int newIndex=newBranchName.findRev('/');
1493  if (newIndex>0) newBranchName=newBranchName.left(newIndex);
1494 
1495  //printf("Splitting off part in new branch \n"
1496  // "base=%s old=%s new=%s\n",
1497  // baseName.data(),
1498  // oldBranchName.data(),
1499  // newBranchName.data()
1500  // );
1501  Directory *base = new Directory(root,baseName);
1502  Directory *newBranch = new Directory(base,newBranchName);
1503  dir->reParent(base);
1504  dir->rename(oldBranchName);
1505  base->addChild(dir);
1506  base->addChild(newBranch);
1507  dir->setLast(FALSE);
1508  // remove DirEntry container from list (without deleting it)
1509  root->children().setAutoDelete(FALSE);
1510  root->children().removeRef(dir);
1511  root->children().setAutoDelete(TRUE);
1512  // add new branch to the root
1513  if (!root->children().isEmpty())
1514  {
1515  root->children().getLast()->setLast(FALSE);
1516  }
1517  root->addChild(base);
1518  return newBranch;
1519  }
1520  }
1521  }
1522  }
1523  int si=name.findRev('/');
1524  if (si==-1) // no subdir
1525  {
1526  return root; // put the file under the root node.
1527  }
1528  else // need to create a subdir
1529  {
1530  QCString baseName = name.left(si);
1531  //printf("new subdir %s\n",baseName.data());
1532  Directory *newBranch = new Directory(root,baseName);
1533  if (!root->children().isEmpty())
1534  {
1535  root->children().getLast()->setLast(FALSE);
1536  }
1537  root->addChild(newBranch);
1538  return newBranch;
1539  }
1540 }
1541 
1542 static void mergeFileDef(Directory *root,FileDef *fd)
1543 {
1544  QCString filePath = fd->absFilePath();
1545  //printf("merging %s\n",filePath.data());
1546  Directory *dirNode = findDirNode(root,filePath);
1547  if (!dirNode->children().isEmpty())
1548  {
1549  dirNode->children().getLast()->setLast(FALSE);
1550  }
1551  DirEntry *e=new DirEntry(dirNode,fd);
1552  dirNode->addChild(e);
1553 }
1554 
1555 #if 0
1556 static void generateIndent(QTextStream &t,DirEntry *de,int level)
1557 {
1558  if (de->parent())
1559  {
1560  generateIndent(t,de->parent(),level+1);
1561  }
1562  // from the root up to node n do...
1563  if (level==0) // item before a dir or document
1564  {
1565  if (de->isLast())
1566  {
1567  if (de->kind()==DirEntry::Dir)
1568  {
1569  t << "<img " << FTV_IMGATTRIBS(plastnode) << "/>";
1570  }
1571  else
1572  {
1573  t << "<img " << FTV_IMGATTRIBS(lastnode) << "/>";
1574  }
1575  }
1576  else
1577  {
1578  if (de->kind()==DirEntry::Dir)
1579  {
1580  t << "<img " << FTV_IMGATTRIBS(pnode) << "/>";
1581  }
1582  else
1583  {
1584  t << "<img " << FTV_IMGATTRIBS(node) << "/>";
1585  }
1586  }
1587  }
1588  else // item at another level
1589  {
1590  if (de->isLast())
1591  {
1592  t << "<img " << FTV_IMGATTRIBS(blank) << "/>";
1593  }
1594  else
1595  {
1596  t << "<img " << FTV_IMGATTRIBS(vertline) << "/>";
1597  }
1598  }
1599 }
1600 
1601 static void writeDirTreeNode(QTextStream &t,Directory *root,int level)
1602 {
1603  QCString indent;
1604  indent.fill(' ',level*2);
1605  QListIterator<DirEntry> dli(root->children());
1606  DirEntry *de;
1607  for (dli.toFirst();(de=dli.current());++dli)
1608  {
1609  t << indent << "<p>";
1610  generateIndent(t,de,0);
1611  if (de->kind()==DirEntry::Dir)
1612  {
1613  Directory *dir=(Directory *)de;
1614  //printf("%s [dir]: %s (last=%d,dir=%d)\n",indent.data(),dir->name().data(),dir->isLast(),dir->kind()==DirEntry::Dir);
1615  t << "<img " << FTV_IMGATTRIBS(folderclosed) << "/>";
1616  t << dir->name();
1617  t << "</p>\n";
1618  t << indent << "<div>\n";
1619  writeDirTreeNode(t,dir,level+1);
1620  t << indent << "</div>\n";
1621  }
1622  else
1623  {
1624  //printf("%s [file]: %s (last=%d,dir=%d)\n",indent.data(),de->file()->name().data(),de->isLast(),de->kind()==DirEntry::Dir);
1625  t << "<img " << FTV_IMGATTRIBS(doc) << "/>";
1626  t << de->file()->name();
1627  t << "</p>\n";
1628  }
1629  }
1630 }
1631 #endif
1632 
1634 {
1635  GroupDef *gd=0;
1636  if (root->kind()==DirEntry::Dir)
1637  {
1638  gd = new GroupDef("[generated]",
1639  1,
1640  root->path(), // name
1641  root->name() // title
1642  );
1643  if (parent)
1644  {
1645  parent->addGroup(gd);
1646  gd->makePartOfGroup(parent);
1647  }
1648  else
1649  {
1650  Doxygen::groupSDict->append(root->path(),gd);
1651  }
1652  }
1653  QListIterator<DirEntry> dli(root->children());
1654  DirEntry *de;
1655  for (dli.toFirst();(de=dli.current());++dli)
1656  {
1657  if (de->kind()==DirEntry::Dir)
1658  {
1659  addDirsAsGroups((Directory *)de,gd,level+1);
1660  }
1661  }
1662 }
1663 
1665 {
1666  Directory *root=new Directory(0,"root");
1667  root->setLast(TRUE);
1669  FileName *fn;
1670  for (fnli.toFirst();(fn=fnli.current());++fnli)
1671  {
1672  FileNameIterator fni(*fn);
1673  FileDef *fd;
1674  for (;(fd=fni.current());++fni)
1675  {
1676  mergeFileDef(root,fd);
1677  }
1678  }
1679  //t << "<div class=\"directory\">\n";
1680  //writeDirTreeNode(t,root,0);
1681  //t << "</div>\n";
1682  addDirsAsGroups(root,0,0);
1683  delete root;
1684 }
1685 
1686 //-------------------------------------------------------------------
1687 
1689 {
1690  if (visited) return; // already done
1691  visited=TRUE;
1692  if (m_usingDirList)
1693  {
1695  NamespaceDef *nd;
1696  for (nli.toFirst();(nd=nli.current());++nli)
1697  {
1698  nd->combineUsingRelations();
1699  }
1700  for (nli.toFirst();(nd=nli.current());++nli)
1701  {
1702  // add used namespaces of namespace nd to this namespace
1703  if (nd->getUsedNamespaces())
1704  {
1706  NamespaceDef *und;
1707  for (unli.toFirst();(und=unli.current());++unli)
1708  {
1709  //printf("Adding namespace %s to the using list of %s\n",und->qualifiedName().data(),qualifiedName().data());
1710  addUsingDirective(und);
1711  }
1712  }
1713  // add used classes of namespace nd to this namespace
1714  if (nd->getUsedClasses())
1715  {
1717  Definition *ucd;
1718  for (cli.toFirst();(ucd=cli.current());++cli)
1719  {
1720  //printf("Adding class %s to the using list of %s\n",cd->qualifiedName().data(),qualifiedName().data());
1721  addUsingDeclaration(ucd);
1722  }
1723  }
1724  }
1725  }
1726 }
1727 
1729 {
1730  return name().right(4)==".doc" ||
1731  name().right(4)==".txt" ||
1732  name().right(4)==".dox" ||
1733  name().right(3)==".md" ||
1734  name().right(9)==".markdown";
1735 }
1736 
1738 {
1739  QCString vercmd = Config_getString("FILE_VERSION_FILTER");
1740  if (!vercmd.isEmpty() && !m_filePath.isEmpty() &&
1741  m_filePath!="generated" && m_filePath!="graph_legend")
1742  {
1743  msg("Version of %s : ",m_filePath.data());
1744  QCString cmd = vercmd+" \""+m_filePath+"\"";
1745  Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",qPrint(cmd));
1746  FILE *f=portable_popen(cmd,"r");
1747  if (!f)
1748  {
1749  err("could not execute %s\n",vercmd.data());
1750  return;
1751  }
1752  const int bufSize=1024;
1753  char buf[bufSize];
1754  int numRead = (int)fread(buf,1,bufSize-1,f);
1755  portable_pclose(f);
1756  if (numRead>0 && numRead<bufSize)
1757  {
1758  buf[numRead]='\0';
1759  m_fileVersion=QCString(buf,numRead).stripWhiteSpace();
1760  if (!m_fileVersion.isEmpty())
1761  {
1762  msg("%s\n",m_fileVersion.data());
1763  return;
1764  }
1765  }
1766  msg("no version available\n");
1767  }
1768 }
1769 
1770 
1772 {
1773  if (Htags::useHtags)
1774  {
1775  return Htags::path2URL(m_filePath);
1776  }
1777  else
1778  {
1779  return convertNameToFile(m_diskName)+"_source";
1780  }
1781 }
1782 
1783 /*! Returns the name of the verbatim copy of this file (if any). */
1785 {
1786  return getSourceFileBase();
1787 }
1788 
1790 {
1793  MemberList *ml;
1794  for (mli.toFirst();(ml=mli.current());++mli)
1795  {
1796  if (ml->listType()==lt)
1797  {
1798  return ml;
1799  }
1800  }
1801  // not found, create a new member list
1802  ml = new MemberList(lt);
1803  m_memberLists.append(ml);
1804  return ml;
1805 }
1806 
1808 {
1809  static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
1810  static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS");
1811  MemberList *ml = createMemberList(lt);
1812  ml->setNeedsSorting(
1813  ((ml->listType()&MemberListType_declarationLists) && sortBriefDocs) ||
1814  ((ml->listType()&MemberListType_documentationLists) && sortMemberDocs));
1815  ml->append(md);
1816 #if 0
1817  if (ml->needsSorting())
1818  ml->inSort(md);
1819  else
1820  ml->append(md);
1821 #endif
1823  {
1824  ml->setInFile(TRUE);
1825  }
1827 }
1828 
1830 {
1832  MemberList *ml;
1833  for (;(ml=mli.current());++mli)
1834  {
1835  if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
1836  }
1837 }
1838 
1840 {
1842  MemberList *ml;
1843  for (;(ml=mli.current());++mli)
1844  {
1845  if (ml->listType()==lt)
1846  {
1847  return ml;
1848  }
1849  }
1850  return 0;
1851 }
1852 
1854 {
1855  static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
1856  MemberList * ml = getMemberList(lt);
1857  if (ml)
1858  {
1859  if (optVhdl) // use specific declarations function
1860  {
1861 
1862  VhdlDocGen::writeVhdlDeclarations(ml,ol,0,0,this,0);
1863  }
1864  else
1865  {
1866  ml->writeDeclarations(ol,0,0,this,0,title,0);
1867  }
1868  }
1869 }
1870 
1872 {
1873  MemberList * ml = getMemberList(lt);
1874  if (ml) ml->writeDocumentation(ol,name(),this,title);
1875 }
1876 
1878 {
1879  static bool showFiles = Config_getBool("SHOW_FILES");
1880  return hasDocumentation() && !isReference() && showFiles;
1881 }
1882 
1884  QDict<void> *filesVisited,const FileDef *fd,QStrList &incFiles)
1885 {
1886  if (fd->includeFileList())
1887  {
1889  IncludeInfo *ii;
1890  for (iii.toFirst();(ii=iii.current());++iii)
1891  {
1892  if (ii->fileDef && !ii->fileDef->isReference() &&
1893  !filesVisited->find(ii->fileDef->absFilePath()))
1894  {
1895  //printf("FileDef::addIncludeDependency(%s)\n",ii->fileDef->absFilePath().data());
1896  incFiles.append(ii->fileDef->absFilePath());
1897  filesVisited->insert(ii->fileDef->absFilePath(),(void*)0x8);
1898  getAllIncludeFilesRecursively(filesVisited,ii->fileDef,incFiles);
1899  }
1900  }
1901  }
1902 }
1903 
1905 {
1906  QDict<void> includes(257);
1907  ::getAllIncludeFilesRecursively(&includes,this,incFiles);
1908 }
1909 
1911 {
1912  return theTranslator->trFileReference(name());
1913 }
1914 
1916 {
1917  return m_fileVersion;
1918 }
QCString convertToXML(const char *s)
Definition: util.cpp:5717
void writeRuler()
Definition: outputlist.h:240
MemberListType listType() const
Definition: memberlist.h:38
static GroupSDict * groupSDict
Definition: doxygen.h:119
QCString docFile() const
QCString anchor() const
Definition: filedef.h:86
ParserInterface * getParser(const char *extension)
Definition: parserintf.h:191
virtual void startFontClass(const char *)
Definition: filedef.cpp:64
void append(const MemberDef *md)
Definition: memberlist.cpp:246
QCString header() const
Definition: membergroup.h:47
void setAnchors(MemberList *ml)
Definition: util.cpp:2254
QCString fileToString(const char *name, bool filter, bool isSourceCode)
Definition: util.cpp:2418
void endFileWithNavPath(Definition *d, OutputList &ol)
Definition: index.cpp:282
void endGroupHeader(int extraLevels=0)
Definition: outputlist.h:178
QCString stripWhiteSpace() const
Definition: qcstring.cpp:295
bool m_isSource
Definition: filedef.h:227
void writeClassDeclarations(OutputList &ol, const QCString &title)
Definition: filedef.cpp:533
bool isLinkableInProject() const
Definition: classdef.cpp:2707
void prepend(const char *key, const T *d)
Definition: sortdict.h:153
MemberList * createMemberList(MemberListType lt)
Definition: filedef.cpp:1789
void insertMember(MemberDef *md)
Definition: filedef.cpp:1100
DirEntry * parent() const
Definition: filedef.h:291
void switchToFile(const char *fileName)
virtual QCString trFile(bool first_capital, bool singular)=0
QDict< IncludeInfo > * m_includeDict
Definition: filedef.h:214
virtual QCString getReference() const
bool isLinkable() const
Definition: filedef.h:117
void writeBriefDescription(OutputList &ol)
Definition: filedef.cpp:360
void inSort(const char *key, const T *d)
Definition: sortdict.h:197
static QCString result
bool isEmpty() const
Definition: qcstring.h:189
void startFile(OutputList &ol, const char *name, const char *manName, const char *title, HighlightedItem hli, bool additionalIndices, const char *altSidebarName)
Definition: index.cpp:244
MemberDef * getSourceMember(int lineNr) const
Definition: filedef.cpp:1226
QCString convertNameToFile(const char *name, bool allowDots=FALSE) const
void msg(const char *fmt,...)
Definition: message.cpp:107
void writeIncludedByGraph(OutputList &ol)
Definition: filedef.cpp:486
uint length() const
Definition: qcstring.h:195
void writeInlineClasses(OutputList &ol)
Definition: filedef.cpp:539
bool isTrivial() const
Definition: dot.cpp:3636
void append(const type *d)
Definition: qlist.h:73
FILE * portable_popen(const char *name, const char *type)
Definition: portable.cpp:400
bool generateSourceFile() const
Definition: filedef.cpp:1396
Abstract interface for programming language parsers.
Definition: parserintf.h:38
int guessSection(const char *name)
Definition: util.cpp:315
void setInFile(bool inFile)
Definition: memberlist.h:74
QList< ListItemInfo > * xrefListItems() const
virtual QCString trFileReference(const char *fileName)=0
static QCString htmlFileExtension
Definition: doxygen.h:130
void writeTagFile(FTextStream &)
void writeString(const char *text)
Definition: outputlist.h:119
MemberListType type
Definition: layout.h:96
void startCodeFragment()
Definition: outputlist.h:244
int findRef(const type *d) const
Definition: qlist.h:89
bool generateDoc(const char *fileName, int startLine, Definition *ctx, MemberDef *md, const QCString &docStr, bool indexWords, bool isExample, const char *exampleName=0, bool singleLine=FALSE, bool linkFromIndex=FALSE)
Definition: outputlist.cpp:131
void setLanguage(SrcLangExt lang)
QCString m_fileName
Definition: filedef.h:223
void start(const char *fileName, QStrList &filesInTranslationUnit)
void disableAllBut(OutputGenerator::OutputType o)
Definition: outputlist.cpp:49
virtual void codify(const char *)
Definition: filedef.cpp:53
void startParagraph()
Definition: outputlist.h:115
void lineBreak(const char *style=0)
Definition: outputlist.h:302
FileDef * getBodyDef() const
QCString compoundTypeString() const
Definition: classdef.cpp:3499
virtual bool hasDocumentation() const
QCString title(SrcLangExt lang) const
Definition: layout.cpp:1459
bool hasDetailedDescription() const
Definition: filedef.cpp:173
void writeNavigationPath(OutputList &ol) const
QCString m_docname
Definition: filedef.h:224
void writeTagFile(FTextStream &t)
Definition: filedef.cpp:183
QCString m_path
Definition: filedef.h:220
void writeDocumentation(OutputList &ol, const char *scopeName, Definition *container, const char *title, bool showEnumValues=FALSE, bool showInline=FALSE)
Definition: memberlist.cpp:655
bool visited
Definition: filedef.h:184
NamespaceSDict * getUsedNamespaces() const
Definition: filedef.cpp:1251
const bool FALSE
Definition: qglobal.h:370
friend class Iterator
Definition: sortdict.h:598
static FileNameList * inputNameList
Definition: doxygen.h:109
static LayoutDocManager & instance()
Definition: layout.cpp:1359
bool isLinkableInProject() const
Definition: memberdef.cpp:1150
bool declVisible(const ClassDef::CompoundType *filter=0) const
Definition: classlist.cpp:65
void writeSource(OutputList &ol, bool sameTu, QStrList &filesInSameTu)
Definition: filedef.cpp:912
void writeSummaryLinks(OutputList &ol)
Definition: filedef.cpp:611
void parseSource(bool sameTu, QStrList &filesInSameTu)
Definition: filedef.cpp:1027
~FileDef()
Definition: filedef.cpp:113
void writeQuickMemberLinks(OutputList &ol, MemberDef *currentMd) const
Definition: filedef.cpp:868
void startMemberSections()
Definition: outputlist.h:186
QCString left(uint len) const
Definition: qcstring.cpp:213
DocRoot * validatingParseDoc(const char *fileName, int startLine, Definition *ctx, MemberDef *md, const char *input, bool indexWords, bool isExample, const char *exampleName, bool singleLine, bool linkFromIndex)
Definition: docparser.cpp:7179
void writeDeclarations(OutputList &ol, ClassDef *cd, NamespaceDef *nd, FileDef *fd, GroupDef *gd, bool showInline=FALSE)
static bool suppressDocWarnings
Definition: doxygen.h:142
int briefLine() const
void writeTagFile(FTextStream &)
Definition: memberlist.cpp:963
virtual bool isReference() const
bool isEnabled(OutputGenerator::OutputType o)
Definition: outputlist.cpp:99
Simplified and optimized version of QTextStream.
Definition: ftextstream.h:11
string dir
DirDef * getDirDef() const
Definition: filedef.h:121
int find(char c, int index=0, bool cs=TRUE) const
Definition: qcstring.cpp:41
NamespaceSDict * getUsedNamespaces() const
virtual QCString trGotoDocumentation()=0
PackageDef * m_package
Definition: filedef.h:229
void getAllIncludeFilesRecursively(QStrList &incFiles) const
Definition: filedef.cpp:1904
void endMemberDocumentation(OutputList &ol)
Definition: filedef.cpp:571
void append(const char *key, const T *d)
Definition: sortdict.h:135
static constexpr double mg
Definition: Units.h:145
SrcLangExt
Definition: types.h:41
void writeIncludeFiles(OutputList &ol)
Definition: filedef.cpp:393
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition: qcstring.cpp:95
void finishParsing()
Definition: filedef.cpp:1066
Represents of a member definition list with configurable title.
Definition: layout.h:105
QCString getFileFilter(const char *name, bool isSourceCode)
Definition: util.cpp:2345
void writeDetailedDescription(OutputList &ol, const QCString &title)
Definition: filedef.cpp:289
void startTextLink(const char *file, const char *anchor)
Definition: outputlist.h:159
virtual void linkableSymbol(int, const char *, Definition *, Definition *)
Definition: filedef.cpp:67
QCString title(SrcLangExt lang) const
Definition: layout.cpp:1440
void addGroup(const GroupDef *def)
Definition: groupdef.cpp:532
virtual QCString trGotoSourceCode()=0
void addMembersToMemberGroup()
Definition: filedef.cpp:1071
void endMemberDeclarations(OutputList &ol)
Definition: filedef.cpp:557
bool parseText(const QCString &textStr)
Definition: outputlist.cpp:175
QCString getDefFileExtension() const
QCString copy() const
Definition: qcstring.h:250
static int findMatchingPart(const QCString &path, const QCString dir)
Definition: filedef.cpp:1444
bool declVisible() const
Definition: memberlist.cpp:256
void endCodeFragment()
Definition: outputlist.h:246
Represents of a member declaration list with configurable title and subtitle.
Definition: layout.h:89
void endProjectNumber()
Definition: outputlist.h:93
void writeDocAnchorsToTagFile(FTextStream &)
Definition: definition.cpp:520
virtual QCString trDefinedInSourceFile()=0
QList< MemberList > m_memberLists
Definition: filedef.h:231
MemberGroupSDict * m_memberGroupSDict
Definition: filedef.h:232
bool isLast() const
Definition: filedef.h:289
virtual QCString trInclDepGraph(const char *fName)=0
static bool parseSourcesNeeded
Definition: doxygen.h:131
static QCString stripFromPath(const QCString &path, QStrList &l)
Definition: util.cpp:274
QIntDict< Definition > * m_srcDefDict
Definition: filedef.h:225
FileDef * getFileDef() const
Definition: memberdef.cpp:4075
void distributeMemberGroupDocumentation()
Definition: filedef.cpp:135
static ParserManager * parserManager
Definition: doxygen.h:141
void popGeneratorState()
Definition: outputlist.cpp:121
virtual void writeCodeAnchor(const char *)
Definition: filedef.cpp:66
void writeDocumentation(OutputList &ol)
Definition: filedef.cpp:654
def cli(ctx)
Definition: main.py:7
Definition: sortdict.h:73
QIntDict< MemberDef > * m_srcMemberDict
Definition: filedef.h:226
virtual void setCurrentDoc(Definition *, const char *, bool)
Definition: filedef.cpp:68
uint count() const
Definition: qlist.h:66
QAsciiDict< Entry > fn
type * getLast() const
Definition: qlist.h:96
static SearchIndexIntf * searchIndex
Definition: doxygen.h:133
void endParagraph()
Definition: outputlist.h:117
void insert(long k, const type *d)
Definition: qintdict.h:57
bool indirect
Definition: filedef.h:53
static Directory * findDirNode(Directory *root, const QCString &name)
Definition: filedef.cpp:1467
#define QMAX(a, b)
Definition: qglobal.h:390
const QCString & name() const
Definition: definition.h:114
QCString m_filePath
Definition: filedef.h:221
const double e
bool isEnumValue() const
Definition: memberdef.cpp:4150
static QCString path2URL(const QCString &path)
Definition: htags.cpp:159
void writeSummaryLink(const char *file, const char *anchor, const char *title, bool first)
Definition: outputlist.h:362
void combineUsingRelations()
Definition: filedef.cpp:1688
void findSectionsInDocumentation()
Definition: memberlist.cpp:818
bool allMembersInSameSection() const
Definition: membergroup.h:67
ClassSDict * m_classSDict
Definition: filedef.h:234
void pushGeneratorState()
Definition: outputlist.cpp:111
bool isLinkableInProject() const
Definition: filedef.cpp:1877
QCString name() const
Definition: filedef.cpp:1193
void writeNamespaceDeclarations(OutputList &ol, const QCString &title, bool isConstantGroup)
Definition: filedef.cpp:526
void insertNamespace(NamespaceDef *nd)
Definition: filedef.cpp:1172
virtual void writeCodeLink(const char *, const char *, const char *, const char *, const char *)
Definition: filedef.cpp:54
SDict< Definition > * m_usingDeclList
Definition: filedef.h:219
bool isEmpty() const
Definition: qlist.h:67
QCString convertToHtml(const char *s, bool keepEntities)
Definition: util.cpp:5746
QCString getSourceFileBase() const
Definition: filedef.cpp:1771
QCString right(uint len) const
Definition: qcstring.cpp:231
QList< IncludeInfo > * includeFileList() const
Definition: filedef.h:124
static void writeVhdlDeclarations(MemberList *, OutputList &, GroupDef *, ClassDef *, FileDef *, NamespaceDef *)
void inSort(const MemberDef *md)
Definition: memberlist.cpp:241
SrcLangExt getLanguage() const
virtual QCString trAuthor(bool first_capital, bool singular)=0
virtual void endCodeLine()
Definition: filedef.cpp:63
NamespaceSDict * m_usingDirList
Definition: filedef.h:218
void sort()
Definition: qlist.h:85
virtual void addWord(const char *word, bool hiPriority)=0
void setLast(bool b)
Definition: filedef.h:290
Definition * getSourceDefinition(int lineNr) const
Definition: filedef.cpp:1215
void addUsingDirective(NamespaceDef *nd)
Definition: filedef.cpp:1238
virtual QCString trGeneratedAutomatically(const char *s)=0
static void print(DebugMask mask, int prio, const char *fmt,...)
Definition: debug.cpp:84
virtual void writeLineNumber(const char *, const char *, const char *, int)
Definition: filedef.cpp:60
QCString & prepend(const char *s)
Definition: qcstring.cpp:387
p
Definition: test.py:223
void disable(OutputGenerator::OutputType o)
Definition: outputlist.cpp:79
void makePartOfGroup(GroupDef *gd)
void append(const type *d)
Definition: qinternallist.h:61
virtual void addWord(const char *, bool)
Definition: filedef.cpp:69
NamespaceSDict * m_namespaceSDict
Definition: filedef.h:233
void setNeedsSorting(bool b)
Definition: memberlist.cpp:902
A bunch of utility functions.
QCString name() const
Definition: filedef.h:292
const char * data() const
Definition: qcstring.h:207
void addGroupListToTitle(OutputList &ol, Definition *d)
Definition: util.cpp:6528
void addToDeclarationSection()
QCString anchor() const
Definition: memberdef.cpp:1031
bool imported
Definition: filedef.h:52
#define Config_getString(val)
Definition: config.cpp:660
type * current() const
Definition: qlist.h:146
void writeSynopsis()
Definition: outputlist.h:340
void writeDoc(DocRoot *root, Definition *ctx, MemberDef *md)
Definition: outputlist.cpp:162
QCString includeName
Definition: filedef.h:50
void enable(OutputGenerator::OutputType o)
Definition: outputlist.cpp:89
#define Config_getBool(val)
Definition: config.cpp:664
void setReference(const char *r)
ClassDef * getClassDef() const
Definition: memberdef.cpp:4070
void setSectionList(Definition *d, MemberList *sl)
Definition: memberdef.cpp:3548
QCString briefFile() const
void sortMemberLists()
Definition: filedef.cpp:1829
void addListReferences()
Definition: filedef.cpp:1410
void rename(const QCString &name)
Definition: filedef.h:315
virtual QCString qualifiedName() const
virtual void endFontClass()
Definition: filedef.cpp:65
void sort()
Definition: sortdict.h:522
void addUsingDeclaration(Definition *def)
Definition: filedef.cpp:1257
bool m_subGrouping
Definition: filedef.h:235
void err(const char *fmt,...)
Definition: message.cpp:226
MemberList * getMemberList(MemberListType lt) const
Definition: filedef.cpp:1839
MemberType memberType() const
Definition: memberdef.cpp:4125
virtual QCString trMore()=0
QCString absFilePath() const
Definition: filedef.h:96
virtual QCString briefDescription(bool abbreviate=FALSE) const
void startGroupHeader(int extraLevels=0)
Definition: outputlist.h:176
QCString mid(uint index, uint len=0xffffffff) const
Definition: qcstring.cpp:246
void endQuickIndices()
Definition: outputlist.h:352
QCString getOutputFileBase() const
Definition: filedef.h:83
static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp *ftv, bool addToIndex)
Definition: index.cpp:572
void writeDocumentationPage(OutputList &ol, const char *scopeName, Definition *container)
Definition: memberlist.cpp:715
void endContents()
Definition: outputlist.h:366
QList< IncludeInfo > * m_includedByList
Definition: filedef.h:217
void findSectionsInDocumentation()
Definition: filedef.cpp:149
SDict< Definition > * getUsedClasses() const
Definition: namespacedef.h:66
The QTextStream class provides basic functions for reading and writing text using a QIODevice...
Definition: qtextstream.h:53
void writeMemberDocumentation(OutputList &ol, MemberListType lt, const QCString &title)
Definition: filedef.cpp:1871
bool local
Definition: filedef.h:51
MemberListType type
Definition: layout.h:111
bool isHidden() const
FileDef * fileDef
Definition: filedef.h:49
virtual void startCodeLine(bool)
Definition: filedef.cpp:62
void writeDeclaration(OutputList &ol, const ClassDef::CompoundType *filter=0, const char *header=0, bool localNames=FALSE)
Definition: classlist.cpp:94
void insertClass(ClassDef *cd)
Definition: filedef.cpp:1154
void startTitle(OutputList &ol, const char *fileName, Definition *def)
Definition: index.cpp:228
static bool useHtags
Definition: htags.h:23
QCString title() const
Definition: filedef.cpp:1910
SrcLangExt getLanguageFromFileName(const QCString fileName)
Definition: util.cpp:7061
int getStartBodyLine() const
void startTypewriter()
Definition: outputlist.h:172
void writeMemberDeclarations(OutputList &ol, MemberListType lt, const QCString &title)
Definition: filedef.cpp:1853
void computeAnchors()
Definition: filedef.cpp:129
void startTextBlock(bool dense=FALSE)
Definition: outputlist.h:404
QCString getPath() const
Definition: filedef.h:110
int portable_pclose(FILE *stream)
Definition: portable.cpp:405
void line(double t, double *p, double &x, double &y, double &z)
virtual Kind kind() const =0
void enableAll()
Definition: outputlist.cpp:59
void writeAuthorSection(OutputList &ol)
Definition: filedef.cpp:599
void writeSources(CodeOutputInterface &ol, FileDef *fd)
void endInclDepGraph(const DotInclDepGraph &g)
Definition: outputlist.h:388
bool fill(char c, int len=-1)
Definition: qcstring.h:243
Base class representing a piece of a documentation page.
Definition: layout.h:30
QCString doc
virtual void setCurrentDoc(Definition *ctx, const char *anchor, bool isSourceFile)=0
QCString getOutputFileBase() const
Definition: memberdef.cpp:941
static void addDirsAsGroups(Directory *root, GroupDef *parent, int level)
Definition: filedef.cpp:1633
void writeAnchor(const char *fileName, const char *name)
Definition: outputlist.h:242
void acquireFileVersion()
Definition: filedef.cpp:1737
QDict< IncludeInfo > * m_includedByDict
Definition: filedef.h:216
void writeMemberGroups(OutputList &ol)
Definition: filedef.cpp:580
void writeMemberPages(OutputList &ol)
Definition: filedef.cpp:850
static void mergeFileDef(Directory *root, FileDef *fd)
Definition: filedef.cpp:1542
void addChild(DirEntry *d)
Definition: filedef.h:313
NamespaceDef * getNamespaceDef() const
Definition: memberdef.cpp:4080
void addRefItem(const QList< ListItemInfo > *sli, const char *key, const char *prefix, const char *name, const char *title, const char *args, Definition *scope)
Definition: util.cpp:6456
void addIncludedByDependency(FileDef *fd, const char *incName, bool local, bool imported)
Definition: filedef.cpp:1366
Translator * theTranslator
Definition: language.cpp:157
void addIncludeDependency(FileDef *fd, const char *incName, bool local, bool imported, bool indirect)
Definition: filedef.cpp:1269
void writeDocumentation(OutputList &ol, Definition *container=0)
Definition: classlist.cpp:119
void addMemberToList(MemberListType lt, MemberDef *md)
Definition: filedef.cpp:1807
bool needsSorting() const
Definition: memberlist.h:53
bool isDocumentationFile() const
Definition: filedef.cpp:1728
static QCString listTypeAsString(MemberListType type)
Definition: memberlist.cpp:907
void endTextBlock(bool paraBreak=FALSE)
Definition: outputlist.h:406
MemberListType
Definition: types.h:104
QCString m_fileVersion
Definition: filedef.h:228
void endTitle(OutputList &ol, const char *fileName, const char *name)
Definition: index.cpp:237
void writeDeclarations(OutputList &ol, ClassDef *cd, NamespaceDef *nd, FileDef *fd, GroupDef *gd, const char *title, const char *subtitle, bool showEnumValues=FALSE, bool showInline=FALSE, ClassDef *inheritedFrom=0, MemberListType lt=MemberListType_pubMethods)
Definition: memberlist.cpp:519
void endMemberSections()
Definition: outputlist.h:188
QList< IncludeInfo > * m_includeList
Definition: filedef.h:215
bool isEmpty() const
Definition: docparser.h:1409
void createSubDirs(QDir &d)
Definition: util.cpp:5458
friend class Iterator
Definition: sortdict.h:289
EntryKind kind() const
Definition: filedef.h:287
bool removeRef(const type *d)
Definition: qlist.h:78
void distributeMemberGroupDocumentation()
list cmd
Definition: getreco.py:22
QCString includeName() const
Definition: filedef.cpp:1784
void generateFileTree()
Definition: filedef.cpp:1664
static QCString baseName
Definition: scanner.cpp:10890
void addIncludedUsingDirectives()
Definition: filedef.cpp:1293
int docLine() const
static ClangParser * instance()
Definition: clangparser.cpp:30
void writeSourceLink(OutputList &ol)
Definition: filedef.cpp:511
void docFindSections(const char *input, Definition *d, MemberGroup *mg, const char *fileName)
Definition: docparser.cpp:7434
bool isLinkableInProject() const
QList< DirEntry > & children()
Definition: filedef.h:314
void addSourceRef(int line, Definition *d, MemberDef *md)
Definition: filedef.cpp:1201
void docify(const char *s)
Definition: outputlist.h:145
void findSectionsInDocumentation()
DirDef * m_dir
Definition: filedef.h:230
T * find(const char *key)
Definition: sortdict.h:232
virtual QCString trInclByDepGraph()=0
virtual QCString documentation() const
void writeObjectLink(const char *ref, const char *file, const char *anchor, const char *name)
Definition: outputlist.h:149
void startParsing()
Definition: filedef.cpp:1062
virtual void writeTooltip(const char *, const DocLinkInfo &, const char *, const char *, const SourceLinkInfo &, const SourceLinkInfo &)
Definition: filedef.cpp:57
void startProjectNumber()
Definition: outputlist.h:91
unsigned uint
Definition: qglobal.h:351
void setAutoDelete(bool enable)
Definition: qlist.h:99
bool declVisible() const
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, MemberDef *memberDef=0, bool showLineNumbers=TRUE, Definition *searchCtx=0, bool collectXRefs=TRUE)=0
bool isLinkable() const
Definition: memberdef.cpp:1161
void writeDeclaration(OutputList &ol, const char *title, bool isConstantGroup=false, bool localName=FALSE)
void endTextLink()
Definition: outputlist.h:161
void addListReferences(Definition *def)
Definition: memberlist.cpp:784
void reParent(Directory *parent)
Definition: filedef.h:316
type * toLast()
Definition: qlist.h:136
virtual QCString trSourceFile(QCString &filename)=0
QCString localName() const
const char * qPrint(const char *s)
Definition: qcstring.h:797
def parent(G, child, parent_type)
Definition: graph.py:67
const bool TRUE
Definition: qglobal.h:371
void writeIncludeGraph(OutputList &ol)
Definition: filedef.cpp:462
void startMemberDocumentation(OutputList &ol)
Definition: filedef.cpp:562
FileDef(const char *p, const char *n, const char *ref=0, const char *dn=0)
Definition: filedef.cpp:78
Portable versions of functions that are platform dependent.
type * find(long k) const
Definition: qintdict.h:63
QCString title(SrcLangExt lang) const
Definition: layout.cpp:1447
void combineUsingRelations()
bool isTooBig() const
Definition: dot.cpp:3641
QTextStream & endl(QTextStream &s)
bool isIncluded(const QCString &name) const
Definition: filedef.cpp:1390
QCString path() const
Definition: filedef.h:293
void startContents()
Definition: outputlist.h:364
QCString fileVersion() const
Definition: filedef.cpp:1915
QCString m_diskName
Definition: filedef.h:222
void warn_uncond(const char *fmt,...)
Definition: message.cpp:218
void addListReferences(Definition *d)
void startMemberDeclarations(OutputList &ol)
Definition: filedef.cpp:552
void endTypewriter()
Definition: outputlist.h:174
void startInclDepGraph()
Definition: outputlist.h:386
type * toFirst()
Definition: qlist.h:135
virtual void resetCodeParserState()=0