void FileDef::combineUsingRelations() { if (visited) return; // already done visited=TRUE; if (usingDirList) { NamespaceSDict::Iterator nli(*usingDirList); NamespaceDef *nd; for (nli.toFirst();(nd=nli.current());++nli) { nd->combineUsingRelations(); } for (nli.toFirst();(nd=nli.current());++nli) { // add used namespaces of namespace nd to this namespace if (nd->getUsedNamespaces()) { NamespaceSDict::Iterator unli(*nd->getUsedNamespaces()); NamespaceDef *und; for (unli.toFirst();(und=unli.current());++unli) { //printf("Adding namespace %s to the using list of %s\n",und->qualifiedName().data(),qualifiedName().data()); addUsingDirective(und); } } // add used classes of namespace nd to this namespace if (nd->getUsedClasses()) { SDict<Definition>::Iterator cli(*nd->getUsedClasses()); Definition *ucd; for (cli.toFirst();(ucd=cli.current());++cli) { //printf("Adding class %s to the using list of %s\n",cd->qualifiedName().data(),qualifiedName().data()); addUsingDeclaration(ucd); } } } } }
void generateSqlite3() { // + classes // + namespaces // + files // - groups // - related pages // - examples //QCString outputDirectory = Config_getString("SQLITE3_OUTPUT"); 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"); exit(-1); } beginTransaction(db); pragmaTuning(db); initializeSchema(db); 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); } } endTransaction(db); }
static bool generateJSTree(NavIndexEntryList &navIndex,FTextStream &t, const QList<FTVNode> &nl,int level,bool &first) { static QCString htmlOutput = Config_getString("HTML_OUTPUT"); QCString indentStr; indentStr.fill(' ',level*2); bool found=FALSE; QListIterator<FTVNode> nli(nl); FTVNode *n; for (nli.toFirst(); (n=nli.current()); ++nli) { // terminate previous entry if (!first) t << "," << endl; first=FALSE; // start entry if (!found) { t << "[" << endl; } found=TRUE; if (n->addToNavIndex) // add entry to the navigation index { if (n->def && n->def->definitionType()==Definition::TypeFile) { FileDef *fd = (FileDef*)n->def; bool doc,src; doc = fileVisibleInIndex(fd,src); if (doc) { navIndex.append(new NavIndexEntry(node2URL(n,TRUE,FALSE),pathToNode(n,n))); } if (src) { navIndex.append(new NavIndexEntry(node2URL(n,TRUE,TRUE),pathToNode(n,n))); } } else { navIndex.append(new NavIndexEntry(node2URL(n),pathToNode(n,n))); } } if (n->separateIndex) // store items in a separate file for dynamic loading { bool firstChild=TRUE; t << indentStr << " [ "; generateJSLink(t,n); if (n->children.count()>0) // write children to separate file for dynamic loading { QCString fileId = n->file; if (n->anchor) { fileId+="_"+n->anchor; } if (dupOfParent(n)) { fileId+="_dup"; } QFile f(htmlOutput+"/"+fileId+".js"); if (f.open(IO_WriteOnly)) { FTextStream tt(&f); tt << "var " << convertFileId2Var(fileId) << " =" << endl; generateJSTree(navIndex,tt,n->children,1,firstChild); tt << endl << "];"; } t << "\"" << fileId << "\" ]"; } else // no children { t << "null ]"; } } else // show items in this file { bool firstChild=TRUE; t << indentStr << " [ "; generateJSLink(t,n); bool emptySection = !generateJSTree(navIndex,t,n->children,level+1,firstChild); if (emptySection) t << "null ]"; else t << endl << indentStr << " ] ]"; } } return found; }
void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level,int maxLevel,int &index) { QListIterator<FTVNode> nli(nl); FTVNode *n; for (nli.toFirst(); (n=nli.current()); ++nli) { t << "<tr id=\"row_" << generateIndentLabel(n,0) << "\""; if ((index&1)==0) // even row t << " class=\"even\""; if (level>=maxLevel) // item invisible by default t << " style=\"display:none;\""; else // item visible by default index++; t << "><td class=\"entry\">"; bool nodeOpened = level+1<maxLevel; generateIndent(t,n,nodeOpened); if (n->isDir) { if (n->def && n->def->definitionType()==Definition::TypeGroup) { // no icon } else if (n->def && n->def->definitionType()==Definition::TypePage) { // no icon } else if (n->def && n->def->definitionType()==Definition::TypeNamespace) { t << "<span class=\"icona\"><span class=\"icon\">N</span></span>"; } else if (n->def && n->def->definitionType()==Definition::TypeClass) { t << "<span class=\"icona\"><span class=\"icon\">C</span></span>"; } else { t << "<span id=\"img_" << generateIndentLabel(n,0) << "\" class=\"iconf" << (nodeOpened?"open":"closed") << "\" onclick=\"toggleFolder('" << generateIndentLabel(n,0) << "')\"> </span>"; } generateLink(t,n); t << "</td><td class=\"desc\">"; if (n->def) { generateBriefDoc(t,n->def); } t << "</td></tr>" << endl; folderId++; generateTree(t,n->children,level+1,maxLevel,index); } else // leaf node { FileDef *srcRef=0; if (n->def && n->def->definitionType()==Definition::TypeFile && ((FileDef*)n->def)->generateSourceFile()) { srcRef = (FileDef*)n->def; } if (srcRef) { t << "<a href=\"" << srcRef->getSourceFileBase() << Doxygen::htmlFileExtension << "\">"; } if (n->def && n->def->definitionType()==Definition::TypeGroup) { // no icon } else if (n->def && n->def->definitionType()==Definition::TypePage) { // no icon } else if (n->def && n->def->definitionType()==Definition::TypeNamespace) { t << "<span class=\"icona\"><span class=\"icon\">N</span></span>"; } else if (n->def && n->def->definitionType()==Definition::TypeClass) { t << "<span class=\"icona\"><span class=\"icon\">C</span></span>"; } else { t << "<span class=\"icondoc\"></span>"; } if (srcRef) { t << "</a>"; } generateLink(t,n); t << "</td><td class=\"desc\">"; if (n->def) { generateBriefDoc(t,n->def); } t << "</td></tr>" << endl; } } }
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); }
void FileDef::addIncludedUsingDirectives() { if (visited) return; visited=TRUE; //printf("( FileDef::addIncludedUsingDirectives for file %s\n",name().data()); NamespaceList nl; if (includeList) // file contains #includes { { QListIterator<IncludeInfo> iii(*includeList); IncludeInfo *ii; for (iii.toFirst();(ii=iii.current());++iii) // foreach #include... { if (ii->fileDef && !ii->fileDef->visited) // ...that is a known file { // recurse into this file ii->fileDef->addIncludedUsingDirectives(); } } } { QListIterator<IncludeInfo> iii(*includeList); IncludeInfo *ii; // iterate through list from last to first for (iii.toLast();(ii=iii.current());--iii) { if (ii->fileDef && ii->fileDef!=this) { // add using directives NamespaceSDict *unl = ii->fileDef->usingDirList; if (unl) { NamespaceSDict::Iterator nli(*unl); NamespaceDef *nd; for (nli.toLast();(nd=nli.current());--nli) { // append each using directive found in a #include file if (usingDirList==0) usingDirList = new NamespaceSDict; //printf("Prepending used namespace %s to the list of file %s\n", // nd->name().data(),name().data()); if (usingDirList->find(nd->qualifiedName())==0) // not yet added { usingDirList->prepend(nd->qualifiedName(),nd); } } } // add using declarations SDict<Definition> *udl = ii->fileDef->usingDeclList; if (udl) { SDict<Definition>::Iterator udi(*udl); Definition *d; for (udi.toLast();(d=udi.current());--udi) { //printf("Adding using declaration %s\n",d->name().data()); if (usingDeclList==0) { usingDeclList = new SDict<Definition>(17); } if (usingDeclList->find(d->qualifiedName())==0) { usingDeclList->prepend(d->qualifiedName(),d); } } } } } } } //printf(") end FileDef::addIncludedUsingDirectives for file %s\n",name().data()); }