void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter, const char *header,bool localNames) { // static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); // bool first=TRUE; 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 && (filter==0 || *filter==cd->compoundType()) ) { // //bool isLink = cd->isLinkable(); // if (inlineGroupedClasses && cd->partOfGroups()->count()>0) // { // cd->writeInlineDeclaration(ol,first); // first=FALSE; // } // else // show link's only // { cd->writeDeclarationLink(ol,found,header,localNames); // } } } if (found) ol.endMemberList(); } }
bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const { static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES"); static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES"); if (count()>0) { ClassSDict::Iterator sdi(*this); ClassDef *cd=0; for (sdi.toFirst();(cd=sdi.current());++sdi) { if (cd->name().find('@')==-1 && (filter==0 || *filter==cd->compoundType()) ) { bool isLink = cd->isLinkable(); if (isLink || (!hideUndocClasses && (!cd->isLocal() || extractLocalClasses) ) ) { return TRUE; } } } } return FALSE; }
void ClassSDict::writeDocumentation(OutputList &ol) { static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); if (!inlineGroupedClasses) return; if (count()>0) { ol.writeRuler(); ol.startGroupHeader(); ol.parseText(fortranOpt?theTranslator->trTypeDocumentation(): theTranslator->trClassDocumentation()); ol.endGroupHeader(); ClassSDict::Iterator sdi(*this); ClassDef *cd=0; for (sdi.toFirst();(cd=sdi.current());++sdi) { if (cd->name().find('@')==-1 && cd->partOfGroups()->count()==1 ) { cd->writeInlineDocumentation(ol); } } } }
void buildDirectories() { // for each input file FileNameListIterator fnli(*Doxygen::inputNameList); FileName *fn; for (fnli.toFirst();(fn=fnli.current());++fnli) { FileNameIterator fni(*fn); FileDef *fd; for (;(fd=fni.current());++fni) { //printf("buildDirectories %s\n",fd->name().data()); if (fd->getReference().isEmpty()) { DirDef *dir; if ((dir=Doxygen::directories->find(fd->getPath()))==0) // new directory { dir = DirDef::mergeDirectoryInTree(fd->getPath()); } if (dir && !fd->isDocumentationFile()) dir->addFile(fd); } else { // do something for file imported via tag files. } } } //DirDef *root = new DirDef("root:"); // compute relations between directories => introduce container dirs. DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); for (sdi.toFirst();(dir=sdi.current());++sdi) { QCString name = dir->name(); int i=name.findRev('/',name.length()-2); if (i>0) { DirDef *parent = Doxygen::directories->find(name.left(i+1)); //if (parent==0) parent=root; if (parent) { parent->addSubDir(dir); //printf("DirDef::addSubdir(): Adding subdir\n%s to\n%s\n", // dir->displayName().data(), parent->displayName().data()); } } } for (sdi.toFirst();(dir=sdi.current());++sdi) { dir->sort(); } Doxygen::directories->sort(); computeCommonDirPrefix(); }
void KviRegisteredUserDataBase::load(const QString & filename) { QString szCurrent; KviConfigurationFile cfg(filename, KviConfigurationFile::Read); KviConfigurationFileIterator it(*cfg.dict()); while(it.current()) { cfg.setGroup(it.currentKey()); szCurrent = it.currentKey(); if(KviQString::equalCSN("#Group ", szCurrent, 7)) { szCurrent.remove(0, 7); addGroup(szCurrent); } else { KviRegisteredUser * u = addUser(szCurrent); if(u) { u->setIgnoreEnabled(cfg.readBoolEntry("IgnoreEnabled", false)); u->setIgnoreFlags(cfg.readIntEntry("IgnoreFlags", 0)); KviConfigurationFileGroupIterator sdi(*(it.current())); while(sdi.current()) { QString tmp = sdi.currentKey(); if(KviQString::equalCSN("prop_", tmp, 5)) { tmp.remove(0, 5); u->setProperty(tmp, *(sdi.current())); } else if(KviQString::equalCSN("mask_", tmp, 5)) { KviIrcMask * mask = new KviIrcMask(*(sdi.current())); addMask(u, mask); } else if(KviQString::equalCI(tmp, "Group")) { u->setGroup(*(sdi.current())); } ++sdi; } } } ++it; } if(!m_pGroupDict->find(__tr("Default"))) addGroup(__tr("Default")); }
void computeDirDependencies() { DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); // compute nesting level for each directory for (sdi.toFirst();(dir=sdi.current());++sdi) { dir->setLevel(); } // compute uses dependencies between directories for (sdi.toFirst();(dir=sdi.current());++sdi) { //printf("computeDependencies for %s: #dirs=%d\n",dir->name().data(),Doxygen::directories.count()); dir->computeDependencies(); } }
void ClassSDict::writeDocumentation(OutputList &ol,Definition * container) { static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS"); if (!inlineGroupedClasses && !inlineSimpleClasses) return; if (count()>0) { bool found=FALSE; ClassSDict::Iterator sdi(*this); ClassDef *cd=0; for (sdi.toFirst();(cd=sdi.current());++sdi) { //printf("%s:writeDocumentation() %p embedded=%d container=%p\n", // cd->name().data(),cd->getOuterScope(),cd->isEmbeddedInOuterScope(), // container); if (cd->name().find('@')==-1 && cd->isLinkableInProject() && cd->isEmbeddedInOuterScope() && (container==0 || cd->partOfGroups()==0) // if container==0 -> show as part of the group docs, otherwise only show if not part of a group //&& //(container==0 || // no container -> used for groups // cd->getOuterScope()==container || // correct container -> used for namespaces and classes // (container->definitionType()==Definition::TypeFile && cd->getOuterScope()==Doxygen::globalScope && cd->partOfGroups()==0) // non grouped class with file scope -> used for files //) ) { if (!found) { ol.writeRuler(); ol.startGroupHeader(); ol.parseText(fortranOpt?theTranslator->trTypeDocumentation(): theTranslator->trClassDocumentation()); ol.endGroupHeader(); found=TRUE; } cd->writeInlineDocumentation(ol); } } } }
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); } } }
void writeDirDependencyGraph(const char *dirName) { QString path; DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); QFile htmlPage(QCString(dirName)+"/dirdeps.html"); if (htmlPage.open(IO_WriteOnly)) { QTextStream out(&htmlPage); out << "<html><body>"; for (sdi.toFirst();(dir=sdi.current());++sdi) { path=dirName; path+="/"; path+=dir->getOutputFileBase(); path+="_dep.dot"; out << "<h4>" << dir->displayName() << "</h4>" << endl; out << "<img src=\"" << dir->getOutputFileBase() << "_dep.gif\">" << endl; QFile f(path); if (f.open(IO_WriteOnly)) { QTextStream t(&f); dir->writeDepGraph(t); } f.close(); QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT"); QCString outFile = QCString(dirName)+"/"+ dir->getOutputFileBase()+"_dep."+imgExt; DotRunner dotRun(path); dotRun.addJob(imgExt,outFile); dotRun.run(); //QCString dotArgs(4096); //dotArgs.sprintf("%s -Tgif -o %s",path.data(),outFile.data()); //if (portable_system(Config_getString("DOT_PATH")+"dot",dotArgs,FALSE)!=0) //{ // err("Problems running dot. Check your installation!\n"); //} } out << "</body></html>"; } htmlPage.close(); }
void computeDirDependencies() { DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); // compute nesting level for each directory for (sdi.toFirst();(dir=sdi.current());++sdi) { dir->setLevel(); } // compute uses dependencies between directories for (sdi.toFirst();(dir=sdi.current());++sdi) { //printf("computeDependencies for %s: #dirs=%d\n",dir->name().data(),Doxygen::directories.count()); dir->computeDependencies(); } #if 0 printf("-------------------------------------------------------------\n"); // print dependencies (for debugging) for (sdi.toFirst();(dir=sdi.current());++sdi) { if (dir->usedDirs()) { QDictIterator<UsedDir> udi(*dir->usedDirs()); UsedDir *usedDir; for (udi.toFirst();(usedDir=udi.current());++udi) { printf("%s depends on %s due to ", dir->shortName().data(),usedDir->dir()->shortName().data()); QDictIterator<FileDef> fdi(usedDir->files()); FileDef *fd; for (fdi.toFirst();(fd=fdi.current());++fdi) { printf("%s ",fd->name().data()); } printf("\n"); } } } printf("^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^\n"); #endif }
void ClassSDict::writeDocumentation(OutputList &ol,Definition * container) { static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES"); static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS"); if (!inlineGroupedClasses && !inlineSimpleClasses) return; if (count()>0) { bool found=FALSE; ClassSDict::Iterator sdi(*this); ClassDef *cd=0; for (sdi.toFirst();(cd=sdi.current());++sdi) { //printf("%s:writeDocumentation() %p linkable=%d embedded=%d container=%p partOfGroups=%d\n", // cd->name().data(),cd->getOuterScope(),cd->isLinkableInProject(),cd->isEmbeddedInOuterScope(), // container,cd->partOfGroups() ? cd->partOfGroups()->count() : 0); if (cd->name().find('@')==-1 && cd->isLinkableInProject() && cd->isEmbeddedInOuterScope() && (container==0 || cd->partOfGroups()==0) // if container==0 -> show as part of the group docs, otherwise only show if not part of a group ) { //printf(" showing class %s\n",cd->name().data()); if (!found) { ol.writeRuler(); ol.startGroupHeader(); ol.parseText(fortranOpt?theTranslator->trTypeDocumentation(): theTranslator->trClassDocumentation()); ol.endGroupHeader(); found=TRUE; } cd->writeInlineDocumentation(ol); } } } }
void Definition::writeDocAnchorsToTagFile() { makeResident(); if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict) { //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count()); QDictIterator<SectionInfo> sdi(*m_impl->sectionDict); SectionInfo *si; for (;(si=sdi.current());++sdi) { if (!si->generated) { //printf("write an entry!\n"); if (definitionType()==TypeMember) Doxygen::tagFile << " "; Doxygen::tagFile << " <docanchor file=\"" << si->fileName << "\">" << si->label << "</docanchor>" << endl; } } } }
bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const { static bool hideUndocClasses = Config::getBool("hide-undoc-classes"); static bool extractLocalClasses = Config::getBool("extract-local-classes"); if (count() > 0) { ClassSDict::Iterator sdi(*this); QSharedPointer<ClassDef> cd; for (sdi.toFirst(); (cd = sdi.current()); ++sdi) { if (cd->name().indexOf('@') == -1 && (filter == 0 || *filter == cd->compoundType()) ) { bool isLink = cd->isLinkable(); if (isLink || (! hideUndocClasses && (! cd->isLocal() || extractLocalClasses) ) ) { return true; } } } } return false; }
void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile) { if (m_impl->sectionDict) { //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_impl->sectionDict->count()); SDict<SectionInfo>::Iterator sdi(*m_impl->sectionDict); SectionInfo *si; for (;(si=sdi.current());++sdi) { if (!si->generated) { //printf("write an entry!\n"); if (definitionType()==TypeMember) tagFile << " "; tagFile << " <docanchor file=\"" << si->fileName << "\""; if (!si->title.isEmpty()) { tagFile << " title=\"" << convertToXML(si->title) << "\""; } tagFile << ">" << si->label << "</docanchor>" << 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 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(); } }
void ClassSDict::writeDeclaration(OutputList &ol, const ClassDef::CompoundType *filter, const QString &header, bool localNames) { static bool extractPrivate = Config::getBool("extract-private"); if (count() > 0) { ClassSDict::Iterator sdi(*this); QSharedPointer<ClassDef> cd; bool found = false; for (sdi.toFirst(); (cd = sdi.current()); ++sdi) { if (cd->name().indexOf('@') == -1 && ! cd->isExtension() && (cd->protection() != Private || extractPrivate) && (filter == 0 || *filter == cd->compoundType()) ) { cd->writeDeclarationLink(ol, found, header, localNames); } } if (found) { ol.endMemberList(); } } }
/** In order to create stable, but unique directory names, * we compute the common part of the path shared by all directories. */ static void computeCommonDirPrefix() { QCString path; DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); if (Doxygen::directories->count()>0) // we have at least one dir { // start will full path of first dir sdi.toFirst(); dir=sdi.current(); path=dir->name(); int i=path.findRev('/',path.length()-2); path=path.left(i+1); bool done=FALSE; if (i==-1) { path=""; } else { while (!done) { int l = path.length(); int count=0; for (sdi.toFirst();(dir=sdi.current());++sdi) { QCString dirName = dir->name(); if (dirName.length()>path.length()) { if (qstrncmp(dirName,path,l)!=0) // dirName does not start with path { int i=path.findRev('/',l-2); if (i==-1) // no unique prefix -> stop { path=""; done=TRUE; } else // restart with shorter path { path=path.left(i+1); break; } } } else // dir is shorter than path -> take path of dir as new start { path=dir->name(); l=path.length(); int i=path.findRev('/',l-2); if (i==-1) // no unique prefix -> stop { path=""; done=TRUE; } else // restart with shorter path { path=path.left(i+1); } break; } count++; } if (count==Doxygen::directories->count()) // path matches for all directories -> found the common prefix { done=TRUE; } } } } for (sdi.toFirst();(dir=sdi.current());++sdi) { QCString diskName = dir->name().right(dir->name().length()-path.length()); dir->setDiskName(diskName); //printf("set disk name: %s -> %s\n",dir->name().data(),diskName.data()); } }
void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter, const char *header,bool localNames) { if (count()>0) { ClassSDict::Iterator sdi(*this); ClassDef *cd=0; bool found=FALSE; for (sdi.toFirst();(cd=sdi.current());++sdi) { if (cd->name().find('@')==-1 && (filter==0 || *filter==cd->compoundType()) ) { bool isLink = cd->isLinkable(); if (isLink || (!Config_getBool("HIDE_UNDOC_CLASSES") && (!cd->isLocal() || Config_getBool("EXTRACT_LOCAL_CLASSES")) ) ) { if (!found) { ol.startMemberHeader(); if (header) { ol.parseText(header); } else { ol.parseText(theTranslator->trCompounds()); } ol.endMemberHeader(); ol.startMemberList(); found=TRUE; } if (!Config_getString("GENERATE_TAGFILE").isEmpty()) { Doxygen::tagFile << " <class kind=\"" << cd->compoundTypeString() << "\">" << convertToXML(cd->name()) << "</class>" << endl; } ol.startMemberItem(FALSE); QCString tmp = cd->compoundTypeString(); QCString cname; if (localNames) { cname = cd->localName(); } else { cname = cd->displayName(); } ol.writeString(tmp); ol.writeString(" "); ol.insertMemberAlign(); if (isLink) { ol.writeObjectLink(cd->getReference(), cd->getOutputFileBase(), 0, cname ); } else { ol.startBold(); ol.docify(cname); ol.endBold(); } ol.endMemberItem(); if (!cd->briefDescription().isEmpty()) { ol.startMemberDescription(); ol.parseDoc(cd->briefFile(),cd->briefLine(),cd,0, cd->briefDescription(),FALSE,FALSE); if (//(!cd->briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || //!cd->documentation().isEmpty()) cd->isLinkableInProject() ) { ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); //ol.endEmphasis(); ol.docify(" "); ol.startTextLink(cd->getOutputFileBase(),"_details"); ol.parseText(theTranslator->trMore()); ol.endTextLink(); //ol.startEmphasis(); ol.popGeneratorState(); } ol.endMemberDescription(); } } } } if (found) ol.endMemberList(); } }
void generateSqlite3() { // + classes // + namespaces // + files // + groups // + related pages // + examples // + main page QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY"); QDir sqlite3Dir(outputDirectory); sqlite3 *db; sqlite3_initialize(); int rc = sqlite3_open_v2(outputDirectory+"/doxygen_sqlite3.db", &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); if (rc != SQLITE_OK) { sqlite3_close(db); msg("database open failed: %s\n", "doxygen_sqlite3.db"); return; } beginTransaction(db); pragmaTuning(db); if (-1==initializeSchema(db)) return; if ( -1 == prepareStatements(db) ) { err("sqlite generator: prepareStatements failed!"); return; } // + classes ClassSDict::Iterator cli(*Doxygen::classSDict); ClassDef *cd; for (cli.toFirst();(cd=cli.current());++cli) { msg("Generating Sqlite3 output for class %s\n",cd->name().data()); generateSqlite3ForClass(db,cd); } // + namespaces NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict); NamespaceDef *nd; for (nli.toFirst();(nd=nli.current());++nli) { msg("Generating Sqlite3 output for namespace %s\n",nd->name().data()); generateSqlite3ForNamespace(db,nd); } // + files FileNameListIterator fnli(*Doxygen::inputNameList); FileName *fn; for (;(fn=fnli.current());++fnli) { FileNameIterator fni(*fn); FileDef *fd; for (;(fd=fni.current());++fni) { msg("Generating Sqlite3 output for file %s\n",fd->name().data()); generateSqlite3ForFile(db,fd); } } // + groups GroupSDict::Iterator gli(*Doxygen::groupSDict); GroupDef *gd; for (;(gd=gli.current());++gli) { msg("Generating Sqlite3 output for group %s\n",gd->name().data()); generateSqlite3ForGroup(db,gd); } // + page { PageSDict::Iterator pdi(*Doxygen::pageSDict); PageDef *pd=0; for (pdi.toFirst();(pd=pdi.current());++pdi) { msg("Generating Sqlite3 output for page %s\n",pd->name().data()); generateSqlite3ForPage(db,pd,FALSE); } } // + dirs { DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); for (sdi.toFirst();(dir=sdi.current());++sdi) { msg("Generating Sqlite3 output for dir %s\n",dir->name().data()); generateSqlite3ForDir(db,dir); } } // + examples { PageSDict::Iterator pdi(*Doxygen::exampleSDict); PageDef *pd=0; for (pdi.toFirst();(pd=pdi.current());++pdi) { msg("Generating Sqlite3 output for example %s\n",pd->name().data()); generateSqlite3ForPage(db,pd,TRUE); } } // + main page if (Doxygen::mainPage) { msg("Generating Sqlite3 output for the main page\n"); generateSqlite3ForPage(db,Doxygen::mainPage,FALSE); } endTransaction(db); }