summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2014-08-18 09:28:24 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2014-08-18 09:28:24 (GMT)
commitca80d3cda3522a15c6d7149f79103c0aed660400 (patch)
tree7d4505280038d9d817020a9939f03d034335ae6c
parent8ddbaa7c8dd3024e9d4a847c4645ab99ac6b6d45 (diff)
parent5d00fa5862a1724bbe417e33d6c1a260607281ef (diff)
downloadDoxygen-ca80d3cda3522a15c6d7149f79103c0aed660400.zip
Doxygen-ca80d3cda3522a15c6d7149f79103c0aed660400.tar.gz
Doxygen-ca80d3cda3522a15c6d7149f79103c0aed660400.tar.bz2
Merge branch 'albert-github-feature/bug_700510'
-rw-r--r--src/cite.cpp143
-rw-r--r--src/config.xml4
2 files changed, 65 insertions, 82 deletions
diff --git a/src/cite.cpp b/src/cite.cpp
index f0580ed..378e7ee 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -37,6 +37,8 @@ static const char *bib2xhtml_pl =
const QCString CiteConsts::fileName("citelist");
const QCString CiteConsts::anchorPrefix("CITEREF_");
+const QCString bibTmpFile("bibTmpFile_");
+const QCString bibTmpDir("bibTmpDir/");
//--------------------------------------------------------------------------
@@ -45,51 +47,6 @@ CiteDict::CiteDict(int size) : m_entries(size, FALSE)
m_entries.setAutoDelete(TRUE);
}
-static QCString getListOfBibFiles(const QCString &sep,bool namesOnly)
-{
- QCString result;
- QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
- const char *bibdata = citeDataList.first();
- while (bibdata)
- {
- int i;
- QCString bibFile = bibdata;
- if (namesOnly && bibFile.right(4)==".bib") // strip extension
- {
- bibFile = bibFile.left(bibFile.length()-4);
- }
- else
- {
- if (!namesOnly && bibFile.right(4)!=".bib") bibFile += ".bib";
- }
- if ((i=bibFile.findRev('/'))!=-1) // strip path
- {
- bibFile = bibFile.mid(i+1);
- }
- if (!bibFile.isEmpty())
- {
- if (namesOnly) // bare names
- {
- result+=bibFile;
- }
- else // add quotes for paths with spaces
- {
- result+="\""+bibFile+"\"";
- }
- bibdata = citeDataList.next();
- if (bibdata)
- {
- result+=sep;
- }
- }
- else
- {
- bibdata = citeDataList.next();
- }
- }
- return result;
-}
-
void CiteDict::writeLatexBibliography(FTextStream &t)
{
if (m_entries.isEmpty())
@@ -108,7 +65,29 @@ void CiteDict::writeLatexBibliography(FTextStream &t)
"\\phantomsection\n"
"\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trCiteReferences() << "}\n"
"\\bibliographystyle{" << style << "}\n"
- "\\bibliography{" << getListOfBibFiles(",",TRUE) << "}\n"
+ "\\bibliography{";
+ QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
+ QCString latexOutputDir = Config_getString("LATEX_OUTPUT")+"/";
+ int i = 0;
+ const char *bibdata = citeDataList.first();
+ while (bibdata)
+ {
+ QCString bibFile = bibdata;
+ // Note: file can now have multiple dots
+ if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
+ QFileInfo fi(bibFile);
+ if (fi.exists())
+ {
+ if (!bibFile.isEmpty())
+ {
+ if (i) t << ",";
+ i++;
+ t << bibTmpFile << QString().setNum(i);
+ }
+ }
+ bibdata = citeDataList.next();
+ }
+ t << "}\n"
"\n";
}
@@ -186,47 +165,44 @@ void CiteDict::generatePage() const
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);
+ // 4. for all formats we just copy the bib files to as special output directory
+ // so bibtex can find them without path (bibtex doesn't support paths or
+ // filenames with spaces!)
+ // Strictly not required when only latex is generated
+ QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
+ QCString bibOutputDir = outputDir+"/"+bibTmpDir;
+ QCString bibOutputFiles = "";
QDir thisDir;
- if (Config_getBool("GENERATE_HTML"))
+ thisDir.mkdir(bibOutputDir);
+ const char *bibdata = citeDataList.first();
+ int i = 0;
+ while (bibdata)
{
- // 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())
{
- 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())
+ if (!bibFile.isEmpty())
{
- err("bib file %s not found!\n",bibFile.data());
+ ++i;
+ copyFile(bibFile,bibOutputDir + bibTmpFile + QCString().setNum(i) + ".bib");
+ bibOutputFiles = bibOutputFiles + " " + bibTmpDir + bibTmpFile + QCString().setNum(i) + ".bib";
}
- bibdata = citeDataList.next();
}
+ else if (!fi.exists())
+ {
+ err("bib file %s not found!\n",bibFile.data());
+ }
+ bibdata = citeDataList.next();
}
- QCString oldDir = QDir::currentDirPath().utf8();
+ QString oldDir = QDir::currentDirPath();
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)+" \""+
+ portable_system("perl","\""+bib2xhtmlFile+"\" "+bibOutputFiles+" \""+
citeListFile+"\"");
QDir::setCurrent(oldDir);
@@ -288,17 +264,22 @@ void CiteDict::generatePage() const
// copy bib files to the latex output dir
QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
QCString latexOutputDir = Config_getString("LATEX_OUTPUT")+"/";
+ int i = 0;
const char *bibdata = citeDataList.first();
while (bibdata)
{
QCString bibFile = bibdata;
+ // Note: file can now have multiple dots
if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
QFileInfo fi(bibFile);
if (fi.exists())
{
if (!bibFile.isEmpty())
{
- copyFile(bibFile,latexOutputDir+fi.fileName().data());
+ // bug_700510, multile times the same name were overwriting; creating new names
+ // also for names with spaces
+ ++i;
+ copyFile(bibFile,latexOutputDir + bibTmpFile + QCString().setNum(i) + ".bib");
}
}
else
@@ -313,10 +294,14 @@ void CiteDict::generatePage() const
thisDir.remove(citeListFile);
thisDir.remove(doxygenBstFile);
thisDir.remove(bib2xhtmlFile);
- while (!tempFiles.isEmpty())
+ bibdata = citeDataList.first();
+ // we might try to remove too many files as empty files didn't get a coresponding new file
+ // but the remove function does not emit an error for it and we don't catch the error return
+ // so no problem.
+ for (unsigned int j = 1; j <= citeDataList.count(); j++)
{
- QCString *s=tempFiles.take(0);
- thisDir.remove(*s);
+ thisDir.remove(bibOutputDir + bibTmpFile + QCString().setNum(j) + ".bib");
}
+ thisDir.rmdir(bibOutputDir);
}
diff --git a/src/config.xml b/src/config.xml
index 5f18037..f83ee55 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -1145,9 +1145,7 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
\c bibtex tool to be installed. See also http://en.wikipedia.org/wiki/BibTeX for
more info. For \f$\mbox{\LaTeX}\f$ the style of the bibliography can be controlled
using \ref cfg_latex_bib_style "LATEX_BIB_STYLE".
- To use this
- feature you need \c bibtex and \c perl available in the search path. Do not use
- file names with spaces, \c bibtex cannot handle them.
+ To use this feature you need \c bibtex and \c perl available in the search path.
See also \ref cmdcite "\\cite" for info how to create references.
]]>
</docs>