int MemberList::countEnumValues(MemberDef *md,bool setAnonEnumType) const { int enumVars=0; MemberListIterator vmli(*this); MemberDef *vmd; QCString name(md->name()); int i=name.findRev("::"); if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?) if (name[0]=='@') // anonymous enum => append variables { for ( ; (vmd=vmli.current()) ; ++vmli) { QCString vtype=vmd->typeString(); if ((vtype.find(name))!=-1) { enumVars++; if (setAnonEnumType) { vmd->setAnonymousEnumType(md); } } } } return enumVars; }
void buildVariableDict(ClassDef *inst, ClassDef *cl) { MemberList *instPort=NULL; MemberList *classPort=NULL; instPortDict.clear(); classPortDict.clear(); if(inst!=NULL) instPort=inst->getMemberList(MemberListType_variableMembers); if(cl!=NULL) classPort=cl->getMemberList(MemberListType_variableMembers); if(instPort) { MemberListIterator mnii(*instPort); MemberDef *md; for (mnii.toFirst();(md=mnii.current());++mnii){ //printf("\n Inst: %s %s %s",md->name().data(),md->getOutputFileBase().data(),md->getReference().data()); instPortDict.insert(md->name().data(),md); } } if(classPort) { MemberListIterator mnii(*classPort); MemberDef *md; for (mnii.toFirst();(md=mnii.current());++mnii){ // printf("\n Class: %s %s %s",md->name().data(),md->getOutputFileBase().data(),md->getReference().data()); classPortDict.insert(md->name().data(),md); } } }//funct
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); }
MemberDef* VerilogDocGen::findDefinition(ClassDef *cd, QCString& memName){ MemberDef *md; MemberList *ml= cd->getMemberList(MemberListType_variableMembers); if(ml==NULL) return NULL; MemberListIterator fmni(*ml); for (fmni.toFirst();(md=fmni.current());++fmni) { if(md->getMemberSpecifiers()==VerilogDocGen::INCLUDE){ ClassDef* cdef= VhdlDocGen::getClass(md->name()); if(cdef){ MemberDef* mdd=VerilogDocGen::findMemberDef(cdef,memName,MemberListType_variableMembers,-1,false); MemberList *ml= cdef->getMemberList(MemberListType_variableMembers); assert(ml); if(mdd) return mdd; MemberListIterator fmni(*ml); //assert(false); } } }//for return NULL; }//findDefinition
void buildVariableDict(ClassDef *cd) { if(cd==0) return; variableDict.clear(); MemberList* ml=cd->getMemberList(MemberListType_variableMembers); if(ml) { MemberListIterator mnii(*ml); MemberDef *md; for (mnii.toFirst();(md=mnii.current());++mnii) { VerilogDocGen::adjustMemberName(md); variableDict.insert(md->name().data(),md); } } ml=cd->getMemberList(MemberListType_pubMethods); if(ml) { MemberListIterator mnii(*ml); MemberDef *md; for (mnii.toFirst();(md=mnii.current());++mnii) variableDict.insert(md->name().data(),md); } }
static void generateSqlite3Section(sqlite3*db, Definition *d, MemberList *ml,const char * /*kind*/,const char * /*header*/=0, const char * /*documentation*/=0) { if (ml==0) return; MemberListIterator mli(*ml); MemberDef *md; int count=0; for (mli.toFirst();(md=mli.current());++mli) { // namespace members are also inserted in the file scope, but // to prevent this duplication in the XML output, we filter those here. if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) { count++; } } if (count==0) return; // empty list for (mli.toFirst();(md=mli.current());++mli) { // namespace members are also inserted in the file scope, but // to prevent this duplication in the XML output, we filter those here. //if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) { generateSqlite3ForMember(db,md,d); } } }
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::addListReferences(Definition *def) { MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { if (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup) { md->addListReference(def); if (md->memberType()==MemberDef::Enumeration && md->enumFieldList()) { MemberListIterator vmli(*md->enumFieldList()); 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 MemberList::addListReferences(Definition *def) { MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { if (!md->isAlias() && (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup)) { md->addListReference(def); const 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); } } }
bool MemberList::declVisible() const { MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()); ++mli ) { if (md->isBriefSectionVisible()) { switch (md->memberType()) { case MemberType_Define: // fall through case MemberType_Typedef: // fall through case MemberType_Variable: // fall through case MemberType_Function: // fall through case MemberType_Signal: // fall through case MemberType_Slot: // fall through case MemberType_DCOP: // fall through case MemberType_Property: // fall through case MemberType_Interface: // fall through case MemberType_Service: // fall through case MemberType_Clause: // fall through case MemberType_Event: return TRUE; case MemberType_Enumeration: { // if this is an anonymous enum and there are variables of this // enum type (i.e. enumVars>0), then we do not show the enum here. if (countEnumValues(md,FALSE)==0) // show enum here { return TRUE; } } break; case MemberType_Friend: return TRUE; case MemberType_EnumValue: { if (m_inGroup) { return TRUE; } } break; } } } return FALSE; }
static void lookupSymbol(Definition *d) { if (d!=Doxygen::globalScope && // skip the global namespace symbol d->name().at(0)!='@' // skip anonymous stuff ) { printf("Symbol info\n"); printf("-----------\n"); printf("Name: %s\n",d->name().data()); printf("File: %s\n",d->getDefFileName().data()); printf("Line: %d\n",d->getDefLine()); // depending on the definition type we can case to the appropriate // derived to get additional information switch (d->definitionType()) { case Definition::TypeClass: { ClassDef *cd = (ClassDef *)d; printf("Kind: %s\n",cd->compoundTypeString().data()); } break; case Definition::TypeFile: { FileDef *fd = (FileDef *)d; printf("Kind: File: #includes %d other files\n", fd->includeFileList() ? fd->includeFileList()->count() : 0); } break; case Definition::TypeNamespace: { NamespaceDef *nd = (NamespaceDef *)d; printf("Kind: Namespace: contains %d classes and %d namespaces\n", nd->getClassSDict() ? nd->getClassSDict()->count() : 0, nd->getNamespaceSDict() ? nd->getNamespaceSDict()->count() : 0); } break; case Definition::TypeMember: { MemberDef *md = (MemberDef *)d; printf("Kind: %s\n",md->memberTypeName().data()); } break; default: // ignore groups/pages/packages/dirs for now break; } } }
// members in a table void MemberList::writeSimpleDocumentation(OutputList &ol, Definition *container) { countDocMembers(FALSE); //printf("MemberList count=%d\n",numDocMembers()); if (numDocMembers()==0) return; ol.startMemberDocSimple(); MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { md->writeMemberDocSimple(ol,container); } ol.endMemberDocSimple(); }
int MemberGroup::countGroupedInheritedMembers(MemberListType lt) { //printf("** countGroupedInheritedMembers()\n"); int count=0; MemberListIterator li(*memberList); MemberDef *md; for (li.toFirst();(md=li.current());++li) { //printf("matching %d == %d\n",lt,md->getSectionList(m_parent)->listType()); if (lt==md->getSectionList(m_parent)->listType()) { count++; } } return count; }
static void writeLineNumber(CodeOutputInterface &ol,FileDef *fd,uint line) { Definition *d = fd ? fd->getSourceDefinition(line) : 0; if (d && d->isLinkable()) { g_currentDefinition=d; g_currentLine=line; MemberDef *md = fd->getSourceMember(line); if (md && md->isLinkable()) // link to member { if (g_currentMemberDef!=md) // new member, start search for body { g_searchForBody=TRUE; g_insideBody=FALSE; g_bracketCount=0; } g_currentMemberDef=md; ol.writeLineNumber(md->getReference(), md->getOutputFileBase(), md->anchor(), line); } else // link to compound { g_currentMemberDef=0; ol.writeLineNumber(d->getReference(), d->getOutputFileBase(), d->anchor(), line); } } else // no link { ol.writeLineNumber(0,0,0,line); } // set search page target if (Doxygen::searchIndex) { QCString lineAnchor; lineAnchor.sprintf("l%05d",line); ol.setCurrentDoc(fd,lineAnchor,TRUE); } //printf("writeLineNumber(%d) g_searchForBody=%d\n",line,g_searchForBody); }
void MemberGroup::insertMember(MemberDef *md) { //printf("MemberGroup::insertMember m_parent=%s memberList=%p count=%d" // " member section list: %p: md=%p:%s\n", // m_parent ? m_parent->name().data() : "<null>", // memberList->first() ? memberList->first()->getSectionList(m_parent) : 0, // memberList->count(), // md->getSectionList(m_parent), // md,md->name().data()); MemberDef *firstMd = memberList->first(); if (inSameSection && memberList->count()>0 && firstMd->getSectionList(m_parent)!=md->getSectionList(m_parent)) { inSameSection=FALSE; } else if (inDeclSection==0) { inDeclSection = md->getSectionList(m_parent); //printf("inDeclSection=%p type=%d\n",inDeclSection,inDeclSection->listType()); } memberList->append(md); // copy the group of the first member in the memberGroup GroupDef *gd; if (firstMd && (gd=firstMd->getGroupDef())) { md->setGroupDef(gd, firstMd->getGroupPri(), firstMd->getGroupFileName(), firstMd->getGroupStartLine(), firstMd->getGroupHasDocs()); gd->insertMember(md); } }
void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd, MemberListType lt, ClassDef *inheritedFrom,const QCString &inheritId) { //printf("** addGroupedInheritedMembers()\n"); MemberListIterator li(*memberList); MemberDef *md; for (li.toFirst();(md=li.current());++li) { //printf("matching %d == %d\n",lt,md->getSectionList(m_parent)->listType()); if (lt==md->getSectionList(m_parent)->listType()) { MemberList ml(lt); ml.append(md); ml.writePlainDeclarations(ol,cd,0,0,0,DefinitionIntf::TypeGroup,inheritedFrom,inheritId); } } }
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(); } } }
static void generateSqlite3Section(sqlite3*db, Definition *d, MemberList *ml,const char * /*kind*/,const char * /*header*/=0, const char * /*documentation*/=0) { if (ml==0) return; MemberListIterator mli(*ml); MemberDef *md; int count=0; for (mli.toFirst();(md=mli.current());++mli) { // namespace members are also inserted in the file scope, but // to prevent this duplication in the XML output, we filter those here. if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) { count++; } } if (count==0) return; // empty list #if 0 t << " <sectiondef kind=\"" << kind << "\">" << endl; if (header) { t << " <header>" << convertToXML(header) << "</header>" << endl; } if (documentation) { t << " <description>"; writeXMLDocBlock(t,d->docFile(),d->docLine(),d,0,documentation); t << "</description>" << endl; } #endif for (mli.toFirst();(md=mli.current());++mli) { // namespace members are also inserted in the file scope, but // to prevent this duplication in the XML output, we filter those here. //if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0) { generateSqlite3ForMember(db,md,d); } } //t << " </sectiondef>" << endl; }
// 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 ClangParser::linkMacro(CodeOutputInterface &ol,FileDef *fd, uint &line,uint &column,const char *text) { MemberName *mn=Doxygen::functionNameSDict->find(text); if (mn) { MemberNameIterator mni(*mn); MemberDef *md; for (mni.toFirst();(md=mni.current());++mni) { if (md->isDefine()) { writeMultiLineCodeLink(ol,fd,line,column,md,text); return; } } } codifyLines(ol,fd,text,line,column); }
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(); } } }
// members in a table void MemberList::writeSimpleDocumentation(OutputList &ol, Definition *container) { countDocMembers(FALSE); //printf("MemberList count=%d\n",numDocMembers()); if (numDocMembers()==0) return; ClassDef *cd = 0; if (container && container->definitionType()==Definition::TypeClass) { cd = (ClassDef*)container; } ol.startMemberDocSimple(cd && cd->isJavaEnum()); MemberListIterator mli(*this); MemberDef *md; for ( ; (md=mli.current()) ; ++mli) { md->writeMemberDocSimple(ol,container); } ol.endMemberDocSimple(cd && cd->isJavaEnum()); }
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::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(); }
void GroupDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const { ol.writeString(" <div class=\"navtab\">\n"); ol.writeString(" <table>\n"); MemberListIterator mli(*allMemberList); MemberDef *md; for (mli.toFirst(); (md=mli.current()); ++mli) { if (md->getGroupDef()==this && md->isLinkable()) { ol.writeString(" <tr><td class=\"navtab\">"); if (md->isLinkableInProject()) { if (md==currentMd) // selected item => highlight { ol.writeString("<a class=\"qindexHL\" "); } else { ol.writeString("<a class=\"qindex\" "); } ol.writeString("href=\""); ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor()); ol.writeString("\">"); ol.writeString(md->localName()); ol.writeString("</a>"); } ol.writeString("</td></tr>\n"); } } ol.writeString(" </table>\n"); ol.writeString(" </div>\n"); }
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 TooltipManager::writeTooltips(CodeOutputInterface &ol) { QDictIterator<Definition> di(p->tooltipInfo); Definition *d; for (di.toFirst();(d=di.current());++di) { DocLinkInfo docInfo; docInfo.name = d->qualifiedName(); docInfo.ref = d->getReference(); docInfo.url = d->getOutputFileBase(); docInfo.anchor = d->anchor(); SourceLinkInfo defInfo; if (d->getBodyDef() && d->getStartBodyLine()!=-1) { defInfo.file = d->getBodyDef()->name(); defInfo.line = d->getStartBodyLine(); defInfo.url = d->getSourceFileBase(); defInfo.anchor = d->getSourceAnchor(); } SourceLinkInfo declInfo; // TODO: fill in... QCString decl; if (d->definitionType()==Definition::TypeMember) { MemberDef *md = (MemberDef*)d; decl = md->declaration(); if (!decl.isEmpty() && decl.at(0)=='@') // hide enum values { decl.resize(0); } } ol.writeTooltip(di.currentKey(), // id docInfo, // symName decl, // decl d->briefDescriptionAsTooltip(), // desc defInfo, declInfo ); } }
void VerilogDocGen::writePlainVerilogDeclarations(MemberDef* mdef,MemberList* mlist,OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,int specifier){ ol.pushGeneratorState(); bool first=TRUE; MemberDef *md; MemberListIterator mli(*mlist); for ( ; (md=mli.current()); ++mli ) { int mems=md->getMemberSpecifiers(); if (md->isBriefSectionVisible() && (mems==specifier)) { if (first) ol.startMemberList(),first=FALSE; VerilogDocGen::writeVerilogDeclarations(md,ol,cd,nd,fd,gd,false); }//if }//for if (!first) ol.endMemberList(); }//plainDeclaration
void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const { static bool createSubDirs=Config_getBool("CREATE_SUBDIRS"); ol.writeString(" <div class=\"navtab\">\n"); ol.writeString(" <table>\n"); MemberList *allMemberList = getMemberList(MemberListType_allMembersList); if (allMemberList) { MemberListIterator mli(*allMemberList); MemberDef *md; for (mli.toFirst();(md=mli.current());++mli) { if (md->getNamespaceDef()==this && md->isLinkable() && !md->isEnumValue()) { ol.writeString(" <tr><td class=\"navtab\">"); if (md->isLinkableInProject()) { if (md==currentMd) // selected item => highlight { ol.writeString("<a class=\"qindexHL\" "); } else { ol.writeString("<a class=\"qindex\" "); } ol.writeString("href=\""); if (createSubDirs) ol.writeString("../../"); ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor()); ol.writeString("\">"); ol.writeString(convertToHtml(md->localName())); ol.writeString("</a>"); } ol.writeString("</td></tr>\n"); } } } ol.writeString(" </table>\n"); ol.writeString(" </div>\n"); }
void generateDEFForMember(MemberDef *md, FTextStream &t, Definition *def, const char* Prefix) { QCString memPrefix; // + declaration // - reimplements // - reimplementedBy // - exceptions // - const/volatile specifiers // - examples // + source definition // - source references // - source referenced by // - include code if (md->memberType()==MemberDef::EnumValue) return; QCString scopeName; if (md->getClassDef()) scopeName=md->getClassDef()->name(); else if (md->getNamespaceDef()) scopeName=md->getNamespaceDef()->name(); t << " " << Prefix << "-member = {" << endl; memPrefix = " "; memPrefix.append( Prefix ); memPrefix.append( "-mem-" ); QCString memType; bool isFunc=FALSE; switch (md->memberType()) { case MemberDef::Define: memType="define"; break; case MemberDef::EnumValue: ASSERT(0); break; case MemberDef::Property: memType="property"; break; case MemberDef::Event: memType="event"; break; case MemberDef::Variable: memType="variable"; break; case MemberDef::Typedef: memType="typedef"; break; case MemberDef::Enumeration: memType="enum"; break; case MemberDef::Function: memType="function"; isFunc=TRUE; break; case MemberDef::Signal: memType="signal"; isFunc=TRUE; break; case MemberDef::Friend: memType="friend"; isFunc=TRUE; break; case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break; case MemberDef::Slot: memType="slot"; isFunc=TRUE; break; } t << memPrefix << "kind = '" << memType << "';" << endl; t << memPrefix << "id = '" << md->getOutputFileBase() << "_1" << md->anchor() << "';" << endl; t << memPrefix << "virt = "; switch (md->virtualness()) { case Normal: t << "normal;" << endl; break; case Virtual: t << "virtual;" << endl; break; case Pure: t << "pure-virtual;" << endl; break; default: ASSERT(0); } t << memPrefix << "prot = "; switch(md->protection()) { case Public: t << "public;" << endl; break; case Protected: t << "protected;" << endl; break; case Private: t << "private;" << endl; break; case Package: t << "package;" << endl; break; } if (md->memberType()!=MemberDef::Define && md->memberType()!=MemberDef::Enumeration ) { QCString typeStr = replaceAnonymousScopes(md->typeString()); t << memPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl << typeStr << endl << "_EnD_oF_dEf_TeXt_;" << endl; } t << memPrefix << "name = '" << md->name() << "';" << endl; if (isFunc) //function { ArgumentList *declAl = new ArgumentList; LockingPtr<ArgumentList> defAl = md->argumentList(); stringToArgumentList(md->argsString(),declAl); QCString fcnPrefix = " " + memPrefix + "param-"; if (declAl->count()>0) { ArgumentListIterator declAli(*declAl); ArgumentListIterator defAli(*defAl); Argument *a; for (declAli.toFirst();(a=declAli.current());++declAli) { Argument *defArg = defAli.current(); t << memPrefix << "param = {" << endl; if (!a->attrib.isEmpty()) { t << fcnPrefix << "attributes = "; writeDEFString(t,a->attrib); t << ';' << endl; } if (!a->type.isEmpty()) { t << fcnPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl << a->type << endl << "_EnD_oF_dEf_TeXt_;" << endl; } if (!a->name.isEmpty()) { t << fcnPrefix << "declname = "; writeDEFString(t,a->name); t << ';' << endl; } if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name) { t << fcnPrefix << "defname = "; writeDEFString(t,defArg->name); t << ';' << endl; } if (!a->array.isEmpty()) { t << fcnPrefix << "array = "; writeDEFString(t,a->array); t << ';' << endl; } if (!a->defval.isEmpty()) { t << fcnPrefix << "defval = <<_EnD_oF_dEf_TeXt_" << endl << a->defval << endl << "_EnD_oF_dEf_TeXt_;" << endl; } if (defArg) ++defAli; t << " }; /*" << fcnPrefix << "-param */" << endl; } } delete declAl; } else if ( md->memberType()==MemberDef::Define && md->argsString()!=0) { ArgumentListIterator ali(*md->argumentList()); Argument *a; QCString defPrefix = " " + memPrefix + "def-"; for (ali.toFirst();(a=ali.current());++ali) { t << memPrefix << "param = {" << endl; t << defPrefix << "name = '" << a->type << "';" << endl; t << " }; /*" << defPrefix << "-param */" << endl; } } if (!md->initializer().isEmpty()) { t << memPrefix << "initializer = <<_EnD_oF_dEf_TeXt_" << endl << md->initializer() << endl << "_EnD_oF_dEf_TeXt_;" << endl; } // TODO: exceptions, const volatile if (md->memberType()==MemberDef::Enumeration) // enum { LockingPtr<MemberList> enumList = md->enumFieldList(); if (enumList!=0) { MemberListIterator emli(*enumList); MemberDef *emd; for (emli.toFirst();(emd=emli.current());++emli) { t << memPrefix << "enum = { enum-name = " << emd->name() << ';'; if (!emd->initializer().isEmpty()) { t << " enum-value = "; writeDEFString(t,emd->initializer()); t << ';'; } t << " };" << endl; } } } t << memPrefix << "desc-file = '" << md->getDefFileName() << "';" << endl; t << memPrefix << "desc-line = '" << md->getDefLine() << "';" << endl; t << memPrefix << "briefdesc = <<_EnD_oF_dEf_TeXt_" << endl << md->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl; t << memPrefix << "documentation = <<_EnD_oF_dEf_TeXt_" << endl << md->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl; //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers()); LockingPtr<MemberSDict> mdict = md->getReferencesMembers(); if (!mdict.isNull()) { MemberSDict::Iterator mdi(*mdict); MemberDef *rmd; QCString refPrefix = " " + memPrefix + "ref-"; for (mdi.toFirst();(rmd=mdi.current());++mdi) { if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef()) { t << memPrefix << "referenceto = {" << endl; t << refPrefix << "id = '" << rmd->getBodyDef()->getOutputFileBase() << "_1" // encoded `:' character (see util.cpp:convertNameToFile) << rmd->anchor() << "';" << endl; t << refPrefix << "line = '" << rmd->getStartBodyLine() << "';" << endl; QCString scope = rmd->getScopeString(); QCString name = rmd->name(); if (!scope.isEmpty() && scope!=def->name()) { name.prepend(scope+"::"); } t << refPrefix << "name = "; writeDEFString(t,name); t << ';' << endl << " };" << endl; } } /* for (mdi.toFirst...) */ } mdict = md->getReferencedByMembers(); if (!mdict.isNull()) { MemberSDict::Iterator mdi(*mdict); MemberDef *rmd; QCString refPrefix = " " + memPrefix + "ref-"; for (mdi.toFirst();(rmd=mdi.current());++mdi) { if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef()) { t << memPrefix << "referenceby = {" << endl; t << refPrefix << "id = '" << rmd->getBodyDef()->getOutputFileBase() << "_1" // encoded `:' character (see util.cpp:convertNameToFile) << rmd->anchor() << "';" << endl; t << refPrefix << "line = '" << rmd->getStartBodyLine() << "';" << endl; QCString scope = rmd->getScopeString(); QCString name = rmd->name(); if (!scope.isEmpty() && scope!=def->name()) { name.prepend(scope+"::"); } t << refPrefix << "name = "; writeDEFString(t,name); t << ';' << endl << " };" << endl; } } /* for (mdi.toFirst...) */ } t << " }; /* " << Prefix << "-member */" << endl; }