Loading INSTALL +2 −2 Original line number Original line Diff line number Diff line DOXYGEN Version 1.4.7-20060809 DOXYGEN Version 1.4.7-20060810 Please read the installation section of the manual Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions. -------- -------- Dimitri van Heesch (09 August 2006) Dimitri van Heesch (10 August 2006) README +2 −2 Original line number Original line Diff line number Diff line DOXYGEN Version 1.4.7_20060809 DOXYGEN Version 1.4.7_20060810 Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions. Loading @@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. Enjoy, Enjoy, Dimitri van Heesch (dimitri@stack.nl) (09 August 2006) Dimitri van Heesch (dimitri@stack.nl) (10 August 2006) configure +1 −1 Original line number Original line Diff line number Diff line Loading @@ -20,7 +20,7 @@ doxygen_version_minor=4 doxygen_version_revision=7 doxygen_version_revision=7 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. doxygen_version_mmn=20060809 doxygen_version_mmn=20060810 bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"` Loading src/definition.cpp +331 −148 Original line number Original line Diff line number Diff line Loading @@ -39,6 +39,94 @@ #define pclose _pclose #define pclose _pclose #endif #endif class DefinitionImpl { public: void init(const char *df,int dl, const char *n,const char *b, const char *d,bool isSym) { defFileName = df; int lastDot = defFileName.findRev('.'); if (lastDot!=-1) { defFileExt = defFileName.mid(lastDot); } defLine = dl; name=n; if (name!="<globalScope>") { //extractNamespaceName(m_name,m_localName,ns); localName=stripScope(n); } else { localName=n; } //printf("m_localName=%s\n",m_localName.data()); if (b) { brief = new DocInfo; brief->doc = b; } else { brief = 0; } if (d) { details = new DocInfo; details->doc = d; } else { details = 0; } body = 0; sourceRefByDict=0; sourceRefsDict=0; sectionDict=0, outerScope=Doxygen::globalScope; partOfGroups=0; xrefListItems=0; isSymbol = isSym; hidden = FALSE; } SectionDict *sectionDict; // dictionary of all sections MemberSDict *sourceRefByDict; MemberSDict *sourceRefsDict; DocInfo *details; DocInfo *brief; BodyInfo *body; QCString name; // name of the definition QCString localName; // local (unqualified) name of the definition // in the future m_name should become m_localName QCString symbolName; QCString qualifiedName; QCString ref; // reference to external documentation QList<ListItemInfo> *xrefListItems; bool isSymbol; bool hidden; Definition *outerScope; GroupList *partOfGroups; // where the item was found QCString defFileName; int defLine; QCString defFileExt; }; //----------------------------------------------------------------------------------------- static void addToMap(const char *name,Definition *d) static void addToMap(const char *name,Definition *d) { { QCString symbolName = name; QCString symbolName = name; Loading Loading @@ -121,69 +209,23 @@ Definition::Definition(const char *df,int dl, const char *name,const char *b, const char *name,const char *b, const char *d,bool isSymbol) const char *d,bool isSymbol) { { //QCString ns; m_impl = new DefinitionImpl; //printf("Definition(%s) %p\n",name,this); m_impl->init(df,dl,name,b,d,isSymbol); m_defFileName = df; if (isSymbol) addToMap(name,this); 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()); if (b) { m_brief = new DocInfo; m_brief->doc = b; } else { m_brief = 0; } if (d) { m_details = new DocInfo; m_details->doc = d; } else { m_details = 0; } m_body = 0; m_sourceRefByDict=0; m_sourceRefsDict=0; m_sectionDict=0, m_outerScope=Doxygen::globalScope; m_partOfGroups=0; m_xrefListItems=0; m_isSymbol = isSymbol; m_hidden = FALSE; if (m_isSymbol) addToMap(name,this); } } Definition::~Definition() Definition::~Definition() { { if (m_isSymbol) removeFromMap(this); if (m_impl->isSymbol) removeFromMap(this); delete m_sectionDict; delete m_impl->sectionDict; delete m_sourceRefByDict; delete m_impl->sourceRefByDict; delete m_sourceRefsDict; delete m_impl->sourceRefsDict; delete m_partOfGroups; delete m_impl->partOfGroups; delete m_xrefListItems; delete m_impl->xrefListItems; delete m_brief; delete m_impl->brief; delete m_details; delete m_impl->details; delete m_body; delete m_impl->body; delete m_impl; } } void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) Loading @@ -201,13 +243,13 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) gsi = new SectionInfo(*si); gsi = new SectionInfo(*si); Doxygen::sectionDict.insert(si->label,gsi); Doxygen::sectionDict.insert(si->label,gsi); } } if (m_sectionDict==0) if (m_impl->sectionDict==0) { { m_sectionDict = new SectionDict(17); m_impl->sectionDict = new SectionDict(17); } } if (m_sectionDict->find(gsi->label)==0) if (m_impl->sectionDict->find(gsi->label)==0) { { m_sectionDict->insert(gsi->label,gsi); m_impl->sectionDict->insert(gsi->label,gsi); gsi->definition = this; gsi->definition = this; } } si=anchorList->next(); si=anchorList->next(); Loading @@ -216,10 +258,10 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) void Definition::writeDocAnchorsToTagFile() void Definition::writeDocAnchorsToTagFile() { { if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_sectionDict) if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict) { { //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count()); //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count()); QDictIterator<SectionInfo> sdi(*m_sectionDict); QDictIterator<SectionInfo> sdi(*m_impl->sectionDict); SectionInfo *si; SectionInfo *si; for (;(si=sdi.current());++sdi) for (;(si=sdi.current());++sdi) { { Loading Loading @@ -272,13 +314,13 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, doc=d; doc=d; } } //printf("setting docs for %s: `%s'\n",name().data(),m_doc.data()); //printf("setting docs for %s: `%s'\n",name().data(),m_doc.data()); if (m_details==0) if (m_impl->details==0) { { m_details = new DocInfo; m_impl->details = new DocInfo; } } m_details->doc = doc; m_impl->details->doc = doc; m_details->file = docFile; m_impl->details->file = docFile; m_details->line = docLine; m_impl->details->line = docLine; } } #define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase) #define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase) Loading @@ -292,24 +334,24 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri outputLanguage!="Korean"; outputLanguage!="Korean"; //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine); //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine); if (m_brief==0) if (m_impl->brief==0) { { m_brief = new DocInfo; m_impl->brief = new DocInfo; } } m_brief->doc=QCString(b).stripWhiteSpace(); m_impl->brief->doc=QCString(b).stripWhiteSpace(); int bl=m_brief->doc.length(); int bl=m_impl->brief->doc.length(); if (bl>0 && needsDot) // add punctuation if needed if (bl>0 && needsDot) // add punctuation if needed { { switch(m_brief->doc.at(bl-1)) switch(m_impl->brief->doc.at(bl-1)) { { case '.': case '!': case '?': break; case '.': case '!': case '?': break; default: default: if (uni_isupper(m_brief->doc.at(0))) m_brief->doc+='.'; if (uni_isupper(m_impl->brief->doc.at(0))) m_impl->brief->doc+='.'; break; break; } } } } m_brief->file = briefFile; m_impl->brief->file = briefFile; m_brief->line = briefLine; m_impl->brief->line = briefLine; } } /*! Reads a fragment of code from file \a fileName starting at /*! Reads a fragment of code from file \a fileName starting at Loading Loading @@ -435,7 +477,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.pushGeneratorState(); ol.pushGeneratorState(); //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef); //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef); if (Config_getBool("SOURCE_BROWSER") && if (Config_getBool("SOURCE_BROWSER") && m_body && m_body->startLine!=-1 && m_body->fileDef) m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->fileDef) { { QCString refText = theTranslator->trDefinedAtLineInSourceFile(); QCString refText = theTranslator->trDefinedAtLineInSourceFile(); int lineMarkerPos = refText.find("@0"); int lineMarkerPos = refText.find("@0"); Loading @@ -443,8 +485,8 @@ void Definition::writeSourceDef(OutputList &ol,const char *) if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this. if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this. { { QCString lineStr,anchorStr; QCString lineStr,anchorStr; lineStr.sprintf("%d",m_body->startLine); lineStr.sprintf("%d",m_impl->body->startLine); anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_body->startLine); anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_impl->body->startLine); ol.newParagraph(); ol.newParagraph(); if (lineMarkerPos<fileMarkerPos) // line marker before file marker if (lineMarkerPos<fileMarkerPos) // line marker before file marker { { Loading @@ -452,7 +494,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.parseText(refText.left(lineMarkerPos)); ol.parseText(refText.left(lineMarkerPos)); ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html); // write line link (HTML only) // write line link (HTML only) ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), anchorStr,lineStr); anchorStr,lineStr); ol.enableAll(); ol.enableAll(); ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html); Loading @@ -466,12 +508,12 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html); // write file link (HTML only) // write file link (HTML only) ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), 0,m_body->fileDef->name()); 0,m_impl->body->fileDef->name()); ol.enableAll(); ol.enableAll(); ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html); // write normal text (Latex/Man only) // write normal text (Latex/Man only) ol.docify(m_body->fileDef->name()); ol.docify(m_impl->body->fileDef->name()); ol.enableAll(); ol.enableAll(); // write text right from file marker // write text right from file marker Loading @@ -484,12 +526,12 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.parseText(refText.left(fileMarkerPos)); ol.parseText(refText.left(fileMarkerPos)); ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html); // write file link (HTML only) // write file link (HTML only) ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), 0,m_body->fileDef->name()); 0,m_impl->body->fileDef->name()); ol.enableAll(); ol.enableAll(); ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html); // write normal text (Latex/Man only) // write normal text (Latex/Man only) ol.docify(m_body->fileDef->name()); ol.docify(m_impl->body->fileDef->name()); ol.enableAll(); ol.enableAll(); // write text between markers // write text between markers Loading @@ -498,7 +540,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html); // write line link (HTML only) // write line link (HTML only) ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), anchorStr,lineStr); anchorStr,lineStr); ol.enableAll(); ol.enableAll(); ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html); Loading @@ -522,15 +564,15 @@ void Definition::writeSourceDef(OutputList &ol,const char *) void Definition::setBodySegment(int bls,int ble) void Definition::setBodySegment(int bls,int ble) { { //printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data()); //printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data()); if (m_body==0) m_body = new BodyInfo; if (m_impl->body==0) m_impl->body = new BodyInfo; m_body->startLine=bls; m_impl->body->startLine=bls; m_body->endLine=ble; m_impl->body->endLine=ble; } } void Definition::setBodyDef(FileDef *fd) void Definition::setBodyDef(FileDef *fd) { { if (m_body==0) m_body = new BodyInfo; if (m_impl->body==0) m_impl->body = new BodyInfo; m_body->fileDef=fd; m_impl->body->fileDef=fd; } } /*! Write code of this definition into the documentation */ /*! Write code of this definition into the documentation */ Loading @@ -540,16 +582,16 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(), //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(), // m_startBodyLine,m_endBodyLine,m_bodyDef); // m_startBodyLine,m_endBodyLine,m_bodyDef); if (Config_getBool("INLINE_SOURCES") && if (Config_getBool("INLINE_SOURCES") && m_body && m_body->startLine!=-1 && m_impl->body && m_impl->body->startLine!=-1 && m_body->endLine>=m_body->startLine && m_body->fileDef) m_impl->body->endLine>=m_impl->body->startLine && m_impl->body->fileDef) { { QCString codeFragment; QCString codeFragment; int actualStart=m_body->startLine,actualEnd=m_body->endLine; int actualStart=m_impl->body->startLine,actualEnd=m_impl->body->endLine; if (readCodeFragment(m_body->fileDef->absFilePath(), if (readCodeFragment(m_impl->body->fileDef->absFilePath(), actualStart,actualEnd,codeFragment) actualStart,actualEnd,codeFragment) ) ) { { ParserInterface *pIntf = Doxygen::parserManager->getParser(m_defFileExt); ParserInterface *pIntf = Doxygen::parserManager->getParser(m_impl->defFileExt); pIntf->resetCodeParserState(); pIntf->resetCodeParserState(); //printf("Read:\n`%s'\n\n",codeFragment.data()); //printf("Read:\n`%s'\n\n",codeFragment.data()); MemberDef *thisMd = 0; MemberDef *thisMd = 0; Loading @@ -560,7 +602,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) codeFragment, // input codeFragment, // input FALSE, // isExample FALSE, // isExample 0, // exampleName 0, // exampleName m_body->fileDef, // fileDef m_impl->body->fileDef, // fileDef actualStart, // startLine actualStart, // startLine actualEnd, // endLine actualEnd, // endLine TRUE, // inlineFragment TRUE, // inlineFragment Loading Loading @@ -671,7 +713,7 @@ void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName) { { if (Config_getBool("REFERENCED_BY_RELATION")) if (Config_getBool("REFERENCED_BY_RELATION")) { { writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_sourceRefByDict,FALSE); writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_impl->sourceRefByDict,FALSE); } } } } Loading @@ -679,7 +721,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) { { if (Config_getBool("REFERENCES_RELATION")) if (Config_getBool("REFERENCES_RELATION")) { { writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_sourceRefsDict,TRUE); writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_impl->sourceRefsDict,TRUE); } } } } Loading @@ -688,19 +730,19 @@ bool Definition::hasDocumentation() const static bool extractAll = Config_getBool("EXTRACT_ALL"); static bool extractAll = Config_getBool("EXTRACT_ALL"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); bool hasDocs = bool hasDocs = (m_details && !m_details->doc.isEmpty()) || // has detailed docs (m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs (m_brief && !m_brief->doc.isEmpty()) || // has brief description (m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description extractAll || // extract everything extractAll || // extract everything (sourceBrowser && m_body && (sourceBrowser && m_impl->body && m_body->startLine!=-1 && m_body->fileDef); // link to definition m_impl->body->startLine!=-1 && m_impl->body->fileDef); // link to definition return hasDocs; return hasDocs; } } bool Definition::hasUserDocumentation() const bool Definition::hasUserDocumentation() const { { bool hasDocs = bool hasDocs = (m_details && !m_details->doc.isEmpty()) || (m_impl->details && !m_impl->details->doc.isEmpty()) || (m_brief && !m_brief->doc.isEmpty()); (m_impl->brief && !m_impl->brief->doc.isEmpty()); return hasDocs; return hasDocs; } } Loading @@ -716,13 +758,13 @@ void Definition::addSourceReferencedBy(MemberDef *md) name.prepend(scope+"::"); name.prepend(scope+"::"); } } if (m_sourceRefByDict==0) if (m_impl->sourceRefByDict==0) { { m_sourceRefByDict = new MemberSDict; m_impl->sourceRefByDict = new MemberSDict; } } if (m_sourceRefByDict->find(name)==0) if (m_impl->sourceRefByDict->find(name)==0) { { m_sourceRefByDict->inSort(name,md); m_impl->sourceRefByDict->inSort(name,md); } } } } } } Loading @@ -739,14 +781,14 @@ void Definition::addSourceReferences(MemberDef *md) name.prepend(scope+"::"); name.prepend(scope+"::"); } } if (m_sourceRefsDict==0) if (m_impl->sourceRefsDict==0) { { m_sourceRefsDict = new MemberSDict; m_impl->sourceRefsDict = new MemberSDict; } } if (m_sourceRefsDict->find(name)==0) if (m_impl->sourceRefsDict->find(name)==0) { { //printf("Adding reference %s->%s\n",md->name().data(),name.data()); //printf("Adding reference %s->%s\n",md->name().data(),name.data()); m_sourceRefsDict->inSort(name,md); m_impl->sourceRefsDict->inSort(name,md); } } } } } } Loading @@ -763,45 +805,45 @@ void Definition::addInnerCompound(Definition *) QCString Definition::qualifiedName() QCString Definition::qualifiedName() { { if (!m_qualifiedName.isEmpty()) return m_qualifiedName; if (!m_impl->qualifiedName.isEmpty()) return m_impl->qualifiedName; //printf("start Definition::qualifiedName() localName=%s\n",m_localName.data()); //printf("start Definition::qualifiedName() localName=%s\n",m_localName.data()); if (m_outerScope==0) if (m_impl->outerScope==0) { { if (m_localName=="<globalScope>") return ""; if (m_impl->localName=="<globalScope>") return ""; else return m_localName; else return m_impl->localName; } } if (m_outerScope->name()=="<globalScope>") if (m_impl->outerScope->name()=="<globalScope>") { { m_qualifiedName = m_localName.copy(); m_impl->qualifiedName = m_impl->localName.copy(); } } else else { { m_qualifiedName = m_outerScope->qualifiedName()+"::"+m_localName; m_impl->qualifiedName = m_impl->outerScope->qualifiedName()+"::"+m_impl->localName; } } //printf("end Definition::qualifiedName()=%s\n",m_qualifiedName.data()); //printf("end Definition::qualifiedName()=%s\n",m_qualifiedName.data()); return m_qualifiedName; return m_impl->qualifiedName; }; }; void Definition::setOuterScope(Definition *d) void Definition::setOuterScope(Definition *d) { { if (m_outerScope!=d) if (m_impl->outerScope!=d) { { m_qualifiedName.resize(0); // flush cached scope name m_impl->qualifiedName.resize(0); // flush cached scope name m_outerScope = d; m_impl->outerScope = d; } } } } QCString Definition::localName() const QCString Definition::localName() const { { return m_localName; return m_impl->localName; } } void Definition::makePartOfGroup(GroupDef *gd) void Definition::makePartOfGroup(GroupDef *gd) { { if (m_partOfGroups==0) m_partOfGroups = new GroupList; if (m_impl->partOfGroups==0) m_impl->partOfGroups = new GroupList; m_partOfGroups->append(gd); m_impl->partOfGroups->append(gd); } } void Definition::setRefItems(const QList<ListItemInfo> *sli) void Definition::setRefItems(const QList<ListItemInfo> *sli) Loading @@ -809,16 +851,16 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli) if (sli) if (sli) { { // deep copy the list // deep copy the list if (m_xrefListItems==0) if (m_impl->xrefListItems==0) { { m_xrefListItems=new QList<ListItemInfo>; m_impl->xrefListItems=new QList<ListItemInfo>; m_xrefListItems->setAutoDelete(TRUE); m_impl->xrefListItems->setAutoDelete(TRUE); } } QListIterator<ListItemInfo> slii(*sli); QListIterator<ListItemInfo> slii(*sli); ListItemInfo *lii; ListItemInfo *lii; for (slii.toFirst();(lii=slii.current());++slii) for (slii.toFirst();(lii=slii.current());++slii) { { m_xrefListItems->append(new ListItemInfo(*lii)); m_impl->xrefListItems->append(new ListItemInfo(*lii)); } } } } } } Loading @@ -828,10 +870,10 @@ void Definition::mergeRefItems(Definition *d) if (d->xrefListItems()) if (d->xrefListItems()) { { // deep copy the list // deep copy the list if (m_xrefListItems==0) if (m_impl->xrefListItems==0) { { m_xrefListItems=new QList<ListItemInfo>; m_impl->xrefListItems=new QList<ListItemInfo>; m_xrefListItems->setAutoDelete(TRUE); m_impl->xrefListItems->setAutoDelete(TRUE); } } QListIterator<ListItemInfo> slii(*d->xrefListItems()); QListIterator<ListItemInfo> slii(*d->xrefListItems()); ListItemInfo *lii; ListItemInfo *lii; Loading @@ -839,7 +881,7 @@ void Definition::mergeRefItems(Definition *d) { { if (getXRefListId(lii->type)==-1) if (getXRefListId(lii->type)==-1) { { m_xrefListItems->append(new ListItemInfo(*lii)); m_impl->xrefListItems->append(new ListItemInfo(*lii)); } } } } } } Loading @@ -847,9 +889,9 @@ void Definition::mergeRefItems(Definition *d) int Definition::getXRefListId(const char *listName) const int Definition::getXRefListId(const char *listName) const { { if (m_xrefListItems) if (m_impl->xrefListItems) { { QListIterator<ListItemInfo> slii(*m_xrefListItems); QListIterator<ListItemInfo> slii(*m_impl->xrefListItems); ListItemInfo *lii; ListItemInfo *lii; for (slii.toFirst();(lii=slii.current());++slii) for (slii.toFirst();(lii=slii.current());++slii) { { Loading @@ -864,13 +906,13 @@ int Definition::getXRefListId(const char *listName) const const QList<ListItemInfo> *Definition::xrefListItems() const const QList<ListItemInfo> *Definition::xrefListItems() const { { return m_xrefListItems; return m_impl->xrefListItems; } } QCString Definition::convertNameToFile(const char *name,bool allowDots) const QCString Definition::convertNameToFile(const char *name,bool allowDots) const { { if (!m_ref.isEmpty()) if (!m_impl->ref.isEmpty()) { { return name; return name; } } Loading @@ -882,11 +924,11 @@ QCString Definition::convertNameToFile(const char *name,bool allowDots) const void Definition::writePathFragment(OutputList &ol) const void Definition::writePathFragment(OutputList &ol) const { { if (m_outerScope && m_outerScope!=Doxygen::globalScope) if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope) { { m_outerScope->writePathFragment(ol); m_impl->outerScope->writePathFragment(ol); if (m_outerScope->definitionType()==Definition::TypeClass || if (m_impl->outerScope->definitionType()==Definition::TypeClass || m_outerScope->definitionType()==Definition::TypeNamespace) m_impl->outerScope->definitionType()==Definition::TypeNamespace) { { if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) { { Loading Loading @@ -916,13 +958,13 @@ void Definition::writePathFragment(OutputList &ol) const } } else else { { ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_localName); ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_impl->localName); } } } } else else { { ol.startBold(); ol.startBold(); ol.docify(m_localName); ol.docify(m_impl->localName); ol.endBold(); ol.endBold(); } } } } Loading @@ -939,3 +981,144 @@ void Definition::writeNavigationPath(OutputList &ol) const ol.popGeneratorState(); ol.popGeneratorState(); } } const QCString& Definition::name() const { return m_impl->name; } QCString Definition::symbolName() const { return m_impl->symbolName; } QCString Definition::documentation() const { return m_impl->details ? m_impl->details->doc : QCString(""); } int Definition::docLine() const { return m_impl->details ? m_impl->details->line : 1; } QCString Definition::docFile() const { return m_impl->details ? m_impl->details->file : QCString("<"+m_impl->name+">"); } QCString Definition::briefDescription() const { return m_impl->brief ? m_impl->brief->doc : QCString(""); } int Definition::briefLine() const { return m_impl->brief ? m_impl->brief->line : 1; } QCString Definition::briefFile() const { return m_impl->brief ? m_impl->brief->file : QCString("<"+m_impl->name+">"); } QCString Definition::getDefFileName() const { return m_impl->defFileName; } QCString Definition::getDefFileExtension() const { return m_impl->defFileExt; } int Definition::getDefLine() const { return m_impl->defLine; } bool Definition::isHidden() const { return m_impl->hidden; } bool Definition::isVisibleInProject() const { return m_impl->hidden || isLinkableInProject(); } bool Definition::isVisible() const { return m_impl->hidden || isLinkable(); } QCString Definition::getReference() const { return m_impl->ref; } bool Definition::isReference() const { return !m_impl->ref.isEmpty(); } int Definition::getStartBodyLine() const { return m_impl->body ? m_impl->body->startLine : -1; } int Definition::getEndBodyLine() const { return m_impl->body ? m_impl->body->endLine : -1; } FileDef *Definition::getBodyDef() { return m_impl->body ? m_impl->body->fileDef : 0; } GroupList *Definition::partOfGroups() const { return m_impl->partOfGroups; } Definition *Definition::getOuterScope() const { return m_impl->outerScope; } MemberSDict *Definition::getReferencesMembers() const { return m_impl->sourceRefsDict; } MemberSDict *Definition::getReferencedByMembers() const { return m_impl->sourceRefByDict; } void Definition::setName(const char *name) { m_impl->name=name; } void Definition::setReference(const char *r) { m_impl->ref=r; } void Definition::setSymbolName(const QCString &name) { m_impl->symbolName=name; } void Definition::setHidden(bool b) { m_impl->hidden = b; } void Definition::setLocalName(const QCString name) { m_impl->localName=name; } Loading
INSTALL +2 −2 Original line number Original line Diff line number Diff line DOXYGEN Version 1.4.7-20060809 DOXYGEN Version 1.4.7-20060810 Please read the installation section of the manual Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions. -------- -------- Dimitri van Heesch (09 August 2006) Dimitri van Heesch (10 August 2006)
README +2 −2 Original line number Original line Diff line number Diff line DOXYGEN Version 1.4.7_20060809 DOXYGEN Version 1.4.7_20060810 Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions. Loading @@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. Enjoy, Enjoy, Dimitri van Heesch (dimitri@stack.nl) (09 August 2006) Dimitri van Heesch (dimitri@stack.nl) (10 August 2006)
configure +1 −1 Original line number Original line Diff line number Diff line Loading @@ -20,7 +20,7 @@ doxygen_version_minor=4 doxygen_version_revision=7 doxygen_version_revision=7 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. doxygen_version_mmn=20060809 doxygen_version_mmn=20060810 bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"` Loading
src/definition.cpp +331 −148 Original line number Original line Diff line number Diff line Loading @@ -39,6 +39,94 @@ #define pclose _pclose #define pclose _pclose #endif #endif class DefinitionImpl { public: void init(const char *df,int dl, const char *n,const char *b, const char *d,bool isSym) { defFileName = df; int lastDot = defFileName.findRev('.'); if (lastDot!=-1) { defFileExt = defFileName.mid(lastDot); } defLine = dl; name=n; if (name!="<globalScope>") { //extractNamespaceName(m_name,m_localName,ns); localName=stripScope(n); } else { localName=n; } //printf("m_localName=%s\n",m_localName.data()); if (b) { brief = new DocInfo; brief->doc = b; } else { brief = 0; } if (d) { details = new DocInfo; details->doc = d; } else { details = 0; } body = 0; sourceRefByDict=0; sourceRefsDict=0; sectionDict=0, outerScope=Doxygen::globalScope; partOfGroups=0; xrefListItems=0; isSymbol = isSym; hidden = FALSE; } SectionDict *sectionDict; // dictionary of all sections MemberSDict *sourceRefByDict; MemberSDict *sourceRefsDict; DocInfo *details; DocInfo *brief; BodyInfo *body; QCString name; // name of the definition QCString localName; // local (unqualified) name of the definition // in the future m_name should become m_localName QCString symbolName; QCString qualifiedName; QCString ref; // reference to external documentation QList<ListItemInfo> *xrefListItems; bool isSymbol; bool hidden; Definition *outerScope; GroupList *partOfGroups; // where the item was found QCString defFileName; int defLine; QCString defFileExt; }; //----------------------------------------------------------------------------------------- static void addToMap(const char *name,Definition *d) static void addToMap(const char *name,Definition *d) { { QCString symbolName = name; QCString symbolName = name; Loading Loading @@ -121,69 +209,23 @@ Definition::Definition(const char *df,int dl, const char *name,const char *b, const char *name,const char *b, const char *d,bool isSymbol) const char *d,bool isSymbol) { { //QCString ns; m_impl = new DefinitionImpl; //printf("Definition(%s) %p\n",name,this); m_impl->init(df,dl,name,b,d,isSymbol); m_defFileName = df; if (isSymbol) addToMap(name,this); 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()); if (b) { m_brief = new DocInfo; m_brief->doc = b; } else { m_brief = 0; } if (d) { m_details = new DocInfo; m_details->doc = d; } else { m_details = 0; } m_body = 0; m_sourceRefByDict=0; m_sourceRefsDict=0; m_sectionDict=0, m_outerScope=Doxygen::globalScope; m_partOfGroups=0; m_xrefListItems=0; m_isSymbol = isSymbol; m_hidden = FALSE; if (m_isSymbol) addToMap(name,this); } } Definition::~Definition() Definition::~Definition() { { if (m_isSymbol) removeFromMap(this); if (m_impl->isSymbol) removeFromMap(this); delete m_sectionDict; delete m_impl->sectionDict; delete m_sourceRefByDict; delete m_impl->sourceRefByDict; delete m_sourceRefsDict; delete m_impl->sourceRefsDict; delete m_partOfGroups; delete m_impl->partOfGroups; delete m_xrefListItems; delete m_impl->xrefListItems; delete m_brief; delete m_impl->brief; delete m_details; delete m_impl->details; delete m_body; delete m_impl->body; delete m_impl; } } void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) Loading @@ -201,13 +243,13 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) gsi = new SectionInfo(*si); gsi = new SectionInfo(*si); Doxygen::sectionDict.insert(si->label,gsi); Doxygen::sectionDict.insert(si->label,gsi); } } if (m_sectionDict==0) if (m_impl->sectionDict==0) { { m_sectionDict = new SectionDict(17); m_impl->sectionDict = new SectionDict(17); } } if (m_sectionDict->find(gsi->label)==0) if (m_impl->sectionDict->find(gsi->label)==0) { { m_sectionDict->insert(gsi->label,gsi); m_impl->sectionDict->insert(gsi->label,gsi); gsi->definition = this; gsi->definition = this; } } si=anchorList->next(); si=anchorList->next(); Loading @@ -216,10 +258,10 @@ void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList) void Definition::writeDocAnchorsToTagFile() void Definition::writeDocAnchorsToTagFile() { { if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_sectionDict) if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict) { { //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count()); //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count()); QDictIterator<SectionInfo> sdi(*m_sectionDict); QDictIterator<SectionInfo> sdi(*m_impl->sectionDict); SectionInfo *si; SectionInfo *si; for (;(si=sdi.current());++sdi) for (;(si=sdi.current());++sdi) { { Loading Loading @@ -272,13 +314,13 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, doc=d; doc=d; } } //printf("setting docs for %s: `%s'\n",name().data(),m_doc.data()); //printf("setting docs for %s: `%s'\n",name().data(),m_doc.data()); if (m_details==0) if (m_impl->details==0) { { m_details = new DocInfo; m_impl->details = new DocInfo; } } m_details->doc = doc; m_impl->details->doc = doc; m_details->file = docFile; m_impl->details->file = docFile; m_details->line = docLine; m_impl->details->line = docLine; } } #define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase) #define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase) Loading @@ -292,24 +334,24 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri outputLanguage!="Korean"; outputLanguage!="Korean"; //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine); //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine); if (m_brief==0) if (m_impl->brief==0) { { m_brief = new DocInfo; m_impl->brief = new DocInfo; } } m_brief->doc=QCString(b).stripWhiteSpace(); m_impl->brief->doc=QCString(b).stripWhiteSpace(); int bl=m_brief->doc.length(); int bl=m_impl->brief->doc.length(); if (bl>0 && needsDot) // add punctuation if needed if (bl>0 && needsDot) // add punctuation if needed { { switch(m_brief->doc.at(bl-1)) switch(m_impl->brief->doc.at(bl-1)) { { case '.': case '!': case '?': break; case '.': case '!': case '?': break; default: default: if (uni_isupper(m_brief->doc.at(0))) m_brief->doc+='.'; if (uni_isupper(m_impl->brief->doc.at(0))) m_impl->brief->doc+='.'; break; break; } } } } m_brief->file = briefFile; m_impl->brief->file = briefFile; m_brief->line = briefLine; m_impl->brief->line = briefLine; } } /*! Reads a fragment of code from file \a fileName starting at /*! Reads a fragment of code from file \a fileName starting at Loading Loading @@ -435,7 +477,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.pushGeneratorState(); ol.pushGeneratorState(); //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef); //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef); if (Config_getBool("SOURCE_BROWSER") && if (Config_getBool("SOURCE_BROWSER") && m_body && m_body->startLine!=-1 && m_body->fileDef) m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->fileDef) { { QCString refText = theTranslator->trDefinedAtLineInSourceFile(); QCString refText = theTranslator->trDefinedAtLineInSourceFile(); int lineMarkerPos = refText.find("@0"); int lineMarkerPos = refText.find("@0"); Loading @@ -443,8 +485,8 @@ void Definition::writeSourceDef(OutputList &ol,const char *) if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this. if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this. { { QCString lineStr,anchorStr; QCString lineStr,anchorStr; lineStr.sprintf("%d",m_body->startLine); lineStr.sprintf("%d",m_impl->body->startLine); anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_body->startLine); anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_impl->body->startLine); ol.newParagraph(); ol.newParagraph(); if (lineMarkerPos<fileMarkerPos) // line marker before file marker if (lineMarkerPos<fileMarkerPos) // line marker before file marker { { Loading @@ -452,7 +494,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.parseText(refText.left(lineMarkerPos)); ol.parseText(refText.left(lineMarkerPos)); ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html); // write line link (HTML only) // write line link (HTML only) ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), anchorStr,lineStr); anchorStr,lineStr); ol.enableAll(); ol.enableAll(); ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html); Loading @@ -466,12 +508,12 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html); // write file link (HTML only) // write file link (HTML only) ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), 0,m_body->fileDef->name()); 0,m_impl->body->fileDef->name()); ol.enableAll(); ol.enableAll(); ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html); // write normal text (Latex/Man only) // write normal text (Latex/Man only) ol.docify(m_body->fileDef->name()); ol.docify(m_impl->body->fileDef->name()); ol.enableAll(); ol.enableAll(); // write text right from file marker // write text right from file marker Loading @@ -484,12 +526,12 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.parseText(refText.left(fileMarkerPos)); ol.parseText(refText.left(fileMarkerPos)); ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html); // write file link (HTML only) // write file link (HTML only) ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), 0,m_body->fileDef->name()); 0,m_impl->body->fileDef->name()); ol.enableAll(); ol.enableAll(); ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html); // write normal text (Latex/Man only) // write normal text (Latex/Man only) ol.docify(m_body->fileDef->name()); ol.docify(m_impl->body->fileDef->name()); ol.enableAll(); ol.enableAll(); // write text between markers // write text between markers Loading @@ -498,7 +540,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html); // write line link (HTML only) // write line link (HTML only) ol.writeObjectLink(0,m_body->fileDef->getSourceFileBase(), ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(), anchorStr,lineStr); anchorStr,lineStr); ol.enableAll(); ol.enableAll(); ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html); Loading @@ -522,15 +564,15 @@ void Definition::writeSourceDef(OutputList &ol,const char *) void Definition::setBodySegment(int bls,int ble) void Definition::setBodySegment(int bls,int ble) { { //printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data()); //printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data()); if (m_body==0) m_body = new BodyInfo; if (m_impl->body==0) m_impl->body = new BodyInfo; m_body->startLine=bls; m_impl->body->startLine=bls; m_body->endLine=ble; m_impl->body->endLine=ble; } } void Definition::setBodyDef(FileDef *fd) void Definition::setBodyDef(FileDef *fd) { { if (m_body==0) m_body = new BodyInfo; if (m_impl->body==0) m_impl->body = new BodyInfo; m_body->fileDef=fd; m_impl->body->fileDef=fd; } } /*! Write code of this definition into the documentation */ /*! Write code of this definition into the documentation */ Loading @@ -540,16 +582,16 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(), //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(), // m_startBodyLine,m_endBodyLine,m_bodyDef); // m_startBodyLine,m_endBodyLine,m_bodyDef); if (Config_getBool("INLINE_SOURCES") && if (Config_getBool("INLINE_SOURCES") && m_body && m_body->startLine!=-1 && m_impl->body && m_impl->body->startLine!=-1 && m_body->endLine>=m_body->startLine && m_body->fileDef) m_impl->body->endLine>=m_impl->body->startLine && m_impl->body->fileDef) { { QCString codeFragment; QCString codeFragment; int actualStart=m_body->startLine,actualEnd=m_body->endLine; int actualStart=m_impl->body->startLine,actualEnd=m_impl->body->endLine; if (readCodeFragment(m_body->fileDef->absFilePath(), if (readCodeFragment(m_impl->body->fileDef->absFilePath(), actualStart,actualEnd,codeFragment) actualStart,actualEnd,codeFragment) ) ) { { ParserInterface *pIntf = Doxygen::parserManager->getParser(m_defFileExt); ParserInterface *pIntf = Doxygen::parserManager->getParser(m_impl->defFileExt); pIntf->resetCodeParserState(); pIntf->resetCodeParserState(); //printf("Read:\n`%s'\n\n",codeFragment.data()); //printf("Read:\n`%s'\n\n",codeFragment.data()); MemberDef *thisMd = 0; MemberDef *thisMd = 0; Loading @@ -560,7 +602,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) codeFragment, // input codeFragment, // input FALSE, // isExample FALSE, // isExample 0, // exampleName 0, // exampleName m_body->fileDef, // fileDef m_impl->body->fileDef, // fileDef actualStart, // startLine actualStart, // startLine actualEnd, // endLine actualEnd, // endLine TRUE, // inlineFragment TRUE, // inlineFragment Loading Loading @@ -671,7 +713,7 @@ void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName) { { if (Config_getBool("REFERENCED_BY_RELATION")) if (Config_getBool("REFERENCED_BY_RELATION")) { { writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_sourceRefByDict,FALSE); writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_impl->sourceRefByDict,FALSE); } } } } Loading @@ -679,7 +721,7 @@ void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) { { if (Config_getBool("REFERENCES_RELATION")) if (Config_getBool("REFERENCES_RELATION")) { { writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_sourceRefsDict,TRUE); writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_impl->sourceRefsDict,TRUE); } } } } Loading @@ -688,19 +730,19 @@ bool Definition::hasDocumentation() const static bool extractAll = Config_getBool("EXTRACT_ALL"); static bool extractAll = Config_getBool("EXTRACT_ALL"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); bool hasDocs = bool hasDocs = (m_details && !m_details->doc.isEmpty()) || // has detailed docs (m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs (m_brief && !m_brief->doc.isEmpty()) || // has brief description (m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description extractAll || // extract everything extractAll || // extract everything (sourceBrowser && m_body && (sourceBrowser && m_impl->body && m_body->startLine!=-1 && m_body->fileDef); // link to definition m_impl->body->startLine!=-1 && m_impl->body->fileDef); // link to definition return hasDocs; return hasDocs; } } bool Definition::hasUserDocumentation() const bool Definition::hasUserDocumentation() const { { bool hasDocs = bool hasDocs = (m_details && !m_details->doc.isEmpty()) || (m_impl->details && !m_impl->details->doc.isEmpty()) || (m_brief && !m_brief->doc.isEmpty()); (m_impl->brief && !m_impl->brief->doc.isEmpty()); return hasDocs; return hasDocs; } } Loading @@ -716,13 +758,13 @@ void Definition::addSourceReferencedBy(MemberDef *md) name.prepend(scope+"::"); name.prepend(scope+"::"); } } if (m_sourceRefByDict==0) if (m_impl->sourceRefByDict==0) { { m_sourceRefByDict = new MemberSDict; m_impl->sourceRefByDict = new MemberSDict; } } if (m_sourceRefByDict->find(name)==0) if (m_impl->sourceRefByDict->find(name)==0) { { m_sourceRefByDict->inSort(name,md); m_impl->sourceRefByDict->inSort(name,md); } } } } } } Loading @@ -739,14 +781,14 @@ void Definition::addSourceReferences(MemberDef *md) name.prepend(scope+"::"); name.prepend(scope+"::"); } } if (m_sourceRefsDict==0) if (m_impl->sourceRefsDict==0) { { m_sourceRefsDict = new MemberSDict; m_impl->sourceRefsDict = new MemberSDict; } } if (m_sourceRefsDict->find(name)==0) if (m_impl->sourceRefsDict->find(name)==0) { { //printf("Adding reference %s->%s\n",md->name().data(),name.data()); //printf("Adding reference %s->%s\n",md->name().data(),name.data()); m_sourceRefsDict->inSort(name,md); m_impl->sourceRefsDict->inSort(name,md); } } } } } } Loading @@ -763,45 +805,45 @@ void Definition::addInnerCompound(Definition *) QCString Definition::qualifiedName() QCString Definition::qualifiedName() { { if (!m_qualifiedName.isEmpty()) return m_qualifiedName; if (!m_impl->qualifiedName.isEmpty()) return m_impl->qualifiedName; //printf("start Definition::qualifiedName() localName=%s\n",m_localName.data()); //printf("start Definition::qualifiedName() localName=%s\n",m_localName.data()); if (m_outerScope==0) if (m_impl->outerScope==0) { { if (m_localName=="<globalScope>") return ""; if (m_impl->localName=="<globalScope>") return ""; else return m_localName; else return m_impl->localName; } } if (m_outerScope->name()=="<globalScope>") if (m_impl->outerScope->name()=="<globalScope>") { { m_qualifiedName = m_localName.copy(); m_impl->qualifiedName = m_impl->localName.copy(); } } else else { { m_qualifiedName = m_outerScope->qualifiedName()+"::"+m_localName; m_impl->qualifiedName = m_impl->outerScope->qualifiedName()+"::"+m_impl->localName; } } //printf("end Definition::qualifiedName()=%s\n",m_qualifiedName.data()); //printf("end Definition::qualifiedName()=%s\n",m_qualifiedName.data()); return m_qualifiedName; return m_impl->qualifiedName; }; }; void Definition::setOuterScope(Definition *d) void Definition::setOuterScope(Definition *d) { { if (m_outerScope!=d) if (m_impl->outerScope!=d) { { m_qualifiedName.resize(0); // flush cached scope name m_impl->qualifiedName.resize(0); // flush cached scope name m_outerScope = d; m_impl->outerScope = d; } } } } QCString Definition::localName() const QCString Definition::localName() const { { return m_localName; return m_impl->localName; } } void Definition::makePartOfGroup(GroupDef *gd) void Definition::makePartOfGroup(GroupDef *gd) { { if (m_partOfGroups==0) m_partOfGroups = new GroupList; if (m_impl->partOfGroups==0) m_impl->partOfGroups = new GroupList; m_partOfGroups->append(gd); m_impl->partOfGroups->append(gd); } } void Definition::setRefItems(const QList<ListItemInfo> *sli) void Definition::setRefItems(const QList<ListItemInfo> *sli) Loading @@ -809,16 +851,16 @@ void Definition::setRefItems(const QList<ListItemInfo> *sli) if (sli) if (sli) { { // deep copy the list // deep copy the list if (m_xrefListItems==0) if (m_impl->xrefListItems==0) { { m_xrefListItems=new QList<ListItemInfo>; m_impl->xrefListItems=new QList<ListItemInfo>; m_xrefListItems->setAutoDelete(TRUE); m_impl->xrefListItems->setAutoDelete(TRUE); } } QListIterator<ListItemInfo> slii(*sli); QListIterator<ListItemInfo> slii(*sli); ListItemInfo *lii; ListItemInfo *lii; for (slii.toFirst();(lii=slii.current());++slii) for (slii.toFirst();(lii=slii.current());++slii) { { m_xrefListItems->append(new ListItemInfo(*lii)); m_impl->xrefListItems->append(new ListItemInfo(*lii)); } } } } } } Loading @@ -828,10 +870,10 @@ void Definition::mergeRefItems(Definition *d) if (d->xrefListItems()) if (d->xrefListItems()) { { // deep copy the list // deep copy the list if (m_xrefListItems==0) if (m_impl->xrefListItems==0) { { m_xrefListItems=new QList<ListItemInfo>; m_impl->xrefListItems=new QList<ListItemInfo>; m_xrefListItems->setAutoDelete(TRUE); m_impl->xrefListItems->setAutoDelete(TRUE); } } QListIterator<ListItemInfo> slii(*d->xrefListItems()); QListIterator<ListItemInfo> slii(*d->xrefListItems()); ListItemInfo *lii; ListItemInfo *lii; Loading @@ -839,7 +881,7 @@ void Definition::mergeRefItems(Definition *d) { { if (getXRefListId(lii->type)==-1) if (getXRefListId(lii->type)==-1) { { m_xrefListItems->append(new ListItemInfo(*lii)); m_impl->xrefListItems->append(new ListItemInfo(*lii)); } } } } } } Loading @@ -847,9 +889,9 @@ void Definition::mergeRefItems(Definition *d) int Definition::getXRefListId(const char *listName) const int Definition::getXRefListId(const char *listName) const { { if (m_xrefListItems) if (m_impl->xrefListItems) { { QListIterator<ListItemInfo> slii(*m_xrefListItems); QListIterator<ListItemInfo> slii(*m_impl->xrefListItems); ListItemInfo *lii; ListItemInfo *lii; for (slii.toFirst();(lii=slii.current());++slii) for (slii.toFirst();(lii=slii.current());++slii) { { Loading @@ -864,13 +906,13 @@ int Definition::getXRefListId(const char *listName) const const QList<ListItemInfo> *Definition::xrefListItems() const const QList<ListItemInfo> *Definition::xrefListItems() const { { return m_xrefListItems; return m_impl->xrefListItems; } } QCString Definition::convertNameToFile(const char *name,bool allowDots) const QCString Definition::convertNameToFile(const char *name,bool allowDots) const { { if (!m_ref.isEmpty()) if (!m_impl->ref.isEmpty()) { { return name; return name; } } Loading @@ -882,11 +924,11 @@ QCString Definition::convertNameToFile(const char *name,bool allowDots) const void Definition::writePathFragment(OutputList &ol) const void Definition::writePathFragment(OutputList &ol) const { { if (m_outerScope && m_outerScope!=Doxygen::globalScope) if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope) { { m_outerScope->writePathFragment(ol); m_impl->outerScope->writePathFragment(ol); if (m_outerScope->definitionType()==Definition::TypeClass || if (m_impl->outerScope->definitionType()==Definition::TypeClass || m_outerScope->definitionType()==Definition::TypeNamespace) m_impl->outerScope->definitionType()==Definition::TypeNamespace) { { if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) { { Loading Loading @@ -916,13 +958,13 @@ void Definition::writePathFragment(OutputList &ol) const } } else else { { ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_localName); ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_impl->localName); } } } } else else { { ol.startBold(); ol.startBold(); ol.docify(m_localName); ol.docify(m_impl->localName); ol.endBold(); ol.endBold(); } } } } Loading @@ -939,3 +981,144 @@ void Definition::writeNavigationPath(OutputList &ol) const ol.popGeneratorState(); ol.popGeneratorState(); } } const QCString& Definition::name() const { return m_impl->name; } QCString Definition::symbolName() const { return m_impl->symbolName; } QCString Definition::documentation() const { return m_impl->details ? m_impl->details->doc : QCString(""); } int Definition::docLine() const { return m_impl->details ? m_impl->details->line : 1; } QCString Definition::docFile() const { return m_impl->details ? m_impl->details->file : QCString("<"+m_impl->name+">"); } QCString Definition::briefDescription() const { return m_impl->brief ? m_impl->brief->doc : QCString(""); } int Definition::briefLine() const { return m_impl->brief ? m_impl->brief->line : 1; } QCString Definition::briefFile() const { return m_impl->brief ? m_impl->brief->file : QCString("<"+m_impl->name+">"); } QCString Definition::getDefFileName() const { return m_impl->defFileName; } QCString Definition::getDefFileExtension() const { return m_impl->defFileExt; } int Definition::getDefLine() const { return m_impl->defLine; } bool Definition::isHidden() const { return m_impl->hidden; } bool Definition::isVisibleInProject() const { return m_impl->hidden || isLinkableInProject(); } bool Definition::isVisible() const { return m_impl->hidden || isLinkable(); } QCString Definition::getReference() const { return m_impl->ref; } bool Definition::isReference() const { return !m_impl->ref.isEmpty(); } int Definition::getStartBodyLine() const { return m_impl->body ? m_impl->body->startLine : -1; } int Definition::getEndBodyLine() const { return m_impl->body ? m_impl->body->endLine : -1; } FileDef *Definition::getBodyDef() { return m_impl->body ? m_impl->body->fileDef : 0; } GroupList *Definition::partOfGroups() const { return m_impl->partOfGroups; } Definition *Definition::getOuterScope() const { return m_impl->outerScope; } MemberSDict *Definition::getReferencesMembers() const { return m_impl->sourceRefsDict; } MemberSDict *Definition::getReferencedByMembers() const { return m_impl->sourceRefByDict; } void Definition::setName(const char *name) { m_impl->name=name; } void Definition::setReference(const char *r) { m_impl->ref=r; } void Definition::setSymbolName(const QCString &name) { m_impl->symbolName=name; } void Definition::setHidden(bool b) { m_impl->hidden = b; } void Definition::setLocalName(const QCString name) { m_impl->localName=name; }