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

definition.cpp
Go to the documentation of this file.
1 
18 #include <algorithm>
19 #include <ctype.h>
20 #include <qregexp.h>
21 #include "md5.h"
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <assert.h>
25 #include "config.h"
26 #include "definitionimpl.h"
27 #include "doxygen.h"
28 #include "language.h"
29 #include "message.h"
30 #include "portable.h"
31 #include "outputlist.h"
32 #include "code.h"
33 #include "util.h"
34 #include "groupdef.h"
35 #include "pagedef.h"
36 #include "section.h"
37 #include "htags.h"
38 #include "parserintf.h"
39 #include "debug.h"
40 #include "vhdldocgen.h"
41 #include "memberlist.h"
42 #include "namespacedef.h"
43 #include "filedef.h"
44 #include "dirdef.h"
45 #include "pagedef.h"
46 #include "bufstr.h"
47 #include "reflist.h"
48 
49 //-----------------------------------------------------------------------------------------
50 
53 {
54  public:
55  ~IMPL();
56  void init(const char *df, const char *n);
57  void setDefFileName(const QCString &df);
58 
60 
63  std::vector<RefItem*> xrefListItems;
65 
66  DocInfo *details = 0; // not exported
67  DocInfo *inbodyDocs = 0; // not exported
68  BriefInfo *brief = 0; // not exported
69  BodyInfo *body = 0; // not exported
72 
73  QCString localName; // local (unqualified) name of the definition
74  // in the future m_name should become m_localName
76  QCString ref; // reference to external documentation
77 
78  bool hidden = FALSE;
81 
82  Definition *outerScope = 0; // not owner
83 
84  // where the item was defined
87 
89 
90  QCString id; // clang unique id
91 
93  bool isSymbol;
95  int defLine;
96  int defColumn;
98 };
99 
100 
102 {
103  delete sourceRefByDict;
104  delete sourceRefsDict;
105  delete partOfGroups;
106  delete brief;
107  delete details;
108  delete body;
109  delete inbodyDocs;
110 }
111 
113 {
114  defFileName = df;
115  int lastDot = defFileName.findRev('.');
116  if (lastDot!=-1)
117  {
118  defFileExt = defFileName.mid(lastDot);
119  }
120 }
121 
122 void DefinitionImpl::IMPL::init(const char *df, const char *n)
123 {
124  setDefFileName(df);
125  QCString lname = n;
126  if (lname!="<globalScope>")
127  {
128  //extractNamespaceName(m_name,m_localName,ns);
130  }
131  else
132  {
133  localName=n;
134  }
135  //printf("m_localName=%s\n",m_localName.data());
136 
137  brief = 0;
138  details = 0;
139  body = 0;
140  inbodyDocs = 0;
141  sourceRefByDict = 0;
142  sourceRefsDict = 0;
143  outerScope = Doxygen::globalScope;
144  partOfGroups = 0;
145  hidden = FALSE;
147  lang = SrcLangExt_Unknown;
148  cookie = 0;
149 }
150 
151 void DefinitionImpl::setDefFile(const QCString &df,int defLine,int defCol)
152 {
153  m_impl->setDefFileName(df);
154  m_impl->defLine = defLine;
155  m_impl->defColumn = defCol;
156 }
157 
158 //-----------------------------------------------------------------------------------------
159 
160 static bool matchExcludedSymbols(const char *name)
161 {
162  static QStrList &exclSyms = Config_getList(EXCLUDE_SYMBOLS);
163  if (exclSyms.count()==0) return FALSE; // nothing specified
164  const char *pat = exclSyms.first();
165  QCString symName = name;
166  while (pat)
167  {
168  QCString pattern = pat;
169  bool forceStart=FALSE;
170  bool forceEnd=FALSE;
171  if (pattern.at(0)=='^')
172  pattern=pattern.mid(1),forceStart=TRUE;
173  if (pattern.at(pattern.length()-1)=='$')
174  pattern=pattern.left(pattern.length()-1),forceEnd=TRUE;
175  if (pattern.find('*')!=-1) // wildcard mode
176  {
177  QRegExp re(substitute(pattern,"*",".*"),TRUE);
178  int pl;
179  int i = re.match(symName,0,&pl);
180  //printf(" %d = re.match(%s) pattern=%s\n",i,symName.data(),pattern.data());
181  if (i!=-1) // wildcard match
182  {
183  uint ui=(uint)i;
184  uint sl=symName.length();
185  // check if it is a whole word match
186  if ((ui==0 || pattern.at(0)=='*' || (!isId(symName.at(ui-1)) && !forceStart)) &&
187  (ui+pl==sl || pattern.at(ui+pl)=='*' || (!isId(symName.at(ui+pl)) && !forceEnd))
188  )
189  {
190  //printf("--> name=%s pattern=%s match at %d\n",symName.data(),pattern.data(),i);
191  return TRUE;
192  }
193  }
194  }
195  else if (!pattern.isEmpty()) // match words
196  {
197  int i = symName.find(pattern);
198  if (i!=-1) // we have a match!
199  {
200  uint ui=(uint)i;
201  uint pl=pattern.length();
202  uint sl=symName.length();
203  // check if it is a whole word match
204  if ((ui==0 || (!isId(symName.at(ui-1)) && !forceStart)) &&
205  (ui+pl==sl || (!isId(symName.at(ui+pl)) && !forceEnd))
206  )
207  {
208  //printf("--> name=%s pattern=%s match at %d\n",symName.data(),pattern.data(),i);
209  return TRUE;
210  }
211  }
212  }
213  pat = exclSyms.next();
214  }
215  //printf("--> name=%s: no match\n",name);
216  return FALSE;
217 }
218 
219 static void addToMap(const char *name,Definition *d)
220 {
221  bool vhdlOpt = Config_getBool(OPTIMIZE_OUTPUT_VHDL);
224  if (!vhdlOpt && index!=-1) symbolName=symbolName.mid(index+2);
225  if (!symbolName.isEmpty())
226  {
227  //printf("******* adding symbol '%s' (%p)\n",symbolName.data(),d);
229  //printf(" addToMap(%p): looking for symbol %s: %p\n",d,symbolName.data(),di);
230  if (di==0) // new Symbol
231  {
232  //printf(" new symbol!\n");
233  Doxygen::symbolMap->insert(symbolName,d);
234  }
235  else // existing symbol
236  {
237  //printf(" existing symbol: ");
238  if (di->definitionType()==DefinitionIntf::TypeSymbolList) // already multiple symbols
239  {
240  //printf("adding to exiting list\n");
241  DefinitionList *dl = (DefinitionList*)di;
242  dl->append(d);
243  }
244  else // going from one to two symbols
245  {
247  DefinitionList *dl = new DefinitionList;
248  //printf("replacing symbol by list %p with elements %p and %p\n",dl,di,d);
249  dl->append((Definition*)di);
250  dl->append(d);
251  Doxygen::symbolMap->insert(symbolName,dl);
252  }
253  }
254 
255  // auto resize if needed
256  static int sizeIndex=9;
257  if (Doxygen::symbolMap->size()>SDict_primes[sizeIndex])
258  {
259  Doxygen::symbolMap->resize(SDict_primes[++sizeIndex]);
260  }
261 
263  }
264 }
265 
266 static void removeFromMap(Definition *d)
267 {
269  if (!symbolName.isEmpty())
270  {
271  //printf("******* removing symbol '%s' (%p)\n",symbolName.data(),d);
273  if (di)
274  {
275  if (di!=d) // symbolName not unique
276  {
277  //printf(" removing from list: %p!\n",di);
278  DefinitionList *dl = (DefinitionList*)di;
279  bool b = dl->removeRef(d);
280  ASSERT(b==TRUE);
281  if (dl->isEmpty())
282  {
284  delete dl;
285  }
286  }
287  else // symbolName unique
288  {
289  //printf(" removing symbol %p\n",di);
291  }
292  }
293  }
294 }
295 
296 DefinitionImpl::DefinitionImpl(const char *df,int dl,int dc,
297  const char *name,const char *b,
298  const char *d,bool isSymbol)
299 {
301  setName(name);
302  m_impl->defLine = dl;
303  m_impl->defColumn = dc;
304  m_impl->init(df,name);
305  m_impl->isSymbol = isSymbol;
306  if (isSymbol) addToMap(name,this);
307  _setBriefDescription(b,df,dl);
308  _setDocumentation(d,df,dl,TRUE,FALSE);
310  {
311  m_impl->hidden = TRUE;
312  }
313 }
314 
316 {
318  *m_impl = *d.m_impl;
319  m_impl->sourceRefByDict = 0;
320  m_impl->sourceRefsDict = 0;
321  m_impl->partOfGroups = 0;
322  m_impl->brief = 0;
323  m_impl->details = 0;
324  m_impl->body = 0;
325  m_impl->inbodyDocs = 0;
326  if (d.m_impl->sourceRefByDict)
327  {
330  MemberDef *md;
331  for (it.toFirst();(md=it.current());++it)
332  {
333  m_impl->sourceRefByDict->append(it.currentKey(),md);
334  }
335  }
336  if (d.m_impl->sourceRefsDict)
337  {
340  MemberDef *md;
341  for (it.toFirst();(md=it.current());++it)
342  {
343  m_impl->sourceRefsDict->append(it.currentKey(),md);
344  }
345  }
346  if (d.m_impl->partOfGroups)
347  {
349  GroupDef *gd;
350  for (it.toFirst();(gd=it.current());++it)
351  {
352  makePartOfGroup(gd);
353  }
354  }
355  if (d.m_impl->brief)
356  {
357  m_impl->brief = new BriefInfo(*d.m_impl->brief);
358  }
359  if (d.m_impl->details)
360  {
361  m_impl->details = new DocInfo(*d.m_impl->details);
362  }
363  if (d.m_impl->body)
364  {
365  m_impl->body = new BodyInfo(*d.m_impl->body);
366  }
367  if (d.m_impl->inbodyDocs)
368  {
370  }
371 
372  if (m_impl->isSymbol) addToMap(m_impl->name,this);
373 }
374 
376 {
377  if (m_impl->isSymbol)
378  {
379  removeFromMap(this);
380  }
381  if (m_impl)
382  {
383  delete m_impl;
384  m_impl=0;
385  }
386 }
387 
388 void DefinitionImpl::setName(const char *name)
389 {
390  if (name==0) return;
391  m_impl->name = name;
393  m_impl->name.at(0)=='@' ||
394  m_impl->name.find("::@")!=-1;
395 }
396 
397 void DefinitionImpl::setId(const char *id)
398 {
399  if (id==0) return;
400  m_impl->id = id;
402  {
403  //printf("DefinitionImpl::setId '%s'->'%s'\n",id,m_impl->name.data());
404  Doxygen::clangUsrMap->insert(id,this);
405  }
406 }
407 
409 {
410  return m_impl->id;
411 }
412 
413 void DefinitionImpl::addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList)
414 {
415  //printf("%s: addSectionsToDefinition(%d)\n",name().data(),anchorList->count());
416  for (const SectionInfo *si : anchorList)
417  {
418  //printf("Add section '%s' to definition '%s'\n",
419  // si->label().data(),name().data());
421  SectionInfo *gsi=sm.find(si->label());
422  //printf("===== label=%s gsi=%p\n",si->label.data(),gsi);
423  if (gsi==0)
424  {
425  gsi = sm.add(*si);
426  }
427  if (m_impl->sectionRefs.find(gsi->label())==0)
428  {
429  m_impl->sectionRefs.add(gsi);
430  gsi->setDefinition(this);
431  }
432  }
433 }
434 
436 {
437  //printf("DefinitionImpl::hasSections(%s) #sections=%d\n",name().data(),
438  // m_impl->sectionRefs.size());
439  if (m_impl->sectionRefs.empty()) return FALSE;
440  for (const SectionInfo *si : m_impl->sectionRefs)
441  {
442  if (isSection(si->type()))
443  {
444  return TRUE;
445  }
446  }
447  return FALSE;
448 }
449 
451 {
452  if (m_impl->sectionRefs.empty()) return;
453  //printf("DefinitionImpl::addSectionsToIndex()\n");
454  int level=1;
455  for (auto it = m_impl->sectionRefs.begin(); it!=m_impl->sectionRefs.end(); ++it)
456  {
457  const SectionInfo *si = *it;
458  SectionType type = si->type();
459  if (isSection(type))
460  {
461  //printf(" level=%d title=%s\n",level,si->title.data());
462  int nextLevel = (int)type;
463  int i;
464  if (nextLevel>level)
465  {
466  for (i=level;i<nextLevel;i++)
467  {
469  }
470  }
471  else if (nextLevel<level)
472  {
473  for (i=nextLevel;i<level;i++)
474  {
476  }
477  }
478  QCString title = si->title();
479  if (title.isEmpty()) title = si->label();
480  // determine if there is a next level inside this item
481  auto it_next = std::next(it);
482  bool isDir = (it_next!=m_impl->sectionRefs.end()) ?
483  ((int)((*it_next)->type()) > nextLevel) : FALSE;
484  Doxygen::indexList->addContentsItem(isDir,title,
485  getReference(),
487  si->label(),
488  FALSE,
489  TRUE);
490  level = nextLevel;
491  }
492  }
493  while (level>1)
494  {
496  level--;
497  }
498 }
499 
501 {
502  if (!m_impl->sectionRefs.empty())
503  {
504  //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_impl->sectionRef.size());
505  for (const SectionInfo *si : m_impl->sectionRefs)
506  {
507  if (!si->generated() && si->ref().isEmpty() && !si->label().startsWith("autotoc_md"))
508  {
509  //printf("write an entry!\n");
510  if (definitionType()==TypeMember) tagFile << " ";
511  tagFile << " <docanchor file=\"" << addHtmlExtensionIfMissing(si->fileName()) << "\"";
512  if (!si->title().isEmpty())
513  {
514  tagFile << " title=\"" << convertToXML(si->title()) << "\"";
515  }
516  tagFile << ">" << si->label() << "</docanchor>" << endl;
517  }
518  }
519  }
520 }
521 
523 {
524  uchar md5_sig[16];
525  QCString sigStr(33);
526  // to avoid mismatches due to differences in indenting, we first remove
527  // double whitespaces...
528  QCString docStr = doc.simplifyWhiteSpace();
529  MD5Buffer((const unsigned char *)docStr.data(),docStr.length(),md5_sig);
530  MD5SigToString(md5_sig,sigStr.rawData(),33);
531  //printf("%s:_docsAlreadyAdded doc='%s' sig='%s' docSigs='%s'\n",
532  // name().data(),doc.data(),sigStr.data(),sigList.data());
533  if (sigList.find(sigStr)==-1) // new docs, add signature to prevent re-adding it
534  {
535  sigList+=":"+sigStr;
536  return FALSE;
537  }
538  else
539  {
540  return TRUE;
541  }
542 }
543 
544 void DefinitionImpl::_setDocumentation(const char *d,const char *docFile,int docLine,
545  bool stripWhiteSpace,bool atTop)
546 {
547  //printf("%s::setDocumentation(%s,%s,%d,%d)\n",name().data(),d,docFile,docLine,stripWhiteSpace);
548  if (d==0) return;
549  QCString doc = d;
550  if (stripWhiteSpace)
551  {
553  }
554  else // don't strip whitespace
555  {
556  doc=d;
557  }
559  {
560  //printf("setting docs for %s: '%s'\n",name().data(),m_doc.data());
561  if (m_impl->details==0)
562  {
563  m_impl->details = new DocInfo;
564  }
565  if (m_impl->details->doc.isEmpty()) // fresh detailed description
566  {
567  m_impl->details->doc = doc;
568  }
569  else if (atTop) // another detailed description, append it to the start
570  {
571  m_impl->details->doc = doc+"\n\n"+m_impl->details->doc;
572  }
573  else // another detailed description, append it to the end
574  {
575  m_impl->details->doc += "\n\n"+doc;
576  }
577  if (docLine!=-1) // store location if valid
578  {
581  }
582  else
583  {
585  m_impl->details->line = 1;
586  }
587  }
588 }
589 
590 void DefinitionImpl::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
591 {
592  if (d==0) return;
593  _setDocumentation(d,docFile,docLine,stripWhiteSpace,FALSE);
594 }
595 
596 #define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase)
597 
598 // do a UTF-8 aware search for the last real character and return TRUE
599 // if that is a multibyte one.
600 static bool lastCharIsMultibyte(const QCString &s)
601 {
602  uint l = s.length();
603  int p = 0;
604  int pp = -1;
605  while ((p=nextUtf8CharPosition(s,l,(uint)p))<(int)l) pp=p;
606  if (pp==-1 || ((uchar)s[pp])<0x80) return FALSE;
607  return TRUE;
608 }
609 
610 void DefinitionImpl::_setBriefDescription(const char *b,const char *briefFile,int briefLine)
611 {
612  static QCString outputLanguage = Config_getEnum(OUTPUT_LANGUAGE);
613  static bool needsDot = outputLanguage!="Japanese" &&
614  outputLanguage!="Chinese" &&
615  outputLanguage!="Korean";
616  QCString brief = b;
617  brief = brief.stripWhiteSpace();
618  if (brief.isEmpty()) return;
619  uint bl = brief.length();
620  if (bl>0 && needsDot) // add punctuation if needed
621  {
622  int c = brief.at(bl-1);
623  switch(c)
624  {
625  case '.': case '!': case '?': case '>': case ':': case ')': break;
626  default:
627  if (uni_isupper(brief.at(0)) && !lastCharIsMultibyte(brief)) brief+='.';
628  break;
629  }
630  }
631 
633  {
634  if (m_impl->brief && !m_impl->brief->doc.isEmpty())
635  {
636  //printf("adding to details\n");
638  }
639  else
640  {
641  //fprintf(stderr,"DefinitionImpl::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
642  if (m_impl->brief==0)
643  {
644  m_impl->brief = new BriefInfo;
645  }
646  m_impl->brief->doc=brief;
647  if (briefLine!=-1)
648  {
651  }
652  else
653  {
655  m_impl->brief->line = 1;
656  }
657  }
658  }
659  else
660  {
661  //printf("do nothing!\n");
662  }
663 }
664 
665 void DefinitionImpl::setBriefDescription(const char *b,const char *briefFile,int briefLine)
666 {
667  if (b==0) return;
669 }
670 
671 void DefinitionImpl::_setInbodyDocumentation(const char *doc,const char *inbodyFile,int inbodyLine)
672 {
673  if (m_impl->inbodyDocs==0)
674  {
675  m_impl->inbodyDocs = new DocInfo;
676  }
677  if (m_impl->inbodyDocs->doc.isEmpty()) // fresh inbody docs
678  {
679  m_impl->inbodyDocs->doc = doc;
682  }
683  else // another inbody documentation fragment, append this to the end
684  {
685  m_impl->inbodyDocs->doc += QCString("\n\n")+doc;
686  }
687 }
688 
690 {
691  if (d==0) return;
693 }
694 
695 //---------------------------------------
696 
698 {
700  size_t fileSize;
701 };
702 
705 {
706  public:
707  FilterCache() : m_endPos(0) { m_cache.setAutoDelete(TRUE); }
708  bool getFileContents(const QCString &fileName,BufStr &str)
709  {
710  static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES);
711  QCString filter = getFileFilter(fileName,TRUE);
712  bool usePipe = !filter.isEmpty() && filterSourceFiles;
713  FILE *f=0;
714  const int blockSize = 4096;
715  char buf[blockSize];
716  FilterCacheItem *item=0;
717  if (usePipe && (item = m_cache.find(fileName))) // cache hit: reuse stored result
718  {
719  //printf("getFileContents(%s): cache hit\n",qPrint(fileName));
720  // file already processed, get the results after filtering from the tmp file
721  Debug::print(Debug::FilterOutput,0,"Reusing filter result for %s from %s at offset=%d size=%d\n",
722  qPrint(fileName),qPrint(Doxygen::filterDBFileName),(int)item->filePos,(int)item->fileSize);
724  if (f)
725  {
726  bool success=TRUE;
727  str.resize(static_cast<uint>(item->fileSize+1));
728  if (Portable::fseek(f,item->filePos,SEEK_SET)==-1)
729  {
730  err("Failed to seek to position %d in filter database file %s\n",(int)item->filePos,qPrint(Doxygen::filterDBFileName));
731  success=FALSE;
732  }
733  if (success)
734  {
735  size_t numBytes = fread(str.data(),1,item->fileSize,f);
736  if (numBytes!=item->fileSize)
737  {
738  err("Failed to read %d bytes from position %d in filter database file %s: got %d bytes\n",
739  (int)item->fileSize,(int)item->filePos,qPrint(Doxygen::filterDBFileName),(int)numBytes);
740  success=FALSE;
741  }
742  }
743  str.addChar('\0');
744  fclose(f);
745  return success;
746  }
747  else
748  {
749  err("Failed to open filter database file %s\n",qPrint(Doxygen::filterDBFileName));
750  return FALSE;
751  }
752  }
753  else if (usePipe) // cache miss: filter active but file not previously processed
754  {
755  //printf("getFileContents(%s): cache miss\n",qPrint(fileName));
756  // filter file
757  QCString cmd=filter+" \""+fileName+"\"";
758  Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",qPrint(cmd));
759  f = Portable::popen(cmd,"r");
760  FILE *bf = Portable::fopen(Doxygen::filterDBFileName,"a+b");
761  item = new FilterCacheItem;
762  item->filePos = m_endPos;
763  if (bf==0)
764  {
765  // handle error
766  err("Error opening filter database file %s\n",qPrint(Doxygen::filterDBFileName));
767  str.addChar('\0');
768  delete item;
769  Portable::pclose(f);
770  return FALSE;
771  }
772  // append the filtered output to the database file
773  size_t size=0;
774  while (!feof(f))
775  {
776  size_t bytesRead = fread(buf,1,blockSize,f);
777  size_t bytesWritten = fwrite(buf,1,bytesRead,bf);
778  if (bytesRead!=bytesWritten)
779  {
780  // handle error
781  err("Failed to write to filter database %s. Wrote %d out of %d bytes\n",
782  qPrint(Doxygen::filterDBFileName),(int)bytesWritten,(int)bytesRead);
783  str.addChar('\0');
784  delete item;
785  Portable::pclose(f);
786  fclose(bf);
787  return FALSE;
788  }
789  size+=bytesWritten;
790  str.addArray(buf,static_cast<uint>(bytesWritten));
791  }
792  str.addChar('\0');
793  item->fileSize = size;
794  // add location entry to the dictionary
795  m_cache.append(fileName,item);
796  Debug::print(Debug::FilterOutput,0,"Storing new filter result for %s in %s at offset=%d size=%d\n",
797  qPrint(fileName),qPrint(Doxygen::filterDBFileName),(int)item->filePos,(int)item->fileSize);
798  // update end of file position
799  m_endPos += size;
800  Portable::pclose(f);
801  fclose(bf);
802  }
803  else // no filtering
804  {
805  // normal file
806  //printf("getFileContents(%s): no filter\n",qPrint(fileName));
807  f = Portable::fopen(fileName,"r");
808  while (!feof(f))
809  {
810  size_t bytesRead = fread(buf,1,blockSize,f);
811  str.addArray(buf,static_cast<uint>(bytesRead));
812  }
813  str.addChar('\0');
814  fclose(f);
815  }
816  return TRUE;
817  }
818  private:
821 };
822 
824 
825 //-----------------------------------------
826 
827 
839 bool readCodeFragment(const char *fileName,
840  int &startLine,int &endLine,QCString &result)
841 {
842  //printf("readCodeFragment(%s,startLine=%d,endLine=%d)\n",fileName,startLine,endLine);
843  static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES);
844  QCString filter = getFileFilter(fileName,TRUE);
845  bool usePipe = !filter.isEmpty() && filterSourceFiles;
846  int tabSize = Config_getInt(TAB_SIZE);
847  SrcLangExt lang = getLanguageFromFileName(fileName);
848  const int blockSize = 4096;
849  BufStr str(blockSize);
850  g_filterCache.getFileContents(fileName,str);
851 
852  bool found = lang==SrcLangExt_VHDL ||
853  lang==SrcLangExt_Python ||
854  lang==SrcLangExt_Fortran;
855  // for VHDL, Python, and Fortran no bracket search is possible
856  char *p=str.data();
857  if (p)
858  {
859  char c=0;
860  int col=0;
861  int lineNr=1;
862  // skip until the startLine has reached
863  while (lineNr<startLine && *p)
864  {
865  while ((c=*p++)!='\n' && c!=0) /* skip */;
866  lineNr++;
867  if (found && c == '\n') c = '\0';
868  }
869  if (*p)
870  {
871  // skip until the opening bracket or lonely : is found
872  char cn=0;
873  while (lineNr<=endLine && *p && !found)
874  {
875  int pc=0;
876  while ((c=*p++)!='{' && c!=':' && c!=0)
877  {
878  //printf("parsing char '%c'\n",c);
879  if (c=='\n')
880  {
881  lineNr++,col=0;
882  }
883  else if (c=='\t')
884  {
885  col+=tabSize - (col%tabSize);
886  }
887  else if (pc=='/' && c=='/') // skip single line comment
888  {
889  while ((c=*p++)!='\n' && c!=0) pc=c;
890  if (c=='\n') lineNr++,col=0;
891  }
892  else if (pc=='/' && c=='*') // skip C style comment
893  {
894  while (((c=*p++)!='/' || pc!='*') && c!=0)
895  {
896  if (c=='\n') lineNr++,col=0;
897  pc=c;
898  }
899  }
900  else
901  {
902  col++;
903  }
904  pc = c;
905  }
906  if (c==':')
907  {
908  cn=*p++;
909  if (cn!=':') found=TRUE;
910  }
911  else if (c=='{')
912  {
913  found=TRUE;
914  }
915  }
916  //printf(" -> readCodeFragment(%s,%d,%d) lineNr=%d\n",fileName,startLine,endLine,lineNr);
917  if (found)
918  {
919  // For code with more than one line,
920  // fill the line with spaces until we are at the right column
921  // so that the opening brace lines up with the closing brace
922  if (endLine!=startLine)
923  {
924  QCString spaces;
925  spaces.fill(' ',col);
926  result+=spaces;
927  }
928  // copy until end of line
929  if (c) result+=c;
930  startLine=lineNr;
931  if (c==':')
932  {
933  result+=cn;
934  if (cn=='\n') lineNr++;
935  }
936  char lineStr[blockSize];
937  do
938  {
939  //printf("reading line %d in range %d-%d\n",lineNr,startLine,endLine);
940  int size_read;
941  do
942  {
943  // read up to maxLineLength-1 bytes, the last byte being zero
944  int i=0;
945  while ((c=*p++) && i<blockSize-1)
946  {
947  lineStr[i++]=c;
948  if (c=='\n') break; // stop at end of the line
949  }
950  lineStr[i]=0;
951  size_read=i;
952  result+=lineStr; // append line to the output
953  } while (size_read == (blockSize-1)); // append more if line does not fit in buffer
954  lineNr++;
955  } while (lineNr<=endLine && *p);
956 
957  // strip stuff after closing bracket
958  int newLineIndex = result.findRev('\n');
959  int braceIndex = result.findRev('}');
960  if (braceIndex > newLineIndex)
961  {
962  result.truncate((uint)braceIndex+1);
963  }
964  endLine=lineNr-1;
965  }
966  }
967  if (usePipe)
968  {
969  Debug::print(Debug::FilterOutput, 0, "Filter output\n");
970  Debug::print(Debug::FilterOutput,0,"-------------\n%s\n-------------\n",qPrint(result));
971  }
972  }
973  result = transcodeCharacterStringToUTF8(result);
974  if (!result.isEmpty() && result.at(result.length()-1)!='\n') result += "\n";
975  //printf("readCodeFragment(%d-%d)=%s\n",startLine,endLine,result.data());
976  return found;
977 }
978 
980 {
981  ASSERT(definitionType()!=Definition::TypeFile); // file overloads this method
982  QCString fn;
983  static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
984  if (sourceBrowser &&
986  {
988  }
989  return fn;
990 }
991 
993 {
994  const int maxAnchorStrLen = 20;
995  char anchorStr[maxAnchorStrLen];
996  anchorStr[0]='\0';
997  if (m_impl->body && m_impl->body->startLine!=-1)
998  {
999  if (Htags::useHtags)
1000  {
1001  qsnprintf(anchorStr,maxAnchorStrLen,"L%d",m_impl->body->defLine);
1002  }
1003  else
1004  {
1005  qsnprintf(anchorStr,maxAnchorStrLen,"l%05d",m_impl->body->defLine);
1006  }
1007  }
1008  return anchorStr;
1009 }
1010 
1012 void DefinitionImpl::writeSourceDef(OutputList &ol,const char *) const
1013 {
1014  static bool latexSourceCode = Config_getBool(LATEX_SOURCE_CODE);
1015  static bool rtfSourceCode = Config_getBool(RTF_SOURCE_CODE);
1016  static bool docbookSourceCode = Config_getBool(DOCBOOK_PROGRAMLISTING);
1017  ol.pushGeneratorState();
1018  //printf("DefinitionImpl::writeSourceRef %d %p\n",bodyLine,bodyDef);
1019  QCString fn = getSourceFileBase();
1020  if (!fn.isEmpty())
1021  {
1023  int lineMarkerPos = refText.find("@0");
1024  int fileMarkerPos = refText.find("@1");
1025  if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
1026  {
1027  QCString lineStr;
1028  lineStr.sprintf("%d",m_impl->body->defLine);
1029  QCString anchorStr = getSourceAnchor();
1030  ol.startParagraph("definition");
1031  if (lineMarkerPos<fileMarkerPos) // line marker before file marker
1032  {
1033  // write text left from linePos marker
1034  ol.parseText(refText.left(lineMarkerPos));
1035  ol.pushGeneratorState();
1037  if (!latexSourceCode)
1038  {
1040  }
1041  if (!docbookSourceCode)
1042  {
1044  }
1045  if (!rtfSourceCode)
1046  {
1048  }
1049  // write line link (HTML and optionally LaTeX, Docbook, RTF)
1050  ol.writeObjectLink(0,fn,anchorStr,lineStr);
1051  ol.enableAll();
1053  if (latexSourceCode)
1054  {
1056  }
1057  if (docbookSourceCode)
1058  {
1060  }
1061  if (rtfSourceCode)
1062  {
1064  }
1065  // write normal text (Man, Latex optionally, RTF optionally)
1066  ol.docify(lineStr);
1067  ol.popGeneratorState();
1068 
1069  // write text between markers
1070  ol.parseText(refText.mid(lineMarkerPos+2,
1071  fileMarkerPos-lineMarkerPos-2));
1072 
1073  ol.pushGeneratorState();
1075  if (!latexSourceCode)
1076  {
1078  }
1079  if (!docbookSourceCode)
1080  {
1082  }
1083  if (!rtfSourceCode)
1084  {
1086  }
1087  // write file link (HTML, LaTeX optionally, RTF optionally)
1088  ol.writeObjectLink(0,fn,0,m_impl->body->fileDef->name());
1089  ol.enableAll();
1091  if (latexSourceCode)
1092  {
1094  }
1095  if (docbookSourceCode)
1096  {
1098  }
1099  if (rtfSourceCode)
1100  {
1102  }
1103  // write normal text (Man, Latex optionally, RTF optionally)
1104  ol.docify(m_impl->body->fileDef->name());
1105  ol.popGeneratorState();
1106 
1107  // write text right from file marker
1108  ol.parseText(refText.right(refText.length()-(uint)fileMarkerPos-2));
1109  }
1110  else // file marker before line marker
1111  {
1112  // write text left from file marker
1113  ol.parseText(refText.left(fileMarkerPos));
1114  ol.pushGeneratorState();
1116  if (!latexSourceCode)
1117  {
1119  }
1120  if (!docbookSourceCode)
1121  {
1123  }
1124  if (!rtfSourceCode)
1125  {
1127  }
1128  // write file link (HTML only)
1129  ol.writeObjectLink(0,fn,0,m_impl->body->fileDef->name());
1130  ol.enableAll();
1132  if (latexSourceCode)
1133  {
1135  }
1136  if (docbookSourceCode)
1137  {
1139  }
1140  if (rtfSourceCode)
1141  {
1143  }
1144  // write normal text (RTF/Latex/Man only)
1145  ol.docify(m_impl->body->fileDef->name());
1146  ol.popGeneratorState();
1147 
1148  // write text between markers
1149  ol.parseText(refText.mid(fileMarkerPos+2,
1150  lineMarkerPos-fileMarkerPos-2));
1151 
1152  ol.pushGeneratorState();
1155  if (latexSourceCode)
1156  {
1158  }
1159  if (docbookSourceCode)
1160  {
1162  }
1163  if (rtfSourceCode)
1164  {
1166  }
1167  // write line link (HTML only)
1168  ol.writeObjectLink(0,fn,anchorStr,lineStr);
1169  ol.enableAll();
1171  if (latexSourceCode)
1172  {
1174  }
1175  if (docbookSourceCode)
1176  {
1178  }
1179  if (rtfSourceCode)
1180  {
1182  }
1183  // write normal text (Latex/Man only)
1184  ol.docify(lineStr);
1185  ol.popGeneratorState();
1186 
1187  // write text right from linePos marker
1188  ol.parseText(refText.right(refText.length()-(uint)lineMarkerPos-2));
1189  }
1190  ol.endParagraph();
1191  }
1192  else
1193  {
1194  err("translation error: invalid markers in trDefinedAtLineInSourceFile()\n");
1195  }
1196  }
1197  ol.popGeneratorState();
1198 }
1199 
1200 void DefinitionImpl::setBodySegment(int defLine, int bls,int ble)
1201 {
1202  //printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
1203  if (m_impl->body==0) m_impl->body = new BodyInfo;
1204  m_impl->body->defLine = defLine;
1205  m_impl->body->startLine = bls;
1206  m_impl->body->endLine = ble;
1207 }
1208 
1210 {
1211  if (m_impl->body==0) m_impl->body = new BodyInfo;
1212  m_impl->body->fileDef=fd;
1213 }
1214 
1216 {
1217  return m_impl->body && m_impl->body->startLine!=-1 &&
1219  m_impl->body->fileDef;
1220 }
1221 
1223 void DefinitionImpl::writeInlineCode(OutputList &ol,const char *scopeName) const
1224 {
1225  static bool inlineSources = Config_getBool(INLINE_SOURCES);
1226  ol.pushGeneratorState();
1227  //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(),
1228  // m_startBodyLine,m_endBodyLine,m_bodyDef);
1229  if (inlineSources && hasSources())
1230  {
1231  QCString codeFragment;
1232  int actualStart=m_impl->body->startLine,actualEnd=m_impl->body->endLine;
1234  actualStart,actualEnd,codeFragment)
1235  )
1236  {
1237  //printf("Adding code fragment '%s' ext='%s'\n",
1238  // codeFragment.data(),m_impl->defFileExt.data());
1240  intf.resetCodeParserState();
1241  //printf("Read:\n'%s'\n\n",codeFragment.data());
1242  const MemberDef *thisMd = 0;
1243  if (definitionType()==TypeMember) thisMd = dynamic_cast <const MemberDef*>(this);
1244 
1245  ol.startCodeFragment();
1246  intf.parseCode(ol, // codeOutIntf
1247  scopeName, // scope
1248  codeFragment, // input
1249  m_impl->lang, // lang
1250  FALSE, // isExample
1251  0, // exampleName
1252  m_impl->body->fileDef, // fileDef
1253  actualStart, // startLine
1254  actualEnd, // endLine
1255  TRUE, // inlineFragment
1256  thisMd, // memberDef
1257  TRUE // show line numbers
1258  );
1259  ol.endCodeFragment();
1260  }
1261  }
1262  ol.popGeneratorState();
1263 }
1264 
1268 void DefinitionImpl::_writeSourceRefList(OutputList &ol,const char *scopeName,
1269  const QCString &text,MemberSDict *members,bool /*funcOnly*/) const
1270 {
1271  static bool latexSourceCode = Config_getBool(LATEX_SOURCE_CODE);
1272  static bool docbookSourceCode = Config_getBool(DOCBOOK_PROGRAMLISTING);
1273  static bool rtfSourceCode = Config_getBool(RTF_SOURCE_CODE);
1274  static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1275  static bool refLinkSource = Config_getBool(REFERENCES_LINK_SOURCE);
1276  ol.pushGeneratorState();
1277  if (members)
1278  {
1279  members->sort();
1280 
1281  ol.startParagraph("reference");
1282  ol.parseText(text);
1283  ol.docify(" ");
1284 
1285  QCString ldefLine=theTranslator->trWriteList((int)members->count());
1286 
1287  QRegExp marker("@[0-9]+");
1288  uint index=0;
1289  int matchLen;
1290  int newIndex;
1291  // now replace all markers in inheritLine with links to the classes
1292  while ((newIndex=marker.match(ldefLine,index,&matchLen))!=-1)
1293  {
1294  bool ok;
1295  ol.parseText(ldefLine.mid(index,(uint)newIndex-index));
1296  uint entryIndex = ldefLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
1297  MemberDef *md=members->at(entryIndex);
1298  if (ok && md)
1299  {
1300  QCString scope=md->getScopeString();
1301  QCString name=md->name();
1302  //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),scope.data(),scopeName);
1303  if (!scope.isEmpty() && scope!=scopeName)
1304  {
1306  }
1307  if (!md->isObjCMethod() &&
1308  (md->isFunction() || md->isSlot() ||
1309  md->isPrototype() || md->isSignal()
1310  )
1311  )
1312  {
1313  name+="()";
1314  }
1315  //DefinitionImpl *d = md->getOutputFileBase();
1316  //if (d==Doxygen::globalScope) d=md->getBodyDef();
1317  if (sourceBrowser &&
1318  !(md->isLinkable() && !refLinkSource) &&
1319  md->getStartBodyLine()!=-1 &&
1320  md->getBodyDef()
1321  )
1322  {
1323  //printf("md->getBodyDef()=%p global=%p\n",md->getBodyDef(),Doxygen::globalScope);
1324  // for HTML write a real link
1325  ol.pushGeneratorState();
1326  //ol.disableAllBut(OutputGenerator::Html);
1327 
1329  if (!latexSourceCode)
1330  {
1332  }
1333  if (!docbookSourceCode)
1334  {
1336  }
1337  if (!rtfSourceCode)
1338  {
1340  }
1341  const int maxLineNrStr = 10;
1342  char anchorStr[maxLineNrStr];
1343  qsnprintf(anchorStr,maxLineNrStr,"l%05d",md->getStartBodyLine());
1344  //printf("Write object link to %s\n",md->getBodyDef()->getSourceFileBase().data());
1345  ol.writeObjectLink(0,md->getBodyDef()->getSourceFileBase(),anchorStr,name);
1346  ol.popGeneratorState();
1347 
1348  // for the other output formats just mention the name
1349  ol.pushGeneratorState();
1351  if (latexSourceCode)
1352  {
1354  }
1355  if (docbookSourceCode)
1356  {
1358  }
1359  if (rtfSourceCode)
1360  {
1362  }
1363  ol.docify(name);
1364  ol.popGeneratorState();
1365  }
1366  else if (md->isLinkable() /*&& d && d->isLinkable()*/)
1367  {
1368  // for HTML write a real link
1369  ol.pushGeneratorState();
1370  //ol.disableAllBut(OutputGenerator::Html);
1372  if (!latexSourceCode)
1373  {
1375  }
1376  if (!docbookSourceCode)
1377  {
1379  }
1380  if (!rtfSourceCode)
1381  {
1383  }
1384 
1385  ol.writeObjectLink(md->getReference(),
1386  md->getOutputFileBase(),
1387  md->anchor(),name);
1388  ol.popGeneratorState();
1389 
1390  // for the other output formats just mention the name
1391  ol.pushGeneratorState();
1393  if (latexSourceCode)
1394  {
1396  }
1397  if (docbookSourceCode)
1398  {
1400  }
1401  if (rtfSourceCode)
1402  {
1404  }
1405  ol.docify(name);
1406  ol.popGeneratorState();
1407  }
1408  else
1409  {
1410  ol.docify(name);
1411  }
1412  }
1413  index=(uint)newIndex+matchLen;
1414  }
1415  ol.parseText(ldefLine.right(ldefLine.length()-index));
1416  ol.writeString(".");
1417  ol.endParagraph();
1418  }
1419  ol.popGeneratorState();
1420 }
1421 
1422 void DefinitionImpl::writeSourceReffedBy(OutputList &ol,const char *scopeName) const
1423 {
1425 }
1426 
1427 void DefinitionImpl::writeSourceRefs(OutputList &ol,const char *scopeName) const
1428 {
1430 }
1431 
1433 {
1434  static bool extractAll = Config_getBool(EXTRACT_ALL);
1435  //static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
1436  bool hasDocs =
1437  (m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs
1438  (m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description
1439  (m_impl->inbodyDocs && !m_impl->inbodyDocs->doc.isEmpty()) || // has inbody docs
1440  extractAll //|| // extract everything
1441  // (sourceBrowser && m_impl->body &&
1442  // m_impl->body->startLine!=-1 && m_impl->body->fileDef)
1443  ; // link to definition
1444  return hasDocs;
1445 }
1446 
1448 {
1449  bool hasDocs =
1450  (m_impl->details && !m_impl->details->doc.isEmpty()) ||
1451  (m_impl->brief && !m_impl->brief->doc.isEmpty()) ||
1453  return hasDocs;
1454 }
1455 
1456 
1458 {
1459  if (md)
1460  {
1461  QCString name = md->name();
1462  QCString scope = md->getScopeString();
1463 
1464  if (!scope.isEmpty())
1465  {
1466  name.prepend(scope+"::");
1467  }
1468 
1469  if (m_impl->sourceRefByDict==0)
1470  {
1472  }
1473  if (m_impl->sourceRefByDict->find(name)==0)
1474  {
1476  }
1477  }
1478 }
1479 
1481 {
1482  if (md)
1483  {
1484  QCString name = md->name();
1485  QCString scope = md->getScopeString();
1486 
1487  if (!scope.isEmpty())
1488  {
1489  name.prepend(scope+"::");
1490  }
1491 
1492  if (m_impl->sourceRefsDict==0)
1493  {
1495  }
1496  if (m_impl->sourceRefsDict->find(name)==0)
1497  {
1499  }
1500  }
1501 }
1502 
1504 {
1505  return 0;
1506 }
1507 
1509 {
1510  err("DefinitionImpl::addInnerCompound() called\n");
1511 }
1512 
1514 {
1515  //static int count=0;
1516  //count++;
1517  if (!m_impl->qualifiedName.isEmpty())
1518  {
1519  //count--;
1520  return m_impl->qualifiedName;
1521  }
1522 
1523  //printf("start %s::qualifiedName() localName=%s\n",name().data(),m_impl->localName.data());
1524  if (m_impl->outerScope==0)
1525  {
1526  if (m_impl->localName=="<globalScope>")
1527  {
1528  //count--;
1529  return "";
1530  }
1531  else
1532  {
1533  //count--;
1534  return m_impl->localName;
1535  }
1536  }
1537 
1538  if (m_impl->outerScope->name()=="<globalScope>")
1539  {
1541  }
1542  else
1543  {
1546  m_impl->localName;
1547  }
1548  //printf("end %s::qualifiedName()=%s\n",name().data(),m_impl->qualifiedName.data());
1549  //count--;
1550  return m_impl->qualifiedName;
1551 }
1552 
1554 {
1555  //printf("%s::setOuterScope(%s)\n",name().data(),d?d->name().data():"<none>");
1557  bool found=false;
1558  // make sure that we are not creating a recursive scope relation.
1559  while (p && !found)
1560  {
1561  found = (p==d);
1562  p = p->getOuterScope();
1563  }
1564  if (!found)
1565  {
1566  m_impl->qualifiedName.resize(0); // flush cached scope name
1567  m_impl->outerScope = d;
1568  }
1569  m_impl->hidden = m_impl->hidden || d->isHidden();
1570 }
1571 
1573 {
1574  return m_impl->localName;
1575 }
1576 
1578 {
1580  m_impl->partOfGroups->append(gd);
1581 }
1582 
1583 void DefinitionImpl::setRefItems(const std::vector<RefItem*> &sli)
1584 {
1585  m_impl->xrefListItems.insert(m_impl->xrefListItems.end(), sli.cbegin(), sli.cend());
1586 }
1587 
1589 {
1590  auto otherXrefList = d->xrefListItems();
1591 
1592  // append vectors
1593  m_impl->xrefListItems.reserve(m_impl->xrefListItems.size()+otherXrefList.size());
1594  m_impl->xrefListItems.insert (m_impl->xrefListItems.end(),
1595  otherXrefList.begin(),otherXrefList.end());
1596 
1597  // sort results on itemId
1598  std::sort(m_impl->xrefListItems.begin(),m_impl->xrefListItems.end(),
1599  [](RefItem *left,RefItem *right)
1600  { return left->id() <right->id() ||
1601  (left->id()==right->id() &&
1602  qstrcmp(left->list()->listName(),right->list()->listName())<0);
1603  });
1604 
1605  // filter out duplicates
1606  auto last = std::unique(m_impl->xrefListItems.begin(),m_impl->xrefListItems.end(),
1607  [](const RefItem *left,const RefItem *right)
1608  { return left->id()==right->id() &&
1609  left->list()->listName()==right->list()->listName();
1610  });
1611  m_impl->xrefListItems.erase(last, m_impl->xrefListItems.end());
1612 }
1613 
1614 int DefinitionImpl::_getXRefListId(const char *listName) const
1615 {
1616  for (const RefItem *item : m_impl->xrefListItems)
1617  {
1618  if (item->list()->listName()==listName)
1619  {
1620  return item->id();
1621  }
1622  }
1623  return -1;
1624 }
1625 
1626 const std::vector<RefItem*> &DefinitionImpl::xrefListItems() const
1627 {
1628  return m_impl->xrefListItems;
1629 }
1630 
1632 {
1633  QCString result;
1635  {
1636  result = m_impl->outerScope->pathFragment();
1637  }
1638  if (isLinkable())
1639  {
1640  if (!result.isEmpty()) result+="/";
1641  if (definitionType()==Definition::TypeGroup && (dynamic_cast <const GroupDef*>(this))->groupTitle())
1642  {
1643  result+=(dynamic_cast <const GroupDef*>(this))->groupTitle();
1644  }
1645  else if (definitionType()==Definition::TypePage && (dynamic_cast <const PageDef*>(this))->hasTitle())
1646  {
1647  result+=(dynamic_cast <const PageDef*>(this))->title();
1648  }
1649  else
1650  {
1651  result+=m_impl->localName;
1652  }
1653  }
1654  else
1655  {
1656  result+=m_impl->localName;
1657  }
1658  return result;
1659 }
1660 
1661 //----------------------------------------------------------------------------------------
1662 
1663 // TODO: move to htmlgen
1668 {
1669  QCString result;
1670  Definition *outerScope = getOuterScope();
1671  QCString locName = localName();
1672  if (outerScope && outerScope!=Doxygen::globalScope)
1673  {
1674  result+=outerScope->navigationPathAsString();
1675  }
1676  else if (definitionType()==Definition::TypeFile && (dynamic_cast<const FileDef*>(this))->getDirDef())
1677  {
1678  result+=(dynamic_cast<const FileDef*>(this))->getDirDef()->navigationPathAsString();
1679  }
1680  result+="<li class=\"navelem\">";
1681  if (isLinkable())
1682  {
1683  if (definitionType()==Definition::TypeGroup && (dynamic_cast<const GroupDef*>(this))->groupTitle())
1684  {
1685  result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
1686  convertToHtml((dynamic_cast<const GroupDef*>(this))->groupTitle())+"</a>";
1687  }
1688  else if (definitionType()==Definition::TypePage && (dynamic_cast<const PageDef*>(this))->hasTitle())
1689  {
1690  result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
1691  convertToHtml((dynamic_cast<const PageDef*>(this))->title())+"</a>";
1692  }
1694  {
1695  QCString name = locName;
1696  if (name.right(2)=="-p" /*|| name.right(2)=="-g"*/)
1697  {
1698  name = name.left(name.length()-2);
1699  }
1700  result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension;
1701  if (!anchor().isEmpty()) result+="#"+anchor();
1702  result+="\">"+convertToHtml(name)+"</a>";
1703  }
1704  else
1705  {
1706  result+="<a class=\"el\" href=\"$relpath^"+getOutputFileBase()+Doxygen::htmlFileExtension+"\">"+
1707  convertToHtml(locName)+"</a>";
1708  }
1709  }
1710  else
1711  {
1712  result+="<b>"+convertToHtml(locName)+"</b>";
1713  }
1714  result+="</li>";
1715  return result;
1716 }
1717 
1718 // TODO: move to htmlgen
1720 {
1721  ol.pushGeneratorState();
1723 
1724  QCString navPath;
1725  navPath += "<div id=\"nav-path\" class=\"navpath\">\n"
1726  " <ul>\n";
1727  navPath += navigationPathAsString();
1728  navPath += " </ul>\n"
1729  "</div>\n";
1730  ol.writeNavigationPath(navPath);
1731 
1732  ol.popGeneratorState();
1733 }
1734 
1735 // TODO: move to htmlgen
1736 void DefinitionImpl::writeToc(OutputList &ol, const LocalToc &localToc) const
1737 {
1738  if (m_impl->sectionRefs.empty()) return;
1739  if (localToc.isHtmlEnabled())
1740  {
1741  int maxLevel = localToc.htmlLevel();
1742  ol.pushGeneratorState();
1744  ol.writeString("<div class=\"toc\">");
1745  ol.writeString("<h3>");
1747  ol.writeString("</h3>\n");
1748  ol.writeString("<ul>");
1749  int level=1,l;
1750  char cs[2];
1751  cs[1]='\0';
1752  std::vector<bool> inLi(maxLevel+1,false);
1753  for (const SectionInfo *si : m_impl->sectionRefs)
1754  {
1755  SectionType type = si->type();
1756  if (isSection(type))
1757  {
1758  //printf(" level=%d title=%s\n",level,si->title.data());
1759  int nextLevel = (int)type;
1760  if (nextLevel>level)
1761  {
1762  for (l=level;l<nextLevel;l++)
1763  {
1764  if (l < maxLevel) ol.writeString("<ul>");
1765  }
1766  }
1767  else if (nextLevel<level)
1768  {
1769  for (l=level;l>nextLevel;l--)
1770  {
1771  if (l <= maxLevel && inLi[l]) ol.writeString("</li>\n");
1772  inLi[l]=false;
1773  if (l <= maxLevel) ol.writeString("</ul>\n");
1774  }
1775  }
1776  cs[0]=(char)('0'+nextLevel);
1777  if (nextLevel <= maxLevel && inLi[nextLevel])
1778  {
1779  ol.writeString("</li>\n");
1780  }
1781  QCString titleDoc = convertToHtml(si->title());
1782  if (nextLevel <= maxLevel)
1783  {
1784  ol.writeString("<li class=\"level"+QCString(cs)+"\">"
1785  "<a href=\"#"+si->label()+"\">"+
1786  (si->title().isEmpty()?si->label():titleDoc)+"</a>");
1787  }
1788  inLi[nextLevel]=true;
1789  level = nextLevel;
1790  }
1791  }
1792  if (level > maxLevel) level = maxLevel;
1793  while (level>1 && level <= maxLevel)
1794  {
1795  if (inLi[level])
1796  {
1797  ol.writeString("</li>\n");
1798  }
1799  inLi[level]=FALSE;
1800  ol.writeString("</ul>\n");
1801  level--;
1802  }
1803  if (level <= maxLevel && inLi[level]) ol.writeString("</li>\n");
1804  inLi[level]=false;
1805  ol.writeString("</ul>\n");
1806  ol.writeString("</div>\n");
1807  ol.popGeneratorState();
1808  }
1809 
1810  if (localToc.isDocbookEnabled())
1811  {
1812  ol.pushGeneratorState();
1814  ol.writeString(" <toc>\n");
1815  ol.writeString(" <title>" + theTranslator->trRTFTableOfContents() + "</title>\n");
1816  int level=1,l;
1817  int maxLevel = localToc.docbookLevel();
1818  std::vector<bool> inLi(maxLevel+1,false);
1819  for (const SectionInfo *si : m_impl->sectionRefs)
1820  {
1821  SectionType type = si->type();
1822  if (isSection(type))
1823  {
1824  //printf(" level=%d title=%s\n",level,si->title.data());
1825  int nextLevel = (int)type;
1826  if (nextLevel>level)
1827  {
1828  for (l=level;l<nextLevel;l++)
1829  {
1830  if (l < maxLevel) ol.writeString(" <tocdiv>\n");
1831  }
1832  }
1833  else if (nextLevel<level)
1834  {
1835  for (l=level;l>nextLevel;l--)
1836  {
1837  inLi[l]=FALSE;
1838  if (l <= maxLevel) ol.writeString(" </tocdiv>\n");
1839  }
1840  }
1841  if (nextLevel <= maxLevel)
1842  {
1843  QCString titleDoc = convertToDocBook(si->title());
1844  ol.writeString(" <tocentry>" +
1845  (si->title().isEmpty()?si->label():titleDoc) +
1846  "</tocentry>\n");
1847  }
1848  inLi[nextLevel]=TRUE;
1849  level = nextLevel;
1850  }
1851  }
1852  if (level > maxLevel) level = maxLevel;
1853  while (level>1 && level <= maxLevel)
1854  {
1855  inLi[level]=FALSE;
1856  ol.writeString("</tocdiv>\n");
1857  level--;
1858  }
1859  inLi[level]=FALSE;
1860  ol.writeString(" </toc>\n");
1861  ol.popGeneratorState();
1862  }
1863 
1864  if (localToc.isLatexEnabled())
1865  {
1866  ol.pushGeneratorState();
1868  int maxLevel = localToc.latexLevel();
1869 
1870  ol.writeString("\\etocsetnexttocdepth{"+QCString().setNum(maxLevel)+"}\n");
1871 
1872  ol.writeString("\\localtableofcontents\n");
1873  ol.popGeneratorState();
1874  }
1875 }
1876 
1877 //----------------------------------------------------------------------------------------
1878 
1880 {
1881  return m_impl->sectionRefs;
1882 }
1883 
1885 {
1886  return m_impl->symbolName;
1887 }
1888 
1889 //----------------------
1890 
1892 {
1893  return m_impl->details ? m_impl->details->doc : QCString("");
1894 }
1895 
1897 {
1898  return m_impl->details ? m_impl->details->line : 1;
1899 }
1900 
1902 {
1903  return m_impl->details ? m_impl->details->file : QCString("<"+m_impl->name+">");
1904 }
1905 
1906 //----------------------------------------------------------------------------
1907 // strips w from s iff s starts with w
1908 static bool stripWord(QCString &s,QCString w)
1909 {
1910  bool success=FALSE;
1911  if (s.left(w.length())==w)
1912  {
1913  success=TRUE;
1914  s=s.right(s.length()-w.length());
1915  }
1916  return success;
1917 }
1918 
1919 //----------------------------------------------------------------------------
1920 // some quasi intelligent brief description abbreviator :^)
1921 QCString abbreviate(const char *s,const char *name)
1922 {
1923  QCString scopelessName=name;
1924  int i=scopelessName.findRev("::");
1925  if (i!=-1) scopelessName=scopelessName.mid(i+2);
1926  QCString result=s;
1927  result=result.stripWhiteSpace();
1928  // strip trailing .
1929  if (!result.isEmpty() && result.at(result.length()-1)=='.')
1930  result=result.left(result.length()-1);
1931 
1932  // strip any predefined prefix
1933  QStrList &briefDescAbbrev = Config_getList(ABBREVIATE_BRIEF);
1934  const char *p = briefDescAbbrev.first();
1935  while (p)
1936  {
1937  QCString str = p;
1938  str.replace(QRegExp("\\$name"), scopelessName); // replace $name with entity name
1939  str += " ";
1940  stripWord(result,str);
1941  p = briefDescAbbrev.next();
1942  }
1943 
1944  // capitalize first word
1945  if (!result.isEmpty())
1946  {
1947  char c=result[0];
1948  if (c>='a' && c<='z') c+='A'-'a';
1949  result[0]=c;
1950  }
1951  return result;
1952 }
1953 
1954 
1955 //----------------------
1956 
1958 {
1959  //printf("%s::briefDescription(%d)='%s'\n",name().data(),abbr,m_impl->brief?m_impl->brief->doc.data():"<none>");
1960  return m_impl->brief ?
1961  (abbr ? abbreviate(m_impl->brief->doc,displayName()) : m_impl->brief->doc) :
1962  QCString("");
1963 }
1964 
1966 {
1967  if (m_impl->brief)
1968  {
1969  if (m_impl->brief->tooltip.isEmpty() && !m_impl->brief->doc.isEmpty())
1970  {
1971  static bool reentering=FALSE;
1972  if (!reentering)
1973  {
1974  const MemberDef *md = definitionType()==TypeMember ? dynamic_cast<const MemberDef*>(this) : 0;
1975  const Definition *scope = definitionType()==TypeMember ? getOuterScope() : this;
1976  reentering=TRUE; // prevent requests for tooltips while parsing a tooltip
1978  scope,md,
1979  m_impl->brief->doc,
1980  m_impl->brief->file,
1981  m_impl->brief->line);
1982  reentering=FALSE;
1983  }
1984  }
1985  return m_impl->brief->tooltip;
1986  }
1987  return QCString("");
1988 }
1989 
1991 {
1992  return m_impl->brief ? m_impl->brief->line : 1;
1993 }
1994 
1996 {
1997  return m_impl->brief ? m_impl->brief->file : QCString("<"+m_impl->name+">");
1998 }
1999 
2000 //----------------------
2001 
2003 {
2004  return m_impl->inbodyDocs ? m_impl->inbodyDocs->doc : QCString("");
2005 }
2006 
2008 {
2009  return m_impl->inbodyDocs ? m_impl->inbodyDocs->line : 1;
2010 }
2011 
2013 {
2014  return m_impl->inbodyDocs ? m_impl->inbodyDocs->file : QCString("<"+m_impl->name+">");
2015 }
2016 
2017 
2018 //----------------------
2019 
2021 {
2022  return m_impl->defFileName;
2023 }
2024 
2026 {
2027  return m_impl->defFileExt;
2028 }
2029 
2031 {
2032  return m_impl->hidden;
2033 }
2034 
2036 {
2037  return isLinkableInProject() && !m_impl->hidden;
2038 }
2039 
2041 {
2042  return isLinkable() && !m_impl->hidden;
2043 }
2044 
2046 {
2047  return m_impl->isArtificial;
2048 }
2049 
2051 {
2052  return m_impl->ref;
2053 }
2054 
2056 {
2057  return !m_impl->ref.isEmpty();
2058 }
2059 
2061 {
2062  return m_impl->body ? m_impl->body->defLine : -1;
2063 }
2064 
2066 {
2067  return m_impl->body ? m_impl->body->startLine : -1;
2068 }
2069 
2071 {
2072  return m_impl->body ? m_impl->body->endLine : -1;
2073 }
2074 
2076 {
2077  return m_impl->body ? m_impl->body->fileDef : 0;
2078 }
2079 
2081 {
2082  return m_impl->partOfGroups;
2083 }
2084 
2086 {
2087  GroupList *gl = partOfGroups();
2088  if (gl)
2089  {
2090  GroupListIterator gli(*gl);
2091  GroupDef *gd;
2092  for (gli.toFirst();(gd=gli.current());++gli)
2093  {
2094  if (gd->isLinkable()) return TRUE;
2095  }
2096  }
2097  return FALSE;
2098 }
2099 
2101 {
2102  return m_impl->outerScope;
2103 }
2104 
2106 {
2107  return m_impl->sourceRefsDict;
2108 }
2109 
2111 {
2112  return m_impl->sourceRefByDict;
2113 }
2114 
2115 void DefinitionImpl::setReference(const char *r)
2116 {
2117  m_impl->ref=r;
2118 }
2119 
2121 {
2122  return m_impl->lang;
2123 }
2124 
2126 {
2127  m_impl->hidden = m_impl->hidden || b;
2128 }
2129 
2131 {
2132  m_impl->isArtificial = b;
2133 }
2134 
2136 {
2137  m_impl->localName=name;
2138 }
2139 
2141 {
2142  m_impl->lang=lang;
2143 }
2144 
2145 
2147 {
2149 }
2150 
2152 {
2153  return m_impl->symbolName;
2154 }
2155 
2157 {
2158  static bool briefMemberDesc = Config_getBool(BRIEF_MEMBER_DESC);
2159  return !briefDescription().isEmpty() && briefMemberDesc;
2160 }
2161 
2163 {
2164  QCString ref = getReference();
2165  if (!ref.isEmpty())
2166  {
2168  if (dest)
2169  {
2170  QCString result = *dest;
2171  uint l = result.length();
2172  if (!relPath.isEmpty() && l>0 && result.at(0)=='.')
2173  { // relative path -> prepend relPath.
2174  result.prepend(relPath);
2175  l+=relPath.length();
2176  }
2177  if (l>0 && result.at(l-1)!='/') result+='/';
2178  return result;
2179  }
2180  }
2181  return relPath;
2182 }
2183 
2185 {
2186  return m_impl->name;
2187 }
2188 
2190 {
2191  return m_impl->isAnonymous;
2192 }
2193 
2195 {
2196  return m_impl->defLine;
2197 }
2198 
2200 {
2201  return m_impl->defColumn;
2202 }
2203 
2205 {
2206  delete m_impl->cookie;
2207  m_impl->cookie = cookie;
2208 }
2209 
2211 {
2212  return m_impl->cookie;
2213 }
2214 
2216 {
2217 }
2218 
2220 {
2221 }
2222 
2223 //---------------------------------------------------------------------------------
2224 
2226  : m_scope(scope), m_def(alias), m_cookie(0)
2227 {
2228  //printf("%s::addToMap(%s)\n",qPrint(name()),qPrint(alias->name()));
2229  addToMap(alias->name(),this);
2230 }
2231 
2233 {
2234  //printf("~DefinitionAliasImpl()\n");
2235  removeFromMap(this);
2236 }
2237 
RefItem
This struct represents an item in the list of references.
Definition: reflist.h:33
Portable::fseek
portable_off_t fseek(FILE *f, portable_off_t offset, int whence)
Definition: portable.cpp:292
DefinitionImpl::IMPL::defFileName
QCString defFileName
Definition: definition.cpp:85
QList::removeRef
bool removeRef(const type *d)
Definition: qlist.h:78
DefinitionImpl::_setBriefDescription
void _setBriefDescription(const char *b, const char *briefFile, int briefLine)
Definition: definition.cpp:610
getLanguageFromFileName
SrcLangExt getLanguageFromFileName(const QCString &fileName)
Definition: util.cpp:6876
qsnprintf
#define qsnprintf
Definition: qcstring.h:75
SrcLangExt_Unknown
@ SrcLangExt_Unknown
Definition: types.h:44
QCString::replace
QCString & replace(uint index, uint len, const char *s)
Definition: qcstring.cpp:439
convertToDocBook
QCString convertToDocBook(const char *s)
Definition: util.cpp:5438
OutputGenerator::Man
@ Man
Definition: outputgen.h:325
MemberDef::getReference
virtual QCString getReference() const =0
outputlist.h
DefinitionImpl::name
virtual QCString name() const
Definition: definition.cpp:2184
DefinitionImpl::cookie
virtual Cookie * cookie() const
Definition: definition.cpp:2210
DefinitionImpl::getReference
virtual QCString getReference() const
Definition: definition.cpp:2050
Definition::anchor
virtual QCString anchor() const =0
QRegExp
Definition of QRegExp class.
Definition: qregexp.h:47
BriefInfo::file
QCString file
Definition: definition.h:59
MemberSDict
A sorted dictionary of MemberDef objects.
Definition: memberlist.h:140
DefinitionImpl::DefinitionImpl
DefinitionImpl(const char *defFileName, int defLine, int defColumn, const char *name, const char *b=0, const char *d=0, bool isSymbol=TRUE)
Definition: definition.cpp:296
QCString::isEmpty
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition: qcstring.h:191
DefinitionImpl::getDefLine
virtual int getDefLine() const
Definition: definition.cpp:2194
DefinitionImpl::IMPL::isSymbol
bool isSymbol
Definition: definition.cpp:93
QCString::rawData
char * rawData() const
Returns a writable pointer to the data.
Definition: qcstring.h:218
OutputList::endParagraph
void endParagraph()
Definition: outputlist.h:97
DefinitionImpl::writeSourceReffedBy
virtual void writeSourceReffedBy(OutputList &ol, const char *scopeName) const
Definition: definition.cpp:1422
OutputList::enableAll
void enableAll()
Definition: outputlist.cpp:56
SectionRefs::find
const SectionInfo * find(const char *label) const
Returns a constant pointer to the section info given a section label or nullptr if no section with th...
Definition: section.h:103
DefinitionImpl::writeSourceRefs
virtual void writeSourceRefs(OutputList &ol, const char *scopeName) const
Definition: definition.cpp:1427
Definition::getOutputFileBase
virtual QCString getOutputFileBase() const =0
LocalToc
Definition: types.h:224
PageDef
A model of a page symbol.
Definition: pagedef.h:30
DefinitionImpl::IMPL::details
DocInfo * details
Definition: definition.cpp:66
FilterCache::m_cache
SDict< FilterCacheItem > m_cache
Definition: definition.cpp:819
RefList::listName
QCString listName() const
Definition: reflist.h:115
DefinitionImpl::IMPL::defColumn
int defColumn
Definition: definition.cpp:96
Debug::FilterOutput
@ FilterOutput
Definition: debug.h:39
OutputList::endCodeFragment
void endCodeFragment()
Definition: outputlist.h:226
Doxygen::parserManager
static ParserManager * parserManager
Definition: doxygen.h:130
FilterCacheItem::fileSize
size_t fileSize
Definition: definition.cpp:700
uni_isupper
#define uni_isupper(c)
Definition: definition.cpp:596
DefinitionImpl::setBodyDef
virtual void setBodyDef(FileDef *fd)
Definition: definition.cpp:1209
uint
unsigned uint
Definition: qglobal.h:351
Definition::pathFragment
virtual QCString pathFragment() const =0
MemberDef::isFunction
virtual bool isFunction() const =0
DefinitionImpl::getDefColumn
virtual int getDefColumn() const
Definition: definition.cpp:2199
addToMap
static void addToMap(const char *name, Definition *d)
Definition: definition.cpp:219
Doxygen::tagDestinationDict
static StringDict tagDestinationDict
Definition: doxygen.h:114
OutputGenerator::Docbook
@ Docbook
Definition: outputgen.h:325
MemberDef::isSignal
virtual bool isSignal() const =0
DefinitionImpl::writeQuickMemberLinks
virtual void writeQuickMemberLinks(OutputList &, const MemberDef *) const
Definition: definition.cpp:2215
Translator::trReferencedBy
virtual QCString trReferencedBy()=0
pagedef.h
DefinitionImpl::IMPL::sourceRefsDict
MemberSDict * sourceRefsDict
Definition: definition.cpp:62
DefinitionImpl::docLine
virtual int docLine() const
Definition: definition.cpp:1896
DefinitionImpl::navigationPathAsString
virtual QCString navigationPathAsString() const
Definition: definition.cpp:1667
DefinitionImpl::partOfGroups
virtual GroupList * partOfGroups() const
Definition: definition.cpp:2080
Translator::trReferences
virtual QCString trReferences()=0
DefinitionImpl::isReference
virtual bool isReference() const
Definition: definition.cpp:2055
DefinitionImpl::IMPL::init
void init(const char *df, const char *n)
Definition: definition.cpp:122
QCString::findRev
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition: qcstring.cpp:97
OutputList::writeObjectLink
void writeObjectLink(const char *ref, const char *file, const char *anchor, const char *name)
Definition: outputlist.h:129
Definition::displayName
virtual QCString displayName(bool includeScope=TRUE) const =0
FTextStream
Simplified and optimized version of QTextStream.
Definition: ftextstream.h:12
DefinitionImpl
Copyright (C) 1997-2019 by Dimitri van Heesch.
Definition: definitionimpl.h:24
BodyInfo::fileDef
FileDef * fileDef
file definition containing the function body
Definition: definition.h:68
DefinitionImpl::IMPL::ref
QCString ref
Definition: definition.cpp:76
qregexp.h
readCodeFragment
bool readCodeFragment(const char *fileName, int &startLine, int &endLine, QCString &result)
Reads a fragment from file fileName starting with line startLine and ending with line endLine.
Definition: definition.cpp:839
section.h
DefinitionImpl::addInnerCompound
virtual void addInnerCompound(const Definition *d)
Definition: definition.cpp:1508
QList::append
void append(const type *d)
Definition: qlist.h:73
namespacedef.h
DefinitionImpl::hasSections
virtual bool hasSections() const
Definition: definition.cpp:435
LocalToc::isLatexEnabled
bool isLatexEnabled() const
Definition: types.h:260
OutputList::pushGeneratorState
void pushGeneratorState()
Definition: outputlist.cpp:98
QCString::resize
bool resize(uint newlen)
Resizes the string to hold newlen characters (this value should include the 0-terminator).
Definition: qcstring.h:227
OutputList::parseText
void parseText(const QCString &textStr)
Definition: outputlist.cpp:151
QCString::simplifyWhiteSpace
QCString simplifyWhiteSpace() const
Definition: qcstring.cpp:351
FilterCache::FilterCache
FilterCache()
Definition: definition.cpp:707
transcodeCharacterStringToUTF8
QCString transcodeCharacterStringToUTF8(const QCString &input)
Definition: util.cpp:2462
QInternalList::count
uint count() const
Definition: qinternallist.h:56
SectionManager
singleton class that owns the list of all sections
Definition: section.h:128
filter
static unsigned filter(unsigned char *out, const unsigned char *in, unsigned w, unsigned h, const LodePNG_InfoColor *info)
Definition: lodepng.cpp:2030
QInternalList::first
type * first()
Definition: qinternallist.h:87
BufStr::addArray
void addArray(const char *a, uint len)
Definition: bufstr.h:47
SrcLangExt
SrcLangExt
Language as given by extension.
Definition: types.h:43
DefinitionImpl::docFile
virtual QCString docFile() const
Definition: definition.cpp:1901
portable_off_t
off_t portable_off_t
Definition: portable.h:13
BodyInfo::startLine
int startLine
line number of the start of the definition's body
Definition: definition.h:66
FilterCache::m_endPos
portable_off_t m_endPos
Definition: definition.cpp:820
DefinitionImpl::setOuterScope
virtual void setOuterScope(Definition *d)
Definition: definition.cpp:1553
DefinitionImpl::setReference
virtual void setReference(const char *r)
Definition: definition.cpp:2115
DefinitionImpl::getStartDefLine
virtual int getStartDefLine() const
Definition: definition.cpp:2060
DefinitionImpl::isAnonymous
virtual bool isAnonymous() const
Definition: definition.cpp:2189
Definition::isHidden
virtual bool isHidden() const =0
BodyInfo::endLine
int endLine
line number of the end of the definition's body
Definition: definition.h:67
DefinitionImpl::setArtificial
virtual void setArtificial(bool b)
Definition: definition.cpp:2130
QCString::startsWith
bool startsWith(const char *s) const
Definition: qcstring.cpp:221
DefinitionImpl::setId
virtual void setId(const char *name)
Definition: definition.cpp:397
IndexList::incContentsDepth
void incContentsDepth()
Definition: index.h:90
definitionimpl.h
QCString::length
uint length() const
Returns the length of the string, excluding the 0-terminator.
Definition: qcstring.h:197
languages.l
l
Definition: languages.py:75
DefinitionImpl::getReferencedByMembers
virtual MemberSDict * getReferencedByMembers() const
Definition: definition.cpp:2110
DefinitionImpl::IMPL::~IMPL
~IMPL()
Definition: definition.cpp:101
err
void err(const char *fmt,...)
Definition: message.cpp:238
Definition::_symbolName
virtual QCString _symbolName() const =0
LocalToc::latexLevel
int latexLevel() const
Definition: types.h:265
IndexList::decContentsDepth
void decContentsDepth()
Definition: index.h:92
DefinitionImpl::IMPL::localName
QCString localName
Definition: definition.cpp:73
DefinitionImpl::setLocalName
virtual void setLocalName(const QCString name)
Definition: definition.cpp:2135
g_filterCache
static FilterCache g_filterCache
Definition: definition.cpp:823
OutputList::disable
void disable(OutputGenerator::OutputType o)
Definition: outputlist.cpp:72
MemberDef::anchor
virtual QCString anchor() const =0
SectionType
SectionType
enum representing the various types of sections and entities that can be referred to.
Definition: section.h:30
code.h
MemberDef::getOutputFileBase
virtual QCString getOutputFileBase() const =0
config.h
FileDef::name
virtual QCString name() const =0
DefinitionList
A list of Definition objects.
Definition: definition.h:379
SectionInfo::title
QCString title() const
Definition: section.h:67
addHtmlExtensionIfMissing
QCString addHtmlExtensionIfMissing(const char *fName)
Definition: util.cpp:6589
DefinitionImpl::setRefItems
virtual void setRefItems(const std::vector< RefItem * > &sli)
Definition: definition.cpp:1583
DefinitionImpl::hasBriefDescription
virtual bool hasBriefDescription() const
returns TRUE if this class has a brief description
Definition: definition.cpp:2156
convertToHtml
QCString convertToHtml(const char *s, bool keepEntities)
Definition: util.cpp:5498
QCString
This is an alternative implementation of QCString.
Definition: qcstring.h:134
MemberDef::isPrototype
virtual bool isPrototype() const =0
GroupDef
A model of a group of symbols.
Definition: groupdef.h:48
DefinitionIntf
Abstract interface for a Definition or DefinitionList.
Definition: definition.h:73
QList::isEmpty
bool isEmpty() const
Definition: qlist.h:67
DefinitionImpl::addSectionsToIndex
virtual void addSectionsToIndex()
Definition: definition.cpp:450
DefinitionImpl::getLanguage
virtual SrcLangExt getLanguage() const
Returns the programming language this definition was written in.
Definition: definition.cpp:2120
LinkedMap::find
const T * find(const char *k) const
find an element given the key.
Definition: linkedmap.h:39
DefinitionIntf::TypeMember
@ TypeMember
Definition: definition.h:83
GroupDef::isLinkable
virtual bool isLinkable() const =0
DefinitionImpl::m_impl
IMPL * m_impl
Definition: definitionimpl.h:134
MemberDef::isSlot
virtual bool isSlot() const =0
DefinitionImpl::setCookie
virtual void setCookie(Cookie *cookie) const
Definition: definition.cpp:2204
SDict::append
void append(const char *key, const T *d)
Definition: sortdict.h:135
FileDef
A model of a file symbol.
Definition: filedef.h:65
ParserManager::getCodeParser
CodeParserInterface & getCodeParser(const char *extension)
Gets the interface to the parser associated with given extension.
Definition: parserintf.h:227
SectionInfo::ref
QCString ref() const
Definition: section.h:69
SectionManager::instance
static SectionManager & instance()
returns a reference to the singleton
Definition: section.h:146
DefinitionIntf::TypePage
@ TypePage
Definition: definition.h:86
Config_getEnum
#define Config_getEnum(val)
Definition: config.h:37
DefinitionImpl::makePartOfGroup
virtual void makePartOfGroup(GroupDef *gd)
Definition: definition.cpp:1577
DefinitionImpl::IMPL::sectionRefs
SectionRefs sectionRefs
Definition: definition.cpp:59
DefinitionImpl::IMPL::isArtificial
bool isArtificial
Definition: definition.cpp:79
DefinitionImpl::IMPL::sourceRefByDict
MemberSDict * sourceRefByDict
Definition: definition.cpp:61
MemberDef
A model of a class/file/namespace member symbol.
Definition: memberdef.h:45
DefinitionImpl::getReferencesMembers
virtual MemberSDict * getReferencesMembers() const
Definition: definition.cpp:2105
DefinitionImpl::IMPL::id
QCString id
Definition: definition.cpp:90
QCString::find
int find(char c, int index=0, bool cs=TRUE) const
Definition: qcstring.cpp:42
MD5SigToString
void MD5SigToString(unsigned char signature[16], char *str, int len)
Definition: md5.c:285
DefinitionImpl::addSourceReferences
virtual void addSourceReferences(const MemberDef *d)
Definition: definition.cpp:1480
DefinitionImpl::writeSummaryLinks
virtual void writeSummaryLinks(OutputList &) const
Definition: definition.cpp:2219
TRUE
@ TRUE
Definition: mscgen_bool.h:29
getFileFilter
QCString getFileFilter(const char *name, bool isSourceCode)
Definition: util.cpp:2427
FALSE
@ FALSE
Definition: mscgen_bool.h:28
DefinitionImpl::isHidden
virtual bool isHidden() const
Definition: definition.cpp:2030
DefinitionImpl::IMPL::qualifiedName
QCString qualifiedName
Definition: definition.cpp:75
DefinitionImpl::IMPL::docSignatures
QCString docSignatures
Definition: definition.cpp:71
DefinitionImpl::getBodyDef
virtual FileDef * getBodyDef() const
Definition: definition.cpp:2075
DefinitionImpl::isArtificial
virtual bool isArtificial() const
Definition: definition.cpp:2045
DefinitionImpl::briefDescriptionAsTooltip
virtual QCString briefDescriptionAsTooltip() const
Definition: definition.cpp:1965
convertToXML
QCString convertToXML(const char *s, bool keepEntities)
Definition: util.cpp:5386
Definition::xrefListItems
virtual const std::vector< RefItem * > & xrefListItems() const =0
DefinitionImpl::isVisibleInProject
virtual bool isVisibleInProject() const
Definition: definition.cpp:2035
DefinitionImpl::IMPL::briefSignatures
QCString briefSignatures
Definition: definition.cpp:70
Portable::pclose
int pclose(FILE *stream)
Definition: portable.cpp:440
QCString::mid
QCString mid(uint index, uint len=(uint) -1) const
Definition: qcstring.cpp:274
Definition::getOuterScope
virtual Definition * getOuterScope() const =0
SectionRefs::empty
bool empty() const
Definition: section.h:118
RefItem::list
RefList * list() const
Definition: reflist.h:54
DefinitionImpl::writeDocAnchorsToTagFile
virtual void writeDocAnchorsToTagFile(FTextStream &) const
Definition: definition.cpp:500
isId
bool isId(int c)
Definition: util.h:226
OutputGenerator::RTF
@ RTF
Definition: outputgen.h:325
Doxygen::htmlFileExtension
static QCString htmlFileExtension
Definition: doxygen.h:119
message.h
Portable::fopen
FILE * fopen(const char *fileName, const char *mode)
Definition: portable.cpp:314
uchar
unsigned char uchar
Definition: qglobal.h:349
OutputList::disableAllBut
void disableAllBut(OutputGenerator::OutputType o)
Definition: outputlist.cpp:48
DefinitionImpl::IMPL::brief
BriefInfo * brief
Definition: definition.cpp:68
debug.h
QCString::at
char & at(uint i) const
Returns a reference to the character at index i.
Definition: qcstring.h:329
abbreviate
QCString abbreviate(const char *s, const char *name)
Definition: definition.cpp:1921
DefinitionAliasImpl::~DefinitionAliasImpl
virtual ~DefinitionAliasImpl()
Definition: definition.cpp:2232
DefinitionImpl::externalReference
virtual QCString externalReference(const QCString &relPath) const
Definition: definition.cpp:2162
DefinitionImpl::IMPL::defLine
int defLine
Definition: definition.cpp:95
Config_getList
#define Config_getList(val)
Definition: config.h:38
QCString::toUInt
uint toUInt(bool *ok=0, int base=10) const
Definition: qcstring.cpp:502
Portable::popen
FILE * popen(const char *name, const char *type)
Definition: portable.cpp:431
DefinitionImpl::setDefFile
virtual void setDefFile(const QCString &df, int defLine, int defColumn)
Definition: definition.cpp:151
htags.h
DefinitionIntf::TypeFile
@ TypeFile
Definition: definition.h:81
Definition::Cookie
Definition: definition.h:103
Htags::useHtags
static bool useHtags
Copyright (C) 1997-2015 by Dimitri van Heesch.
Definition: htags.h:23
theTranslator
Translator * theTranslator
Copyright (C) 1997-2015 by Dimitri van Heesch.
Definition: language.cpp:157
DefinitionImpl::setDocumentation
virtual void setDocumentation(const char *d, const char *docFile, int docLine, bool stripWhiteSpace=TRUE)
Definition: definition.cpp:590
Definition::_setSymbolName
virtual void _setSymbolName(const QCString &name)=0
Doxygen::globalScope
static NamespaceDef * globalScope
Definition: doxygen.h:118
lastCharIsMultibyte
static bool lastCharIsMultibyte(const QCString &s)
Definition: definition.cpp:600
DefinitionImpl::getOuterScope
virtual Definition * getOuterScope() const
Definition: definition.cpp:2100
DefinitionImpl::IMPL::name
QCString name
Definition: definition.cpp:92
FilterCache
Definition: definition.cpp:705
DefinitionImpl::addSectionsToDefinition
virtual void addSectionsToDefinition(const std::vector< const SectionInfo * > &anchorList)
Definition: definition.cpp:413
DefinitionImpl::addSourceReferencedBy
virtual void addSourceReferencedBy(const MemberDef *d)
Definition: definition.cpp:1457
CodeParserInterface::parseCode
virtual void parseCode(CodeOutputInterface &codeOutIntf, const char *scopeName, const QCString &input, SrcLangExt lang, bool isExampleBlock, const char *exampleName=0, FileDef *fileDef=0, int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, const MemberDef *memberDef=0, bool showLineNumbers=TRUE, const Definition *searchCtx=0, bool collectXRefs=TRUE)=0
Parses a source file or fragment with the goal to produce highlighted and cross-referenced output.
doxygen.h
DefinitionAliasImpl::DefinitionAliasImpl
DefinitionAliasImpl(const Definition *scope, const Definition *alias)
Definition: definition.cpp:2225
parserintf.h
BufStr::resize
void resize(uint newlen)
Definition: bufstr.h:63
DefinitionImpl::_getXRefListId
int _getXRefListId(const char *listName) const
Definition: definition.cpp:1614
parseCommentAsText
QCString parseCommentAsText(const Definition *scope, const MemberDef *md, const QCString &doc, const QCString &fileName, int lineNr)
Definition: util.cpp:7062
RefItem::id
int id() const
Definition: reflist.h:53
Translator::trWriteList
virtual QCString trWriteList(int numEntries)=0
language.h
DefinitionImpl::_setInbodyDocumentation
void _setInbodyDocumentation(const char *d, const char *docFile, int docLine)
Definition: definition.cpp:671
SrcLangExt_Python
@ SrcLangExt_Python
Definition: types.h:53
CodeParserInterface::resetCodeParserState
virtual void resetCodeParserState()=0
Resets the state of the code parser.
DefinitionIntf::TypeClass
@ TypeClass
Definition: definition.h:80
OutputList::docify
void docify(const char *s)
Definition: outputlist.h:125
DefinitionImpl::findInnerCompound
virtual Definition * findInnerCompound(const char *name) const
Definition: definition.cpp:1503
BodyInfo
Data associated with description found in the body.
Definition: definition.h:64
DefinitionImpl::IMPL
Copyright (C) 1997-2015 by Dimitri van Heesch.
Definition: definition.cpp:53
SectionInfo::fileName
QCString fileName() const
Definition: section.h:71
DefinitionImpl::IMPL::cookie
Cookie * cookie
Definition: definition.cpp:97
DefinitionIntf::definitionType
virtual DefType definitionType() const =0
DefinitionImpl::getSourceAnchor
virtual QCString getSourceAnchor() const
Definition: definition.cpp:992
QCString::right
QCString right(uint len) const
Definition: qcstring.cpp:259
getLanguageSpecificSeparator
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
Definition: util.cpp:7921
computeQualifiedIndex
int computeQualifiedIndex(const QCString &name)
Definition: util.cpp:1211
QListIterator::current
type * current() const
Definition: qlist.h:147
SDict< MemberDef >::IteratorDict
friend class IteratorDict
Definition: sortdict.h:349
DefinitionImpl::getDefFileExtension
virtual QCString getDefFileExtension() const
Definition: definition.cpp:2025
DefinitionImpl::xrefListItems
virtual const std::vector< RefItem * > & xrefListItems() const
Definition: definition.cpp:1626
DefinitionImpl::documentation
virtual QCString documentation() const
Definition: definition.cpp:1891
nextUtf8CharPosition
int nextUtf8CharPosition(const QCString &utf8Str, uint len, uint startPos)
Definition: util.cpp:7015
QStrList
The QStrList class provides a doubly linked list of char*.
Definition: qstrlist.h:58
QCString::stripWhiteSpace
QCString stripWhiteSpace() const
Definition: qcstring.cpp:323
Definition
The common base class of all entity definitions found in the sources.
Definition: definition.h:100
SrcLangExt_Fortran
@ SrcLangExt_Fortran
Definition: types.h:54
filedef.h
QCString::left
QCString left(uint len) const
Definition: qcstring.cpp:241
SectionInfo::generated
bool generated() const
Definition: section.h:72
DefinitionImpl::getEndBodyLine
virtual int getEndBodyLine() const
Definition: definition.cpp:2070
FileDef::getSourceFileBase
virtual QCString getSourceFileBase() const =0
reflist.h
DefinitionImpl::setInbodyDocumentation
virtual void setInbodyDocumentation(const char *d, const char *docFile, int docLine)
Definition: definition.cpp:689
DefinitionImpl::symbolName
virtual QCString symbolName() const
Definition: definition.cpp:1884
DocInfo::file
QCString file
Definition: definition.h:50
Doxygen::indexList
static IndexList * indexList
Definition: doxygen.h:137
GroupListIterator
An iterator for GroupDef objects in a GroupList.
Definition: groupdef.h:137
OutputList::popGeneratorState
void popGeneratorState()
Definition: outputlist.cpp:106
OutputGenerator::Html
@ Html
Definition: outputgen.h:325
memberlist.h
DefinitionIntf::TypeSymbolList
@ TypeSymbolList
Definition: definition.h:88
OutputGenerator::Latex
@ Latex
Definition: outputgen.h:325
SectionInfo::setDefinition
void setDefinition(Definition *d)
Definition: section.h:80
LocalToc::isHtmlEnabled
bool isHtmlEnabled() const
Definition: types.h:259
Doxygen::symbolMap
static QDict< DefinitionIntf > * symbolMap
Definition: doxygen.h:123
dirdef.h
Definition::isLinkableInProject
virtual bool isLinkableInProject() const =0
DefinitionImpl::id
virtual QCString id() const
Definition: definition.cpp:408
DefinitionImpl::briefFile
virtual QCString briefFile() const
Definition: definition.cpp:1995
stripScope
QCString stripScope(const char *name)
Definition: util.cpp:5274
QListIterator::toFirst
type * toFirst()
Definition: qlist.h:136
BriefInfo
Data associated with a brief description.
Definition: definition.h:55
BriefInfo::doc
QCString doc
Definition: definition.h:56
BufStr::data
char * data() const
Definition: bufstr.h:81
MemberDef::isLinkable
virtual bool isLinkable() const =0
Debug::print
static void print(DebugMask mask, int prio, const char *fmt,...)
Definition: debug.cpp:86
DefinitionImpl::IMPL::setDefFileName
void setDefFileName(const QCString &df)
Definition: definition.cpp:112
DefinitionImpl::pathFragment
virtual QCString pathFragment() const
Definition: definition.cpp:1631
LocalToc::isDocbookEnabled
bool isDocbookEnabled() const
Definition: types.h:262
DefinitionImpl::~DefinitionImpl
virtual ~DefinitionImpl()
Definition: definition.cpp:375
DefinitionImpl::inbodyFile
virtual QCString inbodyFile() const
Definition: definition.cpp:2012
Translator::trDefinedAtLineInSourceFile
virtual QCString trDefinedAtLineInSourceFile()=0
DocInfo
Data associated with a detailed description.
Definition: definition.h:47
md5.h
Definition::isLinkable
virtual bool isLinkable() const =0
SDict< FilterCacheItem >
DefinitionImpl::mergeRefItems
virtual void mergeRefItems(Definition *d)
Definition: definition.cpp:1588
IndexList::addContentsItem
void addContentsItem(bool isDir, const char *name, const char *ref, const char *file, const char *anchor, bool separateIndex=FALSE, bool addToNavIndex=FALSE, const Definition *def=0)
Definition: index.h:94
DefinitionImpl::_setSymbolName
virtual void _setSymbolName(const QCString &name)
Definition: definition.cpp:2146
DefinitionImpl::writeToc
virtual void writeToc(OutputList &ol, const LocalToc &lt) const
Definition: definition.cpp:1736
DefinitionImpl::IMPL::isAnonymous
bool isAnonymous
Definition: definition.cpp:80
QCString::truncate
bool truncate(uint pos)
Truncates the string at position pos.
Definition: qcstring.h:234
FilterCache::getFileContents
bool getFileContents(const QCString &fileName, BufStr &str)
Definition: definition.cpp:708
Translator::trRTFTableOfContents
virtual QCString trRTFTableOfContents()=0
QCString::data
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition: qcstring.h:209
SDict::count
uint count() const
Definition: sortdict.h:280
DefinitionImpl::_docsAlreadyAdded
bool _docsAlreadyAdded(const QCString &doc, QCString &sigList)
Definition: definition.cpp:522
DefinitionImpl::setBodySegment
virtual void setBodySegment(int defLine, int bls, int ble)
Definition: definition.cpp:1200
QCString::prepend
QCString & prepend(const char *s)
Definition: qcstring.cpp:415
MemberDef::isObjCMethod
virtual bool isObjCMethod() const =0
DefinitionImpl::writeNavigationPath
virtual void writeNavigationPath(OutputList &ol) const
Definition: definition.cpp:1719
SectionInfo::type
SectionType type() const
Definition: section.h:68
BufStr::addChar
void addChar(char c)
Definition: bufstr.h:42
DefinitionImpl::briefLine
virtual int briefLine() const
Definition: definition.cpp:1990
LocalToc::docbookLevel
int docbookLevel() const
Definition: types.h:267
DefinitionImpl::IMPL::hidden
bool hidden
Definition: definition.cpp:78
CodeParserInterface
Abstract interface for code parsers.
Definition: parserintf.h:101
DefinitionImpl::IMPL::symbolName
QCString symbolName
Definition: definition.cpp:94
QInternalList::next
type * next()
Definition: qinternallist.h:89
SectionRefs::begin
const_iterator begin() const
Definition: section.h:116
BriefInfo::line
int line
Definition: definition.h:58
DefinitionImpl::_writeSourceRefList
void _writeSourceRefList(OutputList &ol, const char *scopeName, const QCString &text, MemberSDict *members, bool) const
Definition: definition.cpp:1268
qPrint
const char * qPrint(const char *s)
Definition: qcstring.h:800
Doxygen::filterDBFileName
static QCString filterDBFileName
Definition: doxygen.h:135
stripLeadingAndTrailingEmptyLines
QCString stripLeadingAndTrailingEmptyLines(const QCString &s, int &docLine)
Special version of QCString::stripWhiteSpace() that only strips completely blank lines.
Definition: util.cpp:6685
DefinitionImpl::setHidden
virtual void setHidden(bool b)
Definition: definition.cpp:2125
DefinitionImpl::IMPL::defFileExt
QCString defFileExt
Definition: definition.cpp:86
isSection
constexpr bool isSection(SectionType type)
return true if type is a section, and false if it is a page, anchor or table.
Definition: section.h:41
Config_getBool
#define Config_getBool(val)
Definition: config.h:35
DefinitionImpl::IMPL::inbodyDocs
DocInfo * inbodyDocs
Definition: definition.cpp:67
DefinitionImpl::inbodyLine
virtual int inbodyLine() const
Definition: definition.cpp:2007
DefinitionImpl::writeSourceDef
virtual void writeSourceDef(OutputList &ol, const char *scopeName) const
Definition: definition.cpp:1012
OutputList
Class representing a list of output generators that are written to in parallel.
Definition: outputlist.h:38
DefinitionIntf::TypeGroup
@ TypeGroup
Definition: definition.h:84
DefinitionImpl::IMPL::xrefListItems
std::vector< RefItem * > xrefListItems
Definition: definition.cpp:63
MD5Buffer
void MD5Buffer(const unsigned char *buf, unsigned int len, unsigned char sig[16])
Definition: md5.c:275
BodyInfo::defLine
int defLine
line number of the start of the definition
Definition: definition.h:65
groupdef.h
DefinitionImpl::getSourceFileBase
virtual QCString getSourceFileBase() const
Definition: definition.cpp:979
removeFromMap
static void removeFromMap(Definition *d)
Definition: definition.cpp:266
OutputList::enable
void enable(OutputGenerator::OutputType o)
Definition: outputlist.cpp:80
DefinitionImpl::hasDocumentation
virtual bool hasDocumentation() const
Definition: definition.cpp:1432
SectionRefs
class that represents a list of constant references to sections.
Definition: section.h:96
SrcLangExt_VHDL
@ SrcLangExt_VHDL
Definition: types.h:55
ASSERT
#define ASSERT(x)
Definition: qglobal.h:591
DefinitionImpl::isLinkableViaGroup
virtual bool isLinkableViaGroup() const
Definition: definition.cpp:2085
DefinitionImpl::hasSources
virtual bool hasSources() const
Definition: definition.cpp:1215
SDict::sort
void sort()
Definition: sortdict.h:188
GroupList
A list of GroupDef objects.
Definition: groupdef.h:127
SectionInfo::label
QCString label() const
Definition: section.h:66
SDict::at
T * at(uint i)
Definition: sortdict.h:254
DefinitionImpl::qualifiedName
virtual QCString qualifiedName() const
Definition: definition.cpp:1513
DefinitionImpl::IMPL::body
BodyInfo * body
Definition: definition.cpp:69
DefinitionImpl::setName
virtual void setName(const char *name)
Definition: definition.cpp:388
Definition::name
virtual QCString name() const =0
DefinitionImpl::IMPL::outerScope
Definition * outerScope
Definition: definition.cpp:82
Config_getInt
#define Config_getInt(val)
Definition: config.h:36
OutputList::writeString
void writeString(const char *text)
Definition: outputlist.h:99
DefinitionImpl::localName
virtual QCString localName() const
Definition: definition.cpp:1572
DefinitionImpl::writeInlineCode
virtual void writeInlineCode(OutputList &ol, const char *scopeName) const
Definition: definition.cpp:1223
substitute
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition: util.cpp:4606
DocInfo::line
int line
Definition: definition.h:49
portable.h
Portable versions of functions that are platform dependent.
endl
QTextStream & endl(QTextStream &s)
Definition: qtextstream.cpp:2030
bufstr.h
Definition::getStartBodyLine
virtual int getStartBodyLine() const =0
cs
const char * cs
Definition: qtextcodec.cpp:1350
BriefInfo::tooltip
QCString tooltip
Definition: definition.h:57
DefinitionImpl::getSectionRefs
virtual const SectionRefs & getSectionRefs() const
returns the section dictionary, only of importance for pagedef
Definition: definition.cpp:1879
DefinitionImpl::hasUserDocumentation
virtual bool hasUserDocumentation() const
Definition: definition.cpp:1447
DefinitionImpl::IMPL::partOfGroups
GroupList * partOfGroups
Definition: definition.cpp:64
DefinitionImpl::_symbolName
virtual QCString _symbolName() const
Definition: definition.cpp:2151
FilterCacheItem::filePos
portable_off_t filePos
Definition: definition.cpp:699
OutputList::startCodeFragment
void startCodeFragment()
Definition: outputlist.h:224
matchExcludedSymbols
static bool matchExcludedSymbols(const char *name)
Definition: definition.cpp:160
DefinitionImpl::briefDescription
virtual QCString briefDescription(bool abbreviate=FALSE) const
Definition: definition.cpp:1957
BufStr
Copyright (C) 1997-2015 by Dimitri van Heesch.
Definition: bufstr.h:31
DefinitionImpl::getStartBodyLine
virtual int getStartBodyLine() const
Definition: definition.cpp:2065
Definition::navigationPathAsString
virtual QCString navigationPathAsString() const =0
SectionInfo
class that provide information about a section.
Definition: section.h:51
stripWord
static bool stripWord(QCString &s, QCString w)
Definition: definition.cpp:1908
SectionRefs::end
const_iterator end() const
Definition: section.h:117
util.h
Copyright (C) 1997-2015 by Dimitri van Heesch.
OutputList::startParagraph
void startParagraph(const char *classDef=0)
Definition: outputlist.h:95
FilterCacheItem
Definition: definition.cpp:698
Doxygen::clangUsrMap
static QDict< Definition > * clangUsrMap
Definition: doxygen.h:124
DefinitionImpl::IMPL::lang
SrcLangExt lang
Definition: definition.cpp:88
DefinitionImpl::inbodyDocumentation
virtual QCString inbodyDocumentation() const
Definition: definition.cpp:2002
SectionRefs::add
void add(const SectionInfo *si)
Adds a non-owning section reference.
Definition: section.h:110
Definition::getBodyDef
virtual FileDef * getBodyDef() const =0
Definition::qualifiedName
virtual QCString qualifiedName() const =0
DefinitionImpl::setBriefDescription
virtual void setBriefDescription(const char *b, const char *briefFile, int briefLine)
Definition: definition.cpp:665
SDict::find
T * find(const char *key)
Definition: sortdict.h:232
Debug::ExtCmd
@ ExtCmd
Definition: debug.h:37
SDict_primes
const uint SDict_primes[]
Definition: sortdict.h:29
DefinitionImpl::setLanguage
virtual void setLanguage(SrcLangExt lang)
Definition: definition.cpp:2140
QCString::fill
bool fill(char c, int len=-1)
Fills a string with a predefined character.
Definition: qcstring.h:245
QCString::sprintf
QCString & sprintf(const char *format,...)
Copyright (C) 1997-2015 by Dimitri van Heesch.
Definition: qcstring.cpp:28
DocInfo::doc
QCString doc
Definition: definition.h:48
SectionManager::add
SectionInfo * add(const SectionInfo &si)
Add a new section given the data of an existing section.
Definition: section.h:132
LocalToc::htmlLevel
int htmlLevel() const
Definition: types.h:264
vhdldocgen.h
OutputList::writeNavigationPath
void writeNavigationPath(const char *s)
Definition: outputlist.h:336
DefinitionImpl::_setDocumentation
void _setDocumentation(const char *d, const char *docFile, int docLine, bool stripWhiteSpace, bool atTop)
Definition: definition.cpp:544
MemberDef::getScopeString
virtual QCString getScopeString() const =0
FileDef::absFilePath
virtual QCString absFilePath() const =0
DefinitionImpl::isVisible
virtual bool isVisible() const
Definition: definition.cpp:2040
QRegExp::match
int match(const QCString &str, int index=0, int *len=0, bool indexIsStart=TRUE) const
Definition: qregexp.cpp:649
DefinitionImpl::getDefFileName
virtual QCString getDefFileName() const
Definition: definition.cpp:2020