]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeX.cpp
fix a crash when the inset containing the new word at cursor is deleted
[lyx.git] / src / LaTeX.cpp
index d79af2fbf859655595c8930a56562ca3661efadb..597efefb7cedecc5aa2d1f2754d76d06a860156f 100644 (file)
@@ -122,6 +122,10 @@ void LaTeX::deleteFilesOnError() const
        FileName const bbl(changeExtension(file.absFileName(), ".bbl"));
        bbl.removeFile();
 
+       // biber file
+       FileName const bcf(changeExtension(file.absFileName(), ".bcf"));
+       bcf.removeFile();
+
        // makeindex file
        FileName const ind(changeExtension(file.absFileName(), ".ind"));
        ind.removeFile();
@@ -203,7 +207,8 @@ int LaTeX::run(TeXErrors & terr)
                        LYXERR(Debug::DEPEND, "Dependency file has changed");
                }
 
-               if (head.extchanged(".bib") || head.extchanged(".bst"))
+               if (head.extchanged(".bib") || head.extchanged(".bst")
+                   || head.extchanged(".bcf"))
                        run_bibtex = true;
        } else
                LYXERR(Debug::DEPEND,
@@ -269,6 +274,12 @@ int LaTeX::run(TeXErrors & terr)
        if (head.haschanged(glofile))
                rerun |= runMakeIndexNomencl(file, ".glo", ".gls");
 
+       // check if we're using biber instead of bibtex
+       // biber writes no info to the aux file, so we just check
+       // if a bcf file exists (and, above, if it was updated)
+       FileName const bcffile(changeExtension(file.absFileName(), ".bcf"));
+       bool const biber = bcffile.exists();
+
        // run bibtex
        // if (scanres & UNDEF_CIT || scanres & RERUN || run_bibtex)
        if (scanres & UNDEF_CIT || run_bibtex) {
@@ -279,7 +290,7 @@ int LaTeX::run(TeXErrors & terr)
                LYXERR(Debug::LATEX, "Running BibTeX.");
                message(_("Running BibTeX."));
                updateBibtexDependencies(head, bibtex_info);
-               rerun |= runBibTeX(bibtex_info, runparams);
+               rerun |= runBibTeX(bibtex_info, runparams, biber);
        } else if (!had_depfile) {
                /// If we run pdflatex on the file after running latex on it,
                /// then we do not need to run bibtex, but we do need to
@@ -331,7 +342,7 @@ int LaTeX::run(TeXErrors & terr)
                LYXERR(Debug::LATEX, "Running BibTeX.");
                message(_("Running BibTeX."));
                updateBibtexDependencies(head, bibtex_info);
-               rerun |= runBibTeX(bibtex_info, runparams);
+               rerun |= runBibTeX(bibtex_info, runparams, biber);
        }
 
        // 4
@@ -558,12 +569,12 @@ void LaTeX::updateBibtexDependencies(DepTable & dep,
 
 
 bool LaTeX::runBibTeX(vector<AuxInfo> const & bibtex_info,
-                     OutputParams const & runparams)
+                     OutputParams const & runparams, bool biber)
 {
        bool result = false;
        for (vector<AuxInfo>::const_iterator it = bibtex_info.begin();
             it != bibtex_info.end(); ++it) {
-               if (it->databases.empty())
+               if (!biber && it->databases.empty())
                        continue;
                result = true;
 
@@ -633,6 +644,10 @@ int LaTeX::scanLogFile(TeXErrors & terr)
                                   && contains(token, "undefined")) {
                                retval |= ERROR_RERUN;
                                LYXERR(Debug::LATEX, "Force rerun.");
+                       // package etaremune
+                       } else if (contains(token, "Etaremune labels have changed")) {
+                               retval |= ERROR_RERUN;
+                               LYXERR(Debug::LATEX, "Force rerun.");
                        } else if (contains(token, "Citation")
                                   && contains(token, "on page")
                                   && contains(token, "undefined")) {