Пример #1
0
void RefList::generatePage()
{
  if (m_itemList==0) return;
  m_itemList->sort();
  SDict<RefItem>::Iterator it(*m_itemList);
  RefItem *item;
  for (it.toFirst();(item=it.current());++it)
  {
    QCString doc;
    doc =  "\\anchor ";
    doc += item->listAnchor;
    doc += " <dl><dt>";
    doc += item->prefix;
    doc += " \\_internalref ";
    doc += item->name;
    doc += " \"";
    doc += item->title;
    doc += "\"";
    if (!item->args.isEmpty()) doc += item->args;
    doc += "</dt>\n<dd>";
    doc += item->text;
    QListIterator<RefItem> li(item->extraItems);
    RefItem *extraItem;
    for (li.toFirst();(extraItem=li.current());++li)
    {
      doc += "<p>" + extraItem->text;
    }
    doc += "</dd></dl>\n";
    addRelatedPage(m_listName,m_pageTitle,doc,0,m_listName,1,0,0,0);
  }
}
Пример #2
0
void CiteDict::generatePage() const
{
  //printf("** CiteDict::generatePage() count=%d\n",m_ordering.count());

  // do not generate an empty citations page
  if (isEmpty()) return; // nothing to cite

  QCString doc;
  doc += "<dl class=\"citelist\">";

  QListIterator<QCString> it(m_ordering);
  QCString *s;
  for (it.toFirst();(s=it.current());++it)
  {
    CiteInfo* ci = m_entries.find(*s);
    doc += " <dt>";
    doc +=  "\\anchor ";
    doc += CiteConsts::anchorPrefix + ci->label;
    doc += "\n";
    doc += ci->text;
    doc += "</dt><dd> ";
    doc += ci->fullText;
    doc += "</dd>";
  }
  doc += "</dl>\n";
  //printf("addRelatedPage with doc='%s'\n",doc.data());
  addRelatedPage(CiteConsts::fileName,
       theTranslator->trCiteReferences(),doc,0,CiteConsts::fileName,1,0,0,0);
}
Пример #3
0
void RefList::generatePage()
{  
   if (m_itemMap.isEmpty()) {
      return;
   }

   QMap<QString, QList<RefItem>> titleMap;

   for (auto list : m_itemMap) {
      RefItem &item = list.first();     
      titleMap.insert(item.title, list);
   }

   //
   QString doc;
   doc += "<dl class=\"reflist\">";

   for (auto list : titleMap) {

      RefItem &item = list.first();

      doc += " <dt>";
      doc +=  "\\anchor ";
      doc += item.listAnchor;
      doc += "\n";

      if (item.scope && item.scope->name() != "<globalScope>") {
         doc += "\\_setscope ";
         doc += item.scope->name();
         doc += " ";
      }

      doc += item.prefix;
      doc += " \\_internalref ";
      doc += item.name;
      doc += " \"";
      doc += item.title;
      doc += "\" ";

      // write declaration in case a function with arguments
      if (! item.args.isEmpty()) {
         doc += item.args;
      }

      doc += "</dt><dd> ";
      doc += item.text;
      
      for (auto xx = list.begin() + 1; xx != list.end(); ++xx) {
         doc += "<p>" + xx->text;
      }

      doc += "</dd>";
   }

   doc += "</dl>\n";

   addRelatedPage(m_listName, m_pageTitle, doc, 0, m_listName, 1, 0, QSharedPointer<GroupDef>(), 0);
}
Пример #4
0
void CiteDict::generatePage() const
{
  //printf("** CiteDict::generatePage() count=%d\n",m_ordering.count());

  // do not generate an empty citations page
  if (isEmpty()) return; // nothing to cite

  // 1. generate file with markers and citations to OUTPUT_DIRECTORY
  QFile f;
  QCString outputDir = Config_getString("OUTPUT_DIRECTORY");
  QCString citeListFile = outputDir+"/citelist.doc";
  f.setName(citeListFile);
  if (!f.open(IO_WriteOnly)) 
  {
    err("could not open file %s for writing\n",citeListFile.data());
  }
  FTextStream t(&f);
  t << "<!-- BEGIN CITATIONS -->" << endl;
  t << "<!--" << endl;
  QDictIterator<CiteInfo> it(m_entries);
  CiteInfo *ci;
  for (it.toFirst();(ci=it.current());++it)
  {
    t << "\\citation{" << ci->label << "}" << endl;
  }
  t << "-->" << endl;
  t << "<!-- END CITATIONS -->" << endl;
  t << "<!-- BEGIN BIBLIOGRAPHY -->" << endl;
  t << "<!-- END BIBLIOGRAPHY -->" << endl;
  f.close();

  // 2. generate bib2xhtml
  QCString bib2xhtmlFile = outputDir+"/bib2xhtml.pl";
  f.setName(bib2xhtmlFile);
  QCString bib2xhtml = bib2xhtml_pl;
  if (!f.open(IO_WriteOnly)) 
  {
    err("could not open file %s for writing\n",bib2xhtmlFile.data());
  }
  f.writeBlock(bib2xhtml, bib2xhtml.length());
  f.close();

  // 3. generate doxygen.bst
  QCString doxygenBstFile = outputDir+"/doxygen.bst";
  QCString bstData = doxygen_bst;
  f.setName(doxygenBstFile);
  if (!f.open(IO_WriteOnly)) 
  {
    err("could not open file %s for writing\n",doxygenBstFile.data());
  }
  f.writeBlock(bstData, bstData.length());
  f.close();

  // 4. for html we just copy the bib files to the output so that
  //    bibtex can find them without path (bibtex doesn't support path's
  //    with spaces!)
  QList<QCString> tempFiles;
  tempFiles.setAutoDelete(TRUE);
  QDir thisDir;
  if (Config_getBool("GENERATE_HTML"))
  {
    // copy bib files to the latex output dir
    QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
    QCString bibOutputDir = outputDir+"/";
    QFileInfo fo(bibOutputDir);
    const char *bibdata = citeDataList.first();
    while (bibdata)
    {
      QCString bibFile = bibdata;
      if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
      QFileInfo fi(bibFile);
      if (fi.exists() && fi.dirPath(TRUE)!=fo.absFilePath())
      {
        if (!bibFile.isEmpty())
        {
          QCString destFile=bibOutputDir+fi.fileName().data();
          copyFile(bibFile,destFile);
          tempFiles.append(new QCString(destFile));
        }
      }
      else if (!fi.exists())
      {
        err("bib file %s not found!\n",bibFile.data());
      }
      bibdata = citeDataList.next();
    }
  }

  QCString oldDir = QDir::currentDirPath().utf8();
  QDir::setCurrent(outputDir);

  // 5. run bib2xhtml perl script on the generated file which will insert the
  //    bibliography in citelist.doc
  portable_system("perl","\""+bib2xhtmlFile+"\" "+getListOfBibFiles(" ",FALSE)+" \""+
                         citeListFile+"\"");

  QDir::setCurrent(oldDir);

  // 6. read back the file
  f.setName(citeListFile);
  if (!f.open(IO_ReadOnly)) 
  {
    err("could not open file %s/citelist.doc for reading\n",outputDir.data());
  }
  bool insideBib=FALSE;
  
  QCString doc;
  QFileInfo fi(citeListFile);
  QCString input(fi.size()+1);
  f.readBlock(input.data(),fi.size());
  f.close();
  input.at(fi.size())='\0';
  int p=0,s;
  //printf("input=[%s]\n",input.data());
  while ((s=input.find('\n',p))!=-1)
  {
    QCString line = input.mid(p,s-p);
    //printf("p=%d s=%d line=[%s]\n",p,s,line.data());
    p=s+1;

    if      (line.find("<!-- BEGIN BIBLIOGRAPHY")!=-1) insideBib=TRUE;
    else if (line.find("<!-- END BIBLIOGRAPH")!=-1)    insideBib=FALSE;
    else if (insideBib) doc+=line+"\n";
    int i;
    // determine text to use at the location of the @cite command
    if (insideBib && (i=line.find("<a name=\"CITEREF_"))!=-1)
    {
      int j=line.find("\">[");
      int k=line.find("]</a>");
      if (j!=-1 && k!=-1)
      {
        QCString label = line.mid(i+17,j-i-17);
        QCString number = line.mid(j+2,k-j-1);
        CiteInfo *ci = m_entries.find(label);
        //printf("label='%s' number='%s' => %p\n",label.data(),number.data(),ci);
        if (ci)
        {
          ci->text = number;
        }
      }
    }
  }
  //printf("doc=[%s]\n",doc.data());

  // 7. add it as a page
  addRelatedPage(CiteConsts::fileName,
       theTranslator->trCiteReferences(),doc,0,CiteConsts::fileName,1,0,0,0);

  // 8. for latex we just copy the bib files to the output and let 
  //    latex do this work.
  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";
      QFileInfo fi(bibFile);
      if (fi.exists())
      {
        if (!bibFile.isEmpty())
        {
          copyFile(bibFile,latexOutputDir+fi.fileName().data());
        }
      }
      else
      {
        err("bib file %s not found!\n",bibFile.data());
      }
      bibdata = citeDataList.next();
    }
  }

  // 9. Remove temporary files
  thisDir.remove(citeListFile);
  thisDir.remove(doxygenBstFile);
  thisDir.remove(bib2xhtmlFile);
  while (!tempFiles.isEmpty()) 
  {
    QCString *s=tempFiles.take(0);
    thisDir.remove(*s);
  }
}
Пример #5
0
void RefList::generatePage()
{
  if (m_itemList==0) return;
  m_itemList->sort();
  SDict<RefItem>::Iterator it(*m_itemList);
  RefItem *item;
  QCString doc;
  doc += "<dl class=\"reflist\">";
  for (it.toFirst();(item=it.current());++it)
  {
    doc += " <dt>";
    doc += "\n";
    if (item->scope)
    {
      if (item->scope->name() != "<globalScope>")
      {
        doc += "\\_setscope ";
        doc += item->scope->name();
        doc += " ";
      }
    }
    doc += item->prefix;
    doc += " \\_internalref ";
    doc += item->name;
    // escape \'s in title, see issue #5901
    QCString escapedTitle = substitute(item->title,"\\","\\\\");
    if (item->scope &&
        (item->scope->definitionType()==Definition::TypeClass ||
         item->scope->definitionType()==Definition::TypeNamespace ||
         item->scope->definitionType()==Definition::TypeMember ||
         item->scope->definitionType()==Definition::TypePackage)
       )
    {
      // prevent Obj-C names in e.g. todo list are seen as emoji
      escapedTitle = substitute(escapedTitle,":","&Colon;");
    }
    doc += " \""+escapedTitle+"\" ";
    // write declaration in case a function with arguments
    if (!item->args.isEmpty()) 
    {
      // escape @'s in argument list, needed for Java annotations (see issue #6208)
      // escape \'s in argument list (see issue #6533)
      doc += substitute(substitute(item->args,"@","@@"),"\\","\\\\");
    }
    doc += "</dt><dd> \\anchor ";
    doc += item->listAnchor;
    doc += " ";
    doc += item->text;
    QListIterator<RefItem> li(item->extraItems);
    RefItem *extraItem;
    for (li.toFirst();(extraItem=li.current());++li)
    {
      doc += "<p> \\anchor ";
      doc += extraItem->listAnchor;
      doc += " ";
      doc += extraItem->text;
    }
    doc += "</dd>";
  }
  doc += "</dl>\n";
  //printf("generatePage('%s')\n",doc.data());
  addRelatedPage(m_listName,m_pageTitle,doc,0,m_fileName,1,0,0,0);
}