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); } }
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); }
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); }
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); } }
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,":","∷"); } 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); }