summaryrefslogtreecommitdiffstats
path: root/src/definition.cpp
diff options
context:
space:
mode:
author(no author) <(no author)@afe2bf4a-e733-0410-8a33-86f594647bc7>2005-08-08 20:01:03 (GMT)
committer(no author) <(no author)@afe2bf4a-e733-0410-8a33-86f594647bc7>2005-08-08 20:01:03 (GMT)
commit001e27ddbb1bfaa351b5f268b22418fb0557d6c2 (patch)
treea390a2400721fd1ed137738bd2679ab33ed0306f /src/definition.cpp
parent0559d5795f6e2adc993577a4dd55b5370d31677c (diff)
downloadDoxygen-001e27ddbb1bfaa351b5f268b22418fb0557d6c2.zip
Doxygen-001e27ddbb1bfaa351b5f268b22418fb0557d6c2.tar.gz
Doxygen-001e27ddbb1bfaa351b5f268b22418fb0557d6c2.tar.bz2
This commit was manufactured by cvs2svn to create tagRelease_1_4_4_20050804
'Release_1_4_4_20050804'.
Diffstat (limited to 'src/definition.cpp')
-rw-r--r--src/definition.cpp853
1 files changed, 0 insertions, 853 deletions
diff --git a/src/definition.cpp b/src/definition.cpp
deleted file mode 100644
index 9114e9d..0000000
--- a/src/definition.cpp
+++ /dev/null
@@ -1,853 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2005 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#include "qtbc.h"
-#include <ctype.h>
-#include <qregexp.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "config.h"
-#include "definition.h"
-#include "doxygen.h"
-#include "language.h"
-#include "message.h"
-#include "outputlist.h"
-#include "code.h"
-#include "util.h"
-#include "groupdef.h"
-#include "pagedef.h"
-#include "section.h"
-#include "htags.h"
-#include "parserintf.h"
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define popen _popen
-#define pclose _pclose
-#endif
-
-static void addToMap(const char *name,Definition *d)
-{
- QCString symbolName = name;
- int index=computeQualifiedIndex(symbolName);
- if (index!=-1) symbolName=symbolName.mid(index+2);
- if (!symbolName.isEmpty())
- {
- DefinitionList *dl=Doxygen::symbolMap->find(symbolName);
- if (dl==0)
- {
- dl = new DefinitionList;
- Doxygen::symbolMap->append(symbolName,dl);
- }
- //printf("******* adding symbol `%s' (%p)\n",symbolName.data(),d);
- dl->append(d);
- d->setSymbolName(symbolName);
- }
-}
-
-static void removeFromMap(Definition *d)
-{
- QCString symbolName = d->symbolName();
- int index=computeQualifiedIndex(symbolName);
- if (index!=-1) symbolName=symbolName.mid(index+2);
- if (!symbolName.isEmpty())
- {
- //printf("******* removing symbol `%s' (%p)\n",symbolName.data(),d);
- DefinitionList *dl=Doxygen::symbolMap->find(symbolName);
- if (dl)
- {
- ASSERT(dl!=0);
- bool b = dl->removeRef(d);
- ASSERT(b==TRUE);
- }
- }
-}
-
-Definition::Definition(const char *df,int dl,
- const char *name,const char *b,
- const char *d,bool isSymbol)
-{
- //QCString ns;
- //printf("Definition(%s) %p\n",name,this);
- m_defFileName = df;
- int lastDot = m_defFileName.findRev('.');
- if (lastDot!=-1)
- {
- m_defFileExt = m_defFileName.mid(lastDot);
- }
- m_defLine = dl;
- m_name=name;
- if (m_name!="<globalScope>")
- {
- //extractNamespaceName(m_name,m_localName,ns);
- m_localName=stripScope(name);
- }
- else
- {
- m_localName=name;
- }
- //printf("m_localName=%s\n",m_localName.data());
- m_brief=b;
- m_doc=d;
- m_sectionDict=0,
- m_startBodyLine=m_endBodyLine=-1,
- m_bodyDef=0;
- m_sourceRefByDict=0;
- m_sourceRefsDict=0;
- m_todoId=0;
- m_testId=0;
- m_bugId=0;
- m_deprecatedId=0;
- m_outerScope=Doxygen::globalScope;
- m_partOfGroups=0;
- m_xrefListItems=0;
- m_briefLine=1;
- m_briefFile=(QCString)"<"+name+">";
- m_docLine=1;
- m_docFile=(QCString)"<"+name+">";
- m_isSymbol = isSymbol;
- m_hidden = FALSE;
- if (m_isSymbol) addToMap(name,this);
-}
-
-Definition::~Definition()
-{
- if (m_isSymbol) removeFromMap(this);
- delete m_sectionDict;
- delete m_sourceRefByDict;
- delete m_sourceRefsDict;
- delete m_partOfGroups;
- delete m_xrefListItems;
-}
-
-void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
-{
- if (!anchorList) return;
- //printf("%s: addSectionsToDefinition(%d)\n",name().data(),anchorList->count());
- SectionInfo *si=anchorList->first();
- while (si)
- {
- //printf("Add section `%s' to definition `%s'\n",
- // si->label.data(),name().data());
- SectionInfo *gsi=Doxygen::sectionDict.find(si->label);
- if (gsi==0)
- {
- gsi = new SectionInfo(*si);
- Doxygen::sectionDict.insert(si->label,gsi);
- }
- if (m_sectionDict==0)
- {
- m_sectionDict = new SectionDict(17);
- }
- if (m_sectionDict->find(gsi->label)==0)
- {
- m_sectionDict->insert(gsi->label,gsi);
- gsi->definition = this;
- }
- si=anchorList->next();
- }
-}
-
-void Definition::writeDocAnchorsToTagFile()
-{
- if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_sectionDict)
- {
- //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count());
- QDictIterator<SectionInfo> sdi(*m_sectionDict);
- SectionInfo *si;
- for (;(si=sdi.current());++sdi)
- {
- if (!si->generated)
- {
- //printf("write an entry!\n");
- if (definitionType()==TypeMember) Doxygen::tagFile << " ";
- Doxygen::tagFile << " <docanchor file=\""
- << si->fileName << "\">" << si->label
- << "</docanchor>" << endl;
- }
- }
- }
-}
-
-void Definition::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
-{
- if (d==0) return;
- //printf("Definition::setDocumentation(%s,%s,%d,%d)\n",d,docFile,docLine,stripWhiteSpace);
- QCString doc = d;
- if (stripWhiteSpace)
- {
-#if 0
- // strip leading empty lines in front of the text, but not the
- // leading spaces in front of the first line, so list items are
- // parsed with the correct indent
- const char *p=d;
- char c;
- int s=0,so=0;
- while ((c=*p) && (c==' ' || c=='\r' || c=='\n'))
- {
- if (c=='\n') so=s;
- p++;
- s++;
- }
- if (c=='\0') return;
- doc=d+so;
- // zero any trailing whitespace
- int e=doc.length()-1;
- while (e>=0 && (c=doc.at(e)) && (c==' ' || c=='\r' || c=='\n'))
- {
- doc.at(e)='\0';
- e--;
- }
-#endif
- doc = stripLeadingAndTrailingEmptyLines(doc);
- }
- else // don't strip whitespace
- {
- doc=d;
- }
- //printf("setting docs for %s: `%s'\n",name().data(),m_doc.data());
- m_doc=doc;
- m_docFile = docFile;
- m_docLine = docLine;
-}
-
-#define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase)
-
-void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine)
-{
- if (b==0) return;
- static QCString outputLanguage = Config_getEnum("OUTPUT_LANGUAGE");
- static bool needsDot = outputLanguage!="Japanese" &&
- outputLanguage!="Chinese" &&
- outputLanguage!="Korean";
-
- //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
- m_brief=QCString(b).stripWhiteSpace();
- int bl=m_brief.length();
- if (bl>0 && needsDot) // add punctuation if needed
- {
- switch(m_brief.at(bl-1))
- {
- case '.': case '!': case '?': break;
- default:
- if (uni_isupper(m_brief.at(0))) m_brief+='.';
- break;
- }
- }
- m_briefFile = briefFile;
- m_briefLine = briefLine;
-}
-
-/*! Reads a fragment of code from file \a fileName starting at
- * line \a startLine and ending at line \a endLine (inclusive). The fragment is
- * stored in \a result. If FALSE is returned the code fragment could not be
- * found.
- *
- * The file is scanned for a opening bracket ('{') from \a startLine onward.
- * The line actually containing the bracket is returned via startLine.
- * The file is scanned for a closing bracket ('}') from \a endLine backward.
- * The line actually containing the bracket is returned via endLine.
- */
-static bool readCodeFragment(const char *fileName,
- int &startLine,int &endLine,QCString &result)
-{
- //printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine);
- if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
- QCString cmd=getFileFilter(fileName)+" \""+fileName+"\"";
- FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r");
- bool found=FALSE;
- if (f)
- {
- int c=0;
- int col=0;
- int lineNr=1;
- // skip until the startLine has reached
- while (lineNr<startLine && !feof(f))
- {
- while ((c=fgetc(f))!='\n' && c!=EOF) /* skip */;
- lineNr++;
- }
- if (!feof(f))
- {
- // skip until the opening bracket or lonely : is found
- char cn=0;
- while (lineNr<=endLine && !feof(f) && !found)
- {
- while ((c=fgetc(f))!='{' && c!=':' && c!=EOF)
- {
- //printf("parsing char `%c'\n",c);
- if (c=='\n')
- {
- lineNr++,col=0;
- }
- else if (c=='\t')
- {
- col+=Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
- }
- else
- {
- col++;
- }
- }
- if (c==':')
- {
- cn=fgetc(f);
- if (cn!=':') found=TRUE;
- }
- else if (c=='{')
- {
- found=TRUE;
- }
- }
- //printf(" -> readCodeFragment(%s,%d,%d) lineNr=%d\n",fileName,startLine,endLine,lineNr);
- if (found)
- {
- // For code with more than one line,
- // fill the line with spaces until we are at the right column
- // so that the opening brace lines up with the closing brace
- if (endLine!=startLine)
- {
- QCString spaces;
- spaces.fill(' ',col);
- result+=spaces;
- }
- // copy until end of line
- result+=c;
- if (c==':') result+=cn;
- startLine=lineNr;
- const int maxLineLength=4096;
- char lineStr[maxLineLength];
- do
- {
- //printf("reading line %d in range %d-%d\n",lineNr,startLine,endLine);
- int size_read;
- do
- {
- // read up to maxLineLength-1 bytes, the last byte being zero
- char *p = fgets(lineStr, maxLineLength,f);
- //printf(" read %s",p);
- if (p)
- {
- size_read=qstrlen(p);
- }
- else
- {
- size_read=-1;
- }
- result+=lineStr;
- } while (size_read == (maxLineLength-1));
-
- lineNr++;
- } while (lineNr<=endLine && !feof(f));
-
- // strip stuff after closing bracket
- int newLineIndex = result.findRev('\n');
- int braceIndex = result.findRev('}');
- if (braceIndex > newLineIndex)
- {
- result.truncate(braceIndex+1);
- }
- endLine=lineNr-1;
- }
- }
- if (Config_getBool("FILTER_SOURCE_FILES")) pclose(f); else fclose(f);
- }
- return found;
-}
-
-/*! Write a reference to the source code defining this definition */
-void Definition::writeSourceDef(OutputList &ol,const char *)
-{
- ol.pushGeneratorState();
- //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
- if (Config_getBool("SOURCE_BROWSER") && m_startBodyLine!=-1 && m_bodyDef)
- {
- QCString refText = theTranslator->trDefinedAtLineInSourceFile();
- int lineMarkerPos = refText.find("@0");
- int fileMarkerPos = refText.find("@1");
- if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
- {
- QCString lineStr,anchorStr;
- lineStr.sprintf("%d",m_startBodyLine);
- anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_startBodyLine);
- ol.newParagraph();
- if (lineMarkerPos<fileMarkerPos) // line marker before file marker
- {
- // write text left from linePos marker
- ol.parseText(refText.left(lineMarkerPos));
- ol.disableAllBut(OutputGenerator::Html);
- // write line link (HTML only)
- ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
- anchorStr,lineStr);
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- // write normal text (Latex/Man only)
- ol.docify(lineStr);
- ol.enableAll();
-
- // write text between markers
- ol.parseText(refText.mid(lineMarkerPos+2,
- fileMarkerPos-lineMarkerPos-2));
-
- ol.disableAllBut(OutputGenerator::Html);
- // write file link (HTML only)
- ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
- 0,m_bodyDef->name());
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- // write normal text (Latex/Man only)
- ol.docify(m_bodyDef->name());
- ol.enableAll();
-
- // write text right from file marker
- ol.parseText(refText.right(
- refText.length()-fileMarkerPos-2));
- }
- else // file marker before line marker
- {
- // write text left from file marker
- ol.parseText(refText.left(fileMarkerPos));
- ol.disableAllBut(OutputGenerator::Html);
- // write file link (HTML only)
- ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
- 0,m_bodyDef->name());
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- // write normal text (Latex/Man only)
- ol.docify(m_bodyDef->name());
- ol.enableAll();
-
- // write text between markers
- ol.parseText(refText.mid(fileMarkerPos+2,
- lineMarkerPos-fileMarkerPos-2));
-
- ol.disableAllBut(OutputGenerator::Html);
- // write line link (HTML only)
- ol.writeObjectLink(0,m_bodyDef->getSourceFileBase(),
- anchorStr,lineStr);
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- // write normal text (Latex/Man only)
- ol.docify(lineStr);
- ol.enableAll();
-
- // write text right from linePos marker
- ol.parseText(refText.right(
- refText.length()-lineMarkerPos-2));
- }
- }
- else
- {
- err("Error: translation error: invalid markers in trDefinedInSourceFile()\n");
- }
- }
- ol.popGeneratorState();
-}
-
-/*! Write code of this definition into the documentation */
-void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
-{
- ol.pushGeneratorState();
- //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(),
- // m_startBodyLine,m_endBodyLine,m_bodyDef);
- if (Config_getBool("INLINE_SOURCES") && m_startBodyLine!=-1 &&
- m_endBodyLine>=m_startBodyLine && m_bodyDef)
- {
- QCString codeFragment;
- int actualStart=m_startBodyLine,actualEnd=m_endBodyLine;
- if (readCodeFragment(m_bodyDef->absFilePath(),
- actualStart,actualEnd,codeFragment)
- )
- {
- ParserInterface *pIntf = Doxygen::parserManager->getParser(m_defFileExt);
- pIntf->resetCodeParserState();
- //printf("Read:\n`%s'\n\n",codeFragment.data());
- MemberDef *thisMd = 0;
- if (definitionType()==TypeMember) thisMd = (MemberDef *)this;
- ol.startCodeFragment();
- pIntf->parseCode(ol, // codeOutIntf
- scopeName, // scope
- codeFragment, // input
- FALSE, // isExample
- 0, // exampleName
- m_bodyDef, // fileDef
- actualStart, // startLine
- actualEnd, // endLine
- TRUE, // inlineFragment
- thisMd // memberDef
- );
- ol.endCodeFragment();
- ol.newParagraph();
- }
- }
- ol.popGeneratorState();
-}
-
-/*! Write a reference to the source code fragments in which this
- * definition is used.
- */
-void Definition::writeSourceRefList(OutputList &ol,const char *scopeName,
- const QCString &text,MemberSDict *members,bool /*funcOnly*/)
-{
- ol.pushGeneratorState();
- if (Config_getBool("SOURCE_BROWSER") && members)
- {
- ol.newParagraph();
- ol.parseText(text);
- ol.docify(" ");
-
- QCString ldefLine=theTranslator->trWriteList(members->count());
-
- QRegExp marker("@[0-9]+");
- int index=0,newIndex,matchLen;
- // now replace all markers in inheritLine with links to the classes
- while ((newIndex=marker.match(ldefLine,index,&matchLen))!=-1)
- {
- bool ok;
- ol.parseText(ldefLine.mid(index,newIndex-index));
- uint entryIndex = ldefLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
- MemberDef *md=members->at(entryIndex);
- if (ok && md)
- {
- QCString scope=md->getScopeString();
- QCString name=md->name();
- //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),scope.data(),scopeName);
- if (!scope.isEmpty() && scope!=scopeName)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
- {
- name.prepend(scope+".");
- }
- else
- {
- name.prepend(scope+"::");
- }
- }
- if (!md->isObjCMethod() &&
- (md->isFunction() || md->isSlot() ||
- md->isPrototype() || md->isSignal()
- )
- ) name+="()";
- //Definition *d = md->getOutputFileBase();
- //if (d==Doxygen::globalScope) d=md->getBodyDef();
- if (md->getStartBodyLine()!=-1 && md->getBodyDef())
- {
- //printf("md->getBodyDef()=%p global=%p\n",md->getBodyDef(),Doxygen::globalScope);
- // for HTML write a real link
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- QCString lineStr,anchorStr;
- anchorStr.sprintf("l%05d",md->getStartBodyLine());
- //printf("Write object link to %s\n",md->getBodyDef()->getSourceFileBase().data());
- ol.writeObjectLink(0,md->getBodyDef()->getSourceFileBase(),anchorStr,name);
- ol.popGeneratorState();
-
- // for the other output formats just mention the name
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- ol.docify(name);
- ol.popGeneratorState();
- }
- else if (md->isLinkable() /*&& d && d->isLinkable()*/)
- {
- // for HTML write a real link
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeObjectLink(md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),name);
- ol.popGeneratorState();
-
- // for the other output formats just mention the name
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- ol.docify(name);
- ol.popGeneratorState();
- }
- else
- {
- ol.docify(name);
- }
- }
- index=newIndex+matchLen;
- }
- ol.parseText(ldefLine.right(ldefLine.length()-index));
- ol.writeString(".");
- }
- ol.popGeneratorState();
-}
-
-void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
-{
- if (Config_getBool("REFERENCED_BY_RELATION"))
- {
- writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_sourceRefByDict,FALSE);
- }
-}
-
-void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
-{
- if (Config_getBool("REFERENCES_RELATION"))
- {
- writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_sourceRefsDict,TRUE);
- }
-}
-
-bool Definition::hasDocumentation() const
-{
- static bool extractAll = Config_getBool("EXTRACT_ALL");
- static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
- bool hasDocs =
- !m_doc.isEmpty() || // has detailed docs
- !m_brief.isEmpty() || // has brief description
- extractAll || // extract everything
- (sourceBrowser && m_startBodyLine!=-1 && m_bodyDef); // link to definition
- return hasDocs;
-}
-
-void Definition::addSourceReferencedBy(MemberDef *md)
-{
- if (md)
- {
- QCString name = md->name();
- QCString scope = md->getScopeString();
-
- if (!scope.isEmpty())
- {
- name.prepend(scope+"::");
- }
-
- if (m_sourceRefByDict==0)
- {
- m_sourceRefByDict = new MemberSDict;
- }
- if (m_sourceRefByDict->find(name)==0)
- {
- m_sourceRefByDict->inSort(name,md);
- }
- }
-}
-
-void Definition::addSourceReferences(MemberDef *md)
-{
- if (md)
- {
- QCString name = md->name();
- QCString scope = md->getScopeString();
-
- if (!scope.isEmpty())
- {
- name.prepend(scope+"::");
- }
-
- if (m_sourceRefsDict==0)
- {
- m_sourceRefsDict = new MemberSDict;
- }
- if (m_sourceRefsDict->find(name)==0)
- {
- //printf("Adding reference %s->%s\n",md->name().data(),name.data());
- m_sourceRefsDict->inSort(name,md);
- }
- }
-}
-
-Definition *Definition::findInnerCompound(const char *)
-{
- return 0;
-}
-
-void Definition::addInnerCompound(Definition *)
-{
- err("Error: Definition::addInnerCompound() called\n");
-}
-
-QCString Definition::qualifiedName()
-{
- if (!m_qualifiedName.isEmpty()) return m_qualifiedName;
-
- //printf("start Definition::qualifiedName() localName=%s\n",m_localName.data());
- if (m_outerScope==0)
- {
- if (m_localName=="<globalScope>") return "";
- else return m_localName;
- }
-
- if (m_outerScope->name()=="<globalScope>")
- {
- m_qualifiedName = m_localName.copy();
- }
- else
- {
- m_qualifiedName = m_outerScope->qualifiedName()+"::"+m_localName;
- }
- //printf("end Definition::qualifiedName()=%s\n",qualifiedName.data());
- return m_qualifiedName;
-};
-
-QCString Definition::localName() const
-{
- return m_localName;
-}
-
-void Definition::setBodySegment(int bls,int ble)
-{
- //printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
- m_startBodyLine=bls;
- m_endBodyLine=ble;
-}
-
-void Definition::makePartOfGroup(GroupDef *gd)
-{
- if (m_partOfGroups==0) m_partOfGroups = new GroupList;
- m_partOfGroups->append(gd);
-}
-
-void Definition::setRefItems(const QList<ListItemInfo> *sli)
-{
- if (sli)
- {
- // deep copy the list
- if (m_xrefListItems==0)
- {
- m_xrefListItems=new QList<ListItemInfo>;
- m_xrefListItems->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*sli);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- m_xrefListItems->append(new ListItemInfo(*lii));
- }
- }
-}
-
-void Definition::mergeRefItems(Definition *d)
-{
- if (d->xrefListItems())
- {
- // deep copy the list
- if (m_xrefListItems==0)
- {
- m_xrefListItems=new QList<ListItemInfo>;
- m_xrefListItems->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*d->xrefListItems());
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- if (getXRefListId(lii->type)==-1)
- {
- m_xrefListItems->append(new ListItemInfo(*lii));
- }
- }
- }
-}
-
-int Definition::getXRefListId(const char *listName) const
-{
- if (m_xrefListItems)
- {
- QListIterator<ListItemInfo> slii(*m_xrefListItems);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- if (strcmp(lii->type,listName)==0)
- {
- return lii->itemId;
- }
- }
- }
- return -1;
-}
-
-const QList<ListItemInfo> *Definition::xrefListItems() const
-{
- return m_xrefListItems;
-}
-
-
-QCString Definition::convertNameToFile(const char *name,bool allowDots) const
-{
- if (!m_ref.isEmpty())
- {
- return name;
- }
- else
- {
- return ::convertNameToFile(name,allowDots);
- }
-}
-
-void Definition::writePathFragment(OutputList &ol) const
-{
- if (m_outerScope && m_outerScope!=Doxygen::globalScope)
- {
- m_outerScope->writePathFragment(ol);
- if (m_outerScope->definitionType()==Definition::TypeClass ||
- m_outerScope->definitionType()==Definition::TypeNamespace)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
- {
- ol.writeString(".");
- }
- else
- {
- ol.writeString("::");
- }
- }
- else
- {
- ol.writeString("&nbsp;");
- ol.writeString("&raquo");
- ol.writeString("&nbsp;");
- }
- }
- if (isLinkable())
- {
- if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
- {
- ol.writeObjectLink(getReference(),getOutputFileBase(),0,((const GroupDef*)this)->groupTitle());
- }
- else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty())
- {
- ol.writeObjectLink(getReference(),getOutputFileBase(),0,((const PageDef*)this)->title());
- }
- else
- {
- ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_localName);
- }
- }
- else
- {
- ol.startBold();
- ol.docify(m_localName);
- ol.endBold();
- }
-}
-
-void Definition::writeNavigationPath(OutputList &ol) const
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- ol.writeString("<div class=\"nav\">\n");
- writePathFragment(ol);
- ol.writeString("</div>\n");
-
- ol.popGeneratorState();
-}
-