From b9ad9a03cf4febeb2aa10ddca22c1c9296c5223b Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Mon, 22 Sep 2014 20:23:28 +0200 Subject: Bug 736992 - Member functions omitted from tagfile --- src/classdef.cpp | 164 ++++++++++++++++++++++++++++++----------------- src/classdef.h | 3 +- src/definition.cpp | 14 ++-- src/definition.h | 3 +- src/dirdef.cpp | 69 +++++++++++++------- src/dirdef.h | 1 + src/doxygen.cpp | 130 ++++++++++++++++++++++++------------- src/doxygen.h | 1 - src/filedef.cpp | 134 ++++++++++++++++++++++++++++++-------- src/filedef.h | 2 + src/groupdef.cpp | 178 +++++++++++++++++++++++++++++++++++++++++---------- src/groupdef.h | 2 + src/memberdef.cpp | 157 +++++++++++++++++++++------------------------ src/memberdef.h | 7 +- src/membergroup.cpp | 12 +++- src/membergroup.h | 2 + src/memberlist.cpp | 44 +++++++++---- src/memberlist.h | 6 +- src/namespacedef.cpp | 102 ++++++++++++++++++++++------- src/namespacedef.h | 2 + src/pagedef.cpp | 48 +++++++------- src/pagedef.h | 2 + src/vhdldocgen.cpp | 86 ++++++++++++------------- src/vhdldocgen.h | 1 + 24 files changed, 775 insertions(+), 395 deletions(-) diff --git a/src/classdef.cpp b/src/classdef.cpp index 1e0a15f..d02dd5d 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -1243,24 +1243,6 @@ void ClassDef::writeInheritanceGraph(OutputList &ol) if (cd->isLinkable()) { - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " prot==Protected) - { - Doxygen::tagFile << " protection=\"protected\""; - } - else if (bcd->prot==Private) - { - Doxygen::tagFile << " protection=\"private\""; - } - if (bcd->virt==Virtual) - { - Doxygen::tagFile << " virtualness=\"virtual\""; - } - Doxygen::tagFile << ">" << convertToXML(cd->name()) - << "" << endl; - } ol.writeObjectLink(cd->getReference(), cd->getOutputFileBase(), cd->anchor(), @@ -1574,36 +1556,118 @@ void ClassDef::writeSummaryLinks(OutputList &ol) ol.popGeneratorState(); } -void ClassDef::writeTagFileMarker() +void ClassDef::writeTagFile(FTextStream &tagFile) { - // write section to the tag file - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + if (!isLinkableInProject()) return; + tagFile << " " << endl; + tagFile << " " << convertToXML(name()) << "" << endl; + tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; + if (!anchor().isEmpty()) { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; - if (!anchor().isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(anchor()) << "" << endl; - } - QCString idStr = id(); - if (!idStr.isEmpty()) + tagFile << " " << convertToXML(anchor()) << "" << endl; + } + QCString idStr = id(); + if (!idStr.isEmpty()) + { + tagFile << " " << convertToXML(idStr) << "" << endl; + } + if (m_impl->tempArgs) + { + ArgumentListIterator ali(*m_impl->tempArgs); + Argument *a; + for (;(a=ali.current());++ali) { - Doxygen::tagFile << " " << convertToXML(idStr) << "" << endl; + tagFile << " " << convertToXML(a->name) << "" << endl; } - if (m_impl->tempArgs) + } + if (m_impl->inherits) + { + BaseClassListIterator it(*m_impl->inherits); + BaseClassDef *ibcd; + for (it.toFirst();(ibcd=it.current());++it) { - ArgumentListIterator ali(*m_impl->tempArgs); - Argument *a; - for (;(a=ali.current());++ali) + ClassDef *cd=ibcd->classDef; + if (cd && cd->isLinkable()) { - Doxygen::tagFile << " " << convertToXML(a->name) << "" << endl; + if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + { + tagFile << " prot==Protected) + { + tagFile << " protection=\"protected\""; + } + else if (ibcd->prot==Private) + { + tagFile << " protection=\"private\""; + } + if (ibcd->virt==Virtual) + { + tagFile << " virtualness=\"virtual\""; + } + tagFile << ">" << convertToXML(cd->name()) << "" << endl; + } } } } + QListIterator eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Class)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::ClassNestedClasses: + { + if (m_impl->innerClasses) + { + ClassSDict::Iterator cli(*m_impl->innerClasses); + ClassDef *innerCd; + for (cli.toFirst();(innerCd=cli.current());++cli) + { + if (innerCd->isLinkableInProject() && innerCd->templateMaster()==0 && + protectionLevelVisible(innerCd->protection()) && + !innerCd->isEmbeddedInOuterScope() + ) + { + tagFile << " compoundTypeString() << + "\">" << convertToXML(innerCd->name()) << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml) + { + ml->writeTagFile(tagFile); + } + } + break; + case LayoutDocEntry::MemberGroups: + { + if (m_impl->memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } + } + break; + default: + break; + } + } + writeDocAnchorsToTagFile(tagFile); + tagFile << " " << endl; } /** Write class documentation inside another container (i.e. a group) */ @@ -1722,9 +1786,6 @@ void ClassDef::writeInlineDocumentation(OutputList &ol) ol.endIndent(); } ol.popGeneratorState(); - - // part 4: write tag file information - writeTagFileMarker(); } void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor) @@ -1810,12 +1871,6 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade ol.startMemberList(); found=TRUE; } - if (!Config_getString("GENERATE_TAGFILE").isEmpty() && - !isReference()) // skip classes found in tag files - { - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - } ol.startMemberDeclaration(); ol.startMemberItem(anchor(),FALSE); QCString ctype = compoundTypeString(); @@ -1903,8 +1958,6 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page pageType += compoundTypeString(); toupper(pageType.at(1)); - writeTagFileMarker(); - Doxygen::indexList->addIndexItem(this,0); if (Doxygen::searchIndex) @@ -2017,11 +2070,6 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page } } - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; - } ol.endContents(); } @@ -4199,14 +4247,14 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC if (ml) { //printf(" writeDeclaration type=%d count=%d\n",lt,ml->numDecMembers()); - ml->writeDeclarations(ol,this,0,0,0,tt,st,definitionType(),FALSE,showInline,inheritedFrom,lt); + ml->writeDeclarations(ol,this,0,0,0,tt,st,FALSE,showInline,inheritedFrom,lt); tt.resize(0); st.resize(0); } if (ml2) { //printf(" writeDeclaration type=%d count=%d\n",lt2,ml2->numDecMembers()); - ml2->writeDeclarations(ol,this,0,0,0,tt,st,definitionType(),FALSE,showInline,inheritedFrom,lt); + ml2->writeDeclarations(ol,this,0,0,0,tt,st,FALSE,showInline,inheritedFrom,lt); } static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB"); if (!inlineInheritedMembers) // show inherited members as separate lists @@ -4261,7 +4309,7 @@ void ClassDef::writePlainMemberDeclaration(OutputList &ol, if (ml) { ml->setInGroup(inGroup); - ml->writePlainDeclarations(ol,this,0,0,0,definitionType(),inheritedFrom,inheritId); + ml->writePlainDeclarations(ol,this,0,0,0,inheritedFrom,inheritId); } } diff --git a/src/classdef.h b/src/classdef.h index 9f0ae5f..0729d20 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -46,6 +46,7 @@ class StringDict; struct IncludeInfo; class ClassDefImpl; class ArgumentList; +class FTextStream; /** A class representing of a compound symbol. * @@ -391,6 +392,7 @@ class ClassDef : public Definition ClassDef *inheritedFrom,const QCString &inheritId); int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional); int countInheritanceNodes(); + void writeTagFile(FTextStream &); bool visited; @@ -400,7 +402,6 @@ class ClassDef : public Definition void showUsedFiles(OutputList &ol); private: - void writeTagFileMarker(); void writeDocumentationContents(OutputList &ol,const QCString &pageTitle); void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList); void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief); diff --git a/src/definition.cpp b/src/definition.cpp index 5ade803..d2e3e01 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -511,9 +511,9 @@ void Definition::addSectionsToIndex() } } -void Definition::writeDocAnchorsToTagFile() +void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile) { - if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict) + if (m_impl->sectionDict) { //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_impl->sectionDict->count()); SDict::Iterator sdi(*m_impl->sectionDict); @@ -523,15 +523,13 @@ void Definition::writeDocAnchorsToTagFile() if (!si->generated) { //printf("write an entry!\n"); - if (definitionType()==TypeMember) Doxygen::tagFile << " "; - Doxygen::tagFile << " fileName << "\""; + if (definitionType()==TypeMember) tagFile << " "; + tagFile << " fileName << "\""; if (!si->title.isEmpty()) { - Doxygen::tagFile << " title=\"" << convertToXML(si->title) << "\""; + tagFile << " title=\"" << convertToXML(si->title) << "\""; } - Doxygen::tagFile << ">" << si->label - << "" << endl; + tagFile << ">" << si->label << "" << endl; } } } diff --git a/src/definition.h b/src/definition.h index 05ea621..b1f118d 100644 --- a/src/definition.h +++ b/src/definition.h @@ -34,6 +34,7 @@ struct ListItemInfo; struct SectionInfo; class Definition; class DefinitionImpl; +class FTextStream; /** Data associated with a detailed description. */ struct DocInfo @@ -334,7 +335,7 @@ class Definition : public DefinitionIntf /*! Writes the documentation anchors of the definition to * the Doxygen::tagFile stream. */ - void writeDocAnchorsToTagFile(); + void writeDocAnchorsToTagFile(FTextStream &); void setLocalName(const QCString name); void addSectionsToIndex(); diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 284d1ee..d2d9684 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -235,10 +235,6 @@ void DirDef::writeSubDirList(OutputList &ol) ol.insertMemberAlign(); ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); ol.endMemberItem(); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(dd->displayName()) << "" << endl; - } if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { ol.startMemberDescription(dd->getOutputFileBase()); @@ -297,10 +293,6 @@ void DirDef::writeFileList(OutputList &ol) ol.endTextLink(); ol.popGeneratorState(); } - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(fd->name()) << "" << endl; - } ol.endMemberItem(); if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { @@ -341,6 +333,53 @@ bool DirDef::hasDetailedDescription() const return (!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty(); } +void DirDef::writeTagFile(FTextStream &tagFile) +{ + tagFile << " " << endl; + tagFile << " " << convertToXML(displayName()) << "" << endl; + tagFile << " " << convertToXML(name()) << "" << endl; + tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; + QListIterator eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Directory)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::DirSubDirs: + { + if (m_subdirs.count()>0) + { + DirDef *dd; + QListIterator it(m_subdirs); + for (;(dd=it.current());++it) + { + tagFile << " " << convertToXML(dd->displayName()) << "" << endl; + } + } + } + break; + case LayoutDocEntry::DirFiles: + { + if (m_fileList->count()>0) + { + QListIterator it(*m_fileList); + FileDef *fd; + for (;(fd=it.current());++it) + { + tagFile << " " << convertToXML(fd->name()) << "" << endl; + } + } + } + break; + default: + break; + } + } + writeDocAnchorsToTagFile(tagFile); + tagFile << " " << endl; +} + void DirDef::writeDocumentation(OutputList &ol) { static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); @@ -367,14 +406,6 @@ void DirDef::writeDocumentation(OutputList &ol) endTitle(ol,getOutputFileBase(),title); ol.startContents(); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << convertToXML(displayName()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; - } - //---------------------------------------- start flexible part ------------------------------- SrcLangExt lang = getLanguage(); @@ -450,12 +481,6 @@ void DirDef::writeDocumentation(OutputList &ol) //---------------------------------------- end flexible part ------------------------------- - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; - } - ol.endContents(); endFileWithNavPath(this,ol); diff --git a/src/dirdef.h b/src/dirdef.h index 8f4fbc2..1a9f40c 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -72,6 +72,7 @@ class DirDef : public Definition // generate output void writeDocumentation(OutputList &ol); void writeDepGraph(FTextStream &t); + void writeTagFile(FTextStream &t); static DirDef *mergeDirectoryInTree(const QCString &path); bool visited; diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 68d48ff..8600a30 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -142,7 +142,6 @@ QDict Doxygen::expandAsDefinedDict(257); // all macros that should be QIntDict Doxygen::memGrpInfoDict(1009); // dictionary of the member groups heading PageDef *Doxygen::mainPage = 0; bool Doxygen::insideMainPage = FALSE; // are we generating docs for the main page? -FTextStream Doxygen::tagFile; NamespaceDef *Doxygen::globalScope = 0; QDict *Doxygen::xrefLists = new QDict; // dictionary of cross-referenced item lists bool Doxygen::parseSourcesNeeded = FALSE; @@ -1670,26 +1669,6 @@ static void processTagLessClasses(ClassDef *rootCd, } } -static void writeMainPageTagFileData() -{ - if (Doxygen::mainPage && !Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << endl - << " " - << convertToXML(Doxygen::mainPage->name()) - << "" << endl - << " " - << convertToXML(Doxygen::mainPage->title()) - << "" << endl - << " " - << convertToXML(Doxygen::mainPage->getOutputFileBase()) - << "" << endl; - - Doxygen::mainPage->writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; - } -} - static void findTagLessClasses(ClassDef *cd) { if (cd->getClassSDict()) @@ -10554,6 +10533,87 @@ static void stopDoxygen(int) } #endif +static void writeTagFile() +{ + QCString &generateTagFile = Config_getString("GENERATE_TAGFILE"); + if (generateTagFile.isEmpty()) return; + + QFile tag(generateTagFile); + if (!tag.open(IO_WriteOnly)) + { + err("cannot open tag file %s for writing\n", + generateTagFile.data() + ); + return; + } + FTextStream tagFile(&tag); + tagFile << "" << endl; + tagFile << "" << endl; + + // for each file + FileNameListIterator fnli(*Doxygen::inputNameList); + FileName *fn; + for (fnli.toFirst();(fn=fnli.current());++fnli) + { + FileNameIterator fni(*fn); + FileDef *fd; + for (fni.toFirst();(fd=fni.current());++fni) + { + fd->writeTagFile(tagFile); + } + } + // for each class + ClassSDict::Iterator cli(*Doxygen::classSDict); + ClassDef *cd; + for ( ; (cd=cli.current()) ; ++cli ) + { + cd->writeTagFile(tagFile); + } + // for each namespace + NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict); + NamespaceDef *nd; + for ( ; (nd=nli.current()) ; ++nli ) + { + nd->writeTagFile(tagFile); + } + // for each group + GroupSDict::Iterator gli(*Doxygen::groupSDict); + GroupDef *gd; + for (gli.toFirst();(gd=gli.current());++gli) + { + gd->writeTagFile(tagFile); + } + // for each page + PageSDict::Iterator pdi(*Doxygen::pageSDict); + PageDef *pd=0; + for (pdi.toFirst();(pd=pdi.current());++pdi) + { + pd->writeTagFile(tagFile); + } + if (Doxygen::mainPage) Doxygen::mainPage->writeTagFile(tagFile); + + /* + if (Doxygen::mainPage && !Config_getString("GENERATE_TAGFILE").isEmpty()) + { + tagFile << " " << endl + << " " + << convertToXML(Doxygen::mainPage->name()) + << "" << endl + << " " + << convertToXML(Doxygen::mainPage->title()) + << "" << endl + << " " + << convertToXML(Doxygen::mainPage->getOutputFileBase()) + << "" << endl; + + mainPage->writeDocAnchorsToTagFile(); + tagFile << " " << endl; + } + */ + + tagFile << "" << endl; +} + static void exitDoxygen() { if (!g_successfulRun) // premature exit @@ -11327,24 +11387,6 @@ void generateOutput() * Generate documentation * **************************************************************************/ - QFile *tag=0; - QCString &generateTagFile = Config_getString("GENERATE_TAGFILE"); - if (!generateTagFile.isEmpty()) - { - tag=new QFile(generateTagFile); - if (!tag->open(IO_WriteOnly)) - { - err("cannot open tag file %s for writing\n", - generateTagFile.data() - ); - cleanUpDoxygen(); - exit(1); - } - Doxygen::tagFile.setDevice(tag); - Doxygen::tagFile << "" << endl; - Doxygen::tagFile << "" << endl; - } - if (generateHtml) writeDoxFont(Config_getString("HTML_OUTPUT")); if (generateLatex) writeDoxFont(Config_getString("LATEX_OUTPUT")); if (generateRtf) writeDoxFont(Config_getString("RTF_OUTPUT")); @@ -11440,8 +11482,6 @@ void generateOutput() } } - writeMainPageTagFileData(); - if (g_outputList->count()>0) { writeIndexHierarchy(*g_outputList); @@ -11451,11 +11491,9 @@ void generateOutput() Doxygen::indexList->finalize(); g_s.end(); - if (!generateTagFile.isEmpty()) - { - Doxygen::tagFile << "" << endl; - delete tag; - } + g_s.begin("writing tag file...\n"); + writeTagFile(); + g_s.end(); if (Config_getBool("DOT_CLEANUP")) { diff --git a/src/doxygen.h b/src/doxygen.h index 6f766c0..aa9b745 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -114,7 +114,6 @@ class Doxygen static QStrList tagfileList; static MemberNameSDict *memberNameSDict; static MemberNameSDict *functionNameSDict; - static FTextStream tagFile; static SectionDict *sectionDict; static StringDict namespaceAliasDict; static GroupSDict *groupSDict; diff --git a/src/filedef.cpp b/src/filedef.cpp index 1b58cdf..9c18e20 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -180,6 +180,112 @@ bool FileDef::hasDetailedDescription() const ); } +void FileDef::writeTagFile(FTextStream &tagFile) +{ + tagFile << " " << endl; + tagFile << " " << convertToXML(name()) << "" << endl; + tagFile << " " << convertToXML(getPath()) << "" << endl; + tagFile << " " << convertToXML(getOutputFileBase()) << "" << endl; + if (m_includeList && m_includeList->count()>0) + { + QListIterator ili(*m_includeList); + IncludeInfo *ii; + for (;(ii=ili.current());++ili) + { + if (!ii->indirect) + { + FileDef *fd=ii->fileDef; + if (fd && fd->isLinkable() && !fd->isReference()) + { + bool isIDLorJava = FALSE; + SrcLangExt lang = fd->getLanguage(); + isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java; + const char *locStr = (ii->local || isIDLorJava) ? "yes" : "no"; + const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no"; + tagFile << " getOutputFileBase()) << "\" " + << "name=\"" << convertToXML(fd->name()) << "\" " + << "local=\"" << locStr << "\" " + << "imported=\"" << impStr << "\">" + << convertToXML(ii->includeName) + << "" + << endl; + } + } + } + } + QListIterator eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::File)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::FileClasses: + { + if (m_classSDict) + { + SDict::Iterator ci(*m_classSDict); + ClassDef *cd; + for (ci.toFirst();(cd=ci.current());++ci) + { + if (cd->isLinkableInProject()) + { + tagFile << " compoundTypeString() << + "\">" << convertToXML(cd->name()) << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::FileNamespaces: + { + if (m_namespaceSDict) + { + SDict::Iterator ni(*m_namespaceSDict); + NamespaceDef *nd; + for (ni.toFirst();(nd=ni.current());++ni) + { + if (nd->isLinkableInProject()) + { + tagFile << " " << convertToXML(nd->name()) << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml) + { + ml->writeTagFile(tagFile); + } + } + break; + case LayoutDocEntry::MemberGroups: + { + if (m_memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*m_memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } + } + break; + default: + break; + } + } + + writeDocAnchorsToTagFile(tagFile); + tagFile << " " << endl; +} + void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title) { if (hasDetailedDescription()) @@ -319,19 +425,6 @@ void FileDef::writeIncludeFiles(OutputList &ol) ol.writeObjectLink(fd->getReference(), fd->generateSourceFile() ? fd->includeName() : fd->getOutputFileBase(), 0,ii->includeName); - if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !fd->isReference()) - { - const char *locStr = (ii->local || isIDLorJava) ? "yes" : "no"; - const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no"; - Doxygen::tagFile << " getOutputFileBase()) << "\" " - << "name=\"" << convertToXML(fd->name()) << "\" " - << "local=\"" << locStr << "\" " - << "imported=\"" << impStr << "\">" - << convertToXML(ii->includeName) - << "" - << endl; - } } else { @@ -616,15 +709,6 @@ void FileDef::writeDocumentation(OutputList &ol) Doxygen::searchIndex->addWord(localName(),TRUE); } - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(getPath()) << "" << endl; - Doxygen::tagFile << " " - << convertToXML(getOutputFileBase()) - << "" << endl; - } //---------------------------------------- start flexible part ------------------------------- @@ -738,12 +822,6 @@ void FileDef::writeDocumentation(OutputList &ol) //---------------------------------------- end flexible part ------------------------------- - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; - } - ol.endContents(); endFileWithNavPath(this,ol); diff --git a/src/filedef.h b/src/filedef.h index a95cd77..8cd5703 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -39,6 +39,7 @@ class NamespaceSDict; class MemberGroupSDict; class PackageDef; class DirDef; +class FTextStream; /** Class representing the data associated with a \#include statement. */ struct IncludeInfo @@ -146,6 +147,7 @@ class FileDef : public Definition void writeMemberPages(OutputList &ol); void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const; void writeSummaryLinks(OutputList &ol); + void writeTagFile(FTextStream &t); void startParsing(); void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu); diff --git a/src/groupdef.cpp b/src/groupdef.cpp index ae785e7..9160538 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -546,6 +546,149 @@ void GroupDef::computeAnchors() setAnchors(allMemberList); } +void GroupDef::writeTagFile(FTextStream &tagFile) +{ + tagFile << " " << endl; + tagFile << " " << convertToXML(name()) << "" << endl; + tagFile << " " << convertToXML(title) << "" << endl; + tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; + QListIterator eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Group)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::GroupClasses: + { + if (classSDict) + { + SDict::Iterator ci(*classSDict); + ClassDef *cd; + for (ci.toFirst();(cd=ci.current());++ci) + { + if (cd->isLinkableInProject()) + { + tagFile << " compoundTypeString() + << "\">" << convertToXML(cd->name()) << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupNamespaces: + { + if (namespaceSDict) + { + SDict::Iterator ni(*namespaceSDict); + NamespaceDef *nd; + for (ni.toFirst();(nd=ni.current());++ni) + { + if (nd->isLinkableInProject()) + { + tagFile << " " << convertToXML(nd->name()) + << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupFiles: + { + if (fileList) + { + QListIterator it(*fileList); + FileDef *fd; + for (;(fd=it.current());++it) + { + if (fd->isLinkableInProject()) + { + tagFile << " " << convertToXML(fd->name()) << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupPageDocs: + { + if (pageDict) + { + PageSDict::Iterator pdi(*pageDict); + PageDef *pd=0; + for (pdi.toFirst();(pd=pdi.current());++pdi) + { + QCString pageName = pd->getOutputFileBase(); + if (pd->isLinkableInProject()) + { + tagFile << " " << convertToXML(pageName) << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupDirs: + { + if (dirList) + { + QListIterator it(*dirList); + DirDef *dd; + for (;(dd=it.current());++it) + { + if (dd->isLinkableInProject()) + { + tagFile << " " << convertToXML(dd->displayName()) << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::GroupNestedGroups: + { + if (groupList) + { + QListIterator it(*groupList); + GroupDef *gd; + for (;(gd=it.current());++it) + { + if (gd->isVisible()) + { + tagFile << " " << convertToXML(gd->name()) << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml) + { + ml->writeTagFile(tagFile); + } + } + break; + case LayoutDocEntry::MemberGroups: + { + if (memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } + } + break; + default: + break; + } + } + writeDocAnchorsToTagFile(tagFile); + tagFile << " " << endl; +} + void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title) { if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) @@ -670,10 +813,6 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title) ol.docify(theTranslator->trFile(FALSE,TRUE)+" "); ol.insertMemberAlign(); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name()); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(fd->name()) << "" << endl; - } ol.endMemberItem(); if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { @@ -728,10 +867,6 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title) //ol.docify(" "); ol.insertMemberAlign(); ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),0,gd->groupTitle()); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(gd->name()) << "" << endl; - } ol.endMemberItem(); if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { @@ -765,10 +900,6 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title) ol.insertMemberAlign(); ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); ol.endMemberItem(); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(dd->displayName()) << "" << endl; - } if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { ol.startMemberDescription(dd->getOutputFileBase()); @@ -801,13 +932,6 @@ void GroupDef::writePageDocumentation(OutputList &ol) { if (!pd->isReference()) { - QCString pageName = pd->getOutputFileBase(); - - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(pageName) << "" << endl; - } - SectionInfo *si=0; if (!pd->title().isEmpty() && !pd->name().isEmpty() && (si=Doxygen::sectionDict->find(pd->name()))!=0) @@ -967,15 +1091,6 @@ void GroupDef::writeDocumentation(OutputList &ol) Doxygen::indexList->addIndexItem(this,0,0,title); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(title) << "" << endl; - Doxygen::tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; - } - - //---------------------------------------- start flexible part ------------------------------- SrcLangExt lang=getLanguage(); @@ -1100,12 +1215,6 @@ void GroupDef::writeDocumentation(OutputList &ol) ol.popGeneratorState(); - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; - } - if (Config_getBool("SEPARATE_MEMBER_PAGES")) { allMemberList->sort(); @@ -1527,3 +1636,4 @@ bool GroupDef::hasDetailedDescription() const return ((!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty()); } + diff --git a/src/groupdef.h b/src/groupdef.h index bc956da..a21311b 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -39,6 +39,7 @@ class DirList; class FTVHelp; class Entry; class MemberDef; +class FTextStream; /** A model of a group of symbols. */ class GroupDef : public Definition @@ -67,6 +68,7 @@ class GroupDef : public Definition void writeDocumentation(OutputList &ol); void writeMemberPages(OutputList &ol); void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const; + void writeTagFile(FTextStream &); int countMembers() const; bool isLinkableInProject() const; bool isLinkable() const; diff --git a/src/memberdef.cpp b/src/memberdef.cpp index e79f13a..66814a6 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -576,8 +576,6 @@ class MemberDefImpl // FALSE => block is put before declaration. ClassDef *category; MemberDef *categoryRelation; - - unsigned tagDataWritten; }; MemberDefImpl::MemberDefImpl() : @@ -707,7 +705,6 @@ void MemberDefImpl::init(Definition *def, hasDocumentedReturnType = FALSE; docProvider = 0; isDMember = def->getDefFileName().right(2).lower()==".d"; - tagDataWritten = 0; // save separate written status for file, group, class, etc. } @@ -1413,8 +1410,7 @@ QCString MemberDef::getDeclType() const void MemberDef::writeDeclaration(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - bool inGroup, const DefType compoundType, - ClassDef *inheritedFrom,const char *inheritId) + bool inGroup, ClassDef *inheritedFrom,const char *inheritId) { //printf("%s MemberDef::writeDeclaration() inGroup=%d\n",qualifiedName().data(),inGroup); @@ -1426,7 +1422,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; - _writeTagData(compoundType); + //_writeTagData(compoundType); _addToSearchIndex(); QCString cname = d->name(); @@ -1536,7 +1532,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ltype.left(i), // text FALSE // autoBreak ); - getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd,compoundType); + getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd); //ol+=*getAnonymousEnumType()->enumDecl(); linkifyText(TextGeneratorOLImpl(ol),d,m_impl->fileDef,this,ltype.right(ltype.length()-i-l),TRUE); } @@ -2618,7 +2614,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline); linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.left(i)); - vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef(),definitionType()); + vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef()); linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,ldef.right(ldef.length()-i-l)); found=TRUE; @@ -3554,89 +3550,83 @@ Specifier MemberDef::virtualness(int count) const return v; } -void MemberDef::_writeTagData(const DefType compoundType) +void MemberDef::writeTagFile(FTextStream &tagFile) { - unsigned typeMask = 1 << compoundType; - if ((m_impl->tagDataWritten) & typeMask) return; // member already written for this type - if (m_impl->mtype==MemberType_EnumValue && m_impl->enumScope && - m_impl->enumScope->isStrong()) return; // enum value is part of enum - static bool generateTagFile = !Config_getString("GENERATE_TAGFILE").isEmpty(); - // write tag file information of this member - if (generateTagFile && isLinkableInProject()) + if (!isLinkableInProject()) return; + tagFile << " mtype) { - Doxygen::tagFile << " mtype) - { - case MemberType_Define: Doxygen::tagFile << "define"; break; - case MemberType_EnumValue: Doxygen::tagFile << "enumvalue"; break; - case MemberType_Property: Doxygen::tagFile << "property"; break; - case MemberType_Event: Doxygen::tagFile << "event"; break; - case MemberType_Variable: Doxygen::tagFile << "variable"; break; - case MemberType_Typedef: Doxygen::tagFile << "typedef"; break; - case MemberType_Enumeration: Doxygen::tagFile << "enumeration"; break; - case MemberType_Function: Doxygen::tagFile << "function"; break; - case MemberType_Signal: Doxygen::tagFile << "signal"; break; - case MemberType_Friend: Doxygen::tagFile << "friend"; break; - case MemberType_DCOP: Doxygen::tagFile << "dcop"; break; - case MemberType_Slot: Doxygen::tagFile << "slot"; break; - case MemberType_Interface: Doxygen::tagFile << "interface"; break; - case MemberType_Service: Doxygen::tagFile << "service"; break; - } - if (m_impl->prot!=Public) - { - Doxygen::tagFile << "\" protection=\""; - if (m_impl->prot==Protected) Doxygen::tagFile << "protected"; - else if (m_impl->prot==Package) Doxygen::tagFile << "package"; - else /* Private */ Doxygen::tagFile << "private"; - } - if (m_impl->virt!=Normal) - { - Doxygen::tagFile << "\" virtualness=\""; - if (m_impl->virt==Virtual) Doxygen::tagFile << "virtual"; - else /* Pure */ Doxygen::tagFile << "pure"; - } - if (isStatic()) - { - Doxygen::tagFile << "\" static=\"yes"; - } - Doxygen::tagFile << "\">" << endl; - Doxygen::tagFile << " " << convertToXML(typeString()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "" << endl; - Doxygen::tagFile << " " << convertToXML(anchor()) << "" << endl; - QCString idStr = id(); - if (!idStr.isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(idStr) << "" << endl; - } - Doxygen::tagFile << " " << convertToXML(argsString()) << "" << endl; - if (isStrong()) + case MemberType_Define: tagFile << "define"; break; + case MemberType_EnumValue: tagFile << "enumvalue"; break; + case MemberType_Property: tagFile << "property"; break; + case MemberType_Event: tagFile << "event"; break; + case MemberType_Variable: tagFile << "variable"; break; + case MemberType_Typedef: tagFile << "typedef"; break; + case MemberType_Enumeration: tagFile << "enumeration"; break; + case MemberType_Function: tagFile << "function"; break; + case MemberType_Signal: tagFile << "signal"; break; + case MemberType_Friend: tagFile << "friend"; break; + case MemberType_DCOP: tagFile << "dcop"; break; + case MemberType_Slot: tagFile << "slot"; break; + case MemberType_Interface: tagFile << "interface"; break; + case MemberType_Service: tagFile << "service"; break; + } + if (m_impl->prot!=Public) + { + tagFile << "\" protection=\""; + if (m_impl->prot==Protected) tagFile << "protected"; + else if (m_impl->prot==Package) tagFile << "package"; + else /* Private */ tagFile << "private"; + } + if (m_impl->virt!=Normal) + { + tagFile << "\" virtualness=\""; + if (m_impl->virt==Virtual) tagFile << "virtual"; + else /* Pure */ tagFile << "pure"; + } + if (isStatic()) + { + tagFile << "\" static=\"yes"; + } + tagFile << "\">" << endl; + if (typeString()!=QCString("@")) + { + tagFile << " " << convertToXML(typeString()) << "" << endl; + } + tagFile << " " << convertToXML(name()) << "" << endl; + tagFile << " " << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "" << endl; + tagFile << " " << convertToXML(anchor()) << "" << endl; + QCString idStr = id(); + if (!idStr.isEmpty()) + { + tagFile << " " << convertToXML(idStr) << "" << endl; + } + tagFile << " " << convertToXML(argsString()) << "" << endl; + if (isStrong()) + { + MemberList *fmdl=m_impl->enumFields; + if (fmdl) { - MemberList *fmdl=m_impl->enumFields; - if (fmdl) + MemberListIterator mli(*fmdl); + MemberDef *fmd; + for (mli.toFirst();(fmd=mli.current());++mli) { - MemberListIterator mli(*fmdl); - MemberDef *fmd; - for (mli.toFirst();(fmd=mli.current());++mli) + if (!fmd->isReference()) { - if (!fmd->isReference()) + tagFile << " anchor()); + QCString idStr = fmd->id(); + if (!idStr.isEmpty()) { - Doxygen::tagFile << " anchor()); - QCString idStr = fmd->id(); - if (!idStr.isEmpty()) - { - Doxygen::tagFile << "\" clangid=\"" << convertToXML(idStr); - } - Doxygen::tagFile << "\">" << convertToXML(fmd->name()) << "" << endl; + tagFile << "\" clangid=\"" << convertToXML(idStr); } + tagFile << "\">" << convertToXML(fmd->name()) << "" << endl; } } } - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; } - m_impl->tagDataWritten |= typeMask; + writeDocAnchorsToTagFile(tagFile); + tagFile << " " << endl; } void MemberDef::_computeIsConstructor() @@ -3735,8 +3725,7 @@ bool MemberDef::isDestructor() const } void MemberDef::writeEnumDeclaration(OutputList &typeDecl, - ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const DefType compoundType) + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd) { int enumMemCount=0; @@ -3763,7 +3752,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl, { if (isLinkableInProject() || hasDocumentedEnumValues()) { - _writeTagData(compoundType); + //_writeTagData(compoundType); _addToSearchIndex(); writeLink(typeDecl,cd,nd,fd,gd); } @@ -3812,7 +3801,7 @@ void MemberDef::writeEnumDeclaration(OutputList &typeDecl, if (fmd->hasDocumentation()) // enum value has docs { - fmd->_writeTagData(compoundType); + //fmd->_writeTagData(compoundType); fmd->_addToSearchIndex(); fmd->writeLink(typeDecl,cd,nd,fd,gd); } diff --git a/src/memberdef.h b/src/memberdef.h index 4f6028a..a669d68 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -376,16 +376,15 @@ class MemberDef : public Definition // output generation void writeDeclaration(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - bool inGroup, const DefType compoundType, - ClassDef *inheritFrom=0,const char *inheritId=0); + bool inGroup, ClassDef *inheritFrom=0,const char *inheritId=0); void writeDocumentation(MemberList *ml,OutputList &ol, const char *scopeName,Definition *container, bool inGroup,bool showEnumValues=FALSE,bool showInline=FALSE); void writeMemberDocSimple(OutputList &ol,Definition *container); void writeEnumDeclaration(OutputList &typeDecl, - ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const DefType compoundType); + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd); + void writeTagFile(FTextStream &); void warnIfUndocumented(); MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs, diff --git a/src/membergroup.cpp b/src/membergroup.cpp index 84567e2..51eb4a1 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -112,7 +112,7 @@ void MemberGroup::writeDeclarations(OutputList &ol, //printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data()); QCString ldoc = doc; if (!ldoc.isEmpty()) ldoc.prepend(""); - memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc,DefinitionIntf::TypeGroup,FALSE,showInline); + memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc,FALSE,showInline); } void MemberGroup::writePlainDeclarations(OutputList &ol, @@ -121,7 +121,7 @@ void MemberGroup::writePlainDeclarations(OutputList &ol, ) { //printf("MemberGroup::writePlainDeclarations() memberList->count()=%d\n",memberList->count()); - memberList->writePlainDeclarations(ol,cd,nd,fd,gd,DefinitionIntf::TypeGroup,inheritedFrom,inheritId); + memberList->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId); } void MemberGroup::writeDocumentation(OutputList &ol,const char *scopeName, @@ -150,7 +150,7 @@ void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd, { MemberList ml(lt); ml.append(md); - ml.writePlainDeclarations(ol,cd,0,0,0,DefinitionIntf::TypeGroup,inheritedFrom,inheritId); + ml.writePlainDeclarations(ol,cd,0,0,0,inheritedFrom,inheritId); } } } @@ -388,6 +388,12 @@ void MemberGroup::setRefItems(const QList *sli) } } } + +void MemberGroup::writeTagFile(FTextStream &tagFile) +{ + memberList->writeTagFile(tagFile); +} + //-------------------------------------------------------------------------- void MemberGroupInfo::setRefItems(const QList *sli) diff --git a/src/membergroup.h b/src/membergroup.h index 42e60c5..e3f6c0f 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -33,6 +33,7 @@ class GroupDef; class OutputList; class Definition; class StorageIntf; +class FTextStream; struct ListItemInfo; /** A class representing a group of members. */ @@ -57,6 +58,7 @@ class MemberGroup Definition *container,bool showEnumValues,bool showInline); void writeDocumentationPage(OutputList &ol,const char *scopeName, Definition *container); + void writeTagFile(FTextStream &); void addGroupedInheritedMembers(OutputList &ol,ClassDef *cd, MemberListType lt, ClassDef *inheritedFrom,const QCString &inheritId); diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 28ed37e..68b3bcb 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -301,8 +301,7 @@ bool MemberList::declVisible() const void MemberList::writePlainDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd, - GroupDef *gd, const DefinitionIntf::DefType compoundType, - ClassDef *inheritedFrom,const char *inheritId + GroupDef *gd,ClassDef *inheritedFrom,const char *inheritId ) { //printf("----- writePlainDeclaration() ----\n"); @@ -344,7 +343,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, case MemberType_Event: { if (first) ol.startMemberList(),first=FALSE; - md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType,inheritedFrom,inheritId); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); break; } case MemberType_Enumeration: @@ -386,7 +385,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, } ol.writeString("enum "); ol.insertMemberAlign(); - md->writeEnumDeclaration(ol,cd,nd,fd,gd,compoundType); + md->writeEnumDeclaration(ol,cd,nd,fd,gd); if (!detailsLinkable) { ol.endDoxyAnchor(md->getOutputFileBase(),md->anchor()); @@ -431,7 +430,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ol.startMemberList(); first=FALSE; } - md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType,inheritedFrom,inheritId); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); break; } case MemberType_EnumValue: @@ -440,7 +439,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, { //printf("EnumValue!\n"); if (first) ol.startMemberList(),first=FALSE; - md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType,inheritedFrom,inheritId); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId); } } break; @@ -466,7 +465,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ol.startMemberList(); first=FALSE; } - md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,compoundType); + md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup); } md->setFromAnonymousScope(TRUE); } @@ -490,7 +489,6 @@ void MemberList::writePlainDeclarations(OutputList &ol, * @param gd non-null if this list is part of group documentation. * @param title Title to use for the member list. * @param subtitle Sub title to use for the member list. - * @param compoundType Container type for this member list. * @param showEnumValues Obsolete, always set to FALSE. * @param showInline if set to TRUE if title is rendered differently * @param inheritedFrom if not 0, the list is shown inside the @@ -500,8 +498,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, */ void MemberList::writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const char *title,const char *subtitle, - const DefinitionIntf::DefType compoundType,bool showEnumValues, + const char *title,const char *subtitle, bool showEnumValues, bool showInline,ClassDef *inheritedFrom,MemberListType lt) { (void)showEnumValues; // unused @@ -587,7 +584,7 @@ void MemberList::writeDeclarations(OutputList &ol, } else { - writePlainDeclarations(ol,cd,nd,fd,gd,compoundType,inheritedFrom,inheritId); + writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId); } //printf("memberGroupList=%p\n",memberGroupList); @@ -943,6 +940,31 @@ QCString MemberList::listTypeAsString(MemberListType type) return ""; } +void MemberList::writeTagFile(FTextStream &tagFile) +{ + MemberListIterator mli(*this); + MemberDef *md; + for ( ; (md=mli.current()) ; ++mli) + { + if (md->getLanguage()!=SrcLangExt_VHDL) + { + md->writeTagFile(tagFile); + } + else + { + VhdlDocGen::writeTagFile(md,tagFile); + } + } + if (memberGroupList) + { + MemberGroupListIterator mgli(*memberGroupList); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } +} //-------------------------------------------------------------------------- diff --git a/src/memberlist.h b/src/memberlist.h index 607eb01..4cccadc 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -55,12 +55,11 @@ class MemberList : public QList void countDocMembers(bool countEnumValues=FALSE); int countInheritableMembers(ClassDef *inheritedFrom) const; void writePlainDeclarations(OutputList &ol, - ClassDef *cd,NamespaceDef *nd,FileDef *fd, - GroupDef *gd,const DefinitionIntf::DefType compoundType, + ClassDef *cd,NamespaceDef *nd,FileDef *fd, GroupDef *gd, ClassDef *inheritedFrom,const char *inheritId); void writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, - const char *title,const char *subtitle,const DefinitionIntf::DefType compoundType, + const char *title,const char *subtitle, bool showEnumValues=FALSE,bool showInline=FALSE, ClassDef *inheritedFrom=0,MemberListType lt=MemberListType_pubMethods); void writeDocumentation(OutputList &ol,const char *scopeName, @@ -68,6 +67,7 @@ class MemberList : public QList void writeSimpleDocumentation(OutputList &ol,Definition *container); void writeDocumentationPage(OutputList &ol, const char *scopeName, Definition *container); + void writeTagFile(FTextStream &); bool declVisible() const; void addMemberGroup(MemberGroup *mg); void setInGroup(bool inGroup) { m_inGroup=inGroup; } diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 2aa5728..8580a2e 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -259,6 +259,85 @@ bool NamespaceDef::hasDetailedDescription() const !documentation().isEmpty()); } +void NamespaceDef::writeTagFile(FTextStream &tagFile) +{ + tagFile << " " << endl; + tagFile << " " << convertToXML(name()) << "" << endl; + tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; + QCString idStr = id(); + if (!idStr.isEmpty()) + { + tagFile << " " << convertToXML(idStr) << "" << endl; + } + QListIterator eli( + LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace)); + LayoutDocEntry *lde; + for (eli.toFirst();(lde=eli.current());++eli) + { + switch (lde->kind()) + { + case LayoutDocEntry::NamespaceNestedNamespaces: + { + if (namespaceSDict) + { + SDict::Iterator ni(*namespaceSDict); + NamespaceDef *nd; + for (ni.toFirst();(nd=ni.current());++ni) + { + if (nd->isLinkableInProject()) + { + tagFile << " " << convertToXML(nd->name()) << "" << endl; + } + } + } + } + break; + case LayoutDocEntry::NamespaceClasses: + { + if (classSDict) + { + SDict::Iterator ci(*classSDict); + ClassDef *cd; + for (ci.toFirst();(cd=ci.current());++ci) + { + if (cd->isLinkableInProject()) + { + tagFile << " compoundTypeString() + << "\">" << convertToXML(cd->name()) << "" << endl; + } + } + } + } + case LayoutDocEntry::MemberDecl: + { + LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde; + MemberList * ml = getMemberList(lmd->type); + if (ml) + { + ml->writeTagFile(tagFile); + } + } + break; + case LayoutDocEntry::MemberGroups: + { + if (memberGroupSDict) + { + MemberGroupSDict::Iterator mgli(*memberGroupSDict); + MemberGroup *mg; + for (;(mg=mgli.current());++mgli) + { + mg->writeTagFile(tagFile); + } + } + } + break; + default: + break; + } + } + writeDocAnchorsToTagFile(tagFile); + tagFile << " " << endl; +} void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title) { @@ -496,19 +575,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol) Doxygen::searchIndex->addWord(localName(),TRUE); } - bool generateTagFile = !Config_getString("GENERATE_TAGFILE").isEmpty(); - if (generateTagFile) - { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << convertToXML(name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "" << endl; - QCString idStr = id(); - if (!idStr.isEmpty()) - { - Doxygen::tagFile << " " << convertToXML(idStr) << "" << endl; - } - } - Doxygen::indexList->addIndexItem(this,0); //---------------------------------------- start flexible part ------------------------------- @@ -619,12 +685,6 @@ void NamespaceDef::writeDocumentation(OutputList &ol) endFileWithNavPath(this,ol); - if (generateTagFile) - { - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; - } - if (Config_getBool("SEPARATE_MEMBER_PAGES")) { MemberList *allMemberList = getMemberList(MemberListType_allMembersList); @@ -939,10 +999,6 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, name = nd->displayName(); } ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name); - if (!Config_getString("GENERATE_TAGFILE").isEmpty() && nd->isLinkableInProject()) - { - Doxygen::tagFile << " " << convertToXML(nd->name()) << "" << endl; - } ol.endMemberItem(); if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { diff --git a/src/namespacedef.h b/src/namespacedef.h index ceb3bd7..800f639 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -33,6 +33,7 @@ class MemberDef; class NamespaceList; class MemberGroupSDict; class NamespaceSDict; +class FTextStream; /** A model of a namespace symbol. */ class NamespaceDef : public Definition @@ -51,6 +52,7 @@ class NamespaceDef : public Definition void writeDocumentation(OutputList &ol); void writeMemberPages(OutputList &ol); void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const; + void writeTagFile(FTextStream &); void insertClass(ClassDef *cd); void insertNamespace(NamespaceDef *nd); diff --git a/src/pagedef.cpp b/src/pagedef.cpp index e75327c..919a2d7 100644 --- a/src/pagedef.cpp +++ b/src/pagedef.cpp @@ -99,6 +99,30 @@ bool PageDef::hasParentPage() const getOuterScope()->definitionType()==Definition::TypePage; } +void PageDef::writeTagFile(FTextStream &tagFile) +{ + bool found = name()=="citelist"; + QDictIterator rli(*Doxygen::xrefLists); + RefList *rl; + for (rli.toFirst();(rl=rli.current()) && !found;++rli) + { + if (rl->listName()==name()) + { + found=TRUE; + break; + } + } + if (!found) // not one of the generated related pages + { + tagFile << " " << endl; + tagFile << " " << name() << "" << endl; + tagFile << " " << convertToXML(title()) << "" << endl; + tagFile << " " << convertToXML(getOutputFileBase()) << "" << endl; + writeDocAnchorsToTagFile(tagFile); + tagFile << " " << endl; + } +} + void PageDef::writeDocumentation(OutputList &ol) { static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); @@ -200,30 +224,6 @@ void PageDef::writeDocumentation(OutputList &ol) ol.popGeneratorState(); //1.} - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - bool found = name()=="citelist"; - QDictIterator rli(*Doxygen::xrefLists); - RefList *rl; - for (rli.toFirst();(rl=rli.current()) && !found;++rli) - { - if (rl->listName()==name()) - { - found=TRUE; - break; - } - } - if (!found) // not one of the generated related pages - { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << name() << "" << endl; - Doxygen::tagFile << " " << convertToXML(title()) << "" << endl; - Doxygen::tagFile << " " << getOutputFileBase() << "" << endl; - writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; - } - } - Doxygen::indexList->addIndexItem(this,0,0,filterTitle(title())); } diff --git a/src/pagedef.h b/src/pagedef.h index 890829e..694d081 100644 --- a/src/pagedef.h +++ b/src/pagedef.h @@ -23,6 +23,7 @@ class PageSDict; class OutputList; +class FTextStream; /** @brief A model of a page symbol. */ class PageDef : public Definition @@ -64,6 +65,7 @@ class PageDef : public Definition QCString displayName(bool=TRUE) const { return !m_title.isEmpty() ? m_title : Definition::name(); } void writeDocumentation(OutputList &ol); + void writeTagFile(FTextStream &); private: void setNestingLevel(int l); diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index d575398..ddb4c4f 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -1950,6 +1950,48 @@ bool VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definit return hasParams; } +void VhdlDocGen::writeTagFile(MemberDef *mdef,FTextStream &tagFile) +{ + tagFile << " " << endl; + tagFile << " " << convertToXML(mdef->typeString()) << "" << endl; + tagFile << " " << convertToXML(mdef->name()) << "" << endl; + tagFile << " " << convertToXML(mdef->getOutputFileBase()+Doxygen::htmlFileExtension) << "" << endl; + tagFile << " " << convertToXML(mdef->anchor()) << "" << endl; + + if (VhdlDocGen::isVhdlFunction(mdef)) + tagFile << " " << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),TRUE)) << "" << endl; + else if (VhdlDocGen::isProcedure(mdef)) + tagFile << " " << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),FALSE)) << "" << endl; + else + tagFile << " " << convertToXML(mdef->argsString()) << "" << endl; + + mdef->writeDocAnchorsToTagFile(tagFile); + tagFile << " " << endl; +} + /* writes a vhdl type declaration */ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, @@ -1971,50 +2013,6 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, else if (gd) d=gd; else d=(Definition*)mdef; - // write tag file information of this member - if (!Config_getString("GENERATE_TAGFILE").isEmpty()) - { - Doxygen::tagFile << " " << endl; - Doxygen::tagFile << " " << convertToXML(mdef->typeString()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(mdef->name()) << "" << endl; - Doxygen::tagFile << " " << convertToXML(mdef->getOutputFileBase()+Doxygen::htmlFileExtension) << "" << endl; - Doxygen::tagFile << " " << convertToXML(mdef->anchor()) << "" << endl; - - if (VhdlDocGen::isVhdlFunction(mdef)) - Doxygen::tagFile << " " << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),TRUE)) << "" << endl; - else if (VhdlDocGen::isProcedure(mdef)) - Doxygen::tagFile << " " << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList(),FALSE)) << "" << endl; - else - Doxygen::tagFile << " " << convertToXML(mdef->argsString()) << "" << endl; - - mdef->writeDocAnchorsToTagFile(); - Doxygen::tagFile << " " << endl; - - } - // write search index info if (Doxygen::searchIndex) { diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h index b9f9afb..7f87ce5 100644 --- a/src/vhdldocgen.h +++ b/src/vhdldocgen.h @@ -119,6 +119,7 @@ class VhdlDocGen static QCString getClassTitle(const ClassDef*); static void writeInlineClassLink(const ClassDef*, OutputList &ol); + static void writeTagFile(MemberDef *mdef,FTextStream &tagFile); static bool isConstraint(const MemberDef *mdef); static bool isConfig(const MemberDef *mdef); -- cgit v0.12