static int compItems(void *item1,void *item2) { ClassDef *c1=(ClassDef *)item1; ClassDef *c2=(ClassDef *)item2; static bool b = Config_getBool("SORT_BY_SCOPE_NAME"); //printf("compItems: %d %s<->%s\n",b,c1->qualifiedName().data(),c2->qualifiedName().data()); if (b) { return stricmp(c1->name(), c2->name()); } else { return stricmp(c1->className(), c2->className()); } }
bool GroupDef::addClass(const ClassDef *cd) { static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); if (cd->isHidden()) return FALSE; if (classSDict->find(cd->qualifiedName())==0) { QCString qn = cd->qualifiedName(); //printf("--- addClass %s sort=%d\n",qn.data(),sortBriefDocs); if (sortBriefDocs) { classSDict->inSort(cd->qualifiedName(),cd); } else { int i=qn.findRev("::"); if (i==-1) i=qn.find('.'); bool found=FALSE; //printf("i=%d\n",i); if (i!=-1) { // add nested classes (e.g. A::B, A::C) after their parent (A) in // order of insertion QCString scope = qn.left(i); int j=classSDict->findAt(scope); if (j!=-1) { while (j<(int)classSDict->count() && classSDict->at(j)->qualifiedName().left(i)==scope) { //printf("skipping over %s\n",classSDict->at(j)->qualifiedName().data()); j++; } //printf("Found scope at index %d\n",j); classSDict->insertAt(j,cd->qualifiedName(),cd); found=TRUE; } } if (!found) // no insertion point found -> just append { classSDict->append(cd->qualifiedName(),cd); } } return TRUE; } return FALSE; }
bool NamespaceDef::isLinkableInProject() const { int i = name().findRev("::"); if (i==-1) i=0; else i+=2; static bool extractAnonNs = Config_getBool("EXTRACT_ANON_NSPACES"); if (extractAnonNs && // extract anonymous ns name().mid(i,20)=="anonymous_namespace{" // correct prefix ) // not disabled by config { return TRUE; } return !name().isEmpty() && name().at(i)!='@' && // not anonymous (hasDocumentation() || getLanguage()==SrcLangExt_CSharp) && // documented !isReference() && // not an external reference !isHidden() && // not hidden !isArtificial(); // or artificial }
void FileDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title) { static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); MemberList * ml = getMemberList(lt); if (ml) { if (optVhdl) // use specific declarations function { VhdlDocGen::writeVhdlDeclarations(ml,ol,0,0,this,0); } else { ml->writeDeclarations(ol,0,0,this,0,title,0); } } }
void Definition::addToMap(const char *name,Definition *d) { bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); QCString symbolName = name; int index=computeQualifiedIndex(symbolName); if (!vhdlOpt && index!=-1) symbolName=symbolName.mid(index+2); if (!symbolName.isEmpty()) { //printf("******* adding symbol `%s' (%p)\n",symbolName.data(),d); DefinitionIntf *di=Doxygen::symbolMap->find(symbolName); //printf(" addToMap(%p): looking for symbol %s: %p\n",d,symbolName.data(),di); if (di==0) // new Symbol { //printf(" new symbol!\n"); Doxygen::symbolMap->insert(symbolName,d); } else // existing symbol { //printf(" existing symbol: "); if (di->definitionType()==DefinitionIntf::TypeSymbolList) // already multiple symbols { //printf("adding to exiting list\n"); DefinitionList *dl = (DefinitionList*)di; dl->append(d); } else // going from one to two symbols { Doxygen::symbolMap->take(symbolName); DefinitionList *dl = new DefinitionList; //printf("replacing symbol by list %p with elements %p and %p\n",dl,di,d); dl->append((Definition*)di); dl->append(d); Doxygen::symbolMap->insert(symbolName,dl); } } // auto resize if needed static int sizeIndex=9; if (Doxygen::symbolMap->size()>SDict_primes[sizeIndex]) { Doxygen::symbolMap->resize(SDict_primes[++sizeIndex]); } d->_setSymbolName(symbolName); } }
void HtmlDocVisitor::visit(DocFormula *f) { if (m_hide) return; bool bDisplay = !f->isInline(); if (bDisplay) { forceEndParagraph(f); m_t << "<p class=\"formulaDsp\">" << endl; } if (Config_getBool("USE_MATHJAX")) { QCString text = f->text(); bool closeInline = FALSE; if (!bDisplay && !text.isEmpty() && text.at(0)=='$' && text.at(text.length()-1)=='$') { closeInline=TRUE; text = text.mid(1,text.length()-2); m_t << "\\("; } m_t << convertToHtml(text); if (closeInline) { m_t << "\\)"; } } else { m_t << "<img class=\"formula" << (bDisplay ? "Dsp" : "Inl"); m_t << "\" alt=\""; filterQuotedCdataAttr(f->text()); m_t << "\""; /// @todo cache image dimensions on formula generation and give height/width /// for faster preloading and better rendering of the page m_t << " src=\"" << f->relPath() << f->name() << ".png\"/>"; } if (bDisplay) { m_t << endl << "</p>" << endl; forceStartParagraph(f); } }
void generateDirDocs(OutputList &ol) { DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); for (sdi.toFirst();(dir=sdi.current());++sdi) { dir->writeDocumentation(ol); } if (Config_getBool("DIRECTORY_GRAPH")) { SDict<DirRelation>::Iterator rdi(Doxygen::dirRelations); DirRelation *dr; for (rdi.toFirst();(dr=rdi.current());++rdi) { dr->writeDocumentation(ol); } } }
NamespaceDef::NamespaceDef(const char *df,int dl,int dc, const char *name,const char *lref, const char *fName, const char*type, bool isPublished) : Definition(df,dl,dc,name) ,m_isPublished(isPublished) { if (fName) { fileName = stripExtension(fName); } else { fileName="namespace"; fileName+=name; } classSDict = new ClassSDict(17); namespaceSDict = new NamespaceSDict(17); m_innerCompounds = new SDict<Definition>(17); usingDirList = 0; usingDeclList = 0; m_allMembersDict = 0; setReference(lref); memberGroupSDict = new MemberGroupSDict; memberGroupSDict->setAutoDelete(TRUE); visited=FALSE; m_subGrouping=Config_getBool("SUBGROUPING"); if (type && !strcmp("module", type)) { m_type = MODULE; } else if (type && !strcmp("constants", type)) { m_type = CONSTANT_GROUP; } else if (type && !strcmp("library", type)) { m_type = LIBRARY; } else { m_type = NAMESPACE; } }
void LatexDocVisitor::visitPre(DocXRefItem *x) { if (m_hide) return; m_t << "\\begin{Desc}" << endl; bool anonymousEnum = x->file()=="@"; m_t << "\\item["; if (Config_getBool("PDF_HYPERLINKS") && !anonymousEnum) { m_t << "\\hyperlink{" << stripPath(x->file()) << "_" << x->anchor() << "}{"; } else { m_t << "{\\bf "; } m_insideItem=TRUE; filter(x->title()); m_insideItem=FALSE; m_t << "}]"; }
void FileDef::writeIncludedByGraph(OutputList &ol) { if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDED_BY_GRAPH")*/) { //printf("Graph for file %s\n",name().data()); DotInclDepGraph incDepGraph(this,TRUE); if (!incDepGraph.isTrivial() && !incDepGraph.isTooBig()) { ol.startTextBlock(); ol.disable(OutputGenerator::Man); ol.startInclDepGraph(); ol.parseText(theTranslator->trInclByDepGraph()); ol.endInclDepGraph(incDepGraph); ol.enableAll(); ol.endTextBlock(TRUE); } //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase()); } }
void LatexDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor) { if (ref.isEmpty() && Config_getBool("PDF_HYPERLINKS")) // internal PDF link { m_t << "\\hyperlink{"; if (!file.isEmpty()) m_t << stripPath(file); if (!file.isEmpty() && !anchor.isEmpty()) m_t << "_"; if (!anchor.isEmpty()) m_t << anchor; m_t << "}{"; } else if (ref.isEmpty()) // internal non-PDF link { m_t << "\\doxyref{"; } else // external link { m_t << "{\\bf "; } }
void DirDef::writeDirectoryGraph(OutputList &ol) { // write graph dependency graph if (/*Config_getBool("DIRECTORY_GRAPH") &&*/ Config_getBool("HAVE_DOT")) { DotDirDeps dirDep(this); if (!dirDep.isTrivial()) { msg("Generating dependency graph for directory %s\n",displayName().data()); ol.disable(OutputGenerator::Man); ol.startParagraph(); ol.startDirDepGraph(); //TODO: ol.parseText(theTranslator->trDirDepGraph()); ol.endDirDepGraph(dirDep); ol.endParagraph(); ol.enableAll(); } } }
void GroupDef::writeGroupGraph(OutputList &ol) { if (Config_getBool("HAVE_DOT") /*&& Config_getBool("GROUP_GRAPHS")*/ ) { DotGroupCollaboration graph(this); if (!graph.isTrivial()) { msg("Generating dependency graph for group %s\n",qualifiedName().data()); ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); //ol.startParagraph(); ol.startGroupCollaboration(); ol.parseText(theTranslator->trCollaborationDiagram(title)); ol.endGroupCollaboration(graph); //ol.endParagraph(); ol.popGeneratorState(); } } }
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 DirDef::writeSubDirList(OutputList &ol) { // write subdir list if (m_subdirs.count()>0) { ol.startMemberHeader(); ol.parseText(theTranslator->trDir(TRUE,FALSE)); ol.endMemberHeader(); ol.startMemberList(); DirDef *dd=m_subdirs.first(); while (dd) { ol.startMemberItem(0); ol.parseText(theTranslator->trDir(FALSE,TRUE)+" "); ol.insertMemberAlign(); ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); ol.endMemberItem(); if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { Doxygen::tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl; } if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { ol.startParagraph(); ol.startMemberDescription(); ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(), FALSE, // indexWords FALSE, // isExample 0, // exampleName FALSE, // single line TRUE // link from index ); ol.endMemberDescription(); ol.endParagraph(); } dd=m_subdirs.next(); } ol.endMemberList(); } }
void CiteDict::resolve() { QStrList &citeBibFiles = Config_getList("CITE_BIB_FILES"); if (citeBibFiles.count()==0 || m_entries.count()==0) return; // nothing to cite QCString &outputDirectory = Config_getString("OUTPUT_DIRECTORY"); if (outputDirectory.isEmpty()) { outputDirectory=QDir::currentDirPath(); } QDir d(outputDirectory); d.mkdir("bib"); uint pid = portable_pid(); m_baseFileName.sprintf("doxygen_bibtex_%d",pid); m_baseFileName.prepend(outputDirectory+"/bib/"); if (writeAux() && writeBst() && execute()) { parse(); clean(); } if (Config_getBool("GENERATE_LATEX")) { // copy bib files to the latex output dir QStrList &citeDataList = Config_getList("CITE_BIB_FILES"); QCString latexOutputDir = Config_getString("LATEX_OUTPUT")+"/"; const char *bibdata = citeDataList.first(); while (bibdata) { QCString bibFile = bibdata; if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib"; if (!bibFile.isEmpty()) { copyFile(bibFile,latexOutputDir+bibFile); } bibdata = citeDataList.next(); } } }
/*! Write code of this definition into the documentation */ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) { makeResident(); ol.pushGeneratorState(); //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(), // m_startBodyLine,m_endBodyLine,m_bodyDef); if (Config_getBool("INLINE_SOURCES") && m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->endLine>=m_impl->body->startLine && m_impl->body->fileDef) { QCString codeFragment; int actualStart=m_impl->body->startLine,actualEnd=m_impl->body->endLine; if (readCodeFragment(m_impl->body->fileDef->absFilePath(), actualStart,actualEnd,codeFragment) ) { //printf("Adding code fragement '%s' ext='%s'\n", // codeFragment.data(),m_impl->defFileExt.data()); ParserInterface *pIntf = Doxygen::parserManager->getParser(m_impl->defFileExt); pIntf->resetCodeParserState(); //printf("Read:\n`%s'\n\n",codeFragment.data()); MemberDef *thisMd = 0; if (definitionType()==TypeMember) thisMd = (MemberDef *)this; ol.startCodeFragment(); pIntf->parseCode(ol, // codeOutIntf scopeName, // scope codeFragment, // input FALSE, // isExample 0, // exampleName m_impl->body->fileDef, // fileDef actualStart, // startLine actualEnd, // endLine TRUE, // inlineFragment thisMd, // memberDef FALSE // show line numbers ); ol.endCodeFragment(); } } ol.popGeneratorState(); }
void RTFDocVisitor::visitPre(DocHRef *href) { if (m_hide) return; DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHRef)}\n"); if (Config_getBool("RTF_HYPERLINKS")) { m_t << "{\\field " "{\\*\\fldinst " "{ HYPERLINK \\\\l \"" << href->url() << "\" " "}{}" "}" "{\\fldrslt " "{\\cs37\\ul\\cf2 "; } else { m_t << "{\\f2 "; } m_lastIsPara=FALSE; }
QCString DiagramItem::label() const { QCString result; if (!templSpec.isEmpty()) { // we use classDef->name() here and not diplayName() in order // to get the name used in the inheritance relation. QCString n = classDef->name(); if (/*n.right(2)=="-g" ||*/ n.right(2)=="-p") { n = n.left(n.length()-2); } result=insertTemplateSpecifierInScope(n,templSpec); } else { result=classDef->displayName(); } if (Config_getBool("HIDE_SCOPE_NAMES")) result=stripScope(result); return result; }
void CiteDict::writeLatexBibliography(FTextStream &t) { if (m_entries.isEmpty()) return; QCString style = Config_getString("LATEX_BIB_STYLE"); if (style.isEmpty()) style="plain"; QCString unit; if (Config_getBool("COMPACT_LATEX")) unit = "section"; else unit = "chapter"; t << "% Bibliography\n" "\\newpage\n" "\\phantomsection\n" "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n" "\\bibliographystyle{" << style << "}\n" "\\bibliography{" << getListOfBibFiles(",",TRUE) << "}\n" "\n"; }
void TooltipManager::addTooltip(Definition *d) { static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS); if (!sourceTooltips) return; QCString id = d->getOutputFileBase(); int i=id.findRev('/'); if (i!=-1) { id = id.right(id.length()-i-1); // strip path (for CREATE_SUBDIRS=YES) } id+=escapeId(Doxygen::htmlFileExtension); QCString anc = d->anchor(); if (!anc.isEmpty()) { id+="_"+anc; } if (p->tooltipInfo.find(id)==0) { p->tooltipInfo.insert(id,d); } }
static void do_warn(const char *tag, const char *file, int line, const char *fmt, va_list args) { if (!Config_getBool(tag)) return; // warning type disabled char text[40960]; vsprintf(text, fmt, args); QCString fileSubst = file==0 ? "<unknown>" : file; QCString lineSubst; lineSubst.setNum(line); QCString textSubst = text; QCString versionSubst; if (file) // get version from file name { bool ambig; FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig); if (fd) { versionSubst = fd->getVersion(); } } // substitute markers by actual values QCString msgText = substitute( substitute( substitute( substitute( substitute( outputFormat, "$file",fileSubst ), "$text",textSubst ), "$line",lineSubst ), "$version",versionSubst ), "%","%%" )+'\n'; // print resulting message fprintf(warnFile,"%s",msgText.data()); }
static void writeMultiLineCodeLink(CodeOutputInterface &ol, FileDef *fd,uint &line,uint &column, Definition *d, const char *text) { static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS); TooltipManager::instance()->addTooltip(d); QCString ref = d->getReference(); QCString file = d->getOutputFileBase(); QCString anchor = d->anchor(); QCString tooltip; if (!sourceTooltips) // fall back to simple "title" tooltips { tooltip = d->briefDescriptionAsTooltip(); } bool done=FALSE; char *p=(char *)text; while (!done) { char *sp=p; char c; while ((c=*p++) && c!='\n') { column++; } if (c=='\n') { line++; *(p-1)='\0'; //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp); ol.writeCodeLink(ref,file,anchor,sp,tooltip); ol.endCodeLine(); ol.startCodeLine(TRUE); writeLineNumber(ol,fd,line); } else { //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp); ol.writeCodeLink(ref,file,anchor,sp,tooltip); done=TRUE; } } }
void DirDef::writeSubDirList(OutputList &ol) { // write subdir list if (m_subdirs.count()>0) { ol.startMemberHeader("subdirs"); ol.parseText(theTranslator->trDir(TRUE,FALSE)); ol.endMemberHeader(); ol.startMemberList(); QListIterator<DirDef> it(m_subdirs); DirDef *dd; for (;(dd=it.current());++it) { if (!dd->hasDocumentation()) continue; ol.startMemberDeclaration(); ol.startMemberItem(dd->getOutputFileBase(),0); ol.parseText(theTranslator->trDir(FALSE,TRUE)+" "); ol.insertMemberAlign(); ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); ol.endMemberItem(); if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) { ol.startMemberDescription(dd->getOutputFileBase()); ol.generateDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(), FALSE, // indexWords FALSE, // isExample 0, // exampleName TRUE, // single line TRUE // link from index ); ol.endMemberDescription(); } ol.endMemberDeclaration(0,0); } ol.endMemberList(); } }
void FileDef::writeIncludeGraph(OutputList &ol) { if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDE_GRAPH")*/) { //printf("Graph for file %s\n",name().data()); DotInclDepGraph incDepGraph(this,FALSE); if (incDepGraph.isTooBig()) { err("warning: Include graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data()); } else if (!incDepGraph.isTrivial()) { ol.startTextBlock(); ol.disable(OutputGenerator::Man); ol.startInclDepGraph(); ol.parseText(theTranslator->trInclDepGraph(name())); ol.endInclDepGraph(incDepGraph); ol.enableAll(); ol.endTextBlock(TRUE); } //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase()); } }
void Definition::writeNavigationPath(OutputList &ol) const { static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); if (generateTreeView) { ol.writeString("</div>\n"); } ol.writeString(" <div id=\"nav-path\" class=\"navpath\">\n"); ol.writeString(" <ul>\n"); writePathFragment(ol); if (!generateTreeView) { ol.writeString(" </ul>\n"); ol.writeString(" </div>\n"); } ol.popGeneratorState(); }
void HtmlGenerator::startFile(const char *name,const char *, const char *title) { //printf("HtmlGenerator::startFile(%s)\n",name); QCString fileName=name; lastTitle=title; relPath = relativePathToRoot(fileName); if (fileName.right(Doxygen::htmlFileExtension.length())!=Doxygen::htmlFileExtension) { fileName+=Doxygen::htmlFileExtension; } startPlainFile(fileName); if (Config_getBool("GENERATE_HTMLHELP")) { HtmlHelp::getInstance()->addIndexFile(fileName); } QCString dispTitle = title; QCString projName = Config_getString("PROJECT_NAME"); if (!projName.isEmpty()) { dispTitle.prepend(projName+": "); } lastFile = fileName; if (g_header.isEmpty()) { writeDefaultHeaderFile(t,dispTitle,relPath,FALSE); } else { t << substituteKeywords(g_header,convertToHtml(dispTitle),relPath); } t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen " << versionString << " -->" << endl; }
void generateDirDocs(OutputList &ol) { DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); for (sdi.toFirst();(dir=sdi.current());++sdi) { ol.pushGeneratorState(); if (!dir->hasDocumentation()) { ol.disableAllBut(OutputGenerator::Html); } dir->writeDocumentation(ol); ol.popGeneratorState(); } if (Config_getBool(DIRECTORY_GRAPH)) { SDict<DirRelation>::Iterator rdi(Doxygen::dirRelations); DirRelation *dr; for (rdi.toFirst();(dr=rdi.current());++rdi) { dr->writeDocumentation(ol); } } }
void DirDef::writeBriefDescription(OutputList &ol) { if (hasBriefDescription()) { DocRoot *rootNode = validatingParseDoc( briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE); if (rootNode && !rootNode->isEmpty()) { ol.startParagraph(); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Man); ol.writeString(" - "); ol.popGeneratorState(); ol.writeDoc(rootNode,this,0); ol.pushGeneratorState(); ol.disable(OutputGenerator::RTF); ol.writeString(" \n"); ol.enable(OutputGenerator::RTF); if (Config_getBool(REPEAT_BRIEF) || !documentation().isEmpty() ) { ol.disableAllBut(OutputGenerator::Html); ol.startTextLink(0,"details"); ol.parseText(theTranslator->trMore()); ol.endTextLink(); } ol.popGeneratorState(); ol.endParagraph(); } delete rootNode; } ol.writeSynopsis(); }
void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter, const char *header,bool localNames) { static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); if (count()>0) { ClassSDict::Iterator sdi(*this); ClassDef *cd=0; bool found=FALSE; for (sdi.toFirst();(cd=sdi.current());++sdi) { //printf(" ClassSDict::writeDeclaration for %s\n",cd->name().data()); if (cd->name().find('@')==-1 && !cd->isExtension() && (cd->protection()!=Private || extractPrivate) && (filter==0 || *filter==cd->compoundType()) ) { cd->writeDeclarationLink(ol,found,header,localNames); } } if (found) ol.endMemberList(); } }