Exemplo n.º 1
0
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);
        }
      }
    }
  }
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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)
                  << "')\">&#160;</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;
        }
    }
}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
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());
}