void NamespaceDef::addMembersToMemberGroup() { QListIterator<MemberList> mli(m_memberLists); MemberList *ml; for (mli.toFirst(); (ml=mli.current()); ++mli) { if (ml->listType()&MemberListType_declarationLists) { ::addMembersToMemberGroup(ml,&memberGroupSDict,this); } } // add members inside sections to their groups if (memberGroupSDict) { MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (; (mg=mgli.current()); ++mgli) { if (mg->allMembersInSameSection() && m_subGrouping) { //printf("----> addToDeclarationSection(%s)\n",mg->header().data()); mg->addToDeclarationSection(); } } } }
void MemberList::writeTagFile(FTextStream &tagFile) { MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { if (md->getLanguage()!=SrcLangExt_VHDL) { md->writeTagFile(tagFile); if (md->memberType()==MemberType_Enumeration && md->enumFieldList() && !md->isStrong()) { MemberListIterator vmli(*md->enumFieldList()); MemberDef *vmd; for ( ; (vmd=vmli.current()) ; ++vmli) { vmd->writeTagFile(tagFile); } } } else { VhdlDocGen::writeTagFile(md,tagFile); } } if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (; (mg=mgli.current()); ++mgli) { mg->writeTagFile(tagFile); } } }
void MemberList::countDocMembers(bool countEnumValues) { if (m_numDocMembers!=-1) return; // used cached value m_numDocMembers=0; QListIterator<MemberDef> mli(*this); MemberDef *md; for (mli.toFirst();(md=mli.current());++mli) { if (md->isDetailedSectionVisible(m_inGroup,m_inFile)) { // do not count enum values, since they do not produce entries of their own if (countEnumValues || md->memberType()!=MemberType_EnumValue) m_numDocMembers++; } } if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->countDocMembers(); m_numDocMembers+=mg->numDocMembers(); } } //printf("MemberList::countDocMembers()=%d memberGroupList=%p\n",m_numDocMembers,memberGroupList); }
void MemberList::addListReferences(Definition *def) { MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { if (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup) { md->addListReference(def); MemberList *enumFields = md->enumFieldList(); if (md->memberType()==MemberType_Enumeration && enumFields) { //printf(" Adding enum values!\n"); MemberListIterator vmli(*enumFields); MemberDef *vmd; for ( ; (vmd=vmli.current()) ; ++vmli) { //printf(" adding %s\n",vmd->name().data()); vmd->addListReference(def); } } } } if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->addListReferences(def); } } }
void GroupDef::addListReferences() { { LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems(); addRefItem(xrefItems.pointer(), getOutputFileBase(), theTranslator->trGroup(TRUE,TRUE), getOutputFileBase(),name(), 0 ); } MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->addListReferences(this); } QListIterator<MemberList> mli(m_memberLists); MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) { if (ml->listType()&MemberList::documentationLists) { ml->addListReferences(this); } } }
void MemberList::addListReferences(Definition *def) { MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { if (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup) { md->addListReference(def); LockingPtr<MemberList> enumFields = md->enumFieldList(); if (md->memberType()==MemberDef::Enumeration && enumFields!=0) { MemberListIterator vmli(*enumFields); MemberDef *vmd; for ( ; (vmd=vmli.current()) ; ++vmli) { vmd->addListReference(def); } } } } if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->addListReferences(def); } } }
void NamespaceDef::addListReferences() { //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); { QList<ListItemInfo> *xrefItems = xrefListItems(); addRefItem(xrefItems, qualifiedName(), getLanguage()==SrcLangExt_Fortran ? theTranslator->trModule(TRUE,TRUE) : theTranslator->trNamespace(TRUE,TRUE), getOutputFileBase(),displayName(), 0, this ); } MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (; (mg=mgli.current()); ++mgli) { mg->addListReferences(this); } QListIterator<MemberList> mli(m_memberLists); MemberList *ml; for (mli.toFirst(); (ml=mli.current()); ++mli) { if (ml->listType()&MemberListType_documentationLists) { ml->addListReferences(this); } } }
// separate member pages void MemberList::writeDocumentationPage(OutputList &ol, const char *scopeName, Definition *container) { static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { if (md->isDetailedSectionLinkable()) { QCString diskName=md->getOutputFileBase(); QCString title=md->qualifiedName(); startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,diskName); if (!generateTreeView) { container->writeNavigationPath(ol); ol.endQuickIndices(); } ol.startContents(); if (generateTreeView) { md->writeDocumentation(this,ol,scopeName,container,m_inGroup); ol.endContents(); endFileWithNavPath(container,ol); } else { ol.writeString("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n" " <tr>\n" " <td valign=\"top\">\n"); container->writeQuickMemberLinks(ol,md); ol.writeString(" </td>\n"); ol.writeString(" <td valign=\"top\" class=\"mempage\">\n"); md->writeDocumentation(this,ol,scopeName,container,m_inGroup); ol.writeString(" </td>\n"); ol.writeString(" </tr>\n"); ol.writeString("</table>\n"); endFile(ol); } } if (memberGroupList) { //printf("MemberList::writeDocumentation() -- member groups\n"); MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->writeDocumentationPage(ol,scopeName,container); } } } }
void GroupDef::distributeMemberGroupDocumentation() { MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->distributeMemberGroupDocumentation(); } }
void MemberList::writeDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, const char *title,const char *subtitle, bool showEnumValues /*, bool inGroup,bool countSubGroups*/) { //printf("----- writeDeclaration() ----\n"); countDecMembers(showEnumValues); // count member not in group if (numDecMembers()==0) return; //printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n",title,subtitle,numDecMembers()); if (title) { ol.startMemberHeader(); ol.parseText(title); ol.endMemberHeader(); } if (subtitle && subtitle[0]!=0) { //printf("subtitle=`%s'\n",subtitle); ol.startMemberSubtitle(); ol.parseDoc("[generated]",-1,0,0,subtitle,FALSE,FALSE); ol.endMemberSubtitle(); } writePlainDeclarations(ol,cd,nd,fd,gd); //printf("memberGroupList=%p\n",memberGroupList); if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; while ((mg=mgli.current())) { bool hasHeader=mg->header()!="[NOHEADER]"; ol.startMemberGroupHeader(hasHeader); if (hasHeader) { ol.parseText(mg->header()); } ol.endMemberGroupHeader(); if (!mg->documentation().isEmpty()) { //printf("Member group has docs!\n"); ol.startMemberGroupDocs(); ol.parseDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE); ol.endMemberGroupDocs(); } ol.startMemberGroup(); //printf("--- mg->writePlainDeclarations ---\n"); mg->writePlainDeclarations(ol,cd,nd,fd,gd); ol.endMemberGroup(hasHeader); ++mgli; } } //printf("----- end writeDeclaration() ----\n"); }
void FileDef::distributeMemberGroupDocumentation() { //printf("FileDef::distributeMemberGroupDocumentation()\n"); if (memberGroupSDict) { MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->distributeMemberGroupDocumentation(); } } }
void GroupDef::writeMemberGroups(OutputList &ol) { /* write user defined member groups */ if (memberGroupSDict) { /* write user defined member groups */ MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->writeDeclarations(ol,0,0,0,this); } } }
void NamespaceDef::findSectionsInDocumentation() { docFindSections(documentation(),this,0,docFile()); MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->findSectionsInDocumentation(); } decDefineMembers.findSectionsInDocumentation(); decProtoMembers.findSectionsInDocumentation(); decTypedefMembers.findSectionsInDocumentation(); decEnumMembers.findSectionsInDocumentation(); decFuncMembers.findSectionsInDocumentation(); decVarMembers.findSectionsInDocumentation(); }
void MemberList::findSectionsInDocumentation() { MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { md->findSectionsInDocumentation(); } if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->findSectionsInDocumentation(); } } }
void NamespaceDef::writeMemberGroups(OutputList &ol) { /* write user defined member groups */ if (memberGroupSDict) { memberGroupSDict->sort(); MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (; (mg=mgli.current()); ++mgli) { if ((!mg->allMembersInSameSection() || !m_subGrouping) && mg->header()!="[NOHEADER]") { mg->writeDeclarations(ol,0,this,0,0); } } } }
void GroupDef::addMembersToMemberGroup() { ::addMembersToMemberGroup(&decDefineMembers,memberGroupSDict,this); ::addMembersToMemberGroup(&decProtoMembers,memberGroupSDict,this); ::addMembersToMemberGroup(&decTypedefMembers,memberGroupSDict,this); ::addMembersToMemberGroup(&decEnumMembers,memberGroupSDict,this); ::addMembersToMemberGroup(&decEnumValMembers,memberGroupSDict,this); ::addMembersToMemberGroup(&decFuncMembers,memberGroupSDict,this); ::addMembersToMemberGroup(&decVarMembers,memberGroupSDict,this); //printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count()); MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (; (mg=mgli.current()); ++mgli) { mg->setInGroup(TRUE); } }
void NamespaceDef::findSectionsInDocumentation() { docFindSections(documentation(),this,0,docFile()); MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (; (mg=mgli.current()); ++mgli) { mg->findSectionsInDocumentation(); } QListIterator<MemberList> mli(m_memberLists); MemberList *ml; for (mli.toFirst(); (ml=mli.current()); ++mli) { if (ml->listType()&MemberListType_declarationLists) { ml->findSectionsInDocumentation(); } } }
void NamespaceDef::addListReferences() { addRefItem(xrefListItems(), theTranslator->trNamespace(TRUE,TRUE), getOutputFileBase(),displayName() ); MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->addListReferences(this); } docDefineMembers.addListReferences(this); docProtoMembers.addListReferences(this); docTypedefMembers.addListReferences(this); docEnumMembers.addListReferences(this); docFuncMembers.addListReferences(this); docVarMembers.addListReferences(this); }
static void generateSqlite3ForNamespace(sqlite3 *db, NamespaceDef *nd) { // + contained class definitions // + contained namespace definitions // + member groups // + normal members // - brief desc // - detailed desc // - location // - files containing (parts of) the namespace definition if (nd->isReference() || nd->isHidden()) return; // skip external references // + contained class definitions writeInnerClasses(db,nd->getClassSDict()); // + contained namespace definitions writeInnerNamespaces(db,nd->getNamespaceSDict()); // + member groups if (nd->getMemberGroupSDict()) { MemberGroupSDict::Iterator mgli(*nd->getMemberGroupSDict()); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { generateSqlite3Section(db,nd,mg->members(),"user-defined",mg->header(), mg->documentation()); } } // + normal members QListIterator<MemberList> mli(nd->getMemberLists()); MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) { if ((ml->listType()&MemberListType_declarationLists)!=0) { generateSqlite3Section(db,nd,ml,"user-defined");//g_xmlSectionMapper.find(ml->listType())); } } }
void GroupDef::addMembersToMemberGroup() { QListIterator<MemberList> mli(m_memberLists); MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) { if (ml->listType()&MemberList::declarationLists) { ::addMembersToMemberGroup(ml,&memberGroupSDict,this); } } //printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count()); MemberGroupSDict::Iterator mgli(*memberGroupSDict); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->setInGroup(TRUE); } }
void MemberList::setAnonymousEnumType() { //printf("MemberList(%p)::setAnonymousEnumType()\n",this); MemberListIterator mli(*this); const MemberDef *md; for ( ; (md=mli.current()); ++mli ) { if (md->isBriefSectionVisible()) { QCString name(md->name()); int i=name.findRev("::"); if (i!=-1) name=name.right(name.length()-i-2); if (md->memberType()==MemberType_Enumeration && name[0]=='@') { const MemberList *mfl = md->enumFieldList(); if (mfl) { MemberListIterator vmli(*mfl); MemberDef *vmd; for ( ; (vmd=vmli.current()) ; ++vmli) { QCString vtype=vmd->typeString(); if ((vtype.find(name))!=-1) { vmd->setAnonymousEnumType(md); } } } } } } if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->setAnonymousEnumType(); } } }
int MemberList::countInheritableMembers(ClassDef *inheritedFrom) const { int count=0; QListIterator<MemberDef> mli(*this); MemberDef *md; for (mli.toFirst();(md=mli.current());++mli) { if (md->isBriefSectionVisible()) { if (md->memberType()!=MemberType_Friend && md->memberType()!=MemberType_EnumValue) { //printf("member %s: isReimplementedBy(%s)=%d\n",md->name().data(), // inheritedFrom->name().data(), // md->isReimplementedBy(inheritedFrom)); if (md->memberType()==MemberType_Function) { if (!md->isReimplementedBy(inheritedFrom)) count++; } else { count++; } } } } if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { count+=mg->countInheritableMembers(inheritedFrom); } } //printf("%s::countInheritableMembers(%s)=%d\n", // listTypeAsString().data(), // inheritedFrom->name().data(),count); return count; }
void MemberList::writeDocumentationPage(OutputList &ol, const char *scopeName, Definition *container) { MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { QCString diskName=md->getOutputFileBase(); QCString title=md->qualifiedName(); startFile(ol,diskName,md->name(),title); container->writeNavigationPath(ol); ol.writeString("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n" " <tr>\n" " <td valign=\"top\">\n"); container->writeQuickMemberLinks(ol,md); ol.writeString(" </td>\n"); ol.writeString(" <td valign=\"top\">\n"); md->writeDocumentation(this,ol,scopeName,container,m_inGroup); ol.writeString(" </td>\n"); ol.writeString(" </tr>\n"); ol.writeString("</table>\n"); endFile(ol); } if (memberGroupList) { //printf("MemberList::writeDocumentation() -- member groups\n"); MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->writeDocumentationPage(ol,scopeName,container); } } }
void MemberList::writeDocumentation(OutputList &ol, const char *scopeName, Definition *container, const char *title,bool showEnumValues,bool showInline) { //printf("MemberList::writeDocumentation()\n"); countDocMembers(showEnumValues); if (numDocMembers()==0) return; if (title) { ol.pushGeneratorState(); ol.disable(OutputGenerator::Html); ol.writeRuler(); ol.popGeneratorState(); ol.startGroupHeader(showInline ? 2 : 0); ol.parseText(title); ol.endGroupHeader(showInline ? 2 : 0); } ol.startMemberDocList(); MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { md->writeDocumentation(this,ol,scopeName,container, m_inGroup,showEnumValues,showInline); } if (memberGroupList) { //printf("MemberList::writeDocumentation() -- member groups\n"); MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->writeDocumentation(ol,scopeName,container,showEnumValues,showInline); } } ol.endMemberDocList(); }
static void generateSqlite3ForFile(sqlite3 *db, FileDef *fd) { // + includes files // + includedby files // + include graph // + included by graph // + contained class definitions // + contained namespace definitions // + member groups // + normal members // + brief desc // + detailed desc // + source code // + location // - number of lines if (fd->isReference()) return; // skip external references #if 0 ti << " <compound refid=\"" << fd->getOutputFileBase() << "\" kind=\"file\"><name>" << convertToXML(fd->name()) << "</name>" << endl; QCString outputDirectory = Config_getString("XML_OUTPUT"); QCString fileName=outputDirectory+"/"+fd->getOutputFileBase()+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) { err("Cannot open file %s for writing!\n",fileName.data()); return; } FTextStream t(&f); //t.setEncoding(FTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" << fd->getOutputFileBase() << "\" kind=\"file\">" << endl; t << " <compoundname>"; writeXMLString(t,fd->name()); t << "</compoundname>" << endl; IncludeInfo *inc; if (fd->includeFileList()) { QListIterator<IncludeInfo> ili1(*fd->includeFileList()); for (ili1.toFirst();(inc=ili1.current());++ili1) { t << " <includes"; if (inc->fileDef && !inc->fileDef->isReference()) // TODO: support external references { t << " refid=\"" << inc->fileDef->getOutputFileBase() << "\""; } t << " local=\"" << (inc->local ? "yes" : "no") << "\">"; t << inc->includeName; t << "</includes>" << endl; } } if (fd->includedByFileList()) { QListIterator<IncludeInfo> ili2(*fd->includedByFileList()); for (ili2.toFirst();(inc=ili2.current());++ili2) { t << " <includedby"; if (inc->fileDef && !inc->fileDef->isReference()) // TODO: support external references { t << " refid=\"" << inc->fileDef->getOutputFileBase() << "\""; } t << " local=\"" << (inc->local ? "yes" : "no") << "\">"; t << inc->includeName; t << "</includedby>" << endl; } } DotInclDepGraph incDepGraph(fd,FALSE); if (!incDepGraph.isTrivial()) { t << " <incdepgraph>" << endl; incDepGraph.writeXML(t); t << " </incdepgraph>" << endl; } DotInclDepGraph invIncDepGraph(fd,TRUE); if (!invIncDepGraph.isTrivial()) { t << " <invincdepgraph>" << endl; invIncDepGraph.writeXML(t); t << " </invincdepgraph>" << endl; } #endif if (fd->getClassSDict()) { writeInnerClasses(db,fd->getClassSDict()); } if (fd->getNamespaceSDict()) { writeInnerNamespaces(db,fd->getNamespaceSDict()); } if (fd->getMemberGroupSDict()) { MemberGroupSDict::Iterator mgli(*fd->getMemberGroupSDict()); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { generateSqlite3Section(db,fd,mg->members(),"user-defined",mg->header(), mg->documentation()); } } QListIterator<MemberList> mli(fd->getMemberLists()); MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) { if ((ml->listType()&MemberListType_declarationLists)!=0) { generateSqlite3Section(db,fd,ml,"user-defined");//g_xmlSectionMapper.find(ml->listType())); } } #if 0 generateXMLSection(fd,ti,t,fd->decDefineMembers,"define"); generateXMLSection(fd,ti,t,fd->decProtoMembers,"prototype"); generateXMLSection(fd,ti,t,fd->decTypedefMembers,"typedef"); generateXMLSection(fd,ti,t,fd->decEnumMembers,"enum"); generateXMLSection(fd,ti,t,fd->decFuncMembers,"func"); generateXMLSection(fd,ti,t,fd->decVarMembers,"var"); #endif #if 0 t << " <briefdescription>" << endl; writeXMLDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription()); t << " </briefdescription>" << endl; t << " <detaileddescription>" << endl; writeXMLDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation()); t << " </detaileddescription>" << endl; if (Config_getBool("XML_PROGRAMLISTING")) { t << " <programlisting>" << endl; writeXMLCodeBlock(t,fd); t << " </programlisting>" << endl; } t << " <location file=\"" << fd->getDefFileName() << "\"/>" << endl; t << " </compounddef>" << endl; t << "</doxygen>" << endl; ti << " </compound>" << endl; #endif }
static void generateSqlite3ForNamespace(sqlite3 *db, NamespaceDef *nd) { // + contained class definitions // + contained namespace definitions // + member groups // + normal members // + brief desc // + detailed desc // + location // - files containing (parts of) the namespace definition if (nd->isReference() || nd->isHidden()) return; // skip external references #if 0 ti << " <compound refid=\"" << nd->getOutputFileBase() << "\" kind=\"namespace\"" << "><name>" << convertToXML(nd->name()) << "</name>" << endl; QCString outputDirectory = Config_getString("XML_OUTPUT"); QCString fileName=outputDirectory+"/"+nd->getOutputFileBase()+".xml"; QFile f(fileName); if (!f.open(IO_WriteOnly)) { err("Cannot open file %s for writing!\n",fileName.data()); return; } FTextStream t(&f); //t.setEncoding(FTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" << nd->getOutputFileBase() << "\" kind=\"namespace\">" << endl; t << " <compoundname>"; writeXMLString(t,nd->name()); t << "</compoundname>" << endl; #endif writeInnerClasses(db,nd->getClassSDict()); writeInnerNamespaces(db,nd->getNamespaceSDict()); if (nd->getMemberGroupSDict()) { MemberGroupSDict::Iterator mgli(*nd->getMemberGroupSDict()); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { generateSqlite3Section(db,nd,mg->members(),"user-defined",mg->header(), mg->documentation()); } } QListIterator<MemberList> mli(nd->getMemberLists()); MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) { if ((ml->listType()&MemberListType_declarationLists)!=0) { generateSqlite3Section(db,nd,ml,"user-defined");//g_xmlSectionMapper.find(ml->listType())); } } #if 0 generateXMLSection(nd,ti,t,&nd->decDefineMembers,"define"); generateXMLSection(nd,ti,t,&nd->decProtoMembers,"prototype"); generateXMLSection(nd,ti,t,&nd->decTypedefMembers,"typedef"); generateXMLSection(nd,ti,t,&nd->decEnumMembers,"enum"); generateXMLSection(nd,ti,t,&nd->decFuncMembers,"func"); generateXMLSection(nd,ti,t,&nd->decVarMembers,"var"); t << " <briefdescription>" << endl; writeXMLDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription()); t << " </briefdescription>" << endl; t << " <detaileddescription>" << endl; writeXMLDocBlock(t,nd->docFile(),nd->docLine(),nd,0,nd->documentation()); t << " </detaileddescription>" << endl; t << " <location file=\"" << nd->getDefFileName() << "\" line=\"" << nd->getDefLine() << "\"" << " column=\"" << nd->getDefColumn() << "\"/>" << endl ; t << " </compounddef>" << endl; t << "</doxygen>" << endl; ti << " </compound>" << endl; #endif }
static void generateSqlite3ForClass(sqlite3 *db, ClassDef *cd) { // + brief description // + detailed description // + template argument list(s) // - include file // + member groups // + inheritance diagram // + list of direct super classes // + list of direct sub classes // + list of inner classes // + collaboration diagram // + list of all members // + user defined member sections // + standard member sections // + detailed member documentation // - examples using the class if (cd->isReference()) return; // skip external references. if (cd->isHidden()) return; // skip hidden classes. if (cd->name().find('@')!=-1) return; // skip anonymous compounds. if (cd->templateMaster()!=0) return; // skip generated template instances. msg("Generating Sqlite3 output for class %s\n",cd->name().data()); //int idx,rc; //sqlite3_stmt *stmt ; // + compounddef //stmt = i_s_compounddef; bindTextParameter(i_s_compounddef,":name",cd->name()); bindTextParameter(i_s_compounddef,":kind",cd->compoundTypeString()); bindIntParameter(i_s_compounddef,":prot",cd->protection()); bindTextParameter(i_s_compounddef,":refid",cd->getOutputFileBase()); int id_file = insertFile(db,cd->getDefFileName().data()); bindIntParameter(i_s_compounddef,":id_file",id_file); bindIntParameter(i_s_compounddef,":line",cd->getDefLine()); bindIntParameter(i_s_compounddef,":column",cd->getDefColumn()); step(db,i_s_compounddef); sqlite3_int64 id_compound=0 ; id_compound = sqlite3_last_insert_rowid(db); // + basecompoundref if (cd->baseClasses()) { BaseClassListIterator bcli(*cd->baseClasses()); BaseClassDef *bcd; for (bcli.toFirst();(bcd=bcli.current());++bcli) { bindTextParameter(i_s_basecompoundref,":refid",bcd->classDef->getOutputFileBase()); bindIntParameter(i_s_basecompoundref,":prot",bcd->prot); bindIntParameter(i_s_basecompoundref,":virt",bcd->virt); if (!bcd->templSpecifiers.isEmpty()) { bindTextParameter(i_s_basecompoundref,":base",insertTemplateSpecifierInScope(bcd->classDef->name(),bcd->templSpecifiers)); } else { bindTextParameter(i_s_basecompoundref,":base",bcd->classDef->displayName()); } bindTextParameter(i_s_basecompoundref,":derived",cd->displayName()); step(db,i_s_basecompoundref); } } // + derivedcompoundref if (cd->subClasses()) { BaseClassListIterator bcli(*cd->subClasses()); BaseClassDef *bcd; for (bcli.toFirst();(bcd=bcli.current());++bcli) { bindTextParameter(i_s_derivedcompoundref,":base",cd->displayName()); bindTextParameter(i_s_derivedcompoundref,":dervied",bcd->classDef->displayName()); bindTextParameter(i_s_derivedcompoundref,":refid",bcd->classDef->getOutputFileBase()); bindIntParameter(i_s_derivedcompoundref,":prot",bcd->prot); bindIntParameter(i_s_derivedcompoundref,":virt",bcd->virt); step(db,i_s_derivedcompoundref); } } /////////////////////////////////////////////////////////////////// // INCLUDEINFO IncludeInfo *ii=cd->includeInfo(); if (ii) { QCString nm = ii->includeName; if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName(); if (!nm.isEmpty()) { bindTextParameter(c_s_includes,":refid",ii->fileDef->getOutputFileBase()); bindIntParameter(c_s_includes,":local",ii->local); bindTextParameter(c_s_includes,":name",nm); int count=step(db,c_s_includes,TRUE); if ( count==0 ) { bindTextParameter(i_s_includes,":refid",ii->fileDef->getOutputFileBase()); bindIntParameter(i_s_includes,":local",ii->local); bindTextParameter(i_s_includes,":name",nm); step(db,i_s_includes); } } } /////////////////////////////////////////////////////////////////// writeInnerClasses(db,cd->getClassSDict()); writeTemplateList(db,cd); if (cd->getMemberGroupSDict()) { MemberGroupSDict::Iterator mgli(*cd->getMemberGroupSDict()); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { generateSqlite3Section(db,cd,mg->members(),"user-defined",mg->header(), mg->documentation()); } } QListIterator<MemberList> mli(cd->getMemberLists()); MemberList *ml; for (mli.toFirst();(ml=mli.current());++mli) { if ((ml->listType()&MemberListType_detailedLists)==0) { generateSqlite3Section(db,cd,ml,"user-defined");//g_xmlSectionMapper.find(ml->listType())); } } }
void NamespaceDef::writeTagFile(FTextStream &tagFile) { tagFile << " <compound kind=\"namespace\">" << endl; tagFile << " <name>" << convertToXML(name()) << "</name>" << endl; tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl; QCString idStr = id(); if (!idStr.isEmpty()) { tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl; } QListIterator<LayoutDocEntry> eli( LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace)); LayoutDocEntry *lde; for (eli.toFirst(); (lde=eli.current()); ++eli) { switch (lde->kind()) { case LayoutDocEntry::NamespaceNestedNamespaces: { if (namespaceSDict) { SDict<NamespaceDef>::Iterator ni(*namespaceSDict); NamespaceDef *nd; for (ni.toFirst(); (nd=ni.current()); ++ni) { if (nd->isLinkableInProject()) { tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl; } } } } break; case LayoutDocEntry::NamespaceClasses: { if (classSDict) { SDict<ClassDef>::Iterator ci(*classSDict); ClassDef *cd; for (ci.toFirst(); (cd=ci.current()); ++ci) { if (cd->isLinkableInProject()) { tagFile << " <class kind=\"" << cd->compoundTypeString() << "\">" << convertToXML(cd->name()) << "</class>" << 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 << " </compound>" << endl; }
/*! Count the number of members in this list that are visible in * the declaration part of a compound's documentation page. */ void MemberList::countDecMembers(bool countEnumValues,GroupDef *gd) { if (m_numDecMembers!=-1) return; //printf("----- countDecMembers count=%d ----\n",count()); m_varCnt=m_funcCnt=m_enumCnt=m_enumValCnt=0; m_typeCnt=m_protoCnt=m_defCnt=m_friendCnt=0; m_numDecMembers=0; QListIterator<MemberDef> mli(*this); MemberDef *md; for (mli.toFirst();(md=mli.current());++mli) { //printf("MemberList::countDecMembers(md=%s,%d)\n",md->name().data(),md->isBriefSectionVisible()); if (md->isBriefSectionVisible()) { switch(md->memberType()) { case MemberType_Variable: // fall through case MemberType_Event: // fall through case MemberType_Property: m_varCnt++,m_numDecMembers++; break; // apparently necessary to get this to show up in declarations section? case MemberType_Interface: // fall through case MemberType_Service: // fall through case MemberType_Function: // fall through case MemberType_Signal: // fall through case MemberType_DCOP: // fall through case MemberType_Slot: if (!md->isRelated() || md->getClassDef()) m_funcCnt++,m_numDecMembers++; break; case MemberType_Enumeration: m_enumCnt++,m_numDecMembers++; break; case MemberType_EnumValue: if (countEnumValues) m_enumValCnt++,m_numDecMembers++; break; case MemberType_Typedef: m_typeCnt++,m_numDecMembers++; break; //case MemberType_Prototype: m_protoCnt++,m_numDecMembers++; break; case MemberType_Define: if (Config_getBool("EXTRACT_ALL") || md->argsString() || !md->initializer().isEmpty() || md->hasDocumentation() ) m_defCnt++,m_numDecMembers++; break; case MemberType_Friend: m_friendCnt++,m_numDecMembers++; break; default: err("Unknown member type found for member `%s'\n!",md->name().data()); } } } if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; for (;(mg=mgli.current());++mgli) { mg->countDecMembers(gd); m_varCnt+=mg->varCount(); m_funcCnt+=mg->funcCount(); m_enumCnt+=mg->enumCount(); m_enumValCnt+=mg->enumValueCount(); m_typeCnt+=mg->typedefCount(); m_protoCnt+=mg->protoCount(); m_defCnt+=mg->defineCount(); m_friendCnt+=mg->friendCount(); m_numDecMembers+=mg->numDecMembers(); } } //printf("----- end countDecMembers ----\n"); //printf("MemberList::countDecMembers()=%d\n",m_numDecMembers); }
/** Writes the list of members to the output. * @param ol Output list to write to * @param cd non-null if this list is part of class documentation. * @param nd non-null if this list is part of namespace documentation. * @param fd non-null if this list is part of file documentation. * @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 * given class as inherited members, parameter cd points to the * class containing the members. * @param lt Type of list that is inherited from. */ 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, bool showInline,ClassDef *inheritedFrom,MemberListType lt) { (void)showEnumValues; // unused //printf("----- writeDeclaration() this=%p ---- inheritedFrom=%p\n",this,inheritedFrom); static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); QCString inheritId; countDecMembers(/*showEnumValues*/FALSE,gd); // count members shown in this section Definition *ctx = cd; if (ctx==0 && nd) ctx = nd; if (ctx==0 && gd) ctx = gd; if (ctx==0 && fd) ctx = fd; //printf("%p: MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d inheritedFrom=%p\n", // this,title,subtitle,numDecMembers(),inheritedFrom); int num = numDecMembers(); if (inheritedFrom) { //if ( cd && !optimizeVhdl && countInheritableMembers(inheritedFrom)>0 ) if ( cd && !optimizeVhdl && cd->countMembersIncludingGrouped( m_listType,inheritedFrom,TRUE)>0 ) { ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); inheritId = substitute(listTypeAsString(lt),"-","_")+"_"+ stripPath(cd->getOutputFileBase()); if (title) { ol.writeInheritedSectionTitle(inheritId,cd->getReference(), cd->getOutputFileBase(), cd->anchor(),title,cd->displayName()); } ol.popGeneratorState(); } } else if (num>0) { if (title) { if (showInline) { ol.startInlineHeader(); } else { ol.startMemberHeader(listTypeAsString(m_listType)); } ol.parseText(title); if (showInline) { ol.endInlineHeader(); } else { ol.endMemberHeader(); } } if (subtitle) { QCString st=subtitle; st = st.stripWhiteSpace(); if (!st.isEmpty()) { ol.startMemberSubtitle(); ol.generateDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE,0,FALSE,FALSE); ol.endMemberSubtitle(); } } } if (num>0) { // TODO: Two things need to be worked out for proper VHDL output: // 1. Signals and types under the group need to be // formatted to associate them with the group somehow // indentation, or at the very least, extra space after // the group is done // 2. This might need to be repeated below for memberGroupLists if (optimizeVhdl) // use specific declarations function { VhdlDocGen::writeVhdlDeclarations(this,ol,0,cd,0,0); } else { writePlainDeclarations(ol,cd,nd,fd,gd,compoundType,inheritedFrom,inheritId); } //printf("memberGroupList=%p\n",memberGroupList); if (memberGroupList) { MemberGroupListIterator mgli(*memberGroupList); MemberGroup *mg; while ((mg=mgli.current())) { bool hasHeader=!mg->header().isEmpty() && mg->header()!="[NOHEADER]"; if (inheritId.isEmpty()) { //printf("mg->header=%s hasHeader=%d\n",mg->header().data(),hasHeader); ol.startMemberGroupHeader(hasHeader); if (hasHeader) { ol.parseText(mg->header()); } ol.endMemberGroupHeader(); if (!mg->documentation().isEmpty()) { //printf("Member group has docs!\n"); ol.startMemberGroupDocs(); ol.generateDoc("[generated]",-1,ctx,0,mg->documentation()+"\n",FALSE,FALSE); ol.endMemberGroupDocs(); } ol.startMemberGroup(); } //printf("--- mg->writePlainDeclarations ---\n"); mg->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId); if (inheritId.isEmpty()) { ol.endMemberGroup(hasHeader); } ++mgli; } } } if (inheritedFrom && cd) { // also add members that of this list type, that are grouped together // in a separate list in class 'inheritedFrom' cd->addGroupedInheritedMembers(ol,m_listType,inheritedFrom,inheritId); } //printf("----- end writeDeclaration() ----\n"); }